移动网络 ping 不通自己的公网 ip,显示请求超时怎么办?
题主所谓的公网IP,并没有配置在任何主机的TCP/IP协议栈上,所以Ping不通。在浩瀚的互联网上去寻找答案,包括ChatGPT机器人,答案就是“禁Ping了“。可是真相往往并不是这样。
这是手机4G网络分配的内网IP:10.181.2.18
这个内网IP地址配置在手机TCP/IP协议栈上的,所以手机Ping自己的内网IP是没有问题的。
用这个手机访问互联网时呈现的公网IP:223.104.5.212
这个公网IP,是存在于移动网络城域网与核心网边界网关(Edge Gateway)上,准确地说,是以NAT Database的形式存在。
并没有。既然没有配置,那么不光手机Ping不通,地球上所有的主机都不会Ping通它。
没有配置在TCP/IP协议栈上,手机怎么使用它访问互联网服务器(微信什么)的?
一句话:边界网关在出方向,将IP报文10.181.2.18 ---- > 223.104.5.212 (可能还有TCP/UDP端口号的映射)。
两句话:将以上映射关系保存在NAT Table里。
三句话:边界网关在入方向,查NAT Table,将IP报文223.104.5.212 ---- > 10.181.2.18 (可能还有TCP/UDP端口号的映射)。
通过上文的分析,公网IP配没配在TCP/IP协议栈上并不会影响上网。唯一的影响就是Ping不通它。
问题来了,一个IP地址没有配置在TCP/IP协议栈上,如何将它通过BGP路由协议将它通告给互联网呢?
不知道读者还有印象哇,向BGP advertise路由,这个路由必须存在于Routing Table?
简单,可以使用aggregate命令产生一个聚合静态路由,指向Null接口,比如:
223.104.0.0/16 --------- > Null0
现在来Ping 223.104.5.212,会发生什么?
Ping报文到达边界网关,查路由表,相比0.0.0.0/0,汇聚路由223.104.0.0/16更优,故选择之。由于出口对应Null0,这是一个逻辑空接口,直接将Ping报文扔进去,没有了。
Ping报文到达边界网关,查路由表,最佳匹配0.0.0.0/0,指向互联网。
返程流量,先查NAT Table,将公网IP---> 内网IP,可以Ping通。
最后,浩瀚互联网有N多公网IP,它们绝大多数都是Ping不通的,因为它们不提供对公服务。只有哪些需要提供对公服务的公网IP需要提供Ping服务,比如微信、知乎、亚马逊等。而要提供公网IP的Ping服务,这个公网IP一定是配置在TCP/IP协议栈上,而且不要有防火墙阻隔,两者缺一不可。
原文始发于微信公众号(车小胖谈网络):移动网络 为何ping 不通自己的公网 IP?
评论