Ubuntu Weekly Recipe

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

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

ブリッジインターフェースで固定IPアドレスを設定する

コンテナがUbuntu 18.04 LTSの場合,何も設定しなければCloud-Init経由でeth0がDHCPv4を利用してIPv4アドレスを,RAを利用してIPv6を取得する設定になっています※5)⁠具体的にはLXD自身がdnsmasqを起動し,lxdbr0に紐付けます。このdnsmasqがDHCPv4およびステートレスDHCPv6/SLAACを利用してIPアドレスを設定するわけです。

※5
Ubuntu系のコンテナは基本的にCloud-Initを使う部分は同じですが,バージョンによってnetplan経由だったり従来の/etc/network/interfaces経由だったりします。Ubuntu以外のコンテナについては各ディストリビューションの設定に依存します。

たとえばIPv4のlease情報は次のように確認できます。

$ lxc exec container -- sh -c 'cat /run/systemd/netif/leases/*'
# This is private data. Do not parse.
ADDRESS=10.154.195.28
NETMASK=255.255.255.0
ROUTER=10.154.195.1
SERVER_ADDRESS=10.154.195.1
NEXT_SERVER=10.154.195.1
BROADCAST=10.154.195.255
T1=1800
T2=3150
LIFETIME=3600
DNS=10.154.195.1
DOMAINNAME=lxd
HOSTNAME=container
CLIENTID=ff8210b60000020000ab11cd753f09779ead4b

単にホストからコンテナのIPアドレスを知りたければlxc listコマンドを使うと良いでしょう。

$ lxc list container
+-----------+---------+----------------------+----------------------------------------------+------------+-----------+
|   NAME    |  STATE  |         IPV4         |                     IPV6                     |    TYPE    | SNAPSHOTS |
+-----------+---------+----------------------+----------------------------------------------+------------+-----------+
| container | RUNNING | 10.154.195.28 (eth0) | fd42:284:93c1:a178:216:3eff:fea7:d454 (eth0) | PERSISTENT | 0         |
+-----------+---------+----------------------+----------------------------------------------+------------+-----------+

JSONなど機械読み取り可能なフォーマットが良い場合は
「--format」オプションを指定する
$ lxc list --format=json container
(略)

コンテナの用途によっては静的にIPアドレスを割り当てたい場合もあるでしょう。次のようにbridgedなネットワークインターフェースデバイスを作成し,⁠ipv4.address」キーをセットすれば,LXDがコンテナ起動時に静的なIPv4アドレスを割り当ててくれます。

まずbridgedなネットワークインターフェースデバイスを作成します。LXDには標準でlxdbr0ネットワークが作成されていますので,これを親に持つインターフェース「eth1」を作成しましょう。

$ lxc network attach lxdbr0 container eth1

次にこのインターフェースに対してIPv4アドレス「10.154.195.100」を割り当てます。

アドレスの割り当て
$ lxc config device set container eth1 ipv4.address 10.154.195.100

デバイス情報の確認
$ lxc config device show container
eth1:
  ipv4.address: 10.154.195.100
  nictype: bridged
  parent: lxdbr0
  type: nic

「ipv4.address」による設定では,実際にこのIPv4アドレスをコンテナに割り当てるのはLXDが実行しているdnsmasqの役割です。つまりコンテナから見るとDHCP経由で固定アドレスを取得することになります。

IPアドレスの割り当て
$ lxc exec container dhclient eth1

コンテナの状態の確認
$ lxc list container
+-----------+---------+-----------------------+----------------------------------------------+------------+-----------+
|   NAME    |  STATE  |         IPV4          |                     IPV6                     |    TYPE    | SNAPSHOTS |
+-----------+---------+-----------------------+----------------------------------------------+------------+-----------+
| container | RUNNING | 10.154.195.28 (eth0)  | fd42:284:93c1:a178:216:3eff:fea7:d454 (eth0) | PERSISTENT | 0         |
|           |         | 10.154.195.100 (eth1) | fd42:284:93c1:a178:216:3eff:fe37:425f (eth1) |            |           |
+-----------+---------+-----------------------+----------------------------------------------+------------+-----------+

うまくアドレスが割り当たっているようであれば,第533回のように起動時にeth1に対してDHCPでアドレスを取得するよう,netplanの設定ファイルを変更しておきましょう。繰り返しになりますが,コンテナからはDHCP経由でアドレスを取得します。よってnetplanの設定も「dhcp4: true」としてください。LXDがleaseしているアドレスのリストはlxc network list-leasesで確認できます。

$ lxc network list-leases lxdbr0
+-----------+-------------------+----------------+---------+
| HOSTNAME  |    MAC ADDRESS    |   IP ADDRESS   |  TYPE   |
+-----------+-------------------+----------------+---------+
| container | 00:16:3e:37:42:5f | 10.154.195.100 | DYNAMIC |
+-----------+-------------------+----------------+---------+

ちなみに「ipv6.address」を使えば,静的なIPv6アドレスを指定可能です。ただしこの設定を使うためには,LXDのステートフルDHCPv6を有効化する必要があります※6)⁠

※6
ステートレスDHCPv6/SLAACの場合,Modified EUI-64なアドレスが割り当てられます。

なお,dnsmasqによるIPアドレスレンジは,lxd init時に設定しています。特に指定せずにすべて初期値どおりに設定していたとしたら,CIDR(Classless Inter-Domain Routing)形式でランダムなアドレスレンジが指定されているはずです。任意の値に変更したい場合は,次のように実行してください。

$ lxc config set lxdbr0 ipv4.dhcp.ranges \
  10.154.195.10-10.154.195.10.20,10.154.195.110-10.154.195.10.120

連続する範囲をハイフンで,不連続な範囲をカンマで区切って指定できます。

著者プロフィール

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

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

コメント

コメントの記入