Open vSwitch
Open vSwitch (OVS) 是一个多层软件交换机。它旨在通过程序化扩展实现大规模网络自动化,同时仍然支持标准的管理接口和协议。 Open vSwitch 非常适合作为虚拟机环境中的虚拟交换机。
安装
安装 openvswitch 软件包。
所需服务和设置
要使用 ovs-vswitchd,启动/启用 ovs-vswitchd.service
。
ovs-vswitchd.service
也会启动 ovsdb-server.service
,后者用于在数据库中保存 OVS 配置,以便在重启后保持设置持久化。
创建桥接
# ovs-vsctl add-br mybridge
大多数命令可以通过将 add 替换为 del 来反转,例如 del-br。
打印新创建的桥接,其中一个端口的接口名为 mybridge。
# ovs-vsctl show
e4e95383-2d81-45bd-b411-d289b11405b2 Bridge mybridge Port mybridge Interface mybridge type: internal
将物理适配器添加到桥接
获取当前活动的接口和配置
$ ip addr
2: eno1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000 link/ether 52:54:00:91:11:95 brd ff:ff:ff:ff:ff:ff inet 192.168.1.10/24 brd 192.168.1.255 scope global dynamic eno1 valid_lft 82284sec preferred_lft 82284sec inet6 fe80::5054:ff:fe91:1195/64 scope link valid_lft forever preferred_lft forever
禁用任何正在运行的自动配置,任选其一
# dhcpcd -k eno1 # if dhcpcd is running # systemctl stop systemd-networkd.service # for systemd-networkd # ip addr del 192.168.1.10/24 dev eno1 # also remove the current ip configuration
将物理接口添加到 mybridge
# ovs-vsctl add-port mybridge eno1
警告: 这将导致此适配器失去连接,请确保您有其他方式可以访问您的系统。
打印当前设置
# ovs-vsctl show
e4e95383-2d81-45bd-b411-d289b11405b2 Bridge mybridge Port mybridge Interface mybridge type: internal Port eno1 Interface eno1
测试配置
# dhcpcd mybridge $ ip addr
2: eno1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel master ovs-system state UP group default qlen 1000 link/ether 52:54:00:91:11:95 brd ff:ff:ff:ff:ff:ff inet6 fe80::5054:ff:fe91:1195/64 scope link valid_lft forever preferred_lft forever 3: ovs-system: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000 link/ether 6e:a7:28:66:78:e2 brd ff:ff:ff:ff:ff:ff 4: mybridge: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN group default qlen 1000 link/ether ba:21:d0:cd:38:4f brd ff:ff:ff:ff:ff:ff inet 192.168.1.11/24 brd 192.168.1.255 scope global dynamic noprefixroute mybridge valid_lft 86372sec preferred_lft 75572sec inet6 fe80::183e:d590:9014:eeb4/64 scope link valid_lft forever preferred_lft forever
使更改在重启后持久化
Open vSwitch 将自动应用使用 ovs-commands 所做的任何更改。但是为了使其工作,我们需要使用 systemd-networkd 更改一些内容。
首先,删除 eno1 的任何旧配置,并在启动期间启动该接口。我们还将使用以下配置在 mybridge 上运行 DHCP
/etc/systemd/network/eno1.network
[Match] Name=eno1 [Link] RequiredForOnline=carrier [Network] IPv6AcceptRA=false LinkLocalAddressing=no MulticastDNS=false LLMNR=false
/etc/systemd/network/mybridge.network
[Match] Name=mybridge [Link] RequiredForOnline=routable [Network] DHCP=yes
Vlan
通过物理端口设置 trunk,使用 vlan 10 + 20 以及标记为 vlan 1 的未标记流量
# ovs-vsctl set port eno1 vlan_mode=native-untagged # ovs-vsctl set port eno1 tag=1 # tag untagged vlan 1 # ovs-vsctl set port eno1 trunks=10,20 # allow tagged vlans 10 and 20
提示: 使用 -- 作为分隔符在一个命令中执行多个操作,例如,以上命令等同于
# ovs-vsctl set port eno1 vlan_mode=native-untagged -- set port eno1 tag=1 -- set port eno1 trunks=10,20
创建一个新的 vport1,类型为 internal,用于主机系统,vlan 为 10
# ovs-vsctl add-port mybridge vport1 tag=10 -- set Interface vport1 type=internal # dhcpcd vport1 # to test it out!
虚拟端口
虚拟端口和虚拟机支持需要 ip_forward
# echo 1 > /proc/sys/net/ipv4/ip_forward
手动创建一个 tuntap 接口
# ip tuntap add mode tap vport2
为了使以上两个更改在重启后持久化
/etc/sysctl.conf
net.ipv4.ip_forward = 1
/etc/systemd/network/90-vport2.netdev
[NetDev] Name=vport2 Kind=tap
创建一个新端口并将其标记为 vlan 20
# ovs-vsctl add-port mybridge vport2 -- set port vport2 tag=20
vport2 现在可以在 libvirt 中使用。