lXDの WEB-UIを使って実際に Linuxシステムコンテナを作ります。
「Linuxシステムコンテナ(LXD) 1」で、LXDの WEB-UIを使えるようにしましたので、ここでは実際に Linuxシステムコンテナを作ってみます。
と、WEB−UIにログインする前に、LXDのネットワークがどうなってるかなんですが、初期状態だとどうもこんな感じです。
私は Linuxシステムコンテナとして作ったサーバーを家庭内LANに公開して使いたいのです。
でも LXDのネットワークは LXDの中に閉じていて、コンテナや仮想マシン同士は通信できるものの、外からコンテナにアクセスすることができなさそうです。
このようなニーズは普通にあるだろうと思って調べてみると、どうやらホスト側にブリッジインターフェイスを作ってそこにコンテナを繋げば良いようです。
強いて図にするとこんな感じで。
ホストのブリッジインターフェイスは LXDの範疇を外れて、ホストOSが管理するものになります。
Ubuntu Server 22.04.3で具体的にこれを作るには
[/etc/netplan/00-installer-config.yaml]ファイルを書き換えます。
[/etc/netplan/00-installer-config.yaml]変更前
# This is the network config written by 'subiquity' network: ethernets: ens32: addresses: - 192.168.1.102/24 nameservers: addresses: - 192.168.1.1 search: [] routes: - to: default via: 192.168.1.1 version: 2
[/etc/netplan/00-installer-config.yaml]変更後
# This is the network config written by 'subiquity'
network:
version: 2
ethernets:
ens32:
dhcp4: false
dhcp6: false
bridges:
br0:
interfaces:
- ens32
addresses:
- 192.168.1.102/24 ← こちらにホスト用のIPアドレスがきています。
routes:
- to: default
via: 192.168.1.1
nameservers:
addresses:
- 192.168.1.1
parameters:
forward-delay: 0
stp: no
optional: true
これで最善の設定かというとちょっと怪しいです。
上手く動くと良いけど。
それから、上の設定で Ubuntu 20.04まで OKだったそうなんですが、22.04からこの周辺が変わっていて、22.04だと以下もやらないと上手く行きませんでした。
変更対象は [/usr/lib/systemd/network/99-default.link]ファイルです。
[/usr/lib/systemd/network/99-default.link]変更前
# SPDX-License-Identifier: LGPL-2.1-or-later # # This file is part of systemd. # # systemd is free software; you can redistribute it and/or modify it # under the terms of the GNU Lesser General Public License as published by # the Free Software Foundation; either version 2.1 of the License, or # (at your option) any later version. [Match] OriginalName=* [Link] NamePolicy=keep kernel database onboard slot path AlternativeNamesPolicy=database onboard slot path MACAddressPolicy=persistent
[/usr/lib/systemd/network/99-default.link]変更後
# SPDX-License-Identifier: LGPL-2.1-or-later
#
# This file is part of systemd.
#
# systemd is free software; you can redistribute it and/or modify it
# under the terms of the GNU Lesser General Public License as published by
# the Free Software Foundation; either version 2.1 of the License, or
# (at your option) any later version.
[Match]
OriginalName=*
[Link]
NamePolicy=keep kernel database onboard slot path
AlternativeNamesPolicy=database onboard slot path
MACAddressPolicy=none
MACアドレスの紐付けに関係するところのようですが、具体的にどういう仕組みなのか裏が取れていません。
これらの変更内容を反映するため、一度 Ubuntu Server 22.04.3はリブートしました。
リブート後に ipコマンド(show / manipulate routing, network devices, interfaces and tunnels)で設定変更の結果がどう反映されたか見てみます。
subro@UbuntuServer2204-1:$ ip a
1: lo: 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: ens32: mtu 1500 qdisc fq_codel master br0 state UP group default qlen 1000
link/ether 00:0c:29:6d:4b:2c brd ff:ff:ff:ff:ff:ff
altname enp2s0
3: br0: mtu 1500 qdisc noqueue state UP group default qlen 1000
link/ether 00:0c:29:6d:4b:2c brd ff:ff:ff:ff:ff:ff
inet 192.168.1.102/24 brd 192.168.1.255 scope global br0
valid_lft forever preferred_lft forever
inet6 2408:82:a8:0:20c:29ff:fe6d:4b2c/64 scope global dynamic mngtmpaddr noprefixroute
valid_lft 14024sec preferred_lft 12224sec
inet6 fe80::20c:29ff:fe6d:4b2c/64 scope link
valid_lft forever preferred_lft forever
3番に [br0] というブリッジインターフェイスができているし、元々 2番の [ens32] にあった IPアドレスも 3番に移動しています。
とりあえず、ブリッジインターフェイスの設定はこれで良さげです。
次は WEB-UIにログインします。
ログインすると言ってもユーザー証明書を使っているので、アカウント/パスワードの入力はありません。
Linuxシステムコンテナを作るにあたり、ディスク領域が必要ですので作ります。
左のメニューで [Storage] を選択し、Create storage poolを押します。
[Name] には任意のものを好きにつけます。
[Driver] はデフォルトで [ZFS] が表示されていて、説明にも「ZFSは最高!」と書いてありますので、そのままにしました。
[Size in GiB] がギガバイト単位のストレージのサイズで、とりあえず 5GBにしておきました。
Createを押します。
これがストレージのでき上がりの画面です。
次は Linuxシステムコンテナを作る時の設定の雛形であるプロファイルを作ります。
デフォルトで [Default] というプロファイルがあるのですが、どうもこのプロファイルを使うとこちらの絵の形になるようです。
これだと困るので、これから作成するLinuxシステムコンテナが、上で作った [br0] というブリッジインターフェイスに接続されるようにするため、そのネットワーク設定を持ったプロファイルを新規で作ります。
左のメニューで [Profile] を選択し、Create profileを押します。
[Profile name] は任意のものを好きに付けられるので、「やったねパパ!明日は〜」的なものにしました。
このプロファイルを使った場合、[LinuxSystemContainer]ストレージが使われるようにします。
[Create Profile] のメニューから、[Advanced] - [Disk devices] を選択するとこのような画面に成りますので、鉛筆マークをクリックします。
[Pool]行に [LinuxSystemContainer] を選択します。
本当はこの次に [Network devices] の設定をしたいのですが、後述の事情でできないので、このままCreateを押します。
これがプロファイルのでき上がりの画面です。
でもって、プロファイルにネットワークの設定ができていないんですが、単に WEB-UIだとこれからやる設定ができないからなのです。
バージョンアップしていくうちにできるようにしてくれるかも知れませんが、できないものは仕方ありません。
以下の通り、lxcコマンドでやることになります。
[HomeLAN]プロファイルを使った Linuxシステムコンテナの [eth0]インターフェイスは [br0]ブリッジインターフェイスに接続される
という設定をしています。
subro@UbuntuServer2204-1:$ sudo lxc network attach-profile br0 HomeLAN eth0
何も出ませんが、できている模様。
上記コマンドを実行した後に、WEB-UIで [HomeLAN]プロファイルの [Network devices]の画面には、[eth0] は出るけど、[br0] はどこにも出ないんですよね。
しかしこれでやっと Linuxシステムコンテナ作りの準備ができました。
やっとこコンテナを作ります。
左のメニューで [Instances] を選択し、Create instanceを押します。
[Instance name] は適当に好きなものを付け、Browse imagesを押します。
作れるコンテナの一覧が出ますので、好きなものを選んでSelectを押します。
色々ありますけど、Ubuntuは 10.04がありました。
[Profiles] に上で苦心して作った [HomeLAN] を選び、Create and startを押します。
[Status]列が [Running] になったら、もう動いています。
[Container1] をダブルクリックします。
[IPV4] のには、ウチの光ルーターで動いている DHCPサーバーから貸与されている IPアドレスが割り振られているあたり、ちゃんと家庭内LANに繋がってそうな雰囲気。
[Terminal]タブを選ぶと、[root]ユーザーでログインした状態のコマンドプロンプトが使えます。
==========
ちょっと長くなってしまったので一端ここで切りますけど、問題なく使えるのだろうか?という疑問を残しつつ…
「Linuxシステムコンテナ(LXD) 3」に続きます。