公网ip 为什么外网访问不了内网云服务器无公网ip 访问外网

NAT地址池和云服务器无公网ip 访问外網地址要与出口IP不同网段NAT地址池可以和云服务器无公网ip 访问外网地址在同一网段,也可在不同网段

对于下文中推论的回答:我认为不會成环,ping NAT地址池的没用到的地址得不到回应,就没有回去的数据包怎么会成环呢。。。

以下参考下面这个文章附上本文留存,原文引用链接为:

NAT网络回流现象解释内网使用云服务器无公网ip 访问外网的外网IP登陆

hi大家好,今天我们来讨论一个很多人都找不到答案得問题:究竟为什么内网不能用公网地址访问内网云服务器无公网ip 访问外网不是任何设备都存在此问题,拿cisco的设备来说不同版本的ios,有嘚就没有这个问题而有的版本就有问题,netscreen的防火墙也没有这个问题关键是开发者有没有意识到这个问题,通过修改ios完全可以避免。對于这个问题解决方法是有,比如内网dns欺骗、pix上得alias等等但是究竟为什么有些设备不支持呢?今天我斗胆发个贴因为有些结论纯粹靠想,也没有设备进行试验所以希望大家跟贴讨论,达到抛砖引玉的目的谢谢了先!

以下所有内容均针对出口是以太网的情况,对于串ロ接入不会出现这种问题。

如图这个图是本贴的初始图,大圈是本地和他相连的是isp路由器,和isp相连的是internet上随便一个路由器

本地出ロ地址是5。55。1isp对端是5。55。2(掩码没写稍后会分别讨论)。11。11和1。11。2是内网两台云服务器无公网ip 访问外网的内网地址被静態映射到公网上的5。55。4和55。55。 内网的pc全部被pat到出口上本地路由器一条缺省路由到isp对端。

我想这个拓扑应该是非常普遍的了我认為就是因为这个非常普遍的拓扑,造成了很多人所反应的“内网不能通过公网地址访问内网云服务器无公网ip 访问外网”这个问题我认为這个问题的关键原因就在于掩码,就是在3层上做文章

先来看看一般情况下,这个环境的掩码的规划假设isp分配一段8地址子网给本地,这樣isp路由器接口和本地路由器接口共占用2个网络地址、广播地址共占用2个,可用的一共4个掩码是248。对于图示的拓扑假设本地路由器出ロ掩码是248(内网pc的pat地址相应的也就是掩码为248),被映射的两个地址掩码也是248这个最普遍的掩码规划,结果是:云服务器无公网ip 访问外网、内网pc的pat地址、本地出口地址全部处于同一个网段我们分析一个包的来龙去脉,来看看到底内网pc通过公网地址可否访问到内网云服务器無公网ip 访问外网

5。55。4(云服务器无公网ip 访问外网的公网地址)请求包源地址1。11。111目的地址5。55。4路由器收到这个包后,检查蕗由表发现5。55。4就位于自己的出口网段(假设出口为以太口)所以直接通过arp广播请求5。55。4的mac地址问题出现了,谁会应答这个请求呢没有人,所以这种情况下(所有公网地址在同网段)当然不会通。不但内网访问云服务器无公网ip 访问外网不行云服务器无公网ip 訪问外网之间通过公网地址访问也不会通。

结论一:只要出口地址和云服务器无公网ip 访问外网映射的公网地址在同网段就有问题。

基于仩面的讨论我们知道了只要出口地址和云服务器无公网ip 访问外网映射的公网地址在同网段,就会发生“无人应答”的必然结果所以我們这次改变掩码规划,将出口掩码变长变为252(isp掩码也要相应改变)。在这里首先声明一个要点就是nat池的地址可以和出口不在同网段,鉯前有帖子也讨论过我自己一开始也迷惑,后来想明白了只要isp路由器上有这些地址的路由就可以,下一条是本地路由器这样本地路甴器便可以接受到这些包。

我们再次分析一个包的流程内网pc1。11。111发出ping 55。54请求,包源地址11。1111,目的地址55。54,路由器收到这個包后检查路由表,这一次发现5。55。4不在本地的任何接口所以走了缺省路由,将包发给了isp对端口并在本地nat表中生成一条项目,記录内网地址11。1111被转换成公网地址5。55。1加上端口号(假设端口号是8888)isp接受到的包,目的地址是55。54,源地址变成了55。51,它檢查它的路由表发现5。55。4路由下一条是55。51,也就是本地路由器所以又将此包发给本地路由器,经过了一次往返后本地收到这個包,首先接受nat引擎的过虑发现5。55。4正在被静态映射到内网的11。11的主机,所以改变目的地址为11。11,源地址还是55。51,这样僦交给了路由引擎查看路由表,11。11的路由当然有了,通过2层直接发给11。11,至此去程的包分析完毕。

我们再分析回程的包云垺务器无公网ip 访问外网1。11。1收到包后准备回应给5。55。1(加端口号)发出reply包,源地址11。11,目的地址55。51:8888,本地路由器收到后先给路由引擎,发现55。51就是出口地址,问题又来了包的目的就是出口,而不是经过出口这时候路由器该怎么办呢?假如是从外姠内来的包访问55。51:8888,这时候会先提交个nat引擎做nat转换。但是这是从内向外发出的包要先提交给路由引擎,我认为此时由于收到的包是从内向外的,目的直接就是针对出口来的而出口并没有开启什么端口,除非为了web管理或者telnet管理开启80或23端口,所以路由器会丢弃洇为没有得到应答。

结论二:只要出口地址和内网pc的pat地址同网段同样会有问题

我们再变更掩码方案,使得内网pc的pat地址和云服务器无公网ip 訪问外网映射地址同网段但和出口不同网段。假设内网pc的pat地址为55。56(和云服务器无公网ip 访问外网地址同网段)

我们再次分析一个包,内网pc11。1111发出ping 5。55。4请求包源地址1。11。111目的地址5。55。4路由器收到这个包后,检查路由表发现5。55。4不在本地的任何接口所以走了缺省路由,将包发给了isp对端口并在本地nat表中生成一条项目,记录内网地址11。1111被转换成公网地址5。55。6加上端口号isp接受箌的包,目的地址是55。54,源地址变成了55。56,它检查它的路由表发现5。55。4路由下一条是55。51,也就是本地路由器所以又将此包发给本地路由器,经过了一次往返后本地收到这个包,首先接受nat引擎的过虑发现5。55。4正在被静态映射到内网的11。11的主机,所以改变目的地址为11。11,源地址还是55。56,这样就交给了路由引擎查看路由表,11。11的路由当然有了,通过2层直接发给11。11,至此去程的包分析完毕。

我们再分析回程的包云服务器无公网ip 访问外网1。11。1收到包后准备回应给5。55。6(加端口号)发出reply包,源地址11。11,目的地址55。56,本地路由器收到后先给路由引擎,发现55。56不在本地任何端口下,所以走了缺省路由发给isp,并茬nat表中生成一条记录将1。11。1转换为55。54,isp接受到包源地址变为55。54,目的地址是55。56,通过检查路由表发现5。55。6这个地址嘚路由下一条应该是55。51,也就是本地路由器所以包又被发回来了,经过一次往返本地收到了这个包,首先提交给nat引擎发现目的哋址5。55。6在nat表中对应着内网pc11。1111,所以将55。56替换成1。11。111源地址不变,还是55。54,然后提交给路由引擎路由器在2层将包发給1。11。111这时,11。1111这台主机收到了从5。55。4返回的包而他一开始ping请求包,就是发给55。54这个公网地址

的,所以ping通了!!!!

结論三:内网pc的pat地址和云服务器无公网ip 访问外网公网地址同网段同时和出口地址不同网段,这样没有问题

本贴的高潮部分已经达到,至此只剩下一种情况,就是内网pat地址、云服务器无公网ip 访问外网公网地址、出口地址全部不在同网段假设出口掩码252,云服务器无公网ip 访問外网公网地址段掩码248内网pc的pat地址改为5。55。254这样三种地址都不在同网段。而且isp也必须有云服务器无公网ip 访问外网公网地址和内网pc的pat哋址的路由下一条是5。55。1我们再次分析一个包内网pc1。11。111发出ping 55。54请求,包源地址11。1111,目的地址55。54,路由器收到这个包後检查路由表,发现55。54不在本地的任何接口,所以走了缺省路由将包发给了isp对端口,并在本地nat表中生成一条项目记录内网地址1。11。111被转换成公网地址55。5254加上端口号,isp接受到的包目的地址是5。55。4源地址变成了5。55。254它检查它的路由表,发现55。54路甴下一条是5。55。1也就是本地路由器,所以又将此包发给本地路由器经过了一次往返后,本地收到这个包首先接受nat引擎的过虑,发現55。54正在被静态映射到内网的1。11。1的主机所以改变目的地址为1。11。1源地址还是5。55。254这样就交给了路由引擎,查看路由表1。11。1的路由当然有了通过2层直接发给1。11。1至此,去程的包分析完毕

我们再分析回程的包。云服务器无公网ip 访问外网11。11收箌包后,准备回应给55。5254(加端口号),发出reply包源地址1。11。1目的地址5。55。254本地路由器收到后,先给路由引擎发现5。55。254不茬本地任何端口下所以走了缺省路由,发给isp并在nat表中生成一条记录,将11。11转换为5。55。4isp接受到包源地址变为5。55。4目的地址昰5。55。254通过检查路由表,发现55。5254这个地址的路

由下一条应该是5。55。1也就是本地路由器,所以包又被发回来了经过一次往返,本地收到了这个包首先提交给nat引擎,发现目的地址55。5254:某个端口,在nat表中对应着内网pc11。1111,所以将55。5254替换成1。11。111源地址鈈变,还是55。54,然后提交给路由引擎路由器在2层将包发给1。11。111这时,11。1111这台主机收到了从5。55。4返回的包而他一开始ping请求包,就是发给55。54这个公网地址的,所以ping通了!!!!

结论四:三种地址全部不在同网段没有问题。

综上所述得到了4个结论:

结論一:只要出口地址和云服务器无公网ip 访问外网映射的公网地址在同网段,就有问题

结论二:只要出口地址和内网pc的pat地址同网段,同样會有问题

结论三:内网pc的pat地址和云服务器无公网ip 访问外网公网地址同网段,同时和出口地址不同网段这样没有问题。

结论四:三种地址全部不在同网段没有问题。

可以简单的发现前两个是充分条件,只要满足了其中一个就会出现问题,而现在大多数的接入都符合湔两个情况而几乎没有人“多此一举”的去改变掩码规划,所以造成如此多的普遍现象:内网不能用公网地址访问内网云服务器无公网ip 訪问外网!!!!!

出口地址只要不和其他两种地址同网段就可以保证不出问题。

至此已经探讨了问题的原因。此过程中我还得到了┅个推论和一个待验证的问题

推论:如果nat池中的公网地址和出口地址不同网段,不管在内网还是公网ping nat池中未参与转换的公网地址会出現环路,包在本地和isp之间来回往返

对于第三节和第四节,如果只在本地出口变长掩码isp端不作任何改变,会怎么样以第三节的环境来說:我们再次分析一个包,内网pc11。1111发出ping 5。55。4请求包源地址1。11。111目的地址5。55。4路由器收到这个包后,检查路由表发现5。55。4不在本地的任何接口所以走了缺省路由,将包发给了isp对端口并在本地nat表中生成一条项目,记录内网地址11。1111被转换成公网地址5。55。6加上端口号isp接受到的包,目的地址是55。54,源地址变成了55。56,它检查它的路由表由于此时isp的接口掩码没有变长,还是248所以,它发现55。54路由就在它自己的接口上,所以直接在接口发arp请求55。54的mac地址,此时按理说,没人会应答(除非本地开了代理arp)但是有一次偶尔发现在路由器上show arp,会发现有些奇怪的条目ip地址都是nat池中的地址,mac地址不管ip多少都是本地出口的mac地址,这样的话即使arp请求的地址不和出口同段,一样会得到应答不知道这个对不对。

对这个问题的解决方法在ios层面,一般是利用修改dns回包中的payload实现的將dns返回的公网地址,修改成内网地址这样直接通过内网通信,就不会有问题了对于直接用公网ip访问的包,会在路由器内部先nat然后调頭,不走出口直接再回到内网,以支持用公网地址访问

很多人都想把自己建立在局域网Φ的网站可以通过不同地方访问但是却不知道怎么操作,所以今天就给大家讲讲自己总结出来的经验

    • 一定要确定你的网站在本地的时候是可以正常访问的

    • 确定自己的花生壳和路由器配置是正确的

    经验内容仅供参考,如果您需解决具体问题(尤其法律、医学等领域)建议您詳细咨询相关领域专业人士。

    作者声明:本篇经验系本人依照真实经历原创未经许可,谢绝转载

昨天得知阿里云esc又打折了赶紧叺手了一波,因为以前有部署过的经验所以很快就部署上了项目,就在欣喜的访问时却无访问。

我按照下面步骤一步一步的检测

1、雲服务器无公网ip 访问外网上是否成功部署jdk和tomcat

2、阿里云控制台安全组 “入方向” 开放了80端口和8080端口

3、实例添加安全组并启动

4、云云服务器无公网ip 访问外网上防火墙开放80端口

然而,还是无法访问最后,重点:

安全组“出方向”配置端口如下就可以成功访问了我也不知道为什麼。

我要回帖

更多关于 云服务器无公网ip 访问外网 的文章

 

随机推荐