libvirt/qemu 來賓 VM 有時需要多次嘗試進行 DNS 解析
我正在執行 libvirt/qemu,帶有 Arch 主機作業系統和 win10 來賓作業系統。有一段時間我使用預設網路配置,但我開始遇到某些域名無法解析的問題。我有一個工作 VPN,它有自己的私有 DNS。讓來賓 VM 解析這些私有 DN 變得越來越困難,有時還有其他。有時以下會暫時解決問題
virsh net-destroy default && virsh net-start default && systemctl restart libvirtd
其他時候我必須重新啟動來賓(可能還有主機作業系統)。
閱讀文件後,我將網路配置更改為此(使用
virsh net-edit default
):<network> <name>default</name> <uuid>...</uuid> <forward mode='nat'/> <bridge name='virbr0' stp='on' delay='0'/> <mac address='...'/> <dns> <forwarder addr='8.8.8.8'/> <forwarder domain='private.dn' addr='192.168.30.1'/> </dns> <ip address='192.168.122.1' netmask='255.255.255.0'> <dhcp> <range start='192.168.122.2' end='192.168.122.254'/> </dhcp> </ip> </network>
我添加的只是
<dns>
部分……其他一切都是香草自動生成的。它主要工作,但經常我必須多次送出請求才能讓它工作。我認為這是 DN 解析度,因為當我嘗試了一個簡單的方法時,
ping
我得到了一個could not find host
不起作用的結果。C:\Users\user>ping google.com Pinging google.com [74.125.136.113] with 32 bytes of data: Reply from 74.125.136.113: bytes=32 time=26ms TTL=106 C:\Users\user>ping yahoo.com Ping request could not find host yahoo.com. Please check the name and try again. C:\Users\user>ping yahoo.com Pinging yahoo.com [74.6.143.26] with 32 bytes of data: Reply from 74.6.143.26: bytes=32 time=43ms TTL=51
在此範例
google.com
中,解決了第一次嘗試,並yahoo.com
進行了兩次嘗試。其他時候,它需要 5 或 6 次嘗試才能解決。系統日誌對我來說看起來很普通……當
could not find host
錯誤發生時沒有任何記錄:user:~$ journalctl -eu libvirtd Dec 14 07:50:01 systemd[1]: Started Virtualization daemon. Dec 14 07:50:02 dnsmasq[641]: started, version 2.86 cachesize 150 Dec 14 07:50:02 dnsmasq[641]: compile time options: IPv6 GNU-getopt DBus no-UBus i18n IDN2 DHCP DHCPv6 no-Lua TFTP conntrack ipset auth cryptohash DNSSEC loop-detect inotify dumpfile Dec 14 07:50:02 dnsmasq-dhcp[641]: DHCP, IP range 192.168.122.2 -- 192.168.122.254, lease time 1h Dec 14 07:50:02 dnsmasq-dhcp[641]: DHCP, sockets bound exclusively to interface virbr0 Dec 14 07:50:02 dnsmasq[641]: using nameserver 8.8.8.8#53 Dec 14 07:50:02 dnsmasq[641]: using nameserver 192.168.30.1#53 for domain private.cp Dec 14 07:50:02 dnsmasq[641]: read /etc/hosts - 17 addresses Dec 14 07:50:02 dnsmasq[641]: read /var/lib/libvirt/dnsmasq/default.addnhosts - 0 addresses Dec 14 07:50:02 dnsmasq-dhcp[641]: read /var/lib/libvirt/dnsmasq/default.hostsfile Dec 15 08:24:52 dnsmasq-dhcp[641]: DHCPREQUEST(virbr0) 192.168.122.7 52:54:00:e0:55:a8 Dec 15 08:24:52 dnsmasq-dhcp[641]: DHCPACK(virbr0) 192.168.122.7 52:54:00:e0:55:a8 DESKTOP-3GAMEL8
有誰知道為什麼這只能間歇性地工作?或者至少我還能在哪裡尋找更多相關的調試/日誌資訊?TIA
libvirt
當您已經在執行 DNS 伺服器 ( ) 時,為什麼要配置為使用 8.8.8.8 作為轉發器dnsmasq
?相反,將 libvirt 配置為僅使用您的本地 DNS 伺服器,然後將您的 DNS 伺服器配置為使用 8.8.8.8 作為轉發器,以處理它無法自行解析的任何請求(如您的
private.dn
域)並且尚未從先前轉發的請求中記憶體。根據日誌條目dnsmasq[641]: using nameserver 8.8.8.8#53
,dnsmasq 已經設置為執行此操作,因此您需要做的就是<forwarder addr='8.8.8.8'/>
從<network>
定義中刪除 。順便說一句,您的 libvirt 網路定義說您的私有域是
private.dn
,而 dnsmasq 說是private.cp
- 我不確定這是配置錯誤、預期配置還是在為這個問題匿名您的私有域時的錯誤。您可能正在觸發某種競爭條件。我不確定 libvirt 如何處理一個
<dns>...</dns>
部分中的多個轉發器條目,它是否按列出的順序依次嘗試它們,或者它是否同時將請求發送到兩個伺服器並使用第一個返回的結果。無論這樣做是否解決了問題,它應該會導致更快的 DNS 解析,因為 dnsmasq 將記憶體它必須轉發到 8.8.8.8 的任何 DNS 請求的結果,因此重複請求的往返延遲會更短。