问题:在华为USG6303里,对公网IP地址的8010端口进行映射(虚拟服务),映射到我自己的web服务器的80端口,设置成功后,但在本机上(即192.168.99.99这台虚拟机)访问域名和外网ip时,都是无法打开,还以为是映射不成功或是被路由器屏蔽了呢?
2个小时没解决,只好开了vpn,让别人访问。
后来排查时发现用5G网络可以访问(外网地址),内网却不能访问。
遂开始脑补逻辑。
我需要在内网里面使用公网地址去访问内网的服务器。
有点拗口,通俗来说,就是用一个公网IP就能内外网通吃,不用内网一个和外网一个的记。
假设你的外网IP为 100.1.1.1内网有2台192.168.99.1 192.168.99.2
做了IP地址映射 100.1.1.1:80->192.168.99.1:80
1。公网PC1访问你的站点
PC1:X->100.1.1.1:80 (1个session 包含:[source ip:source port , desti p:dest port]4个参数 )
地址转换后: pc1:x->192.168.99.0:80
192.168.99.0 到数据后,发数据给源站点
192.168.99.2:80->pc1:x 经过地址转换 100.1.1.1:80->pc1:x
所以外网可以访问你映射的站点.
2。如果在内网访问
192.168.99.2:x->100.1.1.1:80 地址转换后 192.168.1.11:x->192.168.99.1:80 到达站点
站点返回数据:
192.168.99.1:80->192.168.99.2:x
这里是关键:192.168.99.1检查后发现目标ip为192.168.99.2为同一网段,
所以直接把数据发给192.168.99.1,不再通过100.1.1.1转发。
但是,192.168.99.2是向100.1.1.1发起连接,并没有和192.168.99.1连接,所以将丢弃192.168.99.1发回的数据。
也就是说 192.168.99.2访问100.1.1.1这辈子都连不上。
那么现在就需要一个功能:端口回流
端口回流,学名 Hairpin NAT。望文生义,就是发夹弯一样的NAT,当我们内网电脑使用公网地址访问网站服务器的时候,我们路由器立刻转手帮回送给网站服务器,就不用去走公网。
但是在有些下一代防火墙来说,可能会使用DNS-Mapping这种方式,现在的路由,只需要在NAT下面开启hairpin NAT。