我有一个非常简单的设置:两个 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
我这样做了,但对问题没有任何作用。
你有什么想法?