🏃

Debian11 で Open vSwitch

2023/02/18に公開

環境について

下記のDebian11の環境で、Open vSwitch を設定してみます。

# uname -a
Linux web1 5.10.0-21-amd64 #1 SMP Debian 5.10.162-1 (2023-01-21) x86_64 GNU/Linux
# cat /etc/os-release
PRETTY_NAME="Debian GNU/Linux 11 (bullseye)"
NAME="Debian GNU/Linux"
VERSION_ID="11"
VERSION="11 (bullseye)"
VERSION_CODENAME=bullseye
ID=debian
HOME_URL="https://www.debian.org/"
SUPPORT_URL="https://www.debian.org/support"
BUG_REPORT_URL="https://bugs.debian.org/"

インストールコマンド

パッケージを利用して、apt 一発でインストールします。

# apt install --no-install-recommends openvswitch-switch

ovs-vsctl show コマンドを実行して、エラーにならないことを確認します。

# ovs-vsctl show
537967ba-2d48-46f4-9ab8-bb3116153289
    ovs_version: "2.15.0"

仮想ブリッジの作成

OVSの仮想ブリッジを作成します。

# ovs-vsctl add-br ovsbr0
# ovs-vsctl show
537967ba-2d48-46f4-9ab8-bb3116153289
    Bridge ovsbr0
        Port ovsbr0
            Interface ovsbr0
                type: internal
    ovs_version: "2.15.0"
# ip link show ovsbr0
5: ovsbr0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1000
    link/ether 6e:2c:2d:f0:08:4b brd ff:ff:ff:ff:ff:ff

Linuxの標準の仮想ブリッジと同様、下記でリンクアップさせます。

# ip link set ovsbr0 up
# ip link show ovsbr0
5: ovsbr0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
    link/ether 6e:2c:2d:f0:08:4b brd ff:ff:ff:ff:ff:ff

IPアドレスの割り当て

ip コマンドで IP アドレスを割り当てます。

# ip address add 10.2.0.201/24 brd + dev ovsbr0
# ip addr show ovsbr0
5: ovsbr0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN group default qlen 1000
    link/ether 6e:2c:2d:f0:08:4b brd ff:ff:ff:ff:ff:ff
    inet 10.2.0.201/24 brd 10.2.0.255 scope global ovsbr0
       valid_lft forever preferred_lft forever
    inet6 fe80::6c2c:2dff:fef0:84b/64 scope link
       valid_lft forever preferred_lft forever

ルーティング設定も、同様に ip コマンドで追加します。

# ip route add 10.2.0.0/16 dev ovsbr0
# ip route show 10.2.0.0/16
10.2.0.0/16 dev ovsbr0 scope link

tap デバイスの追加

ip コマンドで tap デバイスを作成します。

# ip tuntap add dev tap0 mode tap
# ip link show tap0
6: tap0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1000
    link/ether ca:b3:cb:fb:1d:92 brd ff:ff:ff:ff:ff:ff

作成した tap デバイスを、仮想ブリッジに追加します。

# ovs-vsctl add-port ovsbr0 tap0
# ovs-vsctl show
537967ba-2d48-46f4-9ab8-bb3116153289
    Bridge ovsbr0
        Port ovsbr0
            Interface ovsbr0
                type: internal
        Port tap0
            Interface tap0
    ovs_version: "2.15.0"

tap デバイスをリンクアップさせます。

# ip link set tap0 up
# ip link show tap0
6: tap0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast master ovs-system state DOWN mode DEFAULT group default qlen 1000
    link/ether ca:b3:cb:fb:1d:92 brd ff:ff:ff:ff:ff:ff

VLAN設定

既存のポートへVLAN設定追加

追加した tap0 ポートに、VLANの設定を追加することができます。

# ovs-vsctl set port tap0 tag=9
# ovs-vsctl show
537967ba-2d48-46f4-9ab8-bb3116153289
    Bridge ovsbr0
        Port ovsbr0
            Interface ovsbr0
                type: internal
        Port tap0
            tag: 9
            Interface tap0
    ovs_version: "2.15.0"

ポート新規作成時に設定

tapデバイスを追加するときに、最初からVLANの設定を施すこともできます。

# ip tuntap add dev tap1 mode tap
# ovs-vsctl add-port ovsbr0 tap1 tag=9
# ovs-vsctl show
537967ba-2d48-46f4-9ab8-bb3116153289
    Bridge ovsbr0
        Port ovsbr0
            Interface ovsbr0
                type: internal
        Port tap0
            tag: 9
            Interface tap0
        Port tap1
            tag: 9
            Interface tap1
    ovs_version: "2.15.0"

追加したtapデバイスをリンクアップさせます。

# ip link set tap1 up
# ip link show tap1
7: tap1: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast master ovs-system state DOWN mode DEFAULT group default qlen 1000
    link/ether 92:11:56:24:be:70 brd ff:ff:ff:ff:ff:ff

OSリブート後の状態

ここまでの設定を終えた状態で、OSをリブートするとどのような状態になっているか確認してみます。

仮想ブリッジのリンクはダウンしています。また、割り当てたIPアドレスも無くなっています。

$ ip link show ovsbr0
5: ovsbr0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1000
    link/ether 6e:2c:2d:f0:08:4b brd ff:ff:ff:ff:ff:ff

$ ip addr show ovsbr0
5: ovsbr0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000
    link/ether 6e:2c:2d:f0:08:4b brd ff:ff:ff:ff:ff:ff

仮想ブリッジにtapデバイスを割り当てた情報は残っていますが、tap デバイス自体が無くなっています。

# ovs-vsctl show
537967ba-2d48-46f4-9ab8-bb3116153289
    Bridge ovsbr0
        Port ovsbr0
            Interface ovsbr0
                type: internal
        Port tap0
            tag: 9
            Interface tap0
                error: "could not open network device tap0 (No such device)"
        Port tap1
            tag: 9
            Interface tap1
                error: "could not open network device tap1 (No such device)"
    ovs_version: "2.15.0"

後片付け

仮想ブリッジへの tap デバイスの割り当てを解除します。

# ovs-vsctl del-port ovsbr0 tap1
# ovs-vsctl del-port ovsbr0 tap0
# ovs-vsctl show
537967ba-2d48-46f4-9ab8-bb3116153289
    Bridge ovsbr0
        Port ovsbr0
            Interface ovsbr0
                type: internal
    ovs_version: "2.15.0"

仮想ブリッジを削除します。

# ovs-vsctl del-br ovsbr0
# ovs-vsctl show
537967ba-2d48-46f4-9ab8-bb3116153289
    ovs_version: "2.15.0"

永続化

仮想ブリッジの永続化は、 /etc/network/interfaces に記載します。

# cp -pi /etc/network/interfaces /etc/network/interfaces.000
# vi /etc/network/interfaces
# grep -E -v '^$|^#' /etc/network/interfaces
source /etc/network/interfaces.d/*
auto lo
iface lo inet loopback
auto ovsbr0
allow-ovs ovsbr0
iface ovsbr0 inet static
        ovs_type OVSBridge
        ovs_ports ens4
        address 10.2.0.242/24
        gateway 10.2.0.1
        dns-nameservers 192.168.11.249
allow-ovsbr0 ens4
iface ens4 inet manual
        ovs_bridge ovsbr0
        ovs_type OVSPort

設定ファイルを記載したら、ネットワークを再起動します。
(ネットワークの設定を変更するので、コンソールアクセスの確保を強くお勧めします。)

# systemctl restart networking
GitHubで編集を提案

Discussion