aws iptables nat 在 eth0 上有效,但在 eth1 上无效

aws iptables nat 在 eth0 上有效,但在 eth1 上无效

我有一个非常简单的设置:两个 t2.micro 实例,一个带有 eth0,另一个带有 eth0 和 eth1,都位于同一个 VPC 中,并在 10.0.0.0/16 中具有 10.0.0.0/24 子网。

我所要做的就是让来自互联网的流量通过一个 t2 路由到另一个 t2,然后返回。

这是测试设置,后面是有效的,然后是无效的。我需要让第二种方案有效,但不知道该怎么做。

/proc/sys/net/ipv4/ip_forward = 1

t2-A:  eth0 private IP 10.0.0.120 EIP a0.b0.c0.d0
       eth1 private IP 10.0.0.16  EIP a1.b1.c1.d1

t2-B:  eth0 private IP 10.0.0.113

我可以 ping a0.b0.c0.d0,ping 进入 10.0.0.120,经过 NAT 并路由到 10.0.0.113,然后 ping 回复返回到 a0.b0.c0.d0 给我。

只需遵循以下两条规则:

iptables -t nat -I PREROUTING -i eth0 -p icmp -j DNAT --to 10.0.0.113
iptables -t nat -I POSTROUTING -o eth0 -p icmp -j MASQUERADE

但是如果我尝试通过 eth1 做同样的事情,我就无法让它工作:

iptables -t nat -I PREROUTING -i eth1 -p icmp -j DNAT --to 10.0.0.113
iptables -t nat -I POSTROUTING -o eth1 -p icmp -j MASQUERADE

ping a1.b1.c1.d1 不起作用。我可以看到 ping 到达 10.0.0.16,之后没有发生任何其他事情。ping 从未出现在 10.0.0.113 或任何其他接口上,因此当然不会发送 ping 回复。

当我第一次遇到这个问题时,我打开了 aws 支持票,他们认为这是一个不对称路由问题,并告诉我执行以下操作,有关基于策略的路由:

ip route add default via 10.0.0.1 dev eth0 table 1
ip route add default via 10.0.0.1 dev eth1 table 2
ip rule add from 10.0.0.120/32 table 1 priority 500
ip rule add from 10.0.0.16/32 table 2 priority 600

我这样做了,但对问题没有任何作用。

你有什么想法?

相关内容