如何将虚拟机 DNS 问题重定向到主机 localhost dnsmasq

如何将虚拟机 DNS 问题重定向到主机 localhost dnsmasq

我的本地网络 shcema 是这样的:

internet (WAN)
  |
router            host IP (resolv.conf)
  |                |
  +------- eth0 - br0 - tap0 - VM (resolv.conf)
  |                |
localnet          localhost (dnsmasq)
 (.home)

我的主机主要用于测试虚拟机。目标是让虚拟机只能看到本地网络,而不是从 WAN 获取 DNS,而是从dnsmasq配置为侦听主机lo接口并仅了解本地网络中的主机的 DNS 获取:pc1.home pc2.home www.home data.home printer.home...

我成功地将 dnsmasq 配置为在tcp/udp 127.0.0.1:53主机上侦听,并通过从主机 cli 获取答案来检查它:

# dig www.google.com    ... 142.251.36.68 (ANSWER 1)

# dig @127.0.0.1 www.google.com    ...    (ANSWER 0)
# dig @127.0.0.1 www.home ... 192.168.1.2 (ANSWER 1)

我以各种方式设置 ip_forwarding

# echo "1" > /proc/sys/net/ip4/conf/all/forwarding
# echo "1" > /proc/sys/net/ipv4/conf/tap0/route_localnet

然后我尝试编写 iptables 规则:

# iptables -t nat -A PREROUTING -i tap0 -p tcp --dport 53 -j DNAT --to-destination 127.0.0.1:53
# iptables -t nat -A PREROUTING -i tap0 -p udp --dport 53 -j DNAT --to-destination 127.0.0.1:53

随后检查

# iptables -v -t nat -L
 pkts bytes target  prot opt in    out  source    destination         
    0     0 DNAT    udp  --  tap0  any  anywhere  anywhere    udp dpt:domain   to:127.0.0.1:53
    0     0 DNAT    tcp  --  tap0  any  anywhere  anywhere    tcp dpt:domain   to:127.0.0.1:53

但是在运行我的虚拟 Linux 时,DNS 仍然由 中列出的路由器名称服务器应答/etc/resolv.conf

好吧,你可以建议我手动重写resolv.conf虚拟机的配置,但是当我测试许多虚拟机的安装时,每次都这样做很烦人,而且很难说在那里写什么,因为dnsmasq在本地主机上监听主机的。因此 VM 的内容resolv.conf如下

nameserver 127.0.0.1

可能会非常混乱且无用。我尝试使用 Wireshark 捕获一些数据包,但它只是显示没有发生重定向,但没有显示原因。

相关内容