双机多网口配置同网段地址,可以通过目的IP确定接收数据的网卡吗?

环境

两台机器两网卡同网段接入同一个二层交换机。

在这里插入图片描述

机器A ens38 00:0c:29:a4:8b:fb 10.0.0.11/24 ens39 00:0c:29:a4:8b:05 10.0.0.12/24

机器B ens38 00:0c:29:4f:a6:c4 10.0.0.21/24 ens39 00:0c:29:4f:a6:ce 10.0.0.22/24

初始ARP表

只有管理口接口的ARP表项,10.0.0.0/24网段没有

机器A

root@ubuntu22:~# arp -n
Address                  HWtype  HWaddress           Flags Mask            Iface
172.0.1.13               ether   00:0c:29:c1:16:a8   C                     ens33
172.0.1.131              ether   b4:56:b9:f0:02:a5   C                     ens33
172.0.1.32               ether   00:e0:97:1c:20:1a   C                     ens33
172.0.1.1                ether   00:e0:97:1c:20:1a   C                     ens33

机器B

root@u22s:~# arp -n
Address                  HWtype  HWaddress           Flags Mask            Iface
172.0.1.32               ether   00:e0:97:1c:20:1a   C                     ens33
172.0.1.1                ether   00:e0:97:1c:20:1a   C                     ens33
172.0.1.12               ether   00:0c:29:a4:8b:f1   C                     ens33

A ens38 10.0.0.11 ----> B 10.0.0.21

root@ubuntu22:~# ping -I ens38 10.0.0.21 -c 5 -w 5
PING 10.0.0.21 (10.0.0.21) from 10.0.0.11 ens38: 56(84) bytes of data.
64 bytes from 10.0.0.21: icmp_seq=1 ttl=64 time=0.447 ms
64 bytes from 10.0.0.21: icmp_seq=2 ttl=64 time=0.236 ms
64 bytes from 10.0.0.21: icmp_seq=3 ttl=64 time=0.223 ms
64 bytes from 10.0.0.21: icmp_seq=4 ttl=64 time=0.231 ms
64 bytes from 10.0.0.21: icmp_seq=5 ttl=64 time=0.377 ms

--- 10.0.0.21 ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4097ms
rtt min/avg/max/mdev = 0.223/0.302/0.447/0.091 ms

抓包

在这里插入图片描述

arp表项

![ens38-ping-10.0.0.22](C:\Users\CK\Documents\blog\ens38-ping-10.0.0.22.png)root@ubuntu22:~# arp -n
Address                  HWtype  HWaddress           Flags Mask            Iface
172.0.1.32               ether   00:e0:97:1c:20:1a   C                     ens33
10.0.0.22                ether   00:0c:29:4f:a6:ce   C                     ens38
172.0.1.1                ether   00:e0:97:1c:20:1a   C                     ens33
172.0.1.131              ether   b4:56:b9:f0:02:a5   C                     ens33
10.0.0.21                ether   00:0c:29:4f:a6:ce   C                     ens38
172.0.1.13               ether   00:0c:29:c1:16:a8   C                     ens33
172.0.1.25               ether   00:0c:29:4f:a6:ba   C                     ens33

数据走向图

在这里插入图片描述

A ens38 10.0.0.11 —> B 10.0.0.22

root@ubuntu22:~# ping -I ens38 10.0.0.22 -c 5 -w 5
PING 10.0.0.22 (10.0.0.22) from 10.0.0.11 ens38: 56(84) bytes of data.
64 bytes from 10.0.0.22: icmp_seq=1 ttl=64 time=0.479 ms
64 bytes from 10.0.0.22: icmp_seq=2 ttl=64 time=0.317 ms
64 bytes from 10.0.0.22: icmp_seq=3 ttl=64 time=0.208 ms
64 bytes from 10.0.0.22: icmp_seq=4 ttl=64 time=0.976 ms
64 bytes from 10.0.0.22: icmp_seq=5 ttl=64 time=0.294 ms

--- 10.0.0.22 ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4065ms
rtt min/avg/max/mdev = 0.208/0.454/0.976/0.274 ms

抓包

