如何在linux中设置两个默认路由(对应于两个接口),以便接受来自两个接口的入站stream量。
我有一个主机有两个网卡eth0和eth1 。 它连接到两个networking,说:
Dev: eth0 ,IP: 1.1.1.4 ,networking掩码: 255.255.255.0 ,网关: 1.1.1.1
Dev: eth1 ,IP: 2.2.2.4 ,networking掩码: 255.255.255.0 ,网关: 2.2.2.1
(这两个networking都连接到互联网。)
路由是( ip route show ):
default via 1.1.1.1 dev eth0 metric 1 default via 2.2.2.1 dev eth1 metric 2 1.1.1.0/24 dev eth0 src 1.1.1.4 2.2.2.0/24 dev eth1 src 2.2.2.4
(较低的度量意味着更高的优先级)
现在当有人从外部主机ping 2.2.2.4 (比如4.4.4.4 )时,没有回应。
我主机上的tcpdump -i eth1的输出是:
22:41:27.431539 IP 4.4.4.4 > 2.2.2.4: ICMP echo request, id 8625, seq 4, length 64 22:41:28.439492 IP 4.4.4.4 > 2.2.2.4: ICMP echo request, id 8625, seq 5, length 64 22:41:29.447666 IP 4.4.4.4 > 2.2.2.4: ICMP echo request, id 8625, seq 6, length 64 22:41:30.455528 IP 4.4.4.4 > 2.2.2.4: ICMP echo request, id 8625, seq 7, length 64
经过一番研究,发现当linuxnetworking堆栈从4.4.4.4接收到一个包时,它会检查它的路由表,看看4.4.4.4 (在路由表中是eth0 )应该使用哪个接口。 现在,由于数据包来自eth1接口,linux只是简单的丢弃它(这个策略可能是为了防止IP欺骗)。
我想要的是:
传出stream量(本地发起)默认情况下应该使用eth0接口。
来自两个接口的stream量应该被接受。 (所以4.4.4.4应该能够ping 1.1.1.4和2.2.2.4 )
使用iproute2你可以做这样的事情:
echo "1 admin" >> /etc/iproute2/rt_tables echo "2 users" >> /etc/iproute2/rt_tables ip rule add from 192.168.122.40/32 dev eth0 table admin ip rule add from 192.168.123.41/32 dev eth1 table users ip route add default via 192.168.122.1 dev eth0 table admin ip route add default via 192.168.123.1 dev eth1 table users
现在你将有两个路由表和两个网关。