两块网卡分别连接两个AP,通过哪块网卡路由出去?回来呢?

场景:

wlan0   192.168.0.77   20:7c:8f:6b:e6:7c

wlan2   192.168.0.66   34:08:04:2e:23:7e

socket绑定192.168.0.77

开机默认路由:略

client成功连接server后再对路由修改:

ip route flush table main

route add default dev tun0

route add –net 192.168.0.0/24 dev wlan0

route add –net 192.168.0.0/24 dev wlan2

route add 219.245.89.144 gw 192.168.0.1 dev wlan0

route add 219.245.89.144 gw 192.168.0.1 dev wlan2

则此时route –n显示的路由表:

内核 IP 路由表
目标            网关            子网掩码        标志  跃点   引用  使用 接口
0.0.0.0         0.0.0.0         0.0.0.0         U     0      0        0 tun0
192.168.0.0     0.0.0.0         255.255.255.0   U     0      0        0 wlan2
192.168.0.0     0.0.0.0         255.255.255.0   U     0      0        0 wlan0

219.245.89.144  192.168.0.1     255.255.255.255 UGH   0      0        0 wlan2
219.245.89.144  192.168.0.1     255.255.255.255 UGH   0      0        0 wlan0

经HA wireshark抓包分析包的以太网MAC知client端经过wlan2路由出去。

如果将程序中的路由修改最后两句调换,即

ip route flush table main

route add default dev tun0

route add –net 192.168.0.0/24 dev wlan0

route add –net 192.168.0.0/24 dev wlan2

route add 219.245.89.144 gw 192.168.0.1 dev wlan2

route add 219.245.89.144 gw 192.168.0.1 dev wlan0

则此时route –n显示的路由表:

内核 IP 路由表
目标            网关            子网掩码        标志  跃点   引用  使用 接口
0.0.0.0         0.0.0.0         0.0.0.0         U     0      0        0 tun0

192.168.0.0     0.0.0.0         255.255.255.0   U     0      0        0 wlan0
192.168.0.0     0.0.0.0         255.255.255.0   U     0      0        0 wlan2
219.245.89.144  192.168.0.1     255.255.255.255 UGH   0      0        0 wlan0
219.245.89.144  192.168.0.1     255.255.255.255 UGH   0      0        0 wlan2

经HA wireshark抓包分析包的以太网MAC知client端经过wlan0路由出去。

总结,最后路由出去的网卡接口和socket绑定的接口无关,与路由表有关,从路由表的第一条记录往下,最先遇到的符合目标地址的记录就是包遵循的路由记录。

再考虑一个问题,包从对端回到本机时,是从哪个回来的,猜测从哪个网卡出去就从哪个网卡回来。

从wireshark抓到的以太包只有源MAC,没有目的MAC?!所以不能从wireshark得知HA发到MN时,是发给MN的哪块网卡的。

但是,我们可以从HA的arp表看出端倪。

从表中我们可以得出,虽然socket绑定的是wlan0 (20:7c:8f:6b:e6:7c)上的IP192.168.0.77,但当它通过wlan2路由出去时,添加的是wlan2的MAC(34:08:04:2e:23:7e),HA发往MN时,通过arp表知,是发给wlan2接口的,即MN通过哪块接口发到HA,HA就将数据发给HA的哪块接口。

root@ubuntu:~# arp -n
地址                     类型    硬件地址            标志  Mask            接口
219.245.89.161           ether   00:e0:4c:3b:64:e0   C                     eth0
192.168.0.77             ether   34:08:04:2e:23:7e   C                     eth1
192.168.0.111            ether   00:1b:38:a6:e3:61   C                     eth1
219.245.89.214           ether   20:6a:8a:43:ba:e3   C                     eth0
219.245.89.254           ether   00:23:89:1a:03:ed   C                     eth0

原文地址:https://www.cnblogs.com/helloweworld/p/2736027.html