我试图让一个非常简单的设置发挥作用,
我有 2 个 AWS ec2 实例(蓝色),
实例 B 有一个 Ipsec VPN 连接到我们的数据中心,并且可以 ping 该数据中心的内部 IP,即服务器 C(192.168.40.21)
我需要 ec2 A 实例能够 ping 并连接到服务器 C,方法是使用 B 作为跳点。A 和 B 都在同一子网上。我尝试在 A 上添加 B 的 IP 作为网关,
root@A> ip route add 192.168.40.0/24 via 172.25.25.200
并在 B 上设置防火墙规则来转发流量(sysctl ip4 forwarding = 1),
root@B>
iptables -A FORWARD -s 0/0 -d 172.25.25.0/24 -j ACCEPT
iptables -A FORWARD -s 172.25.25.0/24 -d 0/0 -j ACCEPT
iptables -t nat -A POSTROUTING -d 0/0 -s 172.25.25.0/24 -j MASQUERADE
但是我无法从 A ping 通 C。我遗漏了什么?
所有主机都是Centos 7。
谢谢。
答案1
EC2 实例默认在其网络接口上启用源/目标检查,这意味着它们将无法用作路由器,除非您禁用它。请参阅https://docs.aws.amazon.com/vpc/latest/userguide/VPC_NAT_Instance.html#EIP_Disable_SrcDestCheck
答案2
通常iptables
有阻止转发流量的标准规则。您应该将其删除以允许流量通过。
您应该删除规则:
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
答案3
您的实例是否允许明确使用安全组在子网内的预期端口上进行通信?
由于我自己做了这个假设,所以我必须怀疑这一点,如果不添加必要的规则,同一子网/安全组内的 ec2 实例将无法进行开箱即用的通信,如下所示:https://forums.aws.amazon.com/thread.jspa?threadID=77771
tcpdump
如果您已经仔细添加了适当的规则,那么也许您可以尝试使用适当的接口来查看数据包的流动并进行过滤?
答案4
我最终使用 GRE 隧道通过服务器 B 路由所有流量
隧道位于 A 和 B 之间,在 AI 上还添加一条路由,通过 GRE 隧道路由到 C 的所有流量
因此它的工作原理是,A > gre tun > B > ipsec vpn tun > C
** 注意,请参阅上面关于 EC2 实例的源/目标检查的注释。