我已经建立了这个简单的配置:
---------------- ----------------
| Linux host A | <----- patch cable -------> | Linux host B |
---------------- ----------------
然后我在每个主机上配置了 2 个 VLAN:
eth1 eth1
| |
|-- eth1.2 -> 192.168.1.2/24 |-- eth1.2 -> 192.168.1.4/24
|-- eth1.3 -> 192.168.1.3/24 |-- eth1.3 -> 192.168.1.5/24
在主机 A 上,当我执行以下操作时:
ping -I eth1.2 192.168.1.4
它有效,但是当我这样做时:
ping -I eth1.3 192.168.1.5
它不起作用。
我尝试在两台主机上进行设置:
sysctl net.ipv4.conf.enth1.rp_filter=0
sysctl net.ipv4.conf.enth1/2.rp_filter=0
sysctl net.ipv4.conf.enth1/3.rp_filter=0
但这并没有解决问题。
在主机 B 上使用 wireshark 监视 eth1,显示 VLAN id 3 的 ping 已正确接收,但主机 B 没有应答。
当然,我已经检查过我的 iptables:
Chain INPUT
target prot opt in out source destination
ACCEPT all -- eth1 any anywhere anywhere
Chain OUTPUT (policy ACCEPT)
当我在主机 A 上执行一个简单的操作时:
ping 192.168.1.5
主机 B 回答但是我使用 wireshark 看到数据包被标记为 VLAN id 2,这当然有效。
因此,我猜测将 VLAN 标记数据包路由到主机 B 时出了问题,但我找不到问题所在!
答案1
您使用的是同一个 IP 段,并且没有设置特殊路由规则。这意味着,始终使用默认路由,并且默认路由在您的情况下设置为 VLAN2。
最好的方法是,通过不同的 IP 段来区分 VLAN。例如,您的 VLAN2 可以使用现有的 192.168.1.1/24,而 VLAN3 可以使用 192.168.3.1/24。