Yuhang Zheng

开发板Wifi创建AP热点操作之后的网络包流向图

N 人看过

在我们各个平台的用户手册的WiFi AP模式测试章节,测试内容都是如下的操作步骤:

1、先使板卡的千兆网卡eth0联网。

2、vi /etc/sysctl.conf修改为net.ipv4.ip\_forward=1,开启转发功能

3、配置iptables规则iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

4、创建一个WiFi的AP热点,并开启DHCP服务,然后使用手机或者电脑连接该WiFi热点并进行ping百度操作

那么上述操作中的iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE命令是什么含义呢?并且在整个过程中网络包是如何流转的呢?下面我画了一个图来说明一下

流向图.png

另外就是记录一下目前遇到的一个问题,背景如下:在开发板上使用wlan0连接wifi,然后eth1连接另一块下位机ip地址配置如下:

Image_20231219142717.png

路由表配置如下:

Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.0.1     0.0.0.0         UG    0      0        0 wlan0
192.168.0.0     0.0.0.0         255.255.255.0   U     0      0        0 wlan0
192.168.42.0    0.0.0.0         255.255.255.0   U     0      0        0 eth1

然后配置 iptables -t nat -A POSTROUTING -s 192.168.42.0/24 -o wlan0 -j SNAT --to-source 192.168.0.100。但是从192.168.42.5(eth1的ip)ping可以通,但是从eth1 ping通不了,原因如下:

iptables -t nat -A POSTROUTING -s 192.168.42.0/24 -o wlan0 -j SNAT --to-source 192.168.0.100

上面这个规则是SNAT,作用在路由表规则之后,所以所有发出去的包要先匹配路由表,后施加这个规则。

首先明白这个规则的意思:”将源地址为 192.168.42.0/24 网段,并通过 wlan0 接口出站的数据包,进行源地址转换,将源ip地址改为192.168.0.102。“

接下来就是理解上面两种ping的不同了:

1、ping -I 192.168.42.5 8.8.8.8

ping -I 192.168.42.5 8.8.8.8 的意思是,使用 192.168.42.5 这个 IP 地址作为源地址,向 8.8.8.8 这个目标地址发送数据包,而且前提是本机已经配置了 192.168.42.5 这个 IP 地址,否则会失败。但是这条命令并没有指定要使用的网卡接口。 所以这条命令发送的时候先匹配路由表规则,一看是发向8.8.8.8的包,直接匹配路由表第一条内容,而且按照路由表规则使用的接口也是wlan0,所以使用上面设置的iptables规则,这样就从wlan0发送了一个源ip地址为192.168.0.100的数据包。这样其实-I 参数在这种环境下其实是没啥作用的。和ping -I wlan0 8.8.8.8的区别不大

2、ping -I eth1 8.8.8.8

ping -I eth1 8.8.8.8 的意思是,使用eth1接口,向 8.8.8.8 这个目标地址发送数据包 使用这条命令发送的时候先匹配路由表规则,而且是发向8.8.8.8的包,这个时候在路由表中找不到要发送的地址,所以就不通了。