场景:
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 
  