在这里插入图片描述

arp表项

root@ubuntu22:~# arp -n
Address                  HWtype  HWaddress           Flags Mask            Iface
172.0.1.32               ether   00:e0:97:1c:20:1a   C                     ens33
10.0.0.22                ether   00:0c:29:4f:a6:ce   C                     ens38
172.0.1.1                ether   00:e0:97:1c:20:1a   C                     ens33
172.0.1.131              ether   b4:56:b9:f0:02:a5   C                     ens33
10.0.0.21                ether   00:0c:29:4f:a6:ce   C                     ens38
172.0.1.13               ether   00:0c:29:c1:16:a8   C                     ens33
172.0.1.25               ether   00:0c:29:4f:a6:ba   C                     ens33

机器B的ARP

root@u22s:~# arp -n
Address                  HWtype  HWaddress           Flags Mask            Iface
172.0.1.32               ether   00:e0:97:1c:20:1a   C                     ens33
172.0.1.1                ether   00:e0:97:1c:20:1a   C                     ens33
10.0.0.11                ether   00:0c:29:a4:8b:fb   C                     ens39
172.0.1.12               ether   00:0c:29:a4:8b:f1   C                     ens33
10.0.0.11                ether   00:0c:29:a4:8b:fb   C                     ens38

数据走向图

在这里插入图片描述

A ens39 10.0.0.12 —> B 10.0.0.21

root@ubuntu22:~# ping -I ens39 10.0.0.21 -c 5 -w 5
PING 10.0.0.21 (10.0.0.21) from 10.0.0.12 ens39: 56(84) bytes of data.
64 bytes from 10.0.0.21: icmp_seq=1 ttl=64 time=0.415 ms
64 bytes from 10.0.0.21: icmp_seq=2 ttl=64 time=0.288 ms
64 bytes from 10.0.0.21: icmp_seq=3 ttl=64 time=0.202 ms
64 bytes from 10.0.0.21: icmp_seq=4 ttl=64 time=0.205 ms
64 bytes from 10.0.0.21: icmp_seq=5 ttl=64 time=0.195 ms

--- 10.0.0.21 ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4079ms
rtt min/avg/max/mdev = 0.195/0.261/0.415/0.084 ms

抓包

在这里插入图片描述

ARP表

root@ubuntu22:~# arp -n
Address                  HWtype  HWaddress           Flags Mask            Iface
172.0.1.32               ether   00:e0:97:1c:20:1a   C                     ens33
10.0.0.22                ether   00:0c:29:4f:a6:ce   C                     ens38
172.0.1.1                ether   00:e0:97:1c:20:1a   C                     ens33
172.0.1.131              ether   b4:56:b9:f0:02:a5   C                     ens33
10.0.0.21                ether   00:0c:29:4f:a6:ce   C                     ens39
10.0.0.21                ether   00:0c:29:4f:a6:ce   C                     ens38
172.0.1.13               ether   00:0c:29:c1:16:a8   C                     ens33
172.0.1.25               ether   00:0c:29:4f:a6:ba   C                     ens33
10.0.0.22                ether   00:0c:29:4f:a6:ce   C                     ens39

数据走向图

在这里插入图片描述

A ens39 10.0.0.12 —> 10.0.0.22

root@ubuntu22:~# ping -I ens39 10.0.0.22 -c 5 -w 5
PING 10.0.0.22 (10.0.0.22) from 10.0.0.12 ens39: 56(84) bytes of data.
64 bytes from 10.0.0.22: icmp_seq=1 ttl=64 time=0.224 ms
64 bytes from 10.0.0.22: icmp_seq=2 ttl=64 time=0.233 ms
64 bytes from 10.0.0.22: icmp_seq=3 ttl=64 time=0.330 ms
64 bytes from 10.0.0.22: icmp_seq=4 ttl=64 time=0.279 ms
64 bytes from 10.0.0.22: icmp_seq=5 ttl=64 time=0.230 ms

--- 10.0.0.22 ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4100ms
rtt min/avg/max/mdev = 0.224/0.259/0.330/0.040 ms

抓包

在这里插入图片描述

ARP表项

