nmcli + Open vSwitch で、左図のようなデフォルトの状態から、右図の目標構成にあるようなブリッジを作成する。
前提条件
OS は Rocky linux 9.2 で検証する。
初期状態の NIC は、次のように 静的 IP アドレスが割り当てられていることを想定している。
$ nmcli con show
NAME UUID TYPE DEVICE
enp86s0 f9a60ac6-9ce6-4fc1-8763-f56d5a668995 ethernet enp86s0
$ ip a
2: enp86s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether 48:21:0b:57:b2:52 brd ff:ff:ff:ff:ff:ff
inet 172.16.0.11/24 brd 172.16.0.255 scope global noprefixroute enp86s0
valid_lft forever preferred_lft forever
Open vSwitch のインストール
Open vSwitch をインストールする:
$ sudo dnf list centos-release-openstack-*
Last metadata expiration check: 0:00:53 ago on Thu 28 Dec 2023 08:13:22 AM CET.
Available Packages
centos-release-openstack-antelope.noarch 1-3.el9 extras
centos-release-openstack-bobcat.noarch 1-1.el9 extras
centos-release-openstack-caracal.noarch 1-1.el9 extras
centos-release-openstack-yoga.noarch 1-3.el9 extras
centos-release-openstack-zed.noarch 1-3.el9 extras
$ sudo dnf install -y centos-release-openstack-caracal
$ sudo dnf install -y openvswitch
NetworkManager plugin をインストールする。
これにより Open vSwitch をnmcli
から制御できるようになる。
$ sudo dnf install -y NetworkManager-ovs
$ sudo systemctl restart NetworkManager
Open vSwitch を有効化する:
$ sudo systemctl enable openvswitch
Open vSwitch デーモンを起動する:
$ sudo systemctl start ovs-vswitchd
Open vSwitch クライアントが動くことを確認する:
$ sudo ovs-vsctl show
c2328d89-6287-45cd-9caf-d65b7a3f3a5d
ovs_version: "3.2.2"
Open vSwitch のセットアップ
ブリッジの作成
ブリッジ ovsbr0
を作成する:
$ sudo nmcli con add type ovs-bridge con-name ovsbr0 conn.interface ovsbr0
Interface 側の準備
ブリッジに port を作成し、IP interface を接続する:
$ sudo nmcli con add type ovs-port con-name port0 conn.interface port0 master ovsbr0
$ sudo nmcli con add type ovs-interface con-name br0 slave-type ovs-port conn.interface br0 master port0 \
ipv4.method manual \
ipv4.address 172.16.0.11/24 \
ipv4.gateway 172.16.0.1 \
ipv4.dns 172.16.0.1
NIC 側の準備
ブリッジに port を作成し、NIC を接続する:
$ sudo nmcli con add type ovs-port con-name port-enp86s0 conn.interface port-enp86s0 master ovsbr0
$ sudo nmcli con mod enp86s0 conn.interface enp86s0 master port-enp86s0
$ sudo nmcli con up enp86s0
確認
最終的な ovs-vsctl show
の実行結果は次のようになる:
$ sudo ovs-vsctl show
c2328d89-6287-45cd-9caf-d65b7a3f3a5d
Bridge ovsbr0
Port port-enp86s
Interface enp86s0
type: system
Port port0
Interface br0
type: internal
ovs_version: "3.2.2"
nmcli con show
の実行結果は次のようになる:
$ nmcli con show
NAME UUID TYPE DEVICE
...
br0 f7c92f54-b7f4-4cb6-b6ff-65b0e4e7d79c ovs-interface br0
port0 6b61101a-96fd-46b5-9799-0e2bf9f050bb ovs-port port0
ovsbr0 d10a23f2-8bfc-41c7-b1e8-dc7ed993b1ca ovs-bridge ovsbr0
port-enp86s 3a2f4ca0-1706-4149-844d-b48e22b6c14e ovs-port port-enp86s
enp86s0 5a6d8b87-f9cd-446d-a241-e61fa7368ee5 ethernet enp86s0
ip a
の実行結果は次のようになる:
$ ip a
...
2: enp86s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq master ovs-system state UP group default qlen 1000
link/ether 48:21:0b:5d:7b:e7 brd ff:ff:ff:ff:ff:ff
...
4: ovs-system: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000
link/ether 2e:33:88:47:b6:10 brd ff:ff:ff:ff:ff:ff
5: br0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN group default qlen 1000
link/ether 0a:bb:84:d8:31:39 brd ff:ff:ff:ff:ff:ff
inet 172.16.0.11/24 brd 172.16.0.255 scope global noprefixroute br0
valid_lft forever preferred_lft forever
inet6 fe80::9186:a31:beca:b92f/64 scope link noprefixroute
valid_lft forever preferred_lft forever
参考資料