我使用 pfSense 和 OpenVPN 已有十多年了。还大量使用 pfSense 的许多服务(DNS 解析器、DHCP、HA 代理、SquidGuard、当然还有防火墙……)简而言之 - 我确实有一些经验。但现在决定尝试用 WireGuard 替换 OpenVPN……
我在 pfSense 端创建了一个隧道,配置了 Windows 客户端,并且成功连接。我可以访问 pfSense 后面的(几乎)所有服务器。但后来我注意到 DNS 行为非常非常奇怪。我必须快速描述我的环境来解释这个问题。所以我有:
- 拆分 DNS 设置(内部 DNS 解析为私有地址,而公共 DNS 解析为公共地址)。
- 内部 DNS 服务器是两个 Zentyal 域控制器(位于 pfSense 后面的网络中)。它们是主域“mydomain.com”的权威名称服务器。
- 这两个配置为将其他域的 DNS 查询转发到 pfSense 的 DNS 解析器。(我在 DNS 解析器中配置了更多域,因为它比 Zentyal DNS 更加用户友好且更好。)
- 最后,DNS解析器进一步将未解析的域的查询转发到外部DNS。
DNS request -> Zentyal DNS (172.16.0.1) -> pfSense DNS Resolver (172.16.1.1) -> External DNS
我承认,这个设置有点奇怪,但它已经运行好几年了。
当我使用 OpenVPN 连接我的 Windows 11 机器时,我可以nslookup
毫无问题地对任何域(主域或其他域)进行操作。但是当我断开 OpenVPN 并连接 WireGuard 时,我只能查询主要的领域:
nslookup web.mydomain.com
Server: zentyal-1.mydomain.com
Address: 172.16.0.1
Name: web.mydomain.com
Address: 172.16.2.5
但是当我查询任何其他域(由 DNS 解析器或外部 DNS 处理)时,我收到“查询被拒绝”错误:
nslookup google.com
Server: zentyal-1.mydomain.com
Address: 172.16.0.1
*** zentyal-1.mydomain.com can't find google.com: Query refused
当我使用 OpenVPN 连接时,出现同样的请求:
nslookup google.com
Server: zentyal-1.mydomain.com
Address: 172.16.0.1
Non-authoritative answer:
Name: google.com
Addresses: 2a00:1450:4001:80f::200e
142.250.185.142
显然,在这两种情况下,同一个 DNS 服务器 (zentyal-1) 都会收到请求,并且同一个服务器会做出响应。一次是“查询被拒绝”,一次是成功响应。当我通过 WireGuard 连接时,DNS 解析器似乎拒绝回答 Zentyal。
我的 WireGuard 客户端配置:
[Interface]
PrivateKey = XXXX=
Address = 172.16.26.2/24
DNS = 172.16.0.1
[Peer]
PublicKey = YYYYY=
AllowedIPs = 172.16.0.0/16
Endpoint = 1.2.3.4:51820
奇怪的行为还不止于此。我只在命令提示符下遇到了“查询被拒绝”问题,使用nslookup
。看起来浏览器完全不受此问题的影响。(nslookup
无法访问 google.com,但 Firefox 可以毫无问题地打开它。)起初我以为是某种 DNS 泄漏,浏览器正在查询一些本地 DNS。但令我大吃一惊的是,事实并非如此。浏览器正在获取由 DNS 解析器处理的域的 DNS 响应,具有私有 IP,这意味着响应必须来来自 pfSense 后面(来自 DNS 解析器)......
呵呵呵
有什么想法吗?抱歉,文字太长了...谢谢!