从另一个平面的一个接口

我有一个计算机(运行Linux)与2接口eth0和eth1。
eth0,地址为10.0.0.100/24
eth1,地址为192.168.1.100/24
它们连接到2个不同的networking(10.0.0.0/24和192.168.1.0/24),这些networking连接到路由器。 10.0.0.0上的其他计算机可以在192.168.1.0上ping计算机。

但是,如果我在这台电脑上试试

ping -I eth0 192.168.1.100 

我没有得到任何答复。 如果我在eth1上收听,则会收到来自10.0.0.100的icmp请求,但不会发送任何回复。

我试图设置一些静态路由,但没有任何区别。 我也读了内核rp_filter并将其更改为2(和0和1),但也没有任何区别。

有人知道为什么以及如何解决这个问题?

我想这样做的唯一原因是使用一台计算机来衡量两个networking之间的性能。

最简单的解决scheme是禁用反向path过滤。 默认情况下,linux会过滤掉它认为应该进入不同接口的接口上的数据包(因为数据包与其他接口的子网匹配)。

去做这个

 echo 'net.ipv4.conf.eth0.rp_filter = 0' >> /etc/sysctl.conf echo 'net.ipv4.conf.eth1.rp_filter = 0' >> /etc/sysctl.conf echo 'net.ipv4.conf.lo.rp_filter = 0' >> /etc/sysctl.conf sysctl -p 

这将设置添加到sysctlconfiguration文件,然后重新加载configuration。 您还可以通过执行echo 0 > /proc/sys/net/ipv4/conf/eth0/rp_filter来暂时禁用该设置。

您可能需要为iproute2的两个接口设置多个默认路由,以便从一个接口进入的数据包被回复到同一个接口

帕特里克的回答

去做这个

 echo 'net.ipv4.conf.eth0.rp_filter = 0' >> /etc/sysctl.conf echo 'net.ipv4.conf.eth1.rp_filter = 0' >> /etc/sysctl.conf echo 'net.ipv4.conf.lo.rp_filter = 0' >> /etc/sysctl.conf sysctl -p 

在Ubuntu 16.04上不适用于我。

这工作:

 sysctl -w net.ipv4.conf.all.rp_filter=0