这几天,我在公司路由器上制作了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将分组发送到
即使是b,在等待超时之前,a也继续等待响应的TCP分组
下图:
由于TCP的三次握手未完成,内部网无法通过域名访问内部网资源,导致了NAT回流
(NAT环回)
解决方法如下。
在路由器上将NAT loopback设置为asus
NAT loopback位于路由器-防火墙设置-常规设置中