root@ubuntu22:~# arp -n
Address                  HWtype  HWaddress           Flags Mask            Iface
172.0.1.32               ether   00:e0:97:1c:20:1a   C                     ens33
10.0.0.22                ether   00:0c:29:4f:a6:ce   C                     ens38
172.0.1.1                ether   00:e0:97:1c:20:1a   C                     ens33
172.0.1.131              ether   b4:56:b9:f0:02:a5   C                     ens33
10.0.0.21                ether   00:0c:29:4f:a6:ce   C                     ens39
10.0.0.21                ether   00:0c:29:4f:a6:ce   C                     ens38
172.0.1.13               ether   00:0c:29:c1:16:a8   C                     ens33
172.0.1.25               ether   00:0c:29:4f:a6:ba   C                     ens33
10.0.0.22                ether   00:0c:29:4f:a6:ce   C                     ens39

机器B ARP表项

root@u22s:~# arp -n
Address                  HWtype  HWaddress           Flags Mask            Iface
10.0.0.11                ether   00:0c:29:a4:8b:fb   C                     ens38
172.0.1.32               ether   00:e0:97:1c:20:1a   C                     ens33
10.0.0.12                ether   00:0c:29:a4:8b:05   C                     ens39
10.0.0.11                ether   00:0c:29:a4:8b:fb   C                     ens39
172.0.1.12               ether   00:0c:29:a4:8b:f1   C                     ens33
172.0.1.1                ether   00:e0:97:1c:20:1a   C                     ens33
10.0.0.12                ether   00:0c:29:a4:8b:05   C                     ens38

数据走向图

在这里插入图片描述

机器B ping 机器A

root@u22s:~# ping -I ens39 10.0.0.12 -c 3
PING 10.0.0.12 (10.0.0.12) from 10.0.0.22 ens39: 56(84) bytes of data.
64 bytes from 10.0.0.12: icmp_seq=1 ttl=64 time=0.199 ms
64 bytes from 10.0.0.12: icmp_seq=2 ttl=64 time=0.233 ms
64 bytes from 10.0.0.12: icmp_seq=3 ttl=64 time=0.244 ms

--- 10.0.0.12 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2052ms
rtt min/avg/max/mdev = 0.199/0.225/0.244/0.019 ms
root@u22s:~# ping -I ens39 10.0.0.11 -c 3
PING 10.0.0.11 (10.0.0.11) from 10.0.0.22 ens39: 56(84) bytes of data.
64 bytes from 10.0.0.11: icmp_seq=1 ttl=64 time=0.192 ms
64 bytes from 10.0.0.11: icmp_seq=2 ttl=64 time=0.228 ms
64 bytes from 10.0.0.11: icmp_seq=3 ttl=64 time=0.292 ms

--- 10.0.0.11 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2042ms
rtt min/avg/max/mdev = 0.192/0.237/0.292/0.041 ms
root@u22s:~# ^C
root@u22s:~# 
root@u22s:~# ping -I ens38 10.0.0.12 -c 3
PING 10.0.0.12 (10.0.0.12) from 10.0.0.21 ens38: 56(84) bytes of data.
64 bytes from 10.0.0.12: icmp_seq=1 ttl=64 time=0.192 ms
64 bytes from 10.0.0.12: icmp_seq=2 ttl=64 time=0.201 ms
64 bytes from 10.0.0.12: icmp_seq=3 ttl=64 time=0.930 ms

--- 10.0.0.12 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2020ms
rtt min/avg/max/mdev = 0.192/0.441/0.930/0.345 ms
root@u22s:~# ping -I ens38 10.0.0.11 -c 3
PING 10.0.0.11 (10.0.0.11) from 10.0.0.21 ens38: 56(84) bytes of data.
64 bytes from 10.0.0.11: icmp_seq=1 ttl=64 time=0.195 ms
64 bytes from 10.0.0.11: icmp_seq=2 ttl=64 time=0.632 ms
64 bytes from 10.0.0.11: icmp_seq=3 ttl=64 time=0.251 ms

en39 10.0.0.22 --> 10.0.0.12
在这里插入图片描述

