お金をかけずにサーバーの勉強をしよう

Linuxシステムコンテナ(LXD) 2

2023年10月26日

メニューへ戻る

lXDの WEB-UIを使って実際に Linuxシステムコンテナを作ります。

Linuxシステムコンテナ(LXD) 1」で、LXDの WEB-UIを使えるようにしましたので、ここでは実際に Linuxシステムコンテナを作ってみます。

と、WEB−UIにログインする前に、LXDのネットワークがどうなってるかなんですが、初期状態だとどうもこんな感じです。
構成図 1

私は Linuxシステムコンテナとして作ったサーバーを家庭内LANに公開して使いたいのです。

でも LXDのネットワークは LXDの中に閉じていて、コンテナや仮想マシン同士は通信できるものの、外からコンテナにアクセスすることができなさそうです。

このようなニーズは普通にあるだろうと思って調べてみると、どうやらホスト側にブリッジインターフェイスを作ってそこにコンテナを繋げば良いようです。

強いて図にするとこんな感じで。
構成図 2

ホストのブリッジインターフェイスは 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を押します。
LXD WEB-UI 1

[Name] には任意のものを好きにつけます。
[Driver] はデフォルトで [ZFS] が表示されていて、説明にも「ZFSは最高!」と書いてありますので、そのままにしました。
[Size in GiB] がギガバイト単位のストレージのサイズで、とりあえず 5GBにしておきました。
Createを押します。
LXD WEB-UI 2

これがストレージのでき上がりの画面です。
LXD WEB-UI 3

次は Linuxシステムコンテナを作る時の設定の雛形であるプロファイルを作ります。

デフォルトで [Default] というプロファイルがあるのですが、どうもこのプロファイルを使うとこちらの絵の形になるようです。
構成図 1

これだと困るので、これから作成するLinuxシステムコンテナが、上で作った [br0] というブリッジインターフェイスに接続されるようにするため、そのネットワーク設定を持ったプロファイルを新規で作ります。

左のメニューで [Profile] を選択し、Create profileを押します。
LXD WEB-UI 4

[Profile name] は任意のものを好きに付けられるので、「やったねパパ!明日は〜」的なものにしました。
LXD WEB-UI 5

このプロファイルを使った場合、[LinuxSystemContainer]ストレージが使われるようにします。

[Create Profile] のメニューから、[Advanced] - [Disk devices] を選択するとこのような画面に成りますので、鉛筆マークをクリックします。
LXD WEB-UI 6

[Pool]行に [LinuxSystemContainer] を選択します。
本当はこの次に [Network devices] の設定をしたいのですが、後述の事情でできないので、このままCreateを押します。
LXD WEB-UI 7

これがプロファイルのでき上がりの画面です。
LXD WEB-UI 8

でもって、プロファイルにネットワークの設定ができていないんですが、単に 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] はどこにも出ないんですよね。
LXD WEB-UI 9

しかしこれでやっと Linuxシステムコンテナ作りの準備ができました。


やっとこコンテナを作ります。

左のメニューで [Instances] を選択し、Create instanceを押します。
LXD WEB-UI 10

[Instance name] は適当に好きなものを付け、Browse imagesを押します。
LXD WEB-UI 11

作れるコンテナの一覧が出ますので、好きなものを選んでSelectを押します。
色々ありますけど、Ubuntuは 10.04がありました。
LXD WEB-UI 12

[Profiles] に上で苦心して作った [HomeLAN] を選び、Create and startを押します。
LXD WEB-UI 13

[Status]列が [Running] になったら、もう動いています。
[Container1] をダブルクリックします。
LXD WEB-UI 14

[IPV4] のには、ウチの光ルーターで動いている DHCPサーバーから貸与されている IPアドレスが割り振られているあたり、ちゃんと家庭内LANに繋がってそうな雰囲気。
LXD WEB-UI 15

[Terminal]タブを選ぶと、[root]ユーザーでログインした状態のコマンドプロンプトが使えます。
LXD WEB-UI 16


==========
ちょっと長くなってしまったので一端ここで切りますけど、問題なく使えるのだろうか?という疑問を残しつつ…

Linuxシステムコンテナ(LXD) 3」に続きます。