かなり奮闘したので...
ブリッジの作成
物理NICの名称がeth0とします。
nmcliはsudo apt install network-managerすると使用できます。
# ブリッジ(testbr0)作成 $ nmcli con add type bridge ifname testbr0 # ブリッジを物理NIC接続 $ nmcli con add type bridge-slave ifname eth0 master testbr0 # ブリッジ有効化 $ nmcli con up bridge-slave-eth0
dockerコンテナの接続
dockerは比較的すぐに接続できます。
# dockerネットワーク(testbr0-docker)を作成 $ docker network create --driver macvlan --subnet=192.168.0.0/16 -o parent=testbr0 testbr0-docker # この時点でコンテナは接続できるはず $ docker run -it --rm --net testbr0-docker alpine /bin/sh
KVM仮想マシンの接続
次にKVM(virsh) の場合、まずネットワークを定義します。
direct.xmlは以下。
<network> <name>direct</name> <forward mode="bridge"> <interface dev="testbr0"/> </forward> </network>
ネットワークをdefineしたのち、仮想マシンのネットワーク接続先をdirectになるように編集します。
# libvirtネットワーク作成 $ virsh net-define direct.xml $ virsh net-start direct $ virsh edit <仮想マシンの名前> # xml編集画面が開くので、source network='direct'に変更する ----(省略)---- <interface type='network'> <mac address='52:54:00:7e:1a:31'/> <source network='direct'/> <model type='virtio'/> <address type='pci' domain='0x0000' bus='0x01' slot='0x00' function='0x0'/> </interface>
ブリッジの削除
$ visrh net-undefine direct
$ docker network rm testbr0-docker
$ nmcli con delete bridge-slave-eth0
$ nmcli con delete bridge-testbr0
(おまけ)dockerでブリッジを作成する場合
次のコマンドは、ブリッジの作成とdockerネットワークの作成までやってくれます。KVMがこのネットワーク配下に入れるかは試してませんが、ご参考程度に。
$ docker network create --driver bridge \ --subnet=192.168.0.0/16 --gateway=192.168.0.2 \ --opt="com.docker.network.bridge.name"="testbr0" testbr0