Site-to-Site VPN异常:本地可Ping通AWS私有IP,但AWS EC2无法Ping通本地私有IP
这种本地能ping通AWS、但AWS EC2反过来ping不通本地的情况,在Site-to-Site VPN部署里很典型,我整理了几个你可能没覆盖到的排查点:
本地侧防火墙/安全策略限制:这是最容易被忽略的点!虽然你能从本地发起ping到AWS,但很多本地防火墙或路由器默认只会允许响应本地发起的流量——也就是允许ICMP echo reply返回,但拒绝来自AWS的主动ICMP echo request。你得检查本地防火墙、VPN设备的安全规则,确保允许来自AWS VPN隧道IP段的ICMP流量(包括请求和回复)双向通行。
EC2实例内部的防火墙规则:AWS的安全组和NACL是外层防护,但EC2实例本身的操作系统防火墙(比如Linux的
iptables/ufw,Windows的自带防火墙)可能限制了出站ICMP请求。比如有些Linux系统会默认禁用ICMP出站,或者设置了严格的规则阻止发往本地IP段的ping。你可以在EC2上执行iptables -L(Linux)或者检查Windows防火墙的出站规则,确认允许ICMP echo request发送到本地私有IP段。本地网络的NAT配置问题:如果你的本地环境用了NAT设备,要注意有没有配置NAT豁免规则。比如本地可能把所有出站流量都转换成公网IP,但没针对AWS VPN的IP段做豁免,导致AWS发往本地私有IP的包,在本地回复时被NAT转换成公网IP,流量走了公网而不是VPN隧道,自然就收不到回复了。
VPN路由的双向一致性:虽然你说检查过路由表,但再仔细核对一遍:
- AWS侧的子网路由表,是不是把本地私有IP段的下一跳指向了VPN网关?
- 本地侧的路由表,有没有正确把AWS私有IP段指向本地VPN设备?
如果用的是BGP动态路由,还要确认两边的路由学习是否正常,有没有路由过滤列表把本地IP段挡住没发布到AWS,或者AWS的路由没被本地接收。
VPN隧道的MTU不匹配:有时候MTU设置不对会导致数据包丢失,虽然ping默认是小包,但也有可能触发问题。你可以试试在EC2上用更小的包ping本地:
ping -s 500 ON-PREM-PRIVATE-IP,如果能通,说明MTU有问题,建议把VPN隧道的MTU调整为1436(AWS官方推荐的Site-to-Site VPN MTU值)。AWS VPN隧道状态异常:去AWS控制台看看VPN连接的状态,是不是两个隧道都处于“UP”状态?有时候其中一个隧道故障,可能导致单向流量异常。另外查看VPN的监控指标,比如数据包接收/发送的统计,看有没有明显的丢包情况。
内容的提问来源于stack exchange,提问作者Peter