ens39 10.0.0.22 --> 10.0.0.11
在这里插入图片描述

ens38 10.0.0.21 --> 10.0.0.12
在这里插入图片描述

ens38 10.0.0.21 --> 10.0.0.11
在这里插入图片描述

数据走向图

在这里插入图片描述

arp表

root@u22s:~# arp -n
Address                  HWtype  HWaddress           Flags Mask            Iface
10.0.0.11                ether   00:0c:29:a4:8b:fb   C                     ens38
172.0.1.32               ether   00:e0:97:1c:20:1a   C                     ens33
10.0.0.12                ether   00:0c:29:a4:8b:05   C                     ens39
10.0.0.11                ether   00:0c:29:a4:8b:fb   C                     ens39
172.0.1.12               ether   00:0c:29:a4:8b:f1   C                     ens33
172.0.1.1                ether   00:e0:97:1c:20:1a   C                     ens33
10.0.0.12                ether   00:0c:29:a4:8b:05   C                     ens38

现象分析

Node A ping Node B时, 不论目的IP是B.ens38还是B.ens39所有包都从 ens39 进入Node B

在这里插入图片描述

从ARP报文来看,10.0.0.21的MAC响应ens38和ens39都有,但是ens39的MAC响应是先收到的,ARP表中 10.0.0.21,10.0.0.22的mac地址都是 ens39 00:0c:29:4f:a6:ce。

Node B ping Node A时,数据包从对应IP的接口进入, ARP表中IP与MAC也是正确对应的,抓包到的ARP报文响应也是对应接口的MAC
在这里插入图片描述

小结

双机多网口二层连接,配置同网段地址,那么IP-MAC映射会存在不确定性,会受到ARP响应的先后顺序影响。如果多机多网口这样连接,恐怕不能通过指定源目的IP来实现指定接口到指定接口的通信。
而主机对ARP请求的响应,可能是都从一个接口处,也可能各个接口都出,这种行为的区别暂不清楚受到哪些内核配置的影响。

解决方法

设置规则

# 关闭ARP代答
sudo sysctl -w net.ipv4.conf.all.proxy_arp=0
sudo sysctl -w net.ipv4.conf.default.proxy_arp=0

# 设置ARP过滤规则
sudo sysctl -w net.ipv4.conf.all.arp_ignore=1
sudo sysctl -w net.ipv4.conf.all.arp_announce=2
sudo sysctl -w net.ipv4.conf.default.arp_ignore=1
sudo sysctl -w net.ipv4.conf.default.arp_announce=2

# For each specific interface
sudo sysctl -w net.ipv4.conf.ens38.arp_ignore=1
sudo sysctl -w net.ipv4.conf.ens38.arp_announce=2
sudo sysctl -w net.ipv4.conf.ens39.arp_ignore=1
sudo sysctl -w net.ipv4.conf.ens39.arp_announce=2
  • arp_ignore
    
    • 值为0:对所有请求进行响应。
    • 值为1:只响应目标IP地址是接口上本地地址的请求,不响应非本地地址的请求。
  • arp_announce
    
    • 值为0:默认行为,使用最合适的本地地址进行ARP应答。
    • 值为1:仅使用目标网络的最佳地址进行ARP应答。
    • 值为2:仅使用发送接口上的地址进行ARP应答。

抓包

在这里插入图片描述
没有多余ARP响应

ARP表

root@ubuntu22:~# arp -n
Address                  HWtype  HWaddress           Flags Mask            Iface
10.0.0.22                ether   00:0c:29:4f:a6:ce   C                     ens38
172.0.1.131              ether   b4:56:b9:f0:02:a5   C                     ens33
172.0.1.32               ether   00:e0:97:1c:20:1a   C                     ens33
172.0.1.1                ether   00:e0:97:1c:20:1a   C                     ens33
10.0.0.21                ether   00:0c:29:4f:a6:c4   C                     ens38
172.0.1.13               ether   00:0c:29:c1:16:a8   C                     ens33
10.0.0.22                ether   00:0c:29:4f:a6:ce   C                     ens39

IP与MAC映射关系正常了。

  • 24
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值