Qemu虛擬機器tap網路後端訪問外網的方式
阿新 • • 發佈:2022-05-05
正如https://wiki.qemu.org/Documentation/Networking所述,Qemu以-net user方式建立的網路是不支援ping的,我一般用-netdev tap,id=hn2 -device e1000,netdev=hn2建立網路,利用主機的tap0裝置和NAT實現虛擬機器訪問外網的功能,本以為host上應該能找到對應的iptable NAT規則,但是iptable -F去掉所有規則後發現VM中ping 公網地址依然是可以通的。經過調查發現是libvirt作的NAT,如下命令可以看到libvirt的default網路forward mode是NAT, default網路是libvirtd啟動後預設建立的網路。看來不顯示的建立iptable規則也能作NAT,具體程式碼可能要看kernel中bridge相關的,後續需要查證。
sudo virsh net-edit default
<network> <name>default</name> <uuid>168f6909-715c-4333-a34b-f74584d26328</uuid> <forward mode='nat'/> <bridge name='virbr0' stp='on' delay='0'/> <mac address='52:54:00:48:3f:0c'/> <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>
FYI:
https://linuxconfig.org/how-to-use-bridged-networking-with-libvirt-and-kvm
https://wiki.libvirt.org/page/Networking