如何使用NetworkManager创建Linux桥接器和Open vSwitch桥接器
我的虚拟基础架构Ansible角色支持将VM连接到Linux和Open vSwitch桥,但是它们必须已经存在于KVM主机上。
这是将现有以太网设备转换为网桥的方法。如果在只有一个连接的远程计算机上执行此操作,请小心!确保您还有其他登录方式(例如控制台),或者可以添加其他界面。
导出接口和现有连接
首先,导出要转换的设备,以便我们以后可以轻松引用它(例如eth1)。
export NET_DEV="eth1"
现在,在上方列出您设备导出的当前NetworkManager连接,以便我们以后知道要禁用什么。
sudo nmcli con |egrep -w "${NET_DEV}"
这可能类似于System eth1或Wired connection 1,我们也将其导出以供以后参考。
export NM_NAME="Wired connection 1"
创建一个Linux网桥
这是使用NetworkManager创建持久性Linux桥的示例。它将使用诸如eth1(适当替换)之类的设备并将其转换为网桥。请注意,我们将专门为其指定设备名称,br0因为这是标准约定以及libvirt查找的内容。
确保已从上方将设备导出为NET_DEV和现有的NetworkManager连接名称NM_NAME,并将在下面使用它们。
sudo nmcli con add ifname br0 type bridge con-name br0
sudo nmcli con add type bridge-slave ifname "${NET_DEV}" master br0 con-name br0-slave-"${NET_DEV}"
请注意,br0您的物理接口可能具有不同的MAC地址。如果是这样,请确保您进行更新和DHCP保留(或者在网桥启动后能够找到新IP)。
sudo ip link show dev br0
sudo ip link show dev "${NET_DEV}"
配置网桥
如上所述,默认情况下,Linux网桥将通过DHCP获取地址。如果您不希望它在网络上(您可能具有另一个专用接口),请在其上禁用DHCP。
sudo nmcli con modify br0 ipv4.method disabled ipv6.method disabled
或者,如果您需要设置静态IP,也可以这样做。
sudo nmcli con modify br0 ipv4.method static ipv4.address 192.168.123.100/24
最后,默认情况下,生成树协议处于启用状态,因此如有必要,请禁用它。
sudo nmcli con modify br0 bridge.stp no
架起桥
现在,您可以简单地reboot,或停止当前界面并打开网桥(如果使用一个界面,则可以通过一个命令执行,否则将断开连接)。请注意,如果您不检查MAC地址并更新任何静态DHCP租约,一旦桥接出现,您的IP可能会更改。
sudo nmcli con down "${NM_NAME}" ; \
sudo nmcli con up br0
创建一个开放式vSwitch(OVS)桥
OVS桥接器通常用于将libvirt连接到VLAN中。
我们可以创建一个OVS桥接器,该桥接器由桥接器本身以及将所有内容连接在一起的多个端口和接口组成,包括物理设备本身(以便我们可以在网络上进行通信)以及VLAN和VM的虚拟端口。默认情况下,网桥上的物理端口将使用未标记的(本机)VLAN,但是如果需要对所有流量进行标记,则可以添加标记的接口。
这是使用NetworkManager创建持久性OVS桥的示例。它将使用诸如eth1(适当替换)之类的设备并将其转换为ovs-bridge。
安装依赖
您将需要openvswitch安装OVS NetworkManager插件。
sudo dnf install -y NetworkManager-ovs openvswitch
sudo systemctl enable --now openvswitch
sudo systemctl restart NetworkManager
创建桥梁
让我们使用这三个命令创建网桥,其端口和接口。
sudo nmcli con add type ovs-bridge conn.interface ovs-bridge con-name ovs-bridge
sudo nmcli con add type ovs-port conn.interface port-ovs-bridge master ovs-bridge con-name ovs-bridge-port
sudo nmcli con add type ovs-interface slave-type ovs-port conn.interface ovs-bridge master ovs-bridge-port con-name ovs-bridge-int
修补我们的物理界面
接下来,在网桥上创建另一个端口,并在我们的物理设备中打补丁作为以太网接口,以使实际流量可以跨网络流动。确保已从上方将设备导出为NET_DEV和现有的NetworkManager连接名称NM_NAME,并将在下面使用它们。
sudo nmcli con add type ovs-port conn.interface ovs-port-eth master ovs-bridge con-name ovs-port-eth
sudo nmcli con add type ethernet conn.interface "${NET_DEV}" master ovs-port-eth con-name ovs-port-eth-int
好的,现在您应该已经配置了一个OVS桥接器,并已通过以太网设备将其修补到本地网络,但尚未激活。
配置网桥
默认情况下,OVS桥将发送无标记的流量并ovs-bridge通过DHCP 请求IP地址。如果您不希望它在网络上(您可能有另一个专用接口),请在该接口上禁用DHCP。
sudo nmcli con modify ovs-bridge-int ipv4.method disabled ipv6.method disabled
或者,如果您需要设置静态IP,也可以这样做。
sudo nmcli con modify ovs-bridge-int ipv4.method static ipv4.address 192.168.123.100/24
架起桥
在启动网桥之前,请注意,ovs-bridge该网卡的MAC地址可能与您的物理接口不同。如果您管理DHCP静态租约,请记住这一点,并确保找到新的IP,以便在网桥启动后可以重新登录。
现在,您可以简单地reboot,或停止当前接口并启动网桥及其接口(理论上,我们只需要启动ovs-port-eth-int,但是如果您使用的是一个接口,那么让我们确定并使用一条命令即可完成此操作,否则您将断开连接,无法重新登录)。请注意,您的MAC地址可能会在此处更改,因此,如果您使用的是DHCP,则将获得新的IP,并且会话将冻结,因此请确保您可以找到新的IP,以便重新登录。
sudo nmcli con down "${NM_NAME}" ; \
sudo nmcli con up ovs-port-eth-int ; \
sudo nmcli con up ovs-bridge-int
现在,您已经可以使用Open vSwitch了!
创建OVS VLAN端口
从那里,您可能想要为特定VLAN创建一些端口组。例如,如果您的网络没有本地VLAN,则需要在OVS桥上创建VLAN接口才能进入网络。
让我们为VLAN创建一个新的端口和接口,123默认情况下它将使用DHCP来获取地址并启动它。
sudo nmcli con add type ovs-port conn.interface vlan123 master ovs-bridge ovs-port.tag 123 con-name ovs-port-vlan123
sudo nmcli con add type ovs-interface slave-type ovs-port conn.interface vlan123 master ovs-port-vlan123 con-name ovs-int-vlan123
sudo nmcli con up ovs-int-vlan123
如果需要在VLAN接口上设置静态地址,则可以通过修改接口来实现。
sudo nmcli con modify ovs-int-vlan123 ipv4.method static ipv4.address 192.168.123.100/24
查看OVS配置
显示交换机配置和使用OVS工具进行桥接。
sudo ovs-vsctl show
清理旧界面配置文件
确实不是必需的,但是可以根据需要禁用设备的当前NetworkManager配置,以使其与网桥不冲突。
sudo nmcli con modify "${NM_NAME}" ipv4.method disabled ipv6.method disabled
或者,您也可以根据需要删除旧界面的NetworkManager配置(但这不是必需的)
sudo nmcli con delete "${NM_NAME}"
至此,就已经完成了。