我正在尝试将 EC2 实例设置为 NAT 网关,以便私有网络中的其他实例可以被路由到该网关。
我有以下设置:
私有云平台
- 10.0.0.0/16
2 个子网
- 答:10.0.1.0/24
- 乙:10.0.2.0/24
2 个 EC2 实例
- 具有 2 个网络接口 eth0、eth1 的 NAT 实例,均位于子网 A 中
- 子网 B 中的另一个实例
在 NAT 实例中,eth0 用于公共网络,eth1 用于私有网络,并且它们都设置了相应的防火墙。
我尝试为子网 B 创建路由表,将默认值路由到 NAT 的 eth1,即:
0.0.0.0/0 <id of eth1 on NAT>
然后我尝试在 NAT 上运行tshark -i eth1
(命令行中的 Wireshark)以查看是否有任何流量到达那里,然后我ping google.com
在另一个实例上运行。没有成功。我还尝试了curl google.com
以防 ping 在某处被阻止,但同样没有任何反应。
看起来 AWS 路由流量的方式有问题,所以即使路由表是这样设置的,流量也永远无法到达网络接口。
如果有人能帮助我,我将不胜感激。谢谢。
免责声明:我知道 AWS 具有内置 NAT 网关选项,但它不适合我的情况。
答案1
由于数据包的源和目标都不是属于您的 IP 地址NAT 网关,您需要禁用源检查在您想要处理流量的网络接口上(我想说的是 NAT 网关中的两个接口):
https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-eni.html#change_source_dest_check
否则,平台就会丢弃流量,作为一种“反欺骗”保护。
如果你想在 Azure 中执行此操作,则相当于IP 转发标志。