🌐

[Ubuntu Server] Netplanで仮想ブリッジを作成し、LXCコンテナを外部NWに接続する

2024/10/13に公開

やりたいこと

macvlanのようにコンテナをL2レベルで露出させた上で、ホスト<->コンテナ間通信を自由に行いたい。
つまり、Hyper-VでいうところのExternal Switchを構成したい。VMwareでいうところの普通の仮想スイッチ。

もしも下記に該当する場合は他のやり方で。どちらも仮想ブリッジを挟まないため早い(らしい)です

  • ホスト<->コンテナ間の通信が不要: macvlanを使う
  • ホストマシンでSR-IOVが使える: SR-IOVを使う

やること

作成の段階でネットワークが切断されるので注意。直接コンソール接続できる環境でやるのが安心。

作業の流れは下記の通り
1.Netplanで仮想ブリッジを作成
2.仮想ブリッジにコンテナを接続

1.Netplanで仮想ブリッジを作成

Netplanの設定ファイルを/ect/netplan/99-config.yamlとして作成する。(ファイル名は任意でよいが、アルファベット順に参照されていくことに注意)
初期設定の00-installer-config.yaml50-cloud-init.yamlは触らない。

network:
  version: 2
  ethernets:
    eth0:
      dhcp4: false
      dhcp6: false
  bridges:
    br0:
      dhcp4: true
      dhcp6: true
      interfaces:
        - eth0

上記は、eth0上に仮想ブリッジbr0を作成し、DHCPでIPをもってくる場合の例。
ホストマシンに与えるIPアドレスは、仮想ブリッジデバイス側に設定する。[1]

ここでのIP取得はDHCPでやっているが、固定IPでももちろんよい。
特にSSH等でNW越しに作業している場合は固定IPのほうがいいかも(DHCPだとどのIPもらったか探さないといけない)

設定したら、下記のどちらかで適用

# 即時適用
$ sudo netplan apply

# または、tryを使うと、timeoutまでにEnterが押されなければ設定を巻き戻してくれる
# SSH接続の場合はセッション切れると対応できないので、tmux等と併用するのがよさそう
$ sudo netplan try --timeout 60

2.仮想ブリッジにコンテナを接続

まず、下記で仮想ブリッジにつなぐためのプロファイルを設定する。
defaultプロファイルに設定しているが、新規作成してもよい。

# ホストのbr0に接続し、コンテナにはeth0として見せる
$ lxc network attach-profile br0 default eth0

# ストレージプールを設定。NWとは関係ないですがプロファイルの設定として必要
$ lxc profile device add default root disk path=/ pool=default

完了したら、このプロファイルで好きなコンテナを起動する。

$ lxc launch images:almalinux/9 -p default

参考

脚注
  1. ArchWiki によると、ブリッジを作成するとeth0がルーティングに使用されなくなるため、らしい ↩︎

Discussion