我正在尝试将端口 53 从主机转发到 virtbr0 接口(使用 NAT)上的一个 KVM 虚拟机来宾。
来宾 VM 将运行自定义的 DNS 服务器。但是,端口转发端口 53 后,DNS 将无法在 guest 中解析。我只是不断收到错误Temporary failure in name resolution
如果我从主机中删除我的 iptables 规则,DNS 会在来宾 VM 中再次解析。需要做什么才能让 DNS 在来宾中工作,同时允许端口 53 从主机转发到来宾?
我在钩子脚本中使用的 IP 表规则:
/sbin/iptables -I FORWARD -o virbr0 -d 192.168.122.5 -j ACCEPT
/sbin/iptables -t nat -I PREROUTING -p tcp --dport 53 -j DNAT --to 192.168.122.5:53
/sbin/iptables -t nat -I PREROUTING -p udp --dport 53 -j DNAT --to 192.168.122.5:53
有人知道吗?以这种相同方式转发的其他端口似乎按预期工作。DNS不会,我不知道为什么。我在我的家庭网络路由器上转发了端口 53,我没有这个问题。也许这是一个KVM错误?我正在使用最新版本的 qemu 和 kvm 运行 CentOS 8。
你的 DNAT 规则太笼统了。他们尝试将所有DNS 流量转发到您的 VM,而不仅仅是应该适用于来自外部的 DNS 流量。因此,当您的访客 DNS 服务器发送自己的 DNS 查询时,它们会被重定向回自身。
要解决此问题,还要指定传入 DNS 流量将从网络到达的接口,或者指定要排除的接口。
或者