我在一台机器上有多个以太网接口,全部在同一个子网上。 通常情况下,这些设置可以在单独的虚拟机上运行,而且我也了解这里所描述的Linux所带来的限制,但我一直试图在一台主机上运行。 我已经能够configuration它们,通过正确的设备导入和导出主机的stream量。 我不能做的是从一个设备到另一个设备。 这是我迄今为止所做的configuration设备:
设置静态IP地址:
ip addr add 192.168.1.124 dev eth0 ip addr add 192.168.1.125 dev eth1 ip addr add 192.168.1.126 dev eth2 ...
启用arp过滤:
sysctl -w net.ipv4.conf.all.arp_filter=1
基于源的路由如下:
将以下内容添加到/etc/iproute2/rt_tables
1 eth0 2 eth1 3 eth2 ...
添加默认路由到表
ip route add default via 192.168.1.11 table eth0 ip route add default via 192.168.1.11 table eth1 ip route add default via 192.168.1.11 table eth2 ...
通过基于src IP的特定设备添加子网路由
ip route add 192.168.1.0/24 dev eth0 src 192.168.1.124 table eth0 ip route add 192.168.1.0/24 dev eth0 src 192.168.1.124 table eth1 ip route add 192.168.1.0/24 dev eth0 src 192.168.1.124 table eth2 ...
添加规则
ip rule add from 192.168.1.124 table eth0 ip rule add from 192.168.1.124 table eth1 ip rule add from 192.168.1.124 table eth2 ...
设备硬件负责根据目标IP过滤入口数据包。
就像我说的,在这一点上,我可以用tcpdump来确认通过正确的设备导入和导出主机的stream量。 只要src IP绑定,出口多播就会转到正确的设备。 所有其他设备接收到一个设备发送的组播数据包。 我不能做的是从一台设备ping到另一台设备。 使用tcpdump,我看到发送设备上的出口arp请求和接收设备上的入口arp请求,但是没有做出响应。 如果我直接添加ARP条目,我同样看到两个设备上的ping请求,但没有响应。
更新:
数据可以在分配给接口的IP地址之间发送,但networking堆栈不会通过设备发送出去。 ICMP和组播数据包都通过设备,但没有回应。
有没有办法:
A)甚至在发送到同一主机时强制将数据包发送出设备?
B)强制主机响应来自同一主机的ICMP请求?