LinuxのnmcliコマンドによるBonding、VLAN、Bridge Interfaceの設定方法をまとめました。
KVMやLXCなどで仮想マシンやコンテナを構築する前段階として、ホストOS内で構成されるNWをきちんと理解し、自分のイメージした通りに構築できるようにすることが目的です。
1.構成
1-1.全体構成
構成図上に(1)~(10)までの番号を割り振りました。
この項番ごとにnmcliコマンドを投入した後の確認方法までを解説していきたいと思います。
また、補足としてbrctlコマンドについての解説も行いたいと思います。
Linuxで「Bridge」や「Bridgeインターフェース」と言った場合、それは「仮想スイッチ」*1を意味します。
しかし、本当にスイッチであるなら
といったことが確認できるハズです。
このため、この辺りの確認方法も併せて解説します。
1-2.全体の流れ ~概要~
- 物理+Bridge:(1)(2)
- 物理+Bonding:(3)(4)(5)
- Bonding+Bridge:(6)(7)
- Bonding+VLAN+Bridge:(8)(9)(10)
1-3.全体の流れ ~コマンドのみ~
以下のコマンドを投入していきます。
やりたいことが既に決まっている方は、構成図とコマンドの内容を見るだけでもよいと思います。
1.物理+Bridge (1) nmcli connection add type bridge autoconnect yes con-name br1 ifname br1 nmcli connection modify br1 bridge.stp no nmcli connection modify br1 ipv4.method disabled ipv6.method ignore nmcli connection up br1 nmcli con show brctl show (2) nmcli connection add type bridge-slave ifname ens36 master br1 nmcli con show brctl show 2.物理+Bonding (3) nmcli connection add type bond con-name bond0 ifname bond0 mode balance-xor nmcli connection mod bond0 ipv4.method disabled ipv6.method ignore nmcli con show (4) nmcli connection add type bond-slave autoconnect yes ifname ens37 master bond0 nmcli con show (5) nmcli connection add type bond-slave autoconnect yes ifname ens38 master bond0 nmcli con show 3.Bonding+Bridge (6) nmcli connection add type bridge autoconnect yes con-name br0 ifname br0 nmcli connection modify br0 bridge.stp no nmcli connection modify br0 ipv4.method disabled ipv6.method ignore nmcli connection up br0 nmcli con show brctl show (7) nmcli connection modify bond0 connection.master br0 connection.slave-type bridge nmcli con show brctl show 4.Bonding+VLAN+Bridge (8) nmcli connection add type bridge autoconnect yes con-name br301 ifname br301 nmcli connection modify br301 bridge.stp no nmcli connection modify br301 ipv4.method disabled ipv6.method ignore nmcli connection up br301 nmcli con show brctl show (9) nmcli connection add type vlan autoconnect yes con-name bond0.301 ifname bond0.301 dev bond0 id 301 nmcli con show brctl show (10) nmcli connection modify bond0.301 connection.master br301 connection.slave-type bridge nmcli connection up bond0.301 nmcli con show brctl show
2.物理+Bridge
物理インターフェースとBridgeインターフェースを1対1でアサインします。
(1)Bridgeインターフェースbr1の作成
(2)ens36をbr1にアサイン
(1)Bridgeインターフェースbr1の作成
投入コマンド nmcli connection add type bridge autoconnect yes con-name br1 ifname br1 nmcli connection modify br1 bridge.stp no nmcli connection modify br1 ipv4.method disabled ipv6.method ignore nmcli connection up br1 nmcli con show brctl show 出力例 [root@c752 ~]# nmcli connection add type bridge autoconnect yes con-name br1 ifname br1 Connection 'br1' (431ecf74-7476-4009-b13c-d6bb9b286697) successfully added. [root@c752 ~]# nmcli connection modify br1 bridge.stp no [root@c752 ~]# nmcli connection modify br1 ipv4.method disabled ipv6.method ignore [root@c752 ~]# nmcli connection up br1 Connection successfully activated (master waiting for slaves) (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/13) [root@c752 ~]# nmcli con show NAME UUID TYPE DEVICE br1 431ecf74-7476-4009-b13c-d6bb9b286697 bridge br1 ens33 004afe6f-a987-4467-a6e7-8d5d04ec3a33 ethernet ens33 virbr0 23ade1e4-3822-4bc9-83fd-3504ad9b5efe bridge virbr0 [root@c752 ~]# brctl show bridge name bridge id STP enabled interfaces br1 8000.000000000000 no virbr0 8000.525400701951 yes virbr0-nic [root@c752 ~]#
br1は作成されましたが、物理インターフェースがbr1にアサインされていない状態です。
この状態だと、仮想マシンのトラフィックを外部のスイッチへ流すことができません。
(2)ens36をbr1にアサイン
投入コマンド nmcli connection add type bridge-slave ifname ens36 master br1 nmcli con show brctl show 出力例 [root@c752 ~]# nmcli connection add type bridge-slave ifname ens36 master br1 Connection 'bridge-slave-ens36' (211c573e-7133-40c3-bba9-c3c19e751417) successfully added. [root@c752 ~]# nmcli con show NAME UUID TYPE DEVICE br1 431ecf74-7476-4009-b13c-d6bb9b286697 bridge br1 bridge-slave-ens36 211c573e-7133-40c3-bba9-c3c19e751417 ethernet ens36 ens33 004afe6f-a987-4467-a6e7-8d5d04ec3a33 ethernet ens33 virbr0 23ade1e4-3822-4bc9-83fd-3504ad9b5efe bridge virbr0 [root@c752 ~]# brctl show bridge name bridge id STP enabled interfaces br1 8000.000c299755f7 no ens36 virbr0 8000.525400701951 yes virbr0-nic [root@c752 ~]#
nmcli con showの出力にはbridge-slave-ens36が追加され、brctl showの出力にてbr1にens36がアサインされたことが確認できます。*2
3.物理+Bonding
Bondingインターフェースに2つの物理インターフェースをアサインします。
(3)Bondingインターフェースbond0の作成
(4)ens37をBond0にアサイン
(5)ens38をBond0にアサイン
(3)Bondingインターフェースbond0の作成
投入コマンド nmcli connection add type bond con-name bond0 ifname bond0 mode balance-xor nmcli connection mod bond0 ipv4.method disabled ipv6.method ignore nmcli con show 出力例 [root@c752 ~]# nmcli connection add type bond con-name bond0 ifname bond0 mode balance-xor Connection 'bond0' (25a6c049-251e-464a-87fc-6f25112c712e) successfully added. [root@c752 ~]# nmcli connection mod bond0 ipv4.method disabled ipv6.method ignore [root@c752 ~]# nmcli con show NAME UUID TYPE DEVICE bond0 25a6c049-251e-464a-87fc-6f25112c712e bond bond0 br1 431ecf74-7476-4009-b13c-d6bb9b286697 bridge br1 bridge-slave-ens36 211c573e-7133-40c3-bba9-c3c19e751417 ethernet ens36 ens33 004afe6f-a987-4467-a6e7-8d5d04ec3a33 ethernet ens33 virbr0 23ade1e4-3822-4bc9-83fd-3504ad9b5efe bridge virbr0 [root@c752 ~]#
bond0は作成されましたが、物理インターフェースがbond0にアサインされていない状態です。
この状態だと、仮想マシンのトラフィックを外部のスイッチへ流すことができません。
(4)ens37をBond0にアサイン
投入コマンド nmcli connection add type bond-slave autoconnect yes ifname ens37 master bond0 nmcli con show 出力例 [root@c752 ~]# nmcli connection add type bond-slave autoconnect yes ifname ens37 master bond0 nmcli con show Connection 'bond-slave-ens37' (7ca51b00-89fe-4e30-98d0-6588a747b5f1) successfully added. [root@c752 ~]# nmcli con show NAME UUID TYPE DEVICE bond-slave-ens37 7ca51b00-89fe-4e30-98d0-6588a747b5f1 ethernet ens37 bond0 25a6c049-251e-464a-87fc-6f25112c712e bond bond0 br1 431ecf74-7476-4009-b13c-d6bb9b286697 bridge br1 bridge-slave-ens36 211c573e-7133-40c3-bba9-c3c19e751417 ethernet ens36 ens33 004afe6f-a987-4467-a6e7-8d5d04ec3a33 ethernet ens33 virbr0 23ade1e4-3822-4bc9-83fd-3504ad9b5efe bridge virbr0 [root@c752 ~]#
nmcli con showの出力にてbond-slave-ens37がアサインされたことが確認できます。
(5)ens38をBond0にアサイン
投入コマンド nmcli connection add type bond-slave autoconnect yes ifname ens38 master bond0 nmcli con show 出力例 [root@c752 ~]# nmcli connection add type bond-slave autoconnect yes ifname ens38 master bond0 nmcli con show Connection 'bond-slave-ens38' (dc260d63-0dae-4d63-ba90-66fbb57a4735) successfully added. [root@c752 ~]# nmcli con show NAME UUID TYPE DEVICE bond-slave-ens37 7ca51b00-89fe-4e30-98d0-6588a747b5f1 ethernet ens37 bond-slave-ens38 dc260d63-0dae-4d63-ba90-66fbb57a4735 ethernet ens38 bond0 25a6c049-251e-464a-87fc-6f25112c712e bond bond0 br1 431ecf74-7476-4009-b13c-d6bb9b286697 bridge br1 bridge-slave-ens36 211c573e-7133-40c3-bba9-c3c19e751417 ethernet ens36 ens33 004afe6f-a987-4467-a6e7-8d5d04ec3a33 ethernet ens33 virbr0 23ade1e4-3822-4bc9-83fd-3504ad9b5efe bridge virbr0 [root@c752 ~]#
nmcli con showの出力にてbond-slave-ens38がアサインされたことが確認できます。
4.Bonding+Bridge
BondingインターフェースにBridgeインターフェースをアサインします。
(6)Bridgeインターフェースbr0の作成
(7)Bond0をbr0にアサイン
(6)Bridgeインターフェースbr0の作成
投入コマンド nmcli connection add type bridge autoconnect yes con-name br0 ifname br0 nmcli connection modify br0 bridge.stp no nmcli connection modify br0 ipv4.method disabled ipv6.method ignore nmcli connection up br0 nmcli con show brctl show 出力例 [root@c752 ~]# nmcli connection add type bridge autoconnect yes con-name br0 ifname br0 Connection 'br0' (7531e688-83cd-4b97-b596-3b3b55ea2cbf) successfully added. [root@c752 ~]# nmcli connection modify br0 bridge.stp no [root@c752 ~]# nmcli connection modify br0 ipv4.method disabled ipv6.method ignore [root@c752 ~]# nmcli connection up br0 Connection successfully activated (master waiting for slaves) (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/19) [root@c752 ~]# nmcli con show NAME UUID TYPE DEVICE bond-slave-ens37 7ca51b00-89fe-4e30-98d0-6588a747b5f1 ethernet ens37 bond-slave-ens38 dc260d63-0dae-4d63-ba90-66fbb57a4735 ethernet ens38 bond0 25a6c049-251e-464a-87fc-6f25112c712e bond bond0 br0 7531e688-83cd-4b97-b596-3b3b55ea2cbf bridge br0 br1 431ecf74-7476-4009-b13c-d6bb9b286697 bridge br1 bridge-slave-ens36 211c573e-7133-40c3-bba9-c3c19e751417 ethernet ens36 ens33 004afe6f-a987-4467-a6e7-8d5d04ec3a33 ethernet ens33 virbr0 23ade1e4-3822-4bc9-83fd-3504ad9b5efe bridge virbr0 [root@c752 ~]# brctl show bridge name bridge id STP enabled interfaces br0 8000.000000000000 no br1 8000.000c299755f7 no ens36 virbr0 8000.525400701951 yes virbr0-nic [root@c752 ~]#
br0は作成されましたが、bond0がbr0にアサインされていない状態です。
この状態だと、仮想マシンのトラフィックを外部のスイッチへ流すことができません。
(7)Bond0をbr0にアサイン
投入コマンド nmcli connection modify bond0 connection.master br0 connection.slave-type bridge nmcli con show brctl show 出力例 [root@c752 ~]# nmcli connection modify bond0 connection.master br0 connection.slave-type bridge [root@c752 ~]# nmcli con show NAME UUID TYPE DEVICE bond-slave-ens37 7ca51b00-89fe-4e30-98d0-6588a747b5f1 ethernet ens37 bond-slave-ens38 dc260d63-0dae-4d63-ba90-66fbb57a4735 ethernet ens38 bond0 25a6c049-251e-464a-87fc-6f25112c712e bond bond0 br0 7531e688-83cd-4b97-b596-3b3b55ea2cbf bridge br0 br1 431ecf74-7476-4009-b13c-d6bb9b286697 bridge br1 bridge-slave-ens36 211c573e-7133-40c3-bba9-c3c19e751417 ethernet ens36 ens33 004afe6f-a987-4467-a6e7-8d5d04ec3a33 ethernet ens33 virbr0 23ade1e4-3822-4bc9-83fd-3504ad9b5efe bridge virbr0 [root@c752 ~]# brctl show bridge name bridge id STP enabled interfaces br0 8000.000000000000 no br1 8000.000c299755f7 no ens36 virbr0 8000.525400701951 yes virbr0-nic [root@c752 ~]#
nmcli con showの出力に変化はありません。
また、環境により、brctl showの出力にbond0が表示されない場合があります。
このような場合は、ホストOSを一旦rebootしてください。*3
reboot後の出力
[root@c752 ~]# nmcli con show brctl show NAME UUID TYPE DEVICE bond-slave-ens37 7ca51b00-89fe-4e30-98d0-6588a747b5f1 ethernet ens37 bond-slave-ens38 dc260d63-0dae-4d63-ba90-66fbb57a4735 ethernet ens38 bond0 25a6c049-251e-464a-87fc-6f25112c712e bond bond0 br0 7531e688-83cd-4b97-b596-3b3b55ea2cbf bridge br0 br1 431ecf74-7476-4009-b13c-d6bb9b286697 bridge br1 bridge-slave-ens36 211c573e-7133-40c3-bba9-c3c19e751417 ethernet ens36 ens33 004afe6f-a987-4467-a6e7-8d5d04ec3a33 ethernet ens33 virbr0 0208dbe6-9eb8-4370-bd8b-227165f695db bridge virbr0 [root@c752 ~]# brctl show bridge name bridge id STP enabled interfaces br0 8000.000c29975501 no bond0 br1 8000.000c299755f7 no ens36 virbr0 8000.525400701951 yes virbr0-nic [root@c752 ~]#
brctl showの出力にbond0が表示されました。
5.Bonding+VLAN+Bridge
BondingインターフェースにVLAN+Bridgeインターフェースをアサインします。
Bondingは物理が冗長化されており、複数のBridgeをアサインさせることが可能です。
その場合は、VLAN+Bridgeをセットで追加していく構成となります。
(8)Bridgeインターフェースbr301の作成
(9)VLANインターフェースbond0.301の作成+bond0.301をbond0にアサイン
(10)bond0.301をbr301にアサイン
(8)Bridgeインターフェースbr301の作成
投入コマンド nmcli connection add type bridge autoconnect yes con-name br301 ifname br301 nmcli connection modify br301 bridge.stp no nmcli connection modify br301 ipv4.method disabled ipv6.method ignore nmcli connection up br301 nmcli con show brctl show 出力例 [root@c752 ~]# nmcli connection add type bridge autoconnect yes con-name br301 ifname br301 Connection 'br301' (040c6db1-4e47-4aaa-beec-014bc14f82a6) successfully added. [root@c752 ~]# nmcli connection modify br301 bridge.stp no [root@c752 ~]# nmcli connection modify br301 ipv4.method disabled ipv6.method ignore [root@c752 ~]# nmcli connection up br301 Connection successfully activated (master waiting for slaves) (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/11) [root@c752 ~]# nmcli con show NAME UUID TYPE DEVICE bond-slave-ens37 7ca51b00-89fe-4e30-98d0-6588a747b5f1 ethernet ens37 bond-slave-ens38 dc260d63-0dae-4d63-ba90-66fbb57a4735 ethernet ens38 bond0 25a6c049-251e-464a-87fc-6f25112c712e bond bond0 br0 7531e688-83cd-4b97-b596-3b3b55ea2cbf bridge br0 br1 431ecf74-7476-4009-b13c-d6bb9b286697 bridge br1 br301 040c6db1-4e47-4aaa-beec-014bc14f82a6 bridge br301 bridge-slave-ens36 211c573e-7133-40c3-bba9-c3c19e751417 ethernet ens36 ens33 004afe6f-a987-4467-a6e7-8d5d04ec3a33 ethernet ens33 virbr0 0208dbe6-9eb8-4370-bd8b-227165f695db bridge virbr0 [root@c752 ~]# brctl show bridge name bridge id STP enabled interfaces br0 8000.000c29975501 no bond0 br1 8000.000c299755f7 no ens36 br301 8000.000000000000 no virbr0 8000.525400701951 yes virbr0-nic [root@c752 ~]#
br0やbr1と同様です。
br301は作成されましたが、アップリンクとなるbond0.301がアサインされていない状態です。
この状態だと、仮想マシンのトラフィックを外部のスイッチへ流すことができません。
(9)VLANインターフェースbond0.301の作成+bond0.301をbond0にアサイン
投入コマンド nmcli connection add type vlan autoconnect yes con-name bond0.301 ifname bond0.301 dev bond0 id 301 nmcli con show brctl show 出力例 [root@c752 ~]# nmcli connection add type vlan autoconnect yes con-name bond0.301 ifname bond0.301 dev bond0 id 301 Connection 'bond0.301' (749d10a2-4900-42b5-964a-2ea146a2e7a6) successfully added. [root@c752 ~]# nmcli con show NAME UUID TYPE DEVICE bond-slave-ens37 7ca51b00-89fe-4e30-98d0-6588a747b5f1 ethernet ens37 bond-slave-ens38 dc260d63-0dae-4d63-ba90-66fbb57a4735 ethernet ens38 bond0 25a6c049-251e-464a-87fc-6f25112c712e bond bond0 br0 7531e688-83cd-4b97-b596-3b3b55ea2cbf bridge br0 br1 431ecf74-7476-4009-b13c-d6bb9b286697 bridge br1 br301 040c6db1-4e47-4aaa-beec-014bc14f82a6 bridge br301 bridge-slave-ens36 211c573e-7133-40c3-bba9-c3c19e751417 ethernet ens36 ens33 004afe6f-a987-4467-a6e7-8d5d04ec3a33 ethernet ens33 virbr0 0208dbe6-9eb8-4370-bd8b-227165f695db bridge virbr0 bond0.301 749d10a2-4900-42b5-964a-2ea146a2e7a6 vlan -- [root@c752 ~]# brctl show bridge name bridge id STP enabled interfaces br0 8000.000c29975501 no bond0 br1 8000.000c299755f7 no ens36 br301 8000.000000000000 no virbr0 8000.525400701951 yes virbr0-nic [root@c752 ~]#
nmcli con showの出力にてbond0.301が追加されたことが確認できます。
しかし、現段階ではbond0.301をUpさせていないため、DEVICEが「ーー」となっています。
また、「dev bond0」を指定することにより、bond0.301をbond0にアサインしています。
さらに、「id 301」を指定することにより、VLAN番号を指定しています。*4
(10)bond0.301をbr301にアサイン
投入コマンド nmcli connection modify bond0.301 connection.master br301 connection.slave-type bridge nmcli connection up bond0.301 nmcli con show brctl show 出力例 [root@c752 ~]# nmcli connection modify bond0.301 connection.master br301 connection.slave-type bridge [root@c752 ~]# nmcli connection up bond0.301 Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/13) [root@c752 ~]# nmcli con show NAME UUID TYPE DEVICE bond-slave-ens37 7ca51b00-89fe-4e30-98d0-6588a747b5f1 ethernet ens37 bond-slave-ens38 dc260d63-0dae-4d63-ba90-66fbb57a4735 ethernet ens38 bond0 25a6c049-251e-464a-87fc-6f25112c712e bond bond0 bond0.301 749d10a2-4900-42b5-964a-2ea146a2e7a6 vlan bond0.301 br0 7531e688-83cd-4b97-b596-3b3b55ea2cbf bridge br0 br1 431ecf74-7476-4009-b13c-d6bb9b286697 bridge br1 br301 040c6db1-4e47-4aaa-beec-014bc14f82a6 bridge br301 bridge-slave-ens36 211c573e-7133-40c3-bba9-c3c19e751417 ethernet ens36 ens33 004afe6f-a987-4467-a6e7-8d5d04ec3a33 ethernet ens33 virbr0 0208dbe6-9eb8-4370-bd8b-227165f695db bridge virbr0 [root@c752 ~]# brctl show bridge name bridge id STP enabled interfaces br0 8000.000c29975501 no bond0 br1 8000.000c299755f7 no ens36 br301 8000.000c29975501 no bond0.301 virbr0 8000.525400701951 yes virbr0-nic [root@c752 ~]#
nmcli con showの出力のDEVICEにbond0.301が表示され、brctl showの出力にはbond0.301が表示されました。
6.補足1:brctlコマンドについて
先にも書きましたが、「Bridge」や「Bridgeインターフェース」は、仮想スイッチです。
このため、構成図上にもPort1やPort2と記載していますが、これらの確認方法を解説します。
結論から先に書くと、以下2つのオプションコマンドにより確認可能です。
brctl showstp br0 brctl showmacs br0
まずは構成図に記載した状態&Guest1~3を全て起動した状態にて、brctl showで確認してみます。
[root@c752 vm]# brctl show bridge name bridge id STP enabled interfaces br0 8000.000c29975501 no bond0 vnet1 vnet2 br1 8000.000c299755f7 no ens36 vnet0 br301 8000.000c29975501 no bond0.301 vnet3 virbr0 8000.525400701951 yes virbr0-nic
ここではbr0にフォーカスします。
b0には、bond0,vnet1,vnet2の3つのインターフェースがアサインされています。
bond0は先に記載した通り、nmcliコマンドでb0にアサインしました。
vnet1やvnet2は、仮想マシンを起動させた際、起動順に動的にアサインされます。
では、これら3つのインターフェースがbr0の何番ポート*5に接続されているのでしょうか?
[root@c752 vm]# brctl showstp br0 br0 bridge id 8000.000c29975501 designated root 8000.000c29975501 root port 0 path cost 0 max age 20.00 bridge max age 20.00 hello time 2.00 bridge hello time 2.00 forward delay 15.00 bridge forward delay 15.00 ageing time 300.00 hello timer 0.00 tcn timer 0.00 topology change timer 0.00 gc timer 151.70 flags bond0 (1) port id 8001 state forwarding designated root 8000.000c29975501 path cost 100 designated bridge 8000.000c29975501 message age timer 0.00 designated port 8001 forward delay timer 0.00 designated cost 0 hold timer 0.00 flags vnet1 (2) port id 8002 state forwarding designated root 8000.000c29975501 path cost 100 designated bridge 8000.000c29975501 message age timer 0.00 designated port 8002 forward delay timer 0.00 designated cost 0 hold timer 0.00 flags vnet2 (3) port id 8003 state forwarding designated root 8000.000c29975501 path cost 100 designated bridge 8000.000c29975501 message age timer 0.00 designated port 8003 forward delay timer 0.00 designated cost 0 hold timer 0.00 flags
上記コマンドにより、
Port1=bond0
Port2=vnet1
Port3=vnet2
であることが確認できました。
次に各PortのMACアドレスとarpにより学習したMACアドレスはどのように判別すればよいでしょうか?
[root@c752 vm]# brctl showmacs br0 port no mac addr is local? ageing timer 1 00:50:56:c0:00:01 no 6.96 1 00:0c:29:97:55:01 yes 0.00 1 00:0c:29:97:55:01 yes 0.00 2 52:54:00:5d:46:f7 no 158.94 2 fe:54:00:5d:46:f7 yes 0.00 2 fe:54:00:5d:46:f7 yes 0.00 3 52:54:00:1f:56:30 no 142.25 3 fe:54:00:1f:56:30 yes 0.00 3 fe:54:00:1f:56:30 yes 0.00
上記コマンドより、まず前提として
「port no」 :brctl showstp br0により確認したポート番号 「is local?=yes」:br0内ポートのMACアドレス*6 「is local?=no」 :arpにより学習したMACアドレス*7
となります。
次に
「is local?=yes」のMACアドレスは
port no mac addr 1 00:0c:29:97:55:01 bond0のMACアドレス 2 fe:54:00:5d:46:f7 vnet1のMACアドレス 3 fe:54:00:1f:56:30 vnet2のMACアドレス
となります。
最後に
「is local?=no」のMACアドレスは
port no mac addr 1 00:50:56:c0:00:01 スイッチのPo1のMACアドレス 2 52:54:00:5d:46:f7 Guest2のeth0のMACアドレス 3 52:54:00:1f:56:30 Guest3のeth0のMACアドレス
となります。
7.補足2:スイッチ側のサンプルConfig
Ciscoになってしまいますが、物理スイッチ側のサンプルConfigを乗せておきます。
ens36対向ポート(G0/0)の場合:その1
interface GigabitEthernet0/0 switchport access vlan 100 switchport mode access
最もオーソドックなパターンです。
ens36対向ポート(G0/0)の場合:その2
interface GigabitEthernet0/0 switchport trunk encapsulation dot1q switchport trunk allowed vlan 100,110 switchport mode trunk
Guest側でVLAN Tagを付ける場合です。
Guest側にCSR1000vとかNexus9000vなどを構築した場合、仮想ルータやスイッチ側でVLAN Tagを付けられるため、対向ポートではTrunkにします。
ちなみに、br0上ではスイッチングハブなどのようにTagを剥がされる心配はありません。
bond0対向ポート(Po1&G0/1&G0/2)の場合
interface Port-channel1 switchport trunk encapsulation dot1q switchport trunk allowed vlan 100,110,301 switchport mode trunk spanning-tree portfast trunk ! interface GigabitEthernet0/1 switchport trunk encapsulation dot1q switchport trunk allowed vlan 100,110,301 switchport mode trunk channel-group 1 mode on ! interface GigabitEthernet0/2 switchport trunk encapsulation dot1q switchport trunk allowed vlan 100,110,301 switchport mode trunk channel-group 1 mode on
図に記載した構成の場合、(9)でVLANインターフェースを作成しているため、301のTrunkは必須となります。
一方、br0は特にVLANインターフェースを経由していないため、VLAN Tagを付けるか否かは、GuestOS側に依存します。
GuestOS側でVLAN Tagを付けない場合は、 switchport trunk native vlan 100などとしてください。
あと、脱線してしまいますが、bonding modeについて少し触れておきます。
Static LAGの場合
nmcli connection add type bond con-name bond0 ifname bond0 mode balance-xor の場合 interface GigabitEthernet0/1 switchport trunk encapsulation dot1q switchport trunk allowed vlan 100,110,301 switchport mode trunk channel-group 1 mode on ! interface GigabitEthernet0/2 switchport trunk encapsulation dot1q switchport trunk allowed vlan 100,110,301 switchport mode trunk channel-group 1 mode on
LACPの場合
nmcli connection add type bond con-name bond0 ifname bond0 mode 802.3ad の場合 interface GigabitEthernet0/1 switchport trunk encapsulation dot1q switchport trunk allowed vlan 100,110,301 switchport mode trunk channel-group 1 mode active ! interface GigabitEthernet0/2 switchport trunk encapsulation dot1q switchport trunk allowed vlan 100,110,301 switchport mode trunk channel-group 1 mode active
8.補足3:GuestOS側のネットワーク設定
GuestOS側で今回作成したBridgeをアサインする場合、いくつか方法はありますが、Virt-Manager上では以下のように指定します。
以上です。
9.最後に
この手の内容を記載したサイトは他にもたくさんあります。
しかし、どのコマンドを打ったときに、どの部分が作られているのかを順を追って解説したサイトは少ないように感じたので、私なりにまとめてみました。
また、過去記事ではCentOS6系の内容を記載しましたが、nmcliコマンドではなかったため新規記事として作成しました。
前回(2018/10/21に)記載したLXC/LXDのコンテナ環境構築において、ネットワーク周りの内容を記載するにあたり、前提となる知識が必要だったため、今回はLinuxのネットワーク周りについて、少し深堀りした内容にしました。
あと、SR-IOVを動かした際の構成については、次のステップとして検証したいなと思っています。
また「brctlコマンドについて」は今回の内容から少し脱線している認識があります。しかしながら、「brctlコマンドについて」の内容を理解していないと、トラブルシュートが難しくなると考えています。
何かのトラブルが発生した際、例えば、br0上のどのポートからどのMACアドレスが見えているのか?とか、br0上のどのポートをPcapすればよいのか?といったが瞬時に把握できないと、相当しんどいと思うので。
*1:ESXiでは、vSwitchと呼ばれています
*2:私としては、bridge-slaveというよりも、外部スイッチへのアップリンクポートという風に捉えています。
*3:nmcli con reloadやsystemctl reload NetworkManagerを行ってもbond0が表示されないため、rebootした方が手っ取り早いです。ちなみに、この段階でrebootするのではなく、(10)まで設定した後、最後にrebootしても問題ありません。
*4:VLAN番号を指定というよりも、私としては、bond0.301を通過するEtherフレームにVLAN301のTagを付与しているという風に捉えています。
*5:老婆心ながら、ここでいう「ポート」とは、スイッチポートの番号(G1/0/1とか)のことです。L4(TCPやUDP)のポート番号ではありません。
*6:yesのMACアドレスが2つづつ表示されてる理由は私自身もあまりよくわかっていません。すいません。。。
*7:つまり、br0の各ポートの先に存在するMACアドレスとなります。このため、ageing timerが稼働しています。