连接到 WireGuard/pfSense 时 DNS 查询被拒绝

连接到 WireGuard/pfSense 时 DNS 查询被拒绝

我使用 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 解析器)......

呵呵呵

有什么想法吗?抱歉,文字太长了...谢谢!

相关内容