自建内网DNS的初衷
内网有一web服务器,外部访问时,路由器通过多层端口转发将访问转发至该服务器,实现正常访问。
这种方案下,内网其他设备将无法通过域名访问该服务器,因为其他设备通过DNS拿到的是外网IP。
正常情况下,华硕路由器对于被转发端口的访问有nat回源,可惜我这里的情况是多个路由器,DNS拿到的是最外层的IP,无法访问服务器。于是只好通过自建内网DNS来解决。
问题
自建DNS后,在路由器上设置了内网DNS为该DNS,保持互联网DNS不动。在windows下访问该服务器,发现有时能访问,有时不能访问。
排查
ipconfig /displaydns > a.txt
经查windows的dns缓存,发现拿到的居然还是外网IP
再查看windows的dns设置,有两个dns,一个是自建的dns,一个是路由器。
奇怪了,难道windows会默认路由器作为dns吗?
查手机,发现是一样的情况。
咨询deepseek各设备如何处理多个dns的情况。答说有的设备会依次访问,有的则是做均衡。
所以本次问题原因推测就是因为多个dns,windows通过访问错误的dns拿到了公网IP,导致的无法访问。
问题原因
研究了很久,发现路由器上居然有这么一个设置是默认打开的。
原因应该是这了,取消它,就不会将路由器作为一个默认dns了。
总结(推测)
根本原因是路由器默认将自己做了“优先级最低”的dns,通过dhcp发给了各个内网设备。但是不同的设备或系统使用多个dns的方法是不一样的。windows可能是以均衡的方式使用多个dns,这导致通过域名访问内网服务器时,取到了外网IP,从而不能正常访问。
这一问题排查中的困难在于浏览器的缓存机制,导致实际中看起来的访问失败问题是时不时出现的,同时修改dns等设置并不能实时生效,增加了问题排查的困难。
文章评论