多宿主路由 - Linux:允许流量在另一个接口上回复

多宿主路由 - Linux:允许流量在另一个接口上回复

我已经连接到两个 ISP 并向他们公布了我自己的 IP 空间 (/24 IPv4),因此这两个 ISP 都将发往我子网的流量路由到我的路由器(一个 Linux 服务器)。

两个 ISP 连接到 Linux 路由器上的不同接口,假设eth0eth1

现在,当我尝试访问ping某个地址时,我得到的只是请求超时。但是,通过执行tcpdump,我可以看到远程计算机的回复,但不是在 Linux 路由器发送请求的同一接口上。(即从 发送eth0,在 上得到回复eth1):

eth0:

17:11:26.136885 IP tky01.jp.nat.moe > syr.edu: ICMP echo request, id 22910, seq 1, length 64
17:11:27.139627 IP tky01.jp.nat.moe > syr.edu: ICMP echo request, id 22910, seq 2, length 64
17:11:28.163632 IP tky01.jp.nat.moe > syr.edu: ICMP echo request, id 22910, seq 3, length 64
17:11:29.187715 IP tky01.jp.nat.moe > syr.edu: ICMP echo request, id 22910, seq 4, length 64
17:11:30.211766 IP tky01.jp.nat.moe > syr.edu: ICMP echo request, id 22910, seq 5, length 64

eth1:

17:11:26.314683 IP syr.edu > tky01.jp.nat.moe: ICMP echo reply, id 22910, seq 1, length 64
17:11:27.317398 IP syr.edu > tky01.jp.nat.moe: ICMP echo reply, id 22910, seq 2, length 64
17:11:28.341461 IP syr.edu > tky01.jp.nat.moe: ICMP echo reply, id 22910, seq 3, length 64
17:11:29.365671 IP syr.edu > tky01.jp.nat.moe: ICMP echo reply, id 22910, seq 4, length 64
17:11:30.389885 IP syr.edu > tky01.jp.nat.moe: ICMP echo reply, id 22910, seq 5, length 64

我尝试做策略路由:

ip rule add from x.x.x.x/24 lookup isp2 # where x.x.x.x is my subnet.
ip route add default via y.y.y.y dev eth1 table isp2 # where y.y.y.y is ISP2's gateway

这样可以ping正常运行,但是现在任何选择使用 ISP1(eth0)进入我的 AS 的用户都将无法访问任何内容。

我如何让 Linux 知道这两者eth0eth1能回复请求?

答案1

我刚刚明白了。rp_filter需要禁用才能允许从不同路径回复:

for iface in eth{0,1}; do echo 0 > /proc/sys/net/ipv4/conf/$iface/rp_filter; done

为了使其永久生效,请net.ipv4.conf.<iface>.rp_filter = 0在 sysctl 中设置。

相关内容