Dockerにアンマネージドブリッジを追加する

Dockerにアンマネージドブリッジを追加する

私は Docker と LXD を使ってサーバーをセットアップしています。私は、Docker と LXD の間で共有できるブリッジを作成したい複数の VLAN を持つ実際のネットワークを持っています。これは LXD では比較的簡単でしたが、Docker はすべてを制御しようとするうっとうしいガールフレンドのようなもので、うまく動作させるのに苦労しています。

ネットプランの構成は次のとおりです。

network:
  version: 2

  ethernets:
    enp5s0:
      match:
        macaddress: 84:a9:3e:86:7b:d4
      set-name: enp5s0

    enx0s0:
      match:
        macaddress: 00:e0:4c:02:61:57
      set-name: enx0s0

  bridges:
    vlan69: # Untagged
      interfaces:
        - enp5s0
      parameters:
        stp: true
        forward-delay: 4
      dhcp4: yes
      dhcp6: no

    vlan36:
      interfaces:
        - enx0s0.36
      parameters:
        stp: true
        forward-delay: 4
      dhcp4: no
      dhcp6: no

    vlan32:
      interfaces:
        - enp5s0.32
      parameters:
        stp: true
        forward-delay: 4
      dhcp4: no
      dhcp6: no

    vlan1:
      interfaces:
        - enp5s0.1
      parameters:
        stp: true
        forward-delay: 4
      dhcp4: no
      dhcp6: no

  vlans:
    enx0s0.36:
      accept-ra: no
      id: 36
      link: enx0s0

    enp5s0.32:
      accept-ra: no
      id: 32
      link: enp5s0

    enp5s0.1:
      accept-ra: no
      id: 1
      link: enp5s0

LXD を使用すると、VLAN の 1 つに NIC を追加するだけで簡単に実行できます。

devices:
  enp1s0:
    nictype: bridged
    parent: vlan36
    type: nic

しかし、どうやら Docker の扱いはそれほど簡単ではないようです。Docker ネットワークのソースを何時間も検索した結果、これにたどり着きました。

root@host:~# docker network create vlan32 \
-o com.docker.network.bridge.inhibit_ipv4=true \ 
-o com.docker.network.bridge.name=vlan32 \ 
--subnet=192.168.32.0/24 \
--gateway=192.168.32.254

これはうまく機能しているように見えました。コンテナーの接続は問題なく機能し、コンテナーはネットワークにアクセスでき、ルーターはコンテナーが接続されていることを確認でき、ネットワーク上の他のデバイスへの ping も機能していましたが、コンテナーへの着信接続を確立することはできません。コンテナーに ping すると、到達不能なネットワークが表示されます。これは Docker だけでなく LXD にも影響します。つまり、Docker は単にブリッジを採用しているように見えますが、何らかの影響を与えます。Docker サービスを無効にして再起動すると、LXD コンテナーの問題は修正されます。

答え1

この解決策は正しいようには思えませんが、機能し、希望どおりに動作するようです。問題は、ドライバーが をbridgeサポートしていないことだと思います-o parent。代わりに、独自のデバイスを作成します。

ネットプラン

network:
  version: 2

  ethernets:
    <NIC>:
      dhcp4: yes

  bridges:
    vlan<VLAN>:
      interfaces:
        - <NIC>.<VLAN>
      parameters:
        stp: true
        forward-delay: 4
      dhcp4: no
      dhcp6: no

  vlans:
    <NIC>.<VLAN>:
      accept-ra: no
      id: <VLAN>
      link: <NIC>

翻訳

devices:
  enp1s0:
    nictype: bridged
    parent: vlan<VLAN>

ドッカー

root@host:~# docker network create <NETWORK_NAME> \
            --subnet 192.168.x.x/24 \
            --gateway 192.168.x.254 \
            --driver macvlan \
            -o parent=vlan<VLAN>

関連情報