pfSense 主机 DNS 解析器在客户虚拟机(Ubuntu 或 NixOS)中不起作用

pfSense 主机 DNS 解析器在客户虚拟机(Ubuntu 或 NixOS)中不起作用

有人建议我将其从 servervault 移至超级用户,希望这适合此处。

我是一名业余爱好者/修补匠,使用 bhyve(在物理机上运行的 pfSense 中)启动 Linux VM(尝试使用 NixOS 和 Ubuntu Server)。我按照此主题我想我可能遇到了与链接评论相同的问题——具体来说,VM 启动并运行,但我的本地 DNS 解析(未绑定,在 pfSense 主机上运行)不起作用。禁用 pfblockerng 似乎不会改变任何东西。防火墙已禁用,规则已刷新。

根据该线程,我已经设置了一个 TAP 接口、它与 LAN 之间的桥梁以及每个接口上的防火墙规则以允许所有流量(目前)。

从虚拟机中,我可以:

  • 通过 DHCP 获取 IP 地址(在 LAN 子网中)
  • 通过 IP 地址 ping 内部和外部主机,包括主机 pfSense 机器192.168.0.2
  • 使用 netcat 向内部和外部主机发送和接收 TCP 和 UDP 数据
  • 使用解析 DNS外部的解析器(例如host n8henrie.com 8.8.8.81.1.1.1或其他)

我在 pfSense 上运行了 unbound,它运行良好,已经运行了一年多,已设置为在所有接口上运行。使用 tcpdump,我可以未绑定的虚拟机正在以正确的响应响应来自虚拟机的 DNS 请求,但由于某种原因,这些请求似乎没有到达。我录制了一个 pcap 文件(来自 ubuntu 客户机)来检查这些 DNS 响应,看看我是否能找出数据包到达但不起作用的原因。

我没有看到任何相关的被阻止的流量/var/log/filter.log,所以我认为防火墙规则正在发挥作用。

watch host -4 -W1 n8henrie.com 192.168.0.2在虚拟机中运行,它只显示;; connection timed out; no servers could be reached。同时,我tcpdump -i tap0 -v host 192.168.0.202 and udp在 pfSense 上运行,我看到了域的适当解析(按预期随时间重复):

[root@pfSense ~]# tcpdump -i tap0 -v host 192.168.0.202 and udp
tcpdump: listening on tap0, link-type EN10MB (Ethernet), capture size 262144 bytes
11:25:34.981350 IP (tos 0x0, ttl 64, id 1081, offset 0, flags [none], proto UDP (17), length 58)
    192.168.0.202.45334 > pfSense.home.arpa.domain: 14697+ A? n8henrie.com. (30)
11:25:34.994974 IP (tos 0x0, ttl 64, id 27251, offset 0, flags [none], proto UDP (17), length 90)
    pfSense.home.arpa.domain > 192.168.0.202.45334: 14697 2/0/0 n8henrie.com. A 104.21.37.209, n8henrie.com. A 172.67.213.115 (62)
11:25:35.814435 IP (tos 0x0, ttl 64, id 50026, offset 0, flags [none], proto UDP (17), length 58)

我甚至可以看到正在运行的 tcpdump客人显示响应已到达...

root@ubuntu-server:/# tcpdump -vv -i enp0s2 host 192.168.0.2 and udp
11:46:49.569313 IP (tos 0x0, ttl 64, id 34767, offset 0, flags [none], proto UDP (17), length 58)
    192.168.0.202.44462 > 192.168.0.2.domain: [udp sum ok] 59526+ A? n8henrie.com. (30)
11:46:49.576273 IP (tos 0x0, ttl 64, id 30262, offset 0, flags [none], proto UDP (17), length 90)
    192.168.0.2.domain > 192.168.0.202.44462: [bad udp cksum 0x8274 -> 0x871c!] 59526 q: A? n8henrie.com. 2/0/0 n8henrie.com. A 104.21.37.209, n8henrie.com. A 172.67.213.115 (62)

因此,如果可以看到 DNS 响应在客户端,为什么它们不工作?

这是resolv.conf来自 NixOS 客户的信息,如果有帮助的话,我也可以发布 ubuntu:

# cat /etc/resolv.conf
domain home.arpa
nameserver 192.168.0.2
options edns0

来自主持人:

[root@pfSense /]# ifconfig tap0
tap0: flags=8943<UP,BROADCAST,RUNNING,PROMISC,SIMPLEX,MULTICAST> metric 0 mtu 1500
        description: OPT1
        options=80000<LINKSTATE>
        ether 58:9c:fc:10:88:32
        groups: tap
        media: Ethernet autoselect
        status: active
        nd6 options=21<PERFORMNUD,AUTO_LINKLOCAL>
        Opened by PID 76444
[root@pfSense /]# ifconfig bridge0
bridge0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
        ether 02:33:2d:65:15:00
        id 00:00:00:00:00:00 priority 32768 hellotime 2 fwddelay 15
        maxage 20 holdcnt 6 proto rstp maxaddr 2000 timeout 1200
        root id 00:00:00:00:00:00 priority 32768 ifcost 0 port 0
        member: tap0 flags=143<LEARNING,DISCOVER,AUTOEDGE,AUTOPTP>
                ifmaxaddr 0 port 10 priority 128 path cost 2000000
        member: igb1 flags=143<LEARNING,DISCOVER,AUTOEDGE,AUTOPTP>
                ifmaxaddr 0 port 2 priority 128 path cost 2000000
        groups: bridge
        nd6 options=1<PERFORMNUD>

我尝试过的其他注意事项/事项:

  • 如上所述,防火墙已禁用
  • 设置rp_filter为 0 不会改变任何内容
  • ubuntu-22.04.1-live-server-amd64.iso和上的行为相同nixos-minimal-22.11.1705.b83e7f5a04a-x86_64-linux.iso
  • 在客户端的 tcpdump 末尾我看到例如X packets captured, X packets received by filter, 0 packets dropped by kernel,所以我猜它们没有被丢弃。

在此先感谢您的任何建议!

答案1

解决问题的关键是注意bad udp cksumVM 客户机的 tcpdump 输出。搜索后,我找到了几篇指出该问题的帖子,该问题是由于启用了硬件校验和卸载:

在 pfSense 网络界面中禁用此设置(System-> Advanced-> Networking,选中以禁用Hardware Checksum Offloading),然后重新启动,之后 pfSense 主机的 DNS 即可正常工作。

我在https://n8henrie.com/2023/03/running-nixos-and-ubuntu-vms-on-pfsense-via-bhyve/

相关内容