Categories
Network

关于公网 IP 的实践总结

TL:DR

公网 IP 对于部署自己的服务很重要。要想确定自己家里/公司里有没有公网IP,除了其他网友推荐的查询路由器WAN口地址外,还有结合 ipconfig 命令(确定网关 LAN 口)与 pathping/tracert 命令(确定网关 WAN 口)的通用方法。

该方法不需要操作路由器,不受限于光猫 route/bridge 方式,你还可以使用手机搞定。一次学会,终身受用。

一个比方

假设你的朋友给你寄了一件礼物,你开心地等待着快递到来。几天后,电话终于响起:

“喂,是黄某吗?你有个快递,自己来民治街道办拿一下!”

“什么?地址不是写的牛栏前吗?你们怎么不送过来楼下?”

“只能送到街道办,你自己看着办吧,不来的话就退回去了。”

疑惑地结束通话后,你很快得知,原来整个小区里,还有隔壁小区的很多人,都要去街道办拿快递——大家的件全部不派送了。

尽管十分不情愿,要知道从自己家里到街道办有两公里不止,但毕竟是自己的东西,只能跑一趟了。

更郁闷的是,以后寄快递也要自己去街道办了。

故事说完了。


在上面的例子中,快递就是你和外界来来往往的数据包,街道办就是公网网关,而“广东省深圳市龙华区民治街道”这一通邮地址,就是你的公网 IP 地址

当你的通邮地址只能具体到街道办时,你和别人的通讯过程有如下特点:

  1. 给你寄件时,你的朋友没有机会知道你家的具体地址,包裹面单上写着的收件人,只会具体你就近的街道办。
  2. 你去寄件时,你也没有机会在收件人一栏写下你家的具体地址,包裹面单上写着的寄件人,也只允许写到自己的街道办。
  3. 快递到了你的街道办(即公网地址目的地)之后,由街道办统一分配,最终送往辖区内的各个收件人(包括你)。

这样是不是太不方便了?为什么我一定要和这么多人共用一个收件地址呢?不能送到我家门口,哪怕小区门口吗?

是的,在网络的世界里,大多数人都只能去“街道办”处理自己的数据。

因为,网络的快递系统有限制,可用的通邮地址已经用光了。如果大家都想送到家门口,显然,能用的地址数量是不够的(百度搜索“IPv4地址的数量上限”)。

于是,移动、电信、联通都定了一个不成文的规定,为了节省公网通讯地址,要尽量把更多的人都集中在一个地址下。自然地,我们中的大多数,默认只能去街道办收寄包裹,而不是自家小区,因为那样对于分配地址的他们来说,更经济。

那么问题来了,既然面单上只能写到双方的公网街道办,街道办是怎么知道你的具体联系方式的呢?也就是说,数据包是怎么完成最后的两公里,最后到你设备上的?

确切地讲,快递面单上其实是记录了所有详细信息的,街道办拿到了你的具体地址后,把公网部分(前半截)原封不动地保留在了面单上,而你小区的具体地址(后半截),则被翻译成了火星文。

这后半截火星文,虽然也印在了面单上,但只有自己内部才认识,其他所有人,包括对方的投递系统,统统不认识这个私有地址。

在网络的世界里,这叫 NAT 地址转换。通过这项技术,成千上万个人就能共享一个公网地址了,这大大节省了通信资源。

公网 IP 到底有什么好?

从上面的例子中不难看出,在国内收寄包裹默认是通过大片区网关,即街道办来进行的。

在人的世界里跑来跑去确实不方便,那么在网络的世界里,难道数据包跑来跑去也会更加费劲吗?

当然不是。

在网络的世界中,如果你的公网 IP 只能具体到街道办地址,最大的不方便,就是别人要想快速而准确地找到你(或者你的家庭成员),几乎不可能。你看:

  1. 你家中的奶奶精通祝由术,一些头疼脑热、鱼刺卡喉等小症状,其能咒到病除。而她又很热心,只要别人有事相求,一定不会让人失望。但是,她年纪大了,出不了门。除非对方亲自来找她,否则连面都见不上,更谈不上帮忙。
  2. 你家中 6 岁的小儿酷爱捉迷藏,而他最好的玩伴却是远在湖南老家的表哥以及表弟们。暑假期间,他的表兄弟们又在呼唤了。但这时候,你给他下了禁令:老实点,只能在小区玩,不能出去。

你看,一旦你有了一些特殊的家庭成员,他们可不是像你一样,能自由地跑出跑进,而是只能等着对方亲自上门。

更加要命的是,一般情况下,街道办不会帮你把你的客人带到家里,对于来访的这些人,他统统打发掉了。当然,如果你极有实力,街道办恰好和你家有些关系(你具有公网路由权限),那就随你使唤了。

现在,把上例中你的奶奶换成监控摄像头,把你的儿子换成某联机网游。是不是感觉到了受人差遣与自己做主之间的区别了?

也就是说,你在家中开通的一切自定义服务,对方要想找你,中间绝对不能隔着“街道办”。

家中常见的自定义服务有:

  • 群晖
  • 视频监控
  • 网页(非常规端口)
  • 智能家居
  • 开着某些任务(远程下载、挖矿、协助计算、数据爬行)等的电脑
  • 某些游戏房间

换句话讲,当你上班去了,但是你年迈的奶奶和你年幼的儿子丢在家里,有时候你不放心,想时不时回家看看,如果通路地址只具体到街道办,你也会被挡在两公里之外。

你自己尚且如此,更何况你的客人呢?

而如果你的通邮地址能具体到你家里,会是什么情形呢?

显而易见,这时候,通邮地址就成了“广东省深圳市龙华区民治街道牛栏前村 2 栋 1001 ”,别人要给你寄东西,或者来找你,一下子就到了家门口,再也没有任何阻碍。

如何判断家里是不是公网 IP ?

基于上述,其实你永远都是拥有公网地址的,区别就在于这个公共通邮地址只是具体到街道办,还是具体到了自家门口。

也就是说,你是和小区内成千上万人共用一个公网 IP ,还是仅仅和若干个家人/同事一起用一个公网 IP 。

好,那么如何判断呢?

在开始具体讲述判断方法之前,有必要提一下,在普通人眼里,公网 IP 与 NAT 之后的私有 IP 之间的形式看起来是一样的:

不使用任何工具,你能判断 “100.64.5.217” 与 “74.82.211.61” 这两个 IPv4 地址之中,哪一个是公网 IP 地址,哪一个是私有地址吗?

没有一定的知识,肉眼当然观察不出来。这也是电信、联通、移动敢大胆地分配私有地址的原因之一——普通人很难分辨自己是不是受害者(可能用“受害者”一词不是太合适,但毕竟他们没有给你应该有的东西)。

对于笔者刚才提出的问题,在不掌握 IP 地址相关知识的情况下,也有一个简单的解决方法:百度

(第一个地址,百度结果提示为“保留地址”)
(第二个地址,百度提示为“美国洛杉矶”)

上图中,我们分别将这两个IP地址直接输进百度,进行查询。通过其结果首页对 ip138.com 进行的智能整合提权显示,我们很直观地看到了答案:第一个是私有保留地址(即 NAT 地址转换之后的 IP 地址),第二个则是公网 IP 地址。

有个这个方便而快速的判断方法,问题就简单一些了。

可能有的读者很快就反应过来了:既然百度可以智能地判断这些IP的归属明细,那我是不是可以直接叫他查一下我的 IP 地址,顺便判断下公私性质呢?

你别说,还真可以。

试一试:直接在百度搜索框中输入“我的 IP ”,它居然也能直接显示出一个类似上图中的结果来(即智能整合了 ip138 的结果):

(直接输入“我的IP”时,百度的搜索结果)

那这样岂不是太好了?直接查了我的 IP ,还告诉了我是不是公网 IP。

没这么简单。

如果读者在 5、6 年前就试过了这个办法,应该还记得当时确实是可行的。因为,当时百度的逻辑是:判断你家里的路由设备 WAN 口地址。也就是说,他先不管三七二十一,拿到你家路由器 WAN 口地址了再说。拿到之后再进行判断,是公网就显示到具体归属地信息,不是公网就显示保留地址。

现在这个办法失效了。因为,现在百度的逻辑是:判断到你家最后一站公网路由设备的 WAN 口地址。也就是说,他先就假定了你是有公网地址的,随便抓个包测试下,到你家的最后一个节点的地址,就是他记录的 IP 地址。

在此,有必要补充一些例子:

  • 你去寄快递,进行单号跟踪时,发现快递包裹肯定不是从你家附近的收寄点直接飞到对方的家门口,而是辗转经过了集散中心中转站派件点等物流节点。
  • 同样地,你上网通讯,来往的数据包也不是由你的公网路由设备直接“妥投”到对方的公网路由设备。与快递相似,中间经过了很多中转节点

也就是说,以前百度会查投递的快递员,而现在百度只会查最后一站的派送节点。而任何的派送节点都是公网可达的。

所以,现在你在百度查自己的 IP,它永远都会告诉你,你拥有公网地址。

绕了半天,问题还是没解决,看样子还没法偷懒。

是不是可以这样:我像几年前的百度一样,问问投递包裹的快递员不就知道自己家有没有公网地址了?

对,有一个通用的办法就是查询自己家里的路由器的 WAN 口地址

路由器 WAN 口地址是什么呢?你现在可以起身看一看,你家路由器的 WAN 口(有的叫 Internet 口)肯定是与光猫用网线相连的。也就是说,路由器是与外界通信的重要节点,而路由器 WAN 口,则是数据来到你家的第一站(不考虑其他拓扑)。

接着上例,可以把家里的路由器理解成固定驻扎在你家的派件方,他的身份究竟是上级分配下来的派件员(私网),还是邮政系统中的一个投递节点(公网),一查(WAN 口地址)便知。

具体操作方法如下:

第一步,找到路由器底部的铭牌,记下登录地址(如 tplogin.cn,或者 192.168.0.1 等等)以及管理账户密码。

第二步,打开电脑或手机中的浏览器,输入登录地址,并在随后的管理入口界面输入正确的账号密码。

第三步,因为不同品牌、型号的路由界面各不相同,此时需有针对性地查找 WAN 口 IP 地址选项,如下图所示:

(笔者的华硕路由器管理界面首页,很幸运,一登录进去就能看到红框中的 WAN 口 IP 地址)

第四步,将找到的 WAN 口 IP 地址代入百度中查询,是骡子是马,此时一溜便知了。


以上是网上流行的查询方法。但是,通过笔者的实践,发现该方法在下列场景中不适用:

  • 你家里根本没有路由器,只有一个类似“天翼网关”的光猫,这个光猫的管理口令在电信师傅手上;
  • 你家里有路由器,但是电信师傅在光猫里面设置了非桥接模式,也就是说,你的路由器并不负责拨号;
  • 你家里的路由器装在了弱电箱/弱点井,你去查询登录信息不是太方便;
  • 你记得你以前设置过了路由器的账号密码,但是你现在忘了,又不想为了简单查个东西把它彻底重置掉;
  • 你觉得这个办法有些,或者你的路由器很小众,登录进去了也不好找信息;
  • 你的路由器进去之后是英语,你有些头大;
  • 你自己会设置自己家的路由器,但是你千里之外的女朋友正在向你远程求助,她家的网络情况和你的不一样;

相信读者里面也有些遇到了上述问题,如果没有,笔者在此也介绍一个不需要操作路由,判断家里是不是公网 IP 的更简单的办法。

如果说上面查询路由器 WAN 口地址的逻辑为询问驻点派件方,那么接下来的方法的逻辑则为:尝试向公网上的任意收件人发送一个空包裹,接着查询“快递轨迹”。

我们的测试包裹走到哪,轨迹信息就跟到哪。

对于包裹从你家发出去经过的那些节点,我们用最笨的办法,一个一个套入百度查询,不出两三下,必有结果。

好,废话少说,以下为具体步骤:

第一步,打开电脑(对于不想开电脑的读者,下面会推荐用手机的方法,原理相似);

第二步,同时按下键盘上的 “WIN” 键(键盘左下角的田字格图标)与 “R” 键,在弹出的对话框的“打开/运行”字段中输入 “cmd”,接着回车。之后会弹出来黑色命令对话框(因为 “cmd” 是英文单词 “command” 的缩写,我们输入后,就等于告诉电脑,我要用命令而不是鼠标和你对话了)。

第三步,在黑色命令对话框中输入 “ipconfig”,回车。这个命令用于查询本机 IP 地址与网关 LAN 口的 IP地址,结果如下所示:

(笔者的 ipconfig 命令结果。最上面“以太网”红框中结果为空,说明笔者的电脑没有插网线。最下面 “WLAN 2” 中告诉了我们,本电脑 IP 为 192.168.50.119,而本电脑的网关 IP 为 192.168.50.1)

上图为笔者运行 ipconfig 命令时的结果。上述结果显示了你此刻正在使用的电脑被分配到的 IP 地址,以及上层 IP 分配者(即网关,一般为你家路由器)的 LAN 口 IP 地址。

相对于负责与外界打交道的 WAN 口,LAN 口则是负责与家中的下级设备打交道。

也就是说,WAN 口是院子大门,别人要进来,不管找谁,都得先经过它;而 LAN 口是家里各个房门,别人进了大门之后,想找谁就敲哪个门(房间里的人/包裹走出去也是一样的逻辑)。

多数读者应该没有如上图中两个红框之间的信息,这是正常的。

用手机把你这一步的结果拍下来,等下要用。

第四步,我们要开始发包裹了。继续在黑色命令框中输入 “pathping baidu.com”,再回车确定。注意中间的空格,如果怕输错,可以复制后在命令框中右键粘贴。

回车之后,系统应该自动开始跟踪数据包跃点了。稍等片刻之后,跟踪过程结束,具体图示如下:

(笔者跟踪目的地为 baidu.com 时,数据包从电脑一直到目的地的节点跟踪)

上图为笔者用电脑对 baidu.com 进行数据包跟踪时的结果信息。下方虽然提示正在计算信息,但这之后的统计结果并不是我们需要的。

上图的命令结果中,从上往下依次为数据包出去的各个节点地址,就像我们发快递时,包裹依次经过收寄点、集散中心、机场等等。

图中 0 行的 IP 地址为本机地址,即发件起始点地址。结果中还显示出了笔者的主机名。感兴趣的读者可以百度一下上图中笔者的(192.168.50.119)或者你自己的这个地址。绝大多数情况下,这个 IP 都是私有地址,除非你家不用路由器,直接用电脑拨号(但这是不合逻辑的,因为这样的话你家的其他设备就无法上网了)。

另外,如果你是在软路由主机上执行本步操作,也是例外之一。但既然读者具备了一定的网络知识水平,想必也不会耐着性子看到此处了。

图中 1 行的 IP 地址为数据包的第二站地址。可以看见,笔者的该地址关联的主机名为 “router.ausus.com”,通过名字不难猜出,这是笔者家里的路由器(即便你猜不出来,也可以看到,这个 192.168.50.1 的 IP 地址,与本文上一个图例中的“默认网关”的 LAN 口地址是一样的)。

如果读者朋友正在使用电脑执行本操作,大多数情况下,这 1 行的地址也应该与笔者一样,是家里路由器,即网关的 LAN 口地址。

也就是说,“测试包裹”在这一步被转送到了路由器。

这里注意两点:

  • 大多数情况下这个第二站的地址还是私有地址,因为包裹此时还没有走出家门(确切地讲,才刚出房间门);
  • 这个地址有时候并不是你家的路由器 LAN 口地址,而是你家的光猫 LAN 口地址。但这对于我们的判断来说不重要;

图中 2 行的 IP 地址为数据包的第三站地址。这是很重要的判断节点。数一数你家的路由器,如果只有一个,这时候包裹就该准备往家门外的邮递系统丢了。

一般情况下,把这个第三站的地址拿出来百度,你就知道最终答案了。

为什么呢?

细心的读者应该早就看出来了,这个其实就是路由器的 WAN 口地址。

我们发的测试包,首先是拿在自己手上( 0 行的本机起始点),接着是走出房间门( 1 行的路由器 LAN 口),再就要走出院子大门了( 2 行的路由器 WAN 口)。

如果你这个第三站的地址仍是私有地址,则说明你家里的路由器还有上级路由器。这个路由器要么是你自己主动设置的(你有时候可能觉得房子太大,需要多接几个子路由),要么是你被动设置的(电信/网通公司偷偷给你安排了个“街道办”,你出了自家大院没用,还得出街道办大门)。

而如果这个地址显示为某个归属地(如笔者的“广东深圳”)的公网地址,则说明你家里的路由拥有公网数据包处理能力了,接下来他将包裹直接传递给了他的平级单位——下一跳中转路由。

如果你不关心这些逻辑,只想简单地利用这个办法,那么可以这么看:只需要在 pathping 命令结果中查你默认网关 LAN 口地址(第三步你已经拍照了)所示的的下一站就行了。也就是说,你执行了 pathping 之后,别的不用看,先找到你的默认网关地址对应的行数在哪,找到后再往下看一站,把这个下一站的 IP 地址拿到百度一查,最终答案就出来了。

少数例外情况下,你需要简单看下第四站,或者排查下家里的网络设备。

第一种少数情况,你家接了子路由,而你的测试设备又连在子路由上。这时候,如果你只是想简单判断下家里到底是不是公网 IP,直接在结果往下看一站就行了,子路由有几层就往下看几站。至于后续如果要部署服务,建议部署在总路由上。

第二种少数情况,你家光猫拨号,而你的测试设备又连在光猫下面的路由器上。说到底,这还是主-子路由架构。和上面一样,多往下看一站就能判断。

不同的是,如果你要部署服务,最好请电信师傅上门改一下桥接(或者自己查询下对应光猫型号的超级密码/破解方法)。因为电信送的光猫主要负责光电信号转换,其数据包转发能力不强,加上你没有控制权,后续调整部署很不方便。

放心,上门改桥接是免费的,最多一包烟钱。

我们的判断方法说完了。这个办法也有缺点,就是比较繁琐。但优点也很明显,你既不需要操作路由器,无需关心家里的设备拓扑(其实你能看到这里,说明你的情况较为典型,一般不会有很复杂的组网形式),也不需要了解相关抽象的知识。

更重要的是,只要你使用 Windows 操作系统,这个方法的通用性很高。也就是说,只要你一步步按照笔者的办法来测试,出差错/疑惑的可能性很小。


讲完了用电脑判断公网 IP 的方法,我们再来看手机。

无论是安卓手机,还是 iPhone,都可以在应用商店通过搜索类似 “ping tool” 的关键词找到相关工具。

笔者在安卓手机上使用了 PingTools 工具,在 iPhone 上使用了 iNetTools 工具。相关软件基本信息分别如下(类似的工具多如牛毛,本文仅为展示用,读者无需严格套用):

(笔者安卓手机上的 PingTools,因为是从 Google Play 上下载的,界面为英语。华为商店里面有很多更好的汉语界面同类产品)
(笔者 iPhone 上面的 iNetTools,可以看到主要功能都差不多)

通过利用相关手机 APP 中的 或“路由跟踪”功能,与电脑操作类似,一样能很快地定位出相关关键节点,并随即锁定问题。具体操作,详情请参考电脑命令部分,此处不再赘述。简单示意图如下:

(使用安卓手机进行路由跟踪,即图中的 traceroute 功能。值得一提的是,Windows 中对应的命令为tracert,而不是pathping,因为这两个差不太多,笔者没有进行严格区分)
(使用iPhone进行路由轨迹跟踪时的过程截图。具体判断方法与逻辑参考上文中电脑端相关内容。手机与电脑有个小差别,就是手机端发测试包不显示本机地址,也就是说,0 行的内容省略了。当然,这不重要)

原来我家没有公网地址,该怎么办?

通过一番查询,幸运的朋友得知了自己拥有公网地址,忙活着下一步部署 DDNS 或端口映射等服务去了,但总有一些不幸的读者,终于得知原来自己的数据包一直都是通过跑“上级街道办”来进行通讯的。

沮丧之余,该怎么办呢?

很简单,拿起电话,直接拨打运营商的人工客服,依次执行如下操作,一般能要到公网 IP 地址:

  • 对其说自己家新装了监控,但是部署不成功,需要公网 IP;
  • 对其说自己家为某单位部署了一项公益服务,对方正在等待访问中;
  • 对其加强语气,说当初办网的合同/协议上的内容就是确保用户能访问互联网,而 NAT 内网其实不是真正的互联;
  • 对其加强语气,说本人已开启录音,如不解决需求,将向工信部反映(这是究极大招,一般客服到这一步就嘴软了,即便嘴硬的,我们真的投诉,他到时候还是得服软)

当然,还有不少办法,如向熟悉的电信师傅咨询,找找关系等等。只要多方尝试,相信有关部门也会考虑这个合理的需求。

最后,本文用的例子不甚严谨,疏漏之处在所难免,目的是将抽象的理论形象化,并让读者能收获一些知识。如有纰漏,欢迎在评论区指正。

原作者黄生林,欢迎转载。

Categories
Uncategorized

Hello world!

Welcome to WordPress. This is your first post. Edit or delete it, then start writing!