本文將講述一個問題:kvm guest使用libvirt xml定義如何使用virtual network?
1)nat, route ,isolated, open類型
在host中定義virtual network會創建一個虛擬的bridge,相當于一個交換機。guest只需要連接到這個交換機上就可以了。
在guest的xml中添加:
#?virsh?edit?vm ... <interface?type='network'/> <source?network='net1'/>??====>net1是已經定義好的一個虛擬網絡 </interface> ...
上述是最簡單的xml,保存后會自動添加一些必要信息,如mac,pci address, model type等信息。當然也可以手動指定。
2)user(Userspace SLIRP stack),vhost-user,Multicast tunnel, TCP tunnel,UDP unicast tunnel等類型
只能在guest中以interface來引用。如user是qemu提供的非特權用戶可以使用的類型,可以這樣引用:
??<interface?type='user'/>(mac,pci地址,model?type如果哦不指定,會自動生成)
3)bridge(use an exsiting host linux bridge)
本身存在一個linux bridge,可以定義成網絡給guest用(不會再創建bridge),也可以直接給guest用。兩種方式本質是一樣的。
?#?virsh?net-dumpxml?birdge-net <network><name>bridge-net</name><forward?mode='birdge'/><bridge?name='br0'/></network> #?virsh?edit?vm ... <interface?type='network'><source?network='bridge-net'> </interface> ...
直接給guest用( 1)中由libvirt創建的bridge也可以這樣引用 ):
<interface?type='bridge'><source?bridge='br0'/> </interface>
4)macvtap(包括bridge,vepa,private,passthrough四種), hostdev
可以定義一個network作為interface pool, 以network的形式引用,也可以直接引用。同 3),兩種方式本質是一樣的。
定義interface pool
??<network><name>direct-macvtap</name><forward?mode="bridge"><interface?dev="eth20"/><interface?dev="eth21"/><interface?dev="eth22"/><interface?dev="eth23"/><interface?dev="eth24"/></forward></network>
<network><name>hostdev-net</name><forward?mode='hostdev'?managed='yes'><driver?name='vfio'/><address?type='pci'?domain='0'?bus='4'?slot='0'?function='1'/><address?type='pci'?domain='0'?bus='4'?slot='0'?function='2'/><address?type='pci'?domain='0'?bus='4'?slot='0'?function='3'/></forward></network>
guest中直接引用
#?virsh?edit?vm ... <interface?type='direct'><source?dev='enp0s25'?mode='vepa'/> </interface> ...
#?virsh?edit?vm ...<interface?type='hostdev'?managed='yes'><source><address?type='pci'?domain='0x0000'?bus='0x00'?slot='0x19'?function='0x0'/></source></interface> ...
轉載于:https://blog.51cto.com/11527071/1843234