我在 Hyper-V 上有 2 台虚拟机:
- 普富思
- Ubuntu 服务器 22.04
pfSense VM 连接到 2 个虚拟交换机 - 外部 WAN 和专用 LAN,后者充当其余 VM 的内部交换机。
我的 ISP 路由器的 IP 范围是192.168.2.x/24
,pfSense WAN IP 是192.168.2.25
。
然后,我将 pfSense 中的 LAN 设置为 DHCP,IP 范围为172.25.100.x/24
。
然后我将 Ubuntu 服务器连接到这个 LAN 交换机,它获得了 IP172.25.100.2
似乎可以访问互联网,因为我可以 ping 到其他网站的 IP,但是当我尝试 ping 他们的域名时,我得到以下信息:Temporary failure in name resolution
为什么?DNS解析问题发生在哪里?在这个设置的哪一部分?
答案1
第一步是检查哪个Ubuntu 主机尝试使用的服务器 – 查看文件
/etc/resolv.conf
,如果该文件仅显示“127.0.0.53”(这是在 Ubuntu 上运行的“systemd-resolved”DNS 缓存),则检查命令resolvectl
。确保服务器地址有意义。如果 Ubuntu 使用 DHCP,那么它将使用 pfSense DHCP 服务器(以及可能的 IPv6 路由器通告)所通告的任何 DNS 服务器。
如果 pfSense 宣传自己,则其“DNS 解析器”服务 (Unbound) 或“DNS 转发器”服务 (Dnsmasq) 必须正在运行 -查看文档。
为了使“DNS 转发器”服务(Dnsmasq)正常工作,必须配置一个有效的“上游”DNS 服务器来转发所有请求 - 据我所知,这是在全局 pfSense 设置中完成的。
“DNS 解析器”服务(Unbound)不需要上游 DNS 服务器,因为它可以自行进行递归查找,但如果它确实配置了一些上游,那么它们必须有效。
无论哪种情况,pfSense防火墙规则必须允许来自“LAN”网络向指定服务器发出的 DNS 请求 - 也就是说,必须允许 TCP 和 UDP 的 dst.port 53。
(“pf”防火墙是有状态的,因此将自动允许回复“LAN”。)
不要使用“ping”来测试 DNS – 使用实际的 DNS 客户端,例如
host
或dig
,手动指定要测试的 DNS 服务器的 IP 地址:$ dig google.com @172.25.100.1 $ host google.com 172.25.100.1