今天我遇到一个情况,就是使用公司 VPN 后再指定家里的 DNS 后,公司的内网域名反而无法访问的问题。

这是因为我家路由器上的 DNSMASQ 配置了rebind_protection,这个选项是指当上级 DNS 返回了内网地址时,会将结果吞掉,并返回 NOERROR。这个选项是为了防止有些无良 ISP 的 DNS 劫持用的,有些路由可能就叫做“防止 DNS 劫持”的功能。

但是公司内网的地址解析肯定不是公网的,但是这个解析又配置在外网环境,导致内网域名也被外网 DNS 解析并返回,导致 DNSMASQ 当成了劫持,返回了 NOERROR。而 NOERROR 对于操作系统来说,就算是这个 DNS 解析到了,不会再询问第二第三 DNS 了,导致第二第三 DNS 就是配置公司的 DNS 也无济于事。

解决方法就是在路由器上关闭此功能,或者在 VPN 的 DNS 里调整一下顺序,将公司的 DNS 放在优先位置。公司的 DNS 会将外网域名解析为 NXDOMAIN,这样就会顺序使用第二第三 DNS 来访问外网了。