River008

 

Qemu虚拟机tap网络后端访问外网的方式

    正如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

posted on 2022-05-05 19:19  River008  阅读(1126)  评论(0编辑  收藏  举报

导航