Ubuntu Linux - 两个接口,相同的子网,不同的 vlan - MAC/ARP 问题

And*_*tes 6 linux ubuntu ethernet arp mac-address

我正在尝试设置需要在同一 IP 子网上具有接口但具有不同 VLAN 的服务器:

eth1.102  Link encap:Ethernet  HWaddr 00:50:56:b1:00:0f  
          inet addr:10.1.1.6   Bcast:10.1.1.255  Mask:255.255.255.0

eth1.103  Link encap:Ethernet  HWaddr 00:50:56:b1:00:0f  
          inet addr:10.1.1.12  Bcast:10.1.1.255  Mask:255.255.255.0
Run Code Online (Sandbox Code Playgroud)

我看到的问题是,当一个 ARP 请求来自一个子网上的设备时,服务器只响应一个接口上的 ARP,而似乎忽略另一个接口上的任何 ARP:

第一个界面:

# ping -I eth1.102 10.1.1.1
PING 10.1.1.1 (10.1.1.1) from 10.1.1.6 eth1.102: 56(84) bytes of data.
^C
--- 10.1.1.1 ping statistics ---
8 packets transmitted, 0 received, 100% packet loss, time 7008ms
Run Code Online (Sandbox Code Playgroud)

第二个界面:

# ping -I eth1.103 10.1.1.1
PING 10.1.1.1 (10.1.1.1) from 10.1.1.12 eth1.103: 56(84) bytes of data.
64 bytes from 10.1.1.1: icmp_seq=1 ttl=64 time=0.400 ms
64 bytes from 10.1.1.1: icmp_seq=2 ttl=64 time=0.332 ms
^C
Run Code Online (Sandbox Code Playgroud)

(作为记录,10.1.1.1 存在于两个 VLAN 的两个子网上)

# arp -an
? (10.1.1.1) at 02:00:1a:f2:00:02 [ether] on eth1.103
? (10.1.1.1) at 02:00:72:a3:00:08 [ether] on eth1.102
Run Code Online (Sandbox Code Playgroud)

即使我从客户端设备 ping 到服务器接口的特定 IP,它仍然在一个被忽略并在另一个响应。

Ubuntu 默认有一些 arp/spoofing 过滤器,所以我关闭了我能找到的,即

net.ipv4.conf.default.rp_filter=0
net.ipv4.conf.all.rp_filter=0
Run Code Online (Sandbox Code Playgroud)

我已经看到了一些具有类似问题的问题,但这通常与 ARP 流量有关,因为它是相同的段(没有被 VLAN 分隔)并且 ARP 请求正在被两者回复,这里的情况并非如此。如果我对两个接口都进行 tcpdump 转储,那么在任何其他接口上都看不到传入的 ARP 没有得到回复(考虑到它在不同接口上的响应)——它似乎只是默默地忽略了请求。

有人遇到过这个吗?

编辑:

好吧感觉有点白痴,但可能会帮助别人......

我通过禁用 rp_filter 处于正确的区域,但大概是因为它在 Ubuntu 中默认开启,它已将它应用于所有接口,所以虽然我为上面列出的两个条目设置了 rp_filter=0,但每个接口的设置是还是 1,因此..

# sysctl -w net.ipv4.conf.eth1/102.rp_filter=0
# sysctl -w net.ipv4.conf.eth1/103.rp_filter=0
Run Code Online (Sandbox Code Playgroud)

......成功了。

use*_*517 4

您需要为每个单独的接口禁用反向路径过滤器 (rp_filter)

# sysctl -w net.ipv4.conf.eth1/102.rp_filter=0
# sysctl -w net.ipv4.conf.eth1/103.rp_filter=0
Run Code Online (Sandbox Code Playgroud)