Ubuntu Weekly Recipe

第535回 LXD 3.0のネットワーク設定

この記事を読むのに必要な時間:およそ 7 分

第521回ではLXD 3.0の基本的な使い方を紹介しました。今回はLXD 2.0から3.0にかけて大幅に改善されたネットワーク周りの設定について紹介しましょう。特に次のような設定方法について解説します。

  • ネットワークインターフェースの追加
  • 固定IPアドレスの指定
  • 標準のインターフェースeth0のカスタマイズ
  • 特定のアドレス・ポートにホストの外からアクセスする方法

LXDにおけるネットワークの設定

現在のLXD 3.0にはネットワークに関する2種類の設定インターフェースが存在します※1)⁠

※1
Ubuntu 18.04 LTSであればLXD 3.0をかんたんにインストールできます。16.04だと2.0系がインストールされますので、3.0系を使いたい場合はxenial-backportsを指定してインストールしてください

ブリッジインターフェースはホスト上でlxd initを実行したときにも設定されます。特に設定を変更していないなら「lxdbr0」という名前のブリッジインターフェースが作られていることでしょう。

$ lxc network show lxdbr0
config:
  ipv4.address: 10.154.195.1/24
  ipv4.nat: "true"
  ipv6.address: fd42:284:93c1:a178::1/64
  ipv6.nat: "true"
description: ""
name: lxdbr0
type: bridge
used_by: []
managed: true
status: Created
locations:
- none

$ ip addr show dev lxdbr0
3: lxdbr0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
    link/ether fe:53:81:5f:d5:f3 brd ff:ff:ff:ff:ff:ff
    inet 10.154.195.1/24 scope global lxdbr0
       valid_lft forever preferred_lft forever
    inet6 fd42:284:93c1:a178::1/64 scope global
       valid_lft forever preferred_lft forever
    inet6 fe80::284f:6aff:fef6:c174/64 scope link
       valid_lft forever preferred_lft forever

上記lxdbr0では,IPv4/IPv6のアドレスレンジが設定されており,それが作成されたコンテナに割り当てられます。

Ubuntu 16.04 LTSのLXD 2.0では,LXDが作る唯一のブリッジインターフェースを使うか,別途自分で作ったインターフェースを使うかの二択でした。LXD 3.0(に至るまでの2.xの間)で,lxc networkコマンドを使うことで,LXDが管理する複数のブリッジインターフェースを持てるようになり,コンテナごとにインターフェースの割り当てを変えられるようになったのです。これにより同じホスト上で異なるネットワークセグメントに属する複数のコンテナを構築できます。

個々のコンテナインスタンスにおけるネットワークインターフェースはlxc config deviceコマンドによって追加・削除します。ただし何も設定せずにコンテナを起動した場合は,lxc configは未設定の状態となり,lxc profileの値が継承されます。

たとえば何も設定せずに「container」コンテナを作成・起動してみましょう。

コンテナの作成・起動
$ lxc launch ubuntu:18.04 container

デバイス設定は空の状態
$ lxc config device show container
{}

コンテナの中にはeth0が存在する
$ lxc exec container ip addr show eth0
6: eth0@if7: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
    link/ether 00:16:3e:e5:c5:37 brd ff:ff:ff:ff:ff:ff link-netnsid 0
    inet 10.154.195.67/24 brd 10.154.195.255 scope global dynamic eth0
       valid_lft 3553sec preferred_lft 3553sec
    inet6 fd42:284:93c1:a178:216:3eff:fee5:c537/64 scope global dynamic mngtmpaddr noprefixroute
       valid_lft 3596sec preferred_lft 3596sec
    inet6 fe80::216:3eff:fee5:c537/64 scope link
       valid_lft forever preferred_lft forever

デバイス設定は空にも関わらずeth0インターフェースが作られています。これは作成したコンテナには自動的にdefaultプロファイルが適用され,そのプロファイルの中にeth0についての設定が書かれているからです。defaultプロファイルの内容を確認してみましょう。

$ lxc profile show default
config: {}
description: ""
devices:
  eth0:
    name: eth0
    nictype: bridged
    parent: lxdbr0
    type: nic
  root:
    path: /
    pool: default
    type: disk
name: default
used_by: []

上記のプロファイルの設定は,そのプロファイルが適用されているコンテナにも継承されます。ちなみに,lxc config device showではなくlxc config show--expandedオプションを付加して実行すれば,継承されたプロファイルの内容も展開されて表示されます。

LXDにおけるプロファイルの設定はまた別の機会に譲るとして,今回はネットワークの基本設定をいくつか紹介しましょう※2)⁠

※2
コンテナで使われているネットワークやその名前空間については,本サイトで連載されているLXCで学ぶコンテナ入門Linuxカーネルのコンテナ機能[5]⁠ ─ネットワークが参考になるでしょう。

著者プロフィール

柴田充也(しばたみつや)

Ubuntu Japanese Team Member株式会社 創夢所属。数年前にLaunchpad上でStellariumの翻訳をしたことがきっかけで,Ubuntuの翻訳にも関わるようになりました。