DockerコンテナのトラフィックをBridgeで外部ネットワークに流して使用する場合の設定方法を記載したいと思います。
Dockerで作成するBridge*1は、ホストOSのiptablesでPATされてしまうため、コンテナと外部NW機器が同一のNWセグメントとして使用できるようにします。
以下の過去記事のDcoker版と考えてください。
LXC/LXDコンテナのネットワーク設定方法 - Metonymical Deflection
なお、設定方法が2種類あります。先に1を記載した後、2を記載したいと思います。
No | 設定方法 | ホストOSとの疎通性 | brctlやipコマンドでの確認可否 |
1 | LinuxBridgeを併用 | 有 | 可能 |
2 | dockerコマンドのみ使用(macvlan) | 無 | 不可 |
1.環境
1-1.VMWare
筐体 : 自作PC(Win10pro) CPU : Intel(R) Core(TM) i9-9900K CPU @ 3.60GHz VMWare : VMware(R) Workstation 15 Pro 15.1.0 build-13591040 OS : CentOS7.6(1810) Kernel : 3.10.0-957.el7.x86_64 Installed Environment Groups : Minimal Install
ベアメタル環境でも同様に設定可能です。
1-2.全体構成
上図のうちdocker0はDefaultで作成されています。
また、docker0はNATして外部ネットワークに接続されています。私の用途としては、コンテナ上でyumなどを行いたい場合のInternet接続用マネジメントインターフェースとして使用しています。*2
しかし、KVMライクにDockerコンテナを使用したいので、今回行う設定は(1)~(9)となります。
(1)(2)(5)(6)(7):nmcliコマンド
(3)(4)(8)(9):dockerコマンド
となります。
1-2.全体の流れ ~概要~
- LinuxBridge併用の場合:(1)~(9)
- dockerコマンドのみの場合:(3)(4)(8)(9)
※
流れというよりも、それぞれ別々の設定となります。
1-3.全体の流れ ~コマンドのみ~
以下のコマンドを投入していきます。
やりたいことが既に決まっている方は、構成図とコマンドの内容を見るだけでもよいと思います。
1.LinuxBridge併用の場合 (1) nmcli connection add type bridge autoconnect yes con-name br0 ifname br0 nmcli connection modify br0 bridge.stp no nmcli connection modify br0 ipv6.method ignore nmcli connection modify br0 ipv4.method manual ipv4.addresses 192.168.30.202/24 nmcli connection up br0 nmcli con show brctl show (2) nmcli connection add type ethernet autoconnect yes con-name ens34 ifname ens34 nmcli connection modify ens34 connection.master br0 connection.slave-type bridge nmcli connection up ens34 nmcli con show brctl show (3) docker network create -d bridge \ --subnet=192.168.30.0/24 \ --ip-range=192.168.30.0/25 \ --gateway=192.168.30.202 \ --opt com.docker.network.bridge.name=br0 \ br0 (コンテナ起動) docker run -itd \ --privileged \ --network bridge \ --name dkc1 \ centos \ /sbin/init (4) docker network connect br0 dkc1 \ --ip=192.168.30.100 (5) nmcli connection add type bridge autoconnect yes con-name br301 ifname br301 nmcli connection modify br301 bridge.stp no nmcli connection modify br301 ipv6.method ignore nmcli connection modify br301 ipv4.method manual ipv4.addresses 192.168.31.202/24 nmcli connection up br301 nmcli con show brctl show (6) nmcli connection add type vlan autoconnect yes con-name ens34.301 ifname ens34.301 dev ens34 id 301 nmcli con show brctl show (7) nmcli connection modify ens34.301 connection.master br301 connection.slave-type bridge nmcli connection up ens34.301 nmcli con show brctl show (8) docker network create -d bridge \ --subnet=192.168.31.0/24 \ --ip-range=192.168.31.0/25 \ --gateway=192.168.31.202 \ --opt com.docker.network.bridge.name=br301 \ br301 (コンテナ起動) docker run -itd \ --privileged \ --network bridge \ --name dkc2 \ centos \ /sbin/init (9) docker network connect br301 dkc2 \ --ip=192.168.31.100 2.dockerコマンドのみの場合 (3) docker network create -d macvlan \ --subnet=192.168.30.0/24 \ --ip-range=192.168.30.0/25 \ --gateway=192.168.30.254 \ -o parent=ens34 br0 (コンテナ起動) docker run -itd \ --privileged \ --network bridge \ --name dkc1 \ centos \ /sbin/init (4) docker network connect br0 dkc1 \ --ip=192.168.30.100 (8) docker network create -d macvlan \ --subnet=192.168.31.0/24 \ --ip-range=192.168.31.0/25 \ --gateway=192.168.31.254 \ -o parent=ens34.301 br301 (コンテナ起動) docker run -itd \ --privileged \ --network bridge \ --name dkc2 \ centos \ /sbin/init (9) docker network connect br301 dkc2 \ --ip=192.168.31.100
<コンテナ起動コマンドについて補足>
「--network bridge」について、Default定義NWとユーザ定義NWを2つ同時にアタッチしようとすると、以下のようにエラーで弾かれます。このため、まずはDefault定義NWを設定しています。
[root@c76dk01 ~]# docker run -itd \ > --privileged \ > --network bridge \ > --network br0 \ > --name dkc3 \ > c76 \ > /sbin/init docker: conflicting options: cannot attach both user-defined and non-user-defined network-modes. See 'docker run --help'. [root@c76dk01 ~]#
2.LinuxBridge併用の場合
2-1.通常のBridge
nmcliコマンドによりBridgeインターフェースを作成し、コンテナのNICをLinuxBridgeにアタッチします。
(1)(2)Bridgeインターフェースbr0の作成+ens34をbr0にアタッチ
(3)dockerコマンドにてbr0を作成*3
(4)br0にコンテナdkc1のeth1をアタッチ+IP設定
(1)(2)Bridgeインターフェースbr0の作成+ens34をbr0にアタッチ
(1)と(2)は過去記事などを参照してください。
投入コマンド (1) nmcli connection add type bridge autoconnect yes con-name br0 ifname br0 nmcli connection modify br0 bridge.stp no nmcli connection modify br0 ipv6.method ignore nmcli connection modify br0 ipv4.method manual ipv4.addresses 192.168.30.202/24 nmcli connection up br0 nmcli con show brctl show (2) nmcli connection add type ethernet autoconnect yes con-name ens34 ifname ens34 nmcli connection modify ens34 connection.master br0 connection.slave-type bridge nmcli connection up ens34 nmcli con show brctl show 出力例 以下のように出力されていればOKです。 [root@c76dk01 ~]# nmcli con show NAME UUID TYPE DEVICE br0 5c7da373-af73-4cda-a420-7949eeb6974e bridge br0 docker0 227bbb74-0c07-447a-99ec-5f84c6bf61c0 bridge docker0 ens33 2f7e32c0-adfd-41b1-9698-dff6406af75d ethernet ens33 ens34 2849b0b6-1c27-4293-81b3-a07068feb36c ethernet ens34
br0が作成され、物理インターフェースens34にもアタッチされます。
(3)dockerコマンドにてbr0を作成
投入コマンド
(3)
docker network create -d bridge \
--subnet=192.168.30.0/24 \
--ip-range=192.168.30.0/25 \
--gateway=192.168.30.202 \
--opt com.docker.network.bridge.name=br0 \
br0
出力例
[root@c76dk01 ~]# docker network ls
NETWORK ID NAME DRIVER SCOPE
ebc2a0612742 br0 bridge local
a6ae25cd104e bridge bridge local
f51b9d166f07 host host local
d1023dacb10b none null local
[root@c76dk01 ~]# docker network inspect br0
[
{
"Name": "br0",
"Id": "ebc2a0612742e6b2529fde112c5b2cb465abb6d27fe8623c20b92c7242d573bb",
"Created": "2019-06-16T18:22:29.649525689+09:00",
"Scope": "local",
"Driver": "bridge",
"EnableIPv6": false,
"IPAM": {
"Driver": "default",
"Options": {},
"Config": [
{
"Subnet": "192.168.30.0/24",
"IPRange": "192.168.30.0/25",
"Gateway": "192.168.30.202"
}
]
},
"Internal": false,
"Attachable": false,
"Ingress": false,
"ConfigFrom": {
"Network": ""
},
"ConfigOnly": false,
"Containers": {},
"Options": {
"com.docker.network.bridge.name": "br0"
},
"Labels": {}
}
]
docker network create -d bridge \ | NWドライバにbridgeを選択。必須 |
--subnet=192.168.30.0/24 \ | サブネットを定義。必須 |
--ip-range=192.168.30.0/25 \ | DHCPで配布されるレンジを定義。任意 |
--gateway=192.168.30.202 \ | GWアドレスを定義。任意。但し、設定しないと192.168.30.1が強制的に設定されます。また、nmcliコマンドで作成したbr0のIPも192.168.30.1に上書きされます。 |
--opt com.docker.network.bridge.name=br0 \ | nmcliコマンドで作成したbr0にアタッチ。必須 |
br0 | Docker上のNWの名前。必須。ですが任意の名前でOK。管理上nmcliコマンドで作成したbr0と名前を一致せています。 |
(4)br0にコンテナdkc1のeth1をアタッチ+IP設定
続いてコンテナを起動し、コンテナNICのeth1をbr0にアタッチさせます。
投入コマンド
(コンテナ起動)
docker run -itd \
--privileged \
--network bridge \
--name dkc1 \
centos \
/sbin/init
(4)
docker network connect br0 dkc1 \
--ip=192.168.30.100
出力例
[root@c76dk01 ~]# brctl show
bridge name bridge id STP enabled interfaces
br0 8000.000c29d40546 no ens34
veth41095a7
docker0 8000.0242f2b40eff no veth24c4ace
[root@c76dk01 ~]# docker network inspect br0
[
{
"Name": "br0",
"Id": "e14f9d9ab5f236adee0bfbe95760272e3bfa5d0371804b1bb880164eb7b85c3f",
"Created": "2019-06-16T18:44:09.13402567+09:00",
"Scope": "local",
"Driver": "bridge",
"EnableIPv6": false,
"IPAM": {
"Driver": "default",
"Options": {},
"Config": [
{
"Subnet": "192.168.30.0/24",
"IPRange": "192.168.30.0/25",
"Gateway": "192.168.30.202"
}
]
},
"Internal": false,
"Attachable": false,
"Ingress": false,
"ConfigFrom": {
"Network": ""
},
"ConfigOnly": false,
"Containers": {
"b4ec13912196828e074ed21ab4a349afb93a816cf6788f563f36c9e0708a00a5": {
"Name": "dkc1",
"EndpointID": "3ddb6c7fd885c94d75d3e7bfbf37facc37778bffb01e7eeee02d42f790bba718",
"MacAddress": "02:42:c0:a8:1e:64",
"IPv4Address": "192.168.30.100/24",
"IPv6Address": ""
}
},
"Options": {
"com.docker.network.bridge.name": "br0"
},
"Labels": {}
}
]
2-2.VlanTagを付ける場合のBridge
nmcliコマンドによりVlan+Bridgeインターフェースを作成し、コンテナのNICをLinuxBridgeにアタッチします。
トラフィックがVlanインターフェースens34.301を通過する際に以下の挙動となります。
コンテナから外部NWへのトラフィック | VlanTagが付けられる |
外部NWからコンテナへのトラフィック | VlanTagが外されたる |
(5)(6)(7)Vlanインターフェースens34.301+Bridgeインターフェースbr301の作成+ens34.301をbr301にアタッチ
(8)dockerコマンドにてbr301を作成
(9)br301にコンテナdkc2のeth1をアタッチ+IP設定
(5)(6)(7)Vlanインターフェースens34.301+Bridgeインターフェースbr301の作成+ens34.301をbr301にアタッチ
(1)(2)と同様に過去記事などを参照してください。
投入コマンド (5) nmcli connection add type bridge autoconnect yes con-name br301 ifname br301 nmcli connection modify br301 bridge.stp no nmcli connection modify br301 ipv6.method ignore nmcli connection modify br301 ipv4.method manual ipv4.addresses 192.168.31.202/24 nmcli connection up br301 nmcli con show brctl show (6) nmcli connection add type vlan autoconnect yes con-name ens34.301 ifname ens34.301 dev ens34 id 301 nmcli con show brctl show (7) nmcli connection modify ens34.301 connection.master br301 connection.slave-type bridge nmcli connection up ens34.301 nmcli con show brctl show 出力例 以下のように出力されていればOKです。 [root@c76dk01 ~]# nmcli con show NAME UUID TYPE DEVICE br0 5c7da373-af73-4cda-a420-7949eeb6974e bridge br0 br301 07f444fd-18d5-47a8-a721-39696d4fb0c6 bridge br301 docker0 d3c2e742-6653-4d56-8b75-10d7f178fc41 bridge docker0 ens33 2f7e32c0-adfd-41b1-9698-dff6406af75d ethernet ens33 ens34 2849b0b6-1c27-4293-81b3-a07068feb36c ethernet ens34 ens34.301 9e5eb500-f432-41fb-b72a-2492567a98c4 vlan ens34.301
br301が作成され、VLANインターフェースens34.301にもアタッチされます。
(8)dockerコマンドにてbr301を作成
投入コマンド
(8)
docker network create -d bridge \
--subnet=192.168.31.0/24 \
--ip-range=192.168.31.0/25 \
--gateway=192.168.31.202 \
--opt com.docker.network.bridge.name=br301 \
br301
出力例
[root@c76dk01 ~]# docker network ls
NETWORK ID NAME DRIVER SCOPE
e14f9d9ab5f2 br0 bridge local
ce879f2b276f br301 bridge local
a6ae25cd104e bridge bridge local
f51b9d166f07 host host local
d1023dacb10b none null local
[root@c76dk01 ~]# docker network inspect br301
[
{
"Name": "br301",
"Id": "ce879f2b276f71ca45f6f09b993d561f42b3297b40d2964b1518ef64280dfd0f",
"Created": "2019-06-16T19:08:44.613109443+09:00",
"Scope": "local",
"Driver": "bridge",
"EnableIPv6": false,
"IPAM": {
"Driver": "default",
"Options": {},
"Config": [
{
"Subnet": "192.168.31.0/24",
"IPRange": "192.168.31.0/25",
"Gateway": "192.168.31.202"
}
]
},
"Internal": false,
"Attachable": false,
"Ingress": false,
"ConfigFrom": {
"Network": ""
},
"ConfigOnly": false,
"Containers": {},
"Options": {
"com.docker.network.bridge.name": "br301"
},
"Labels": {}
}
]
docker network create -d bridge \ | NWドライバにbridgeを選択。必須 |
--subnet=192.168.31.0/24 \ | サブネットを定義。必須 |
--ip-range=192.168.31.0/25 \ | DHCPで配布されるレンジを定義。任意 |
--gateway=192.168.31.202 \ | GWアドレスを定義。任意。但し、設定しないと192.168.31.1が強制的に設定されます。また、nmcliコマンドで作成したbr0のIPも192.168.31.1に上書きされます。 |
--opt com.docker.network.bridge.name=br301 \ | nmcliコマンドで作成したbr301にアタッチ。必須 |
br301 | Docker上のNWの名前。必須。ですが任意の名前でOK。管理上nmcliコマンドで作成したbr301と名前を一致せています。 |
(9)br301にコンテナdkc2のeth1をアタッチ+IP設定
続いてコンテナを起動し、コンテナNICのeth1をbr301にアタッチさせます。
投入コマンド
(コンテナ起動)
docker run -itd \
--privileged \
--network bridge \
--name dkc2 \
centos \
/sbin/init
(4)
docker network connect br301 dkc2 \
--ip=192.168.31.100
出力例
[root@c76dk01 ~]# brctl show
bridge name bridge id STP enabled interfaces
br0 8000.000c29d40546 no ens34
veth41095a7
br301 8000.000c29d40546 no ens34.301
veth2d8f44e
docker0 8000.0242f2b40eff no veth24c4ace
veth2cc58e3
[root@c76dk01 ~]# docker network inspect br301
[
{
"Name": "br301",
"Id": "ce879f2b276f71ca45f6f09b993d561f42b3297b40d2964b1518ef64280dfd0f",
"Created": "2019-06-16T19:08:44.613109443+09:00",
"Scope": "local",
"Driver": "bridge",
"EnableIPv6": false,
"IPAM": {
"Driver": "default",
"Options": {},
"Config": [
{
"Subnet": "192.168.31.0/24",
"IPRange": "192.168.31.0/25",
"Gateway": "192.168.31.202"
}
]
},
"Internal": false,
"Attachable": false,
"Ingress": false,
"ConfigFrom": {
"Network": ""
},
"ConfigOnly": false,
"Containers": {
"2ae29b5d870975ad25f86c674113ea4ef6db077f88c9de13c35d3b9f4dc94ecc": {
"Name": "dkc2",
"EndpointID": "0d46e4d5f92e68613096c8103714cf90fafde1ff3145c156cc6a9b76b66dc8fa",
"MacAddress": "02:42:c0:a8:1f:64",
"IPv4Address": "192.168.31.100/24",
"IPv6Address": ""
}
},
"Options": {
"com.docker.network.bridge.name": "br301"
},
"Labels": {}
}
]
以上がLinuxBridge併用の場合となります。
3.dockerコマンドのみの場合
作業工程としては、LinuxBridgeを併用する場合よりもシンプルかつ工程が少ないのでわかりやすいかもしれません。
しかし、ホストOS上では、MACアドレステーブルやarpテーブルの確認が不可能っぽいです。*4
かつ、ホストOSとの疎通性はありません。*5
なお、本項を試す場合は、前項までに作成したコンテナやBridge など*6は全て削除しておいてください。
3-1.通常のBridge
dockerコマンドによりBridgeネットワークを作成し、ens34にアタッチします。
(3)dockerコマンドにてbr0を作成
(4)br0にコンテナdkc1のeth1をアタッチ+IP設定
(3)dockerコマンドにてbr0を作成
投入コマンド
(3)
docker network create -d macvlan \
--subnet=192.168.30.0/24 \
--ip-range=192.168.30.0/25 \
--gateway=192.168.30.254 \
-o parent=ens34 br0
出力例
以下のように出力されていればOKです。
[root@c76dk01 ~]# docker network ls
NETWORK ID NAME DRIVER SCOPE
92bc5bdf05b4 br0 macvlan local
a6ae25cd104e bridge bridge local
f51b9d166f07 host host local
d1023dacb10b none null local
docker network create -d macvlan \ | NWドライバにmacvlanを指定。必須 |
--subnet=192.168.30.0/24 \ | 2.LinuxBridge併用の場合と同様 |
--ip-range=192.168.30.0/25 \ | 2.LinuxBridge併用の場合と同様 |
--gateway=192.168.30.254 \ | 2.LinuxBridge併用の場合と同様 |
-o parent=ens34 br0 | ens34にアタッチ。必須。名前は2.LinuxBridge併用の場合と同様に任意の名前でOKです。 |
(4)br0にコンテナdkc1のeth1をアタッチ+IP設定
投入コマンド
(コンテナ起動)
docker run -itd \
--privileged \
--network bridge \
--name dkc1 \
centos \
/sbin/init
(4)
docker network connect br0 dkc1 \
--ip=192.168.30.100
出力例
[root@c76dk01 ~]# docker network inspect br0
[
{
"Name": "br0",
"Id": "92bc5bdf05b4371123b3562325260de03ad2133a63ee6f50a4380bd1bbeeb220",
"Created": "2019-06-16T19:27:48.575931685+09:00",
"Scope": "local",
"Driver": "macvlan",
"EnableIPv6": false,
"IPAM": {
"Driver": "default",
"Options": {},
"Config": [
{
"Subnet": "192.168.30.0/24",
"IPRange": "192.168.30.0/25",
"Gateway": "192.168.30.254"
}
]
},
"Internal": false,
"Attachable": false,
"Ingress": false,
"ConfigFrom": {
"Network": ""
},
"ConfigOnly": false,
"Containers": {
"a86cfcb7c7729c2f5aa0ad1c5cbae1a84229328a1342d5670a7e3eb6159c5f39": {
"Name": "dkc1",
"EndpointID": "cbfdff9a7d5fd97cabc408c2a2bbb5766c0192c989952997ab09996e6ba3696c",
"MacAddress": "02:42:c0:a8:1e:64",
"IPv4Address": "192.168.30.100/24",
"IPv6Address": ""
}
},
"Options": {
"parent": "ens34"
},
"Labels": {}
}
]
3-2.VlanTagを付ける場合のBridge
dockerコマンドによりBridgeネットワークとVlanインターフェースを作成し、ens34.301にアタッチします。
(8)dockerコマンドにてbr301とens34.301を作成
(9)br301にコンテナdkc2のeth1をアタッチ+IP設定
dockerコマンドにてbr301とens34.301を作成
投入コマンド
(8)
docker network create -d macvlan \
--subnet=192.168.31.0/24 \
--ip-range=192.168.31.0/25 \
--gateway=192.168.31.254 \
-o parent=ens34.301 br301
出力例
以下のように出力されていればOKです。
[root@c76dk01 ~]# docker network ls
NETWORK ID NAME DRIVER SCOPE
92bc5bdf05b4 br0 macvlan local
8dd7d4bfec8c br301 macvlan local
a6ae25cd104e bridge bridge local
f51b9d166f07 host host local
d1023dacb10b none null local
docker network create -d macvlan \ | NWドライバにmacvlanを指定。必須 |
--subnet=192.168.31.0/24 \ | 2.LinuxBridge併用の場合と同様 |
--ip-range=192.168.31.0/25 \ | 2.LinuxBridge併用の場合と同様 |
--gateway=192.168.31.254 \ | 2.LinuxBridge併用の場合と同様 |
-o parent=ens34.301 br301 | ens34.301とbr301を作成。*7br301をens34.301にアタッチ。必須。名前は2.LinuxBridge併用の場合と同様に任意の名前でOKです。 |
(9)br301にコンテナdkc2のeth1をアタッチ+IP設定
投入コマンド
(コンテナ起動)
docker run -itd \
--privileged \
--network bridge \
--name dkc2 \
centos \
/sbin/init
(9)
docker network connect br301 dkc2 \
--ip=192.168.31.100
出力例
[root@c76dk01 ~]# docker network inspect br301
[
{
"Name": "br301",
"Id": "8dd7d4bfec8c0717acec3b40bc7cdf3d49ced0e2a2ac0a737d094f1ada2eec8c",
"Created": "2019-06-16T19:28:00.783746421+09:00",
"Scope": "local",
"Driver": "macvlan",
"EnableIPv6": false,
"IPAM": {
"Driver": "default",
"Options": {},
"Config": [
{
"Subnet": "192.168.31.0/24",
"IPRange": "192.168.31.0/25",
"Gateway": "192.168.31.254"
}
]
},
"Internal": false,
"Attachable": false,
"Ingress": false,
"ConfigFrom": {
"Network": ""
},
"ConfigOnly": false,
"Containers": {
"9a193996a6928474d792f88b9b72f21fbe8f4b46cd973e8ad2ba39b97d4adcaa": {
"Name": "dkc2",
"EndpointID": "279d95c111a3b33a7f8872966d15bd5af5251a4e25d46e31a64772a6930cb1e5",
"MacAddress": "02:42:c0:a8:1f:64",
"IPv4Address": "192.168.31.100/24",
"IPv6Address": ""
}
},
"Options": {
"parent": "ens34.301"
},
"Labels": {}
}
]
以上です。
4.最後に
以下のサイトを参考にさせて頂きました。
Use macvlan networks | Docker Documentation
macvlan_ipvlan_driver_notes.md · GitHub
外部ネットワーク側からDockerコンテナに通信できる環境を作成する - Qiita
今回の設定方法以外にも「DOCKER_OPTS=」のオプションを設定することでできるようです。
当然ながらDockerは多くのDocに恵まれているため、さほど苦労することなく、やりたい事ができるようになりました。
ただ、今回ご紹介した2種類の方法が同時に記載されているサイトは少なかったことや、過去記事からの延長として、LinuxBridgeやLXC/LXDとの比較ができるという点で、まとめた方が良いなと感じたため記載しました。
私の本職はNWエンジニアなので、最下層レイヤから上位層レイヤに昇っていく過程で、必要になりそうなポイントをクローズアップしながら記載していければいいなと考えています。
また、この流れが出来てしまったので、当然ですが、SR-IOVやDPDK、OvSによるDockerネットワークの設定方法なども、まとめられたらいいなと思います。
さらに、k8sのネットワーク周りまで踏み込んだり、OpenStackNeutron+OVNにも広げていけたら面白うそうだと考えていますので、ご期待ください。
*1:docker network create -d bridgeコマンドで作るBridgeのことです
*2:Dockerの場合はLXCとは異なり、コンテナ起動後にあまりyumなどを実行することはないと思いますが。
*3:作成というよりも、LinuxBridgeにアタッチするとか関連付けをすると言った方が良いかもしれません。
*4:RESTを使えばGETできるかもしれません
*5:トラブった際が少し不安ですね。
*6:nmcliコマンドによるBridge やVLANインターフェース、dockerコマンドによるNW設定やコンテナ
*7:-o parent=ens34.301と指定しただけで、VLANインターフェースを作成してくれるため、かなり楽です。