概要
LXDのコンテナをホストと同じネットワークで動かすと、
あたかも同じネットワーク上にサーバを1台追加したように扱うことができて便利。
ただ、Ubuntu 18.04からはネットワークの設定がnetplanに変更されていて、
それまでのbrctlと/etc/network/interfaces
を使った設定方法とはちょっとやり方が変わってくるので、
netplanでの設定方法とLXDの設定方法をまとめてみた。
手順
bridge-utils
のインストール
$ sudo apt install bridge-utils
→ 2019.06.29追記) これは不要かもしれない。
sysctl.conf設定
下記部分をコメントアウト。
#net.ipv4.ip_forward=1
net.ipv4.ip_forward=1
設定を反映(再起動でも良い)。
$ sudo sysctl -p
netplanの設定
ホストのnetplan設定ファイル(Ubuntu 18.04 Serverでは/etc/netplan/
に新たな設定ファイル作る)を以下のように設定。
この例では、もともとのNICインターフェースはenp3s0
という名前で、
新たにbr0
というブリッジを作成。
ホストのネットワーク設定は下記のようになる。
- IPアドレス:
192.168.10.232
- ネットマスク:
255.255.255.0
- ゲートウェイ:
192.168.10.253
- DNS:
192.168.10.234
,192.168.10.236
network:
ethernets:
enp3s0:
dhcp4: false
bridges:
br0:
interfaces:
- enp3s0
dhcp4: false
addresses:
- 192.168.10.232/24
gateway4: 192.168.10.253
nameservers:
addresses:
- 192.168.10.236
- 192.168.10.234
parameters:
forward-delay: 0
stp: false
optional: true
version: 2
設定ファイルの内容をnetplan apply
で適用し、ip a
で確認。
なお、DHCPで取得したアドレスがある場合は、ip addr flush dev enp0s3
を実行してからnetplan apply
をするのだが、
SSHで接続しているときは一旦接続が切れるので注意。
$ sudo netplan apply
$ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: enp3s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq master br0 state UP group default qlen 1000
link/ether 00:21:5a:f3:49:86 brd ff:ff:ff:ff:ff:ff
4: br0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
link/ether 42:c3:b5:d3:6d:98 brd ff:ff:ff:ff:ff:ff
inet 192.168.10.232/24 brd 192.168.10.255 scope global br0
valid_lft forever preferred_lft forever
inet6 fe80::40c3:b5ff:fed3:6d98/64 scope link
valid_lft forever preferred_lft forever
5: enp5s0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000
link/ether 00:21:5a:f3:49:84 brd ff:ff:ff:ff:ff:ff
LXDの初期設定
lxd init
として、LXDの初期設定を行う。
途中、先ほど作成したブリッジbr0
を利用するように設定。
-
Would you like to create a new network bridge? (yes/no) [default=yes]
:no
と入力 -
Would you like to configure LXD to use an existing bridge or host interface? (yes/no) [default=no]
:yes
と入力 -
Name of the existing bridge or host interface
:br0
と入力
$ sudo lxd init
Would you like to use LXD clustering? (yes/no) [default=no]:
Do you want to configure a new storage pool? (yes/no) [default=yes]:
Name of the new storage pool [default=default]:
Name of the storage backend to use (btrfs, dir, lvm) [default=btrfs]: dir
Would you like to connect to a MAAS server? (yes/no) [default=no]: no
Would you like to create a new network bridge? (yes/no) [default=yes]: no
Would you like to configure LXD to use an existing bridge or host interface? (yes/no) [default=no]: yes
Name of the existing bridge or host interface: br0
Is this interface connected to your MAAS server? (yes/no) [default=yes]: no
Would you like LXD to be available over the network? (yes/no) [default=no]: no
Would you like stale cached images to be updated automatically? (yes/no) [default=yes]
Would you like a YAML "lxd init" preseed to be printed? (yes/no) [default=no]:
$ lxc version
Client version: 3.0.0
Server version: 3.0.0
これにて完了。
LXDがすでに設定済みの場合
lxc profile edit default
でコンテナが使うネットワークを設定する。
デフォルトであれば、lxdbr0
となっている部分があるはずなので、
これを上記で作成したbr0
に書き換えればOK。
後からNATネットワークを追加する場合
以下のコマンドで新規ネットワークを作成する(この例ではbr1
)。
lxc network create br1
あとは作ったネットワークを使うプロファイルを作成する。
既存のdefault
などをコピーして編集する(この例では名前をnatnetwork)。
lxc profile copy default natnetwork
lxc profile edit natnetwork
Viでネットワークを設定する箇所があるので、br0
をbr1
などと変更して保存
既存のコンテナのプロファイルを切り替えて、所属するネットワークを変更する場合は、lxc profile assign
とする。
lxc profile assign CONTAINER natnetwork