https://docs.openvswitch.org/en/latest/howto/vlan
https://docs.openvswitch.org/en/latest/howto/tunneling
https://docs.openvswitch.org/en/latest/howto/userspace-tunneling
https://superuser.openstack.org/articles/multiple-private-networks-with-open-vswitch-gre-tunnels-and-libvirt
https://www.sdnlab.com/5889.html
![](https://img2020.cnblogs.com/blog/564063/202108/564063-20210830102215034-1618216134.png)
准备2台虚拟机(node-153 192.168.8.153 & node-154 192.168.8.154),环境rocky 8.4,开启虚拟化
# grep -E 'svm|vmx' /proc/cpuinfo
vmx is for Intel processors
svm is for AMD processors
安装kvm
yum install -y qemu-kvm libvirt virt-install virt-viewer
systemctl enable libvirtd && systemctl start libvirtd
删除kvm默认建立的linux bridge
virsh net-destroy default
virsh net-undefine default
安装openvswitch
yum install -y openvswitch-2.12.0-1.1.el8.x86_64.rpm
systemctl enable openvswitch && systemctl start openvswitch
建立外部网桥br-ext
ovs-vsctl add-br br-ext
cat > /etc/sysconfig/network-scripts/ifcfg-br-ext <<EOF
DEVICE=br-ext
DEVICETYPE=ovs
TYPE=OVSBridge
IPADDR=192.168.8.153
NETMASK=255.255.255.0
BOOTPROTO=none
ONBOOT=yes
USERCTL=no
GATEWAY=192.168.8.1
DNS1=144.144.144.144
EOF
cat > /etc/sysconfig/network-scripts/ifcfg-enp1s0 <<EOF
DEVICE=enp1s0
DEVICETYPE=ovs
TYPE=OVSPort
OVS_BRIDGE=br-ext
ONBOOT=yes
EOF
ovs-vsctl add-port br-ext enp1s0 && systemctl restart network
# 或者手工设置
ip addr flush dev enp1s0
ip addr add 192.168.8.153/24 dev br-int
ip link set dev br-int up
ip route add default via 192.168.8.1
建立内部网桥br-int
# node-153
ovs-vsctl add-br br-int
ovs-vsctl add-port br-int gre0 -- set interface gre0 type=gre options:remote_ip=192.168.8.154
ovs-vsctl set bridge br-int stp_enable=true
# node-154
ovs-vsctl add-br br-int
ovs-vsctl add-port br-int gre0 -- set interface gre0 type=gre options:remote_ip=192.168.8.153
ovs-vsctl set bridge br-int stp_enable=true
kvm建立ovs-network网桥
cat > /tmp/ovs-network.xml <<EOF
<network>
<name>ovs-network</name>
<forward mode='bridge'/>
<bridge name='br-int'/>
<virtualport type='openvswitch'/>
<portgroup name='no-vlan' default='yes'>
</portgroup>
<portgroup name='vlan-100'>
<vlan>
<tag id='100'/>
</vlan>
</portgroup>
<portgroup name='vlan-200'>
<vlan>
<tag id='200'/>
</vlan>
</portgroup>
</network>
EOF
virsh net-define /tmp/ovs-network.xml
virsh net-autostart ovs-network
virsh net-start ovs-network
virsh net-list
Name State Autostart Persistent
------------------------------------------------
ovs-network active yes yes
建立vm
virt-install
--os-type=linux --os-variant=rhel8.4
--name=vm01 --vcpus=1 --ram=1024
--location=/tmp/Rocky-8.4-x86_64-minimal.iso
--disk path=/var/lib/libvirt/images/vm01.img,bus=virtio,size=10,cache=writeback,format=qcow2
--network=network:ovs-network,model=virtio
--extra-args "console=ttyS0,115200"
--nographics
virt-install
--os-type=linux --os-variant=rhel8.4
--name=vm01 --vcpus=1 --ram=1024
--location=/tmp/Rocky-8.4-x86_64-minimal.iso
--disk path=/var/lib/libvirt/images/vm01.img,bus=virtio,size=10,cache=writeback,format=qcow2
--network bridge=br-int,virtualport.type=openvswitch,model=virtio
--extra-args "console=ttyS0,115200"
--nographics