QEMU/Libvirt xml/virt-install: Three common ways(virbr0/macvtap/bridge) to add the netdev for the vm

方法一:借助于libvirt自带的virbr0。
特征:采用NAT方式,让虚拟机拥有内部IP地址。
- 前提:在host上启动‘default’网络设备。
如果已经安装了libvirt,会默认在系统中创建一个名为virbr0的bridge以及一个名为default的网络设备。
# brctl show
bridge name    bridge id        STP enabled    interfaces
virbr0        8000.5254007dbaf0    yes        virbr0-nic
# virsh net-list --all
 Name                 State      Autostart     Persistent
----------------------------------------------------------
 default              inactive   no            yes
# virsh net-start default
设置开机即启动default:
# virsh net-autostart default

- 如何配置?
对于使用qemu命令行来安装虚拟机的方式,参数定义为:
qemu-system-x86_64 -m 2048 -enable-kvm \
... \
-netdev bridge,br=virbr0,id=virbr0-net \
-device virtio-net,netdev=virbr0-net,id=virnet \
...
对于使用libvirt xml来启动虚拟机的方式,参数定义为:
    <interface type='network'>
      <source network='default'/>
      <model type='virtio'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
    </interface>
注:虚拟机的mac地址:<mac address='...'/>可以不用定义,会自动生成。
对于利用virt-manager来安装虚拟机的方式,默认选用此种NAT连接方式。
对于利用virt-install来安装虚拟机的方式,参数定义为:
virt-install --name virtbr0-start -v --location http://.../DVD1/ \
--extra-args 'console=ttyS0,115200n8' \
--memory 2048 --vcpus 2 \
--disk path=/opt/virbr0-net.qcow2,size=30,format=qcow2 \
--network network=default --graphics none \


方法二:通过macvtap绑定已有网卡设备。
注:如果想为虚拟机网卡动态分配IP地址的话,需要保证有DHCP server; 否则只能手动的为虚拟机的网卡分配可用的指定IP地址/网关地址/服务器地址/服务器domain。
特征:host与guest无法互相网络访问,虚拟机拥有独立的网络IP。
-前提:在host上创建macvtap netdev(注:只有用qemu command方式配置时需要这一步,libvirt会自动完成此步)。
# ip link add link eth0 name macvtap-test type macvtap model bridge
# ip link set macvtap-test up
Run `ip link show macvtap-test` 去查看刚刚创建的这个设备:
71: macvtap-test@eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 500
    link/ether 0e:83:9f:cb:07:84 brd ff:ff:ff:ff:ff:ff
    inet6 fe80::c83:9fff:fecb:784/64 scope link
    valid_lft forever preferred_lft forever
并且可以查看到该设备对应了/dev/tap71 (qemu命令行中会用到)
# ls /sys/devices/virtual/net/macvtap-test/macvtap/tap71/

-如何配置?
对于qemu command line的方式:
qemu-system-x86_64 -m 2048 -enable-kvm \
-netdev tap,id=macvtap-test,fd=3 3<>/dev/tap71 \
-device virtio-net,netdev=macvtap-test,id=net0,mac=0e:83:9f:cb:07:84 \
...
对于libvirt xml的方式,参数定义为:
    <interface type='direct'>
      <source dev='eth0' mode='bridge'/>
      <target dev='macvtap-test'/>
      <model type='virtio'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>
    </interface>
对于virt-install的方式:
virt-install ...\
--network type=direct,source=eth0,source_mode=bridge \
...


方法三:桥接方式,在host上创建新的bridge。
特征:虚拟机拥有网络中独立的IP地址。
-前提:创建bridge。
# ip link set dev eth0 promisc on //将已有网卡eth0设置为混杂模式,以便能够识别并转发外界与guest互相通信时的包。
# ip link add name br123 type bridge //创建类型为bridge的网桥br123
# ip link set dev eth0 master br123 //将已有网卡eth0绑定到网桥br123上

-如何配置?
对于qemu command line方式:
qemu-system-x86_64 -m 2048 -enable-kvm \
-netdev bridge,br=br123,id=br-new \
-device virtio-net,netdev=br-new,id=net0 \
...
对于libvirt xml的方式:
    <interface type='bridge'>
      <source bridge='br123'/>
      <model type='virtio'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x0'/>
    </interface>
对于virt-install的方式:
virt-install ...\
--network bridge=br123 \
...

参考:
https://wiki.archlinux.org/index.php/Network_bridge

猜你喜欢

转载自blog.csdn.net/Shirleylinyuer/article/details/79390388
今日推荐