linux配置ap热点网口转发路由配置,以及iptable解释

本文介绍linux ap热点(wlo1)并通过网口(eno2)转发无线网卡数据的路由配置方法,以及对iptable的介绍。

1.ap热点(wlo1)并通过网口(eno2)转发无线网卡数据的路由配置方法

可参考如下内容
cat /etc/network/interfaces:

#无线网卡ip配置
auto wlo1
iface wlo1 inet static
address 192.168.8.1
netmask 255.255.255.0

#Kill the hostapd process and empty iptables before the interface starts
up if pgrep hostapd; then pkill hostapd; fi
up iptables -t nat -F

#start hostapd
post-up hostapd /etc/hostapd/hostapd.conf -B

#restart dhcp
post-up service dnsmasq restart

#the iptables configuration of NAT
post-up iptables -A FORWARD -i wlo1 -o eno2 -s 192.168.8.0/24 -m state --state NEW -j ACCEPT
post-up iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
post-up iptables -t nat -A POSTROUTING -o eno2 -j MASQUERADE
post-up echo “1” > /proc/sys/net/ipv4/ip_forward

#Kill the hostapd process and empty iptables after the interface stops
down if pgrep hostapd; then pkill hostapd; fi
down iptables -t nat -F

2.iptables介绍

2.1 功能作用
iptables的主要功能是实现对网络数据包进出设备及转发的控制。当数据包需要进入设备、从设备中流出或者经该设备转发、路由时,都可以使用iptables进行控制。

2.2 内容规则
1)iptables中的“四表五链”及“堵通策略”;
“四表”是指,iptables的功能——filter, nat, mangle, raw;
“五链”是指内核中控制网络的NetFilter定义的五个规则链——PREROUTING, INPUT,FORWARD, OUTPUT,POSTROUTING;
堵通策略是指对数据包所做的操作,一般有两种操作——“通(ACCEPT)”、“堵(DROP)”,还有一种操作很常见REJECT、REDIRECT 、MASQUERADE等

解释:
filter:控制数据包是否允许进出及转发(INPUT、OUTPUT、FORWARD),可以控制的链路有input, forward, output
nat:控制数据包中地址转换,可以控制的链路有prerouting, input, output, postrouting
mangle:修改数据包中的原数据,可以控制的链路有prerouting, input, forward, output, postrouting
raw:控制nat表中连接追踪机制的启用状况,可以控制的链路有prerouting, output

PREROUTING:路由前,处理刚到达本机并在路由转发之前的数据。转换数据包中的目标ip地址,DNAT。
INPUT:数据包流入口,处理来自外部的数据。
FORWARD:转发管卡,将数据转发至本机的其他网卡设备上。
OUTPUT: 数据包出口,处理本机向外发送的数据。
POSTROUTING: 路由后,处理将离开本机的数据包。转换数据包中的源ip地址,SNAT。

ACCEPT:允许接收数据包
DROP:丢弃数据包
REJECT:拒绝数据包

2)iptables命令的语法规则
iptables [-t table] COMMAND CRETIRIA -j ACTION
iptables [-t 表] COMMAND 匹配 操作
解释:
-t table,是指操作的表,filter、nat、mangle或raw, 默认使用filter。
COMMAND:对规则链的管理,指定iptables的执行方式,包括插入/删除/添加和查看规则链等。
CRETIRIA, 匹配的条件或标准,指定数据包与规则匹配所具有的特征,包括源地址,目的地址,传输协议和端口号等。
ACTION,操作动作,比如: ACCEPT、REJECT、DROP、REDIRECT 、MASQUERADE等。

示例解释:
a. iptables -t nat -F //清除iptables net表规则
⇒ nat为iptables net表;-F为删除链或所有链中的所有规则。

b. iptables -A FORWARD -i wlo1 -o eno2 -s 192.168.8.0/24 -m state --state NEW -j ACCEPT
-A: 追加到链;
FORWARD :FORWARD链(转发管卡);
-i : 指定数据包从哪个网络接口进入(指定要处理来自哪个接口的数据包);
-o :指定数据包从哪个网络接口输出(指定数据包从哪个接口输出);
-s:指定数据包的源地址;
-m:-m option选项指定扩展匹配的类型,这里-m state表示限制收发包的状态,–state NEW为新连接请求;
-j ACCEPT:-j 指定了与当前规则匹配时,要如何处理数据包,-j ACCEPT代表规则匹配时允许接收数据包。
如上设置的意思是:指定源地址为192.168.8.0/24连接数据包从wlo1进入(转发)从eno2输出。

c.iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
RELATED:相关联的连接,当前连接是一个新请求,但附属于某个已存在的连接;
如上设置的意思是:允许转发已连接的网络数据包。

d.iptables -t nat -A POSTROUTING -o eno2 -j MASQUERADE
如上设置的意思是:把即将要流出本机的数据由MASQUERADE自动读取eno2现在的ip地址然后做SNAT出去。

MASQUERADE:动态SNAT地址转换。(不管现在eno2 的出口获得了怎样的动态ip,MASQUERADE会自动读取eno2 现在的ip地址然后做SNAT出去,这样就实现了很好的动态SNAT地址转换。)

附加了解:

SNAT是source networkaddress translation的缩写,即源地址目标转换。比如,多个PC机使用ADSL路由器共享上网,每个PC机都配置了内网IP,PC机访问外部网络的时候,路由器将数据包的报头中的源地址替换成路由器的ip,当外部网络的服务器比如网站web服务器接到访问请求的时候,他的日志记录下来的是路由器的ip地址,而不是pc机的内网ip,这是因为,这个服务器收到的数据包的报头里边的“源地址”,已经被替换了,所以叫做SNAT,基于源地址的地址转换。

DNAT是destination networkaddress translation的缩写,即目标网络地址转换,典型的应用是,有个web服务器放在内网配置内网ip,前端有个防火墙配置公网ip,互联网上的访问者使用公网ip来访问这个网站,当访问的时候,客户端发出一个数据包,这个数据包的报头里边,目标地址写的是防火墙的公网ip,防火墙会把这个数据包的报头改写一次,将目标地址改写成web服务器的内网ip,然后再把这个数据包发送到内网的web服务器上,这样,数据包就穿透了防火墙,并从公网ip变成了一个对内网地址的访问了,即DNAT,基于目标的网络地址转换。

ip包结构:

任何一个IP数据包中,都会有Source IP Address与Destination IP Address这两个字段,数据包所经过的路由器也是根据这两个字段是判定数据包是由什么地方发过来的,它要将数据包发到什么地方去。而iptables的DNAT与SNAT就是根据这个原理,对Source IP Address与Destination IP Address进行修改。
在这里插入图片描述
图中正菱形的区域是对数据包进行判定转发的地方。在这里,系统会根据IP数据包中的destination ip address中的IP地址对数据包进行分发。如果destination ip adress是本机地址,数据将会被转交给INPUT链。如果不是本机地址,则交给FORWARD链检测。

这也就是说,我们要做的DNAT要在进入这个菱形转发区域之前,也就是在PREROUTING链中做,比如我们要把访问202.103.96.112的访问转发到192.168.0.112上:
iptables -t nat -A PREROUTING -d 202.103.96.112 -j DNAT --to-destination 192.168.0.112

这个转换过程当中,其实就是将已经达到这台Linux网关(防火墙)上的数据包上的destination ip address从202.103.96.112修改为192.168.0.112然后交给系统路由进行转发。

使用SNAT的时候,虽然出口ip的地址范围可以是一个或多个,但其必须明确的指定要SNAT的ip。例如:
如下命令表示把所有10.8.0.0网段的数据包SNAT成192.168.5.3的ip然后发出去,
iptables-t nat -A POSTROUTING -s 10.8.0.0/255.255.255.0 -o eth0 -j SNAT --to-source192.168.5.3

如下命令表示把所有10.8.0.0网段的数据包SNAT成192.168.5.3/192.168.5.4/192.168.5.5等几个ip然后发出去
iptables-t nat -A POSTROUTING -s 10.8.0.0/255.255.255.0 -o eth0 -j SNAT --to-source192.168.5.3-192.168.5.5

这就是SNAT的使用方法,即可以NAT成一个地址,也可以NAT成多个地址,但是,对于SNAT,不管是几个地址,必须明确的指定要SNAT的ip,假如当前系统用的是ADSL动态拨号方式,那么每次拨号,出口ip192.168.5.3都会改变,而且改变的幅度很大,不一定是192.168.5.3到192.168.5.5范围内的地址,这个时候如果按照现在的方式来配置iptables就会出现问题了,因为每次拨号后,服务器地址都会变化,而iptables规则内的ip是不会随着自动变化的,每次地址变化后都必须手工修改一次iptables,把规则里边的固定ip改成新的ip,这样是非常不好用的。

而MASQUERADE,地址伪装,算是snat中的一种特例,可以实现自动化的snat。MASQUERADE的作用是,从服务器的网卡上,自动获取当前ip地址来做NAT。

比如下边的命令:
iptables-t nat -A POSTROUTING -s 10.8.0.0/255.255.255.0 -o eth0 -j MASQUERADE

如此配置的话,不用指定SNAT的目标ip了,不管现在eth0的出口获得了怎样的动态ip,MASQUERADE会自动读取eth0现在的ip地址然后做SNAT出去,这样就实现了很好的动态SNAT地址转换。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值