我已重建 QEMU 以支持 VDE。对于初学者来说,VDE 将虚拟交换机程序 (vde_switch) 附加到 TAP 设备,从而允许多个启用 VDE 的程序使用单个 TAP 设备。
我的最终目标是能够通过主机名(例如“test1.qemu”,“machineb.qemu”等)从我的主机解析我的虚拟机 - 因为我在 TAP 接口上通过 dnsmasq 使用 DHCP,这将在许多情况下简化我的配置。
实际上,这可能是因为没有完全理解名称解析的工作原理,所以我希望从中学到一些东西=)
首先,我的 dnsmasq 配置文件:
user=nobody
interface=tap0
except-interface=lo
listen-address=192.168.1.1
#Assign IP's 192.168.1.2-192.168.1.253 for 8 hrs
dhcp-range=192.168.1.2,192.168.1.253,255.255.255.0,192.168.1.255,8h
pid-file=/var/run/dnsmasq_tap0.pid
dhcp-leasefile=/var/lib/misc/dnsmasq.vde.leases
domain=qemu
server=/qemu/
#Only really run on tap0, needed so there is no confliction with
#NetworkManager's dnsmasq
bind-interfaces
dhcp-authoritative
dhcp-no-override
strict-order
如您所见,我已将 dnsmasq 配置为响应“*.qemu”名称。我可以正确 ping 192.168.1.1,但就目前情况而言,“ping qemu”不起作用。我认为这是因为我的主机不知道如何解析“qemu”,所以我将其添加到 /etc/hosts 文件中。不过,我不确定这是否是正确的方法。当然,在将条目添加到 /etc/hosts 后,qemu 可以解析,但 i386.qemu(我的一个 VM)不能。
我想一个好的起点是:我如何告诉我的机器将所有 *.qemu 请求转发到在 192.168.1.1(本地接口 tap0)上运行的 dnsmasq?
此外,如果它有帮助的话,这是我的 tap0 的 /etc/network/interfaces 条目:
auto tap0
iface tap0 inet static
address 192.168.1.1
netmask 255.255.255.0
vde2-switch -
pre-up /sbin/sysctl net.ipv4.ip_forward=1
pre-up /sbin/iptables -t nat -A POSTROUTING -o wlan0 -j MASQUERADE
up /usr/sbin/dnsmasq -C /etc/dnsmasq.d/vde-network --pid-file=/var/run/dnsmasq_tap0.pid --bind-interfaces
post-down /bin/bash -c "kill -9 $(cat /var/run/dnsmasq_tap0.pid)"
post-down /sbin/sysctl net.ipv4.ip_forward=0
post-down /sbin/iptables -t nat -D POSTROUTING -o wlan0 -j MASQUERADE
答案1
所以,我找到了答案,这真是让人感到很尴尬。
我有一个名为的文件/etc/NetworkManager/dnsmasq.d/qemu
,其中包含我的 qemu dnsmasq 实例的错误 DNS IP(192.168.100.1 而不是 192.168.1.1)。因此,我认为发生的事情是,当我查询时qemu
,netmask 的默认 NetworkManager 实例尝试将查询传递给 192.168.100.1,但由于显而易见的原因,它没有起作用。
一旦我在配置文件中将地址更改为 192.168.1.1 并重新启动 NetworkManager(以及其 dnamasq 实例),一切都会顺利运行!/etc/hosts
正如我所想的那样,该条目不是必需的。
现在我只需要弄清楚如何将我的 VM 主机的主机名解析为我的 VM 内的 LAN 地址,而不是返回 127.0.1.1,因为从我的 VM 的角度来看这是不正确的。