大家好,又见面了,我是你们的朋友全栈君。
这几天在公司的路由器上做了Aliddns,对公司的内部网络的一些服务映射到公网,在家里就可以访问到公司的一些服务。
出现了一个问题:在外网利用域名+端口号可以正常访问到公司的服务,在公司内网的时候访问却没办法利用域名访问,只能用IP才能访问到相关服务
找了一些资料,总结原因如下:
例:在公司内网访问:
访问者:代号A
被访问者:代号B
路由器:代号R
由于在做DDNS时,在路由器上会把B绑定为公网IP,所以在访问者A访问域名时,解析出来的公网IP,这时候发送的包:
源地址为:A的内网IP,目的地址为:公网IP。SYN为1
在路由器上路由表对应的设备为访问者B,所以路由器会把包丢到被访问者B上,B收到包后会回应一个包:
源地址为:B的内网IP,目的地址为:A的内网IP。SYN=1,ACK=1
这时候,A就收到了一个源地址为:B的内网IP,目的地址为:A的内网IP的包,在A的请求记录中没有发送给B的内网IP的包,所以A认为这是一个错误的包,于是A就把包丢弃,继续等待公网IP回应的包,直到等待超时,
在B上,也一直等待A回应的TCP包,直到等待超时
如下图:
由于TCP三次握手没有完成,所以内网通过域名访问不到内网资源,造成了NAT回流
(NAT回环)
解决方法如下所示:
在路由器上把NAT loopback设置成asus
NAT loopback在路由器—防火墙设置—一般设置里面
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/134347.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...