Domain-Name-System

KVM 埠通過 NAT 將埠 53 轉發到訪客 - 名稱解析暫時失敗

  • November 13, 2020

我正在嘗試將埠 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 流量將從網路到達的介面,或者指定要排除的介面。

/sbin/iptables -t nat -I PREROUTING -i enp4s0 -p udp --dport 53 -j DNAT --to 192.168.122.5:53

或者

/sbin/iptables -t nat -I PREROUTING \! -i virbr0 -p udp --dport 53 -j DNAT --to 192.168.122.5:53

引用自:https://serverfault.com/questions/1042383