LXDでローカルネットワークの別端末からアクセス出来るようにする

今回の内容はLXDを試すでc1インスタンスを作成したままの状態であることを前提にして話を進めます。


最初にホスト側(Raspberry Pi 5)でターミナル(LXTerminal)を開き、下記のコマンドを実行し、c1インスタンスのIPアドレスを確認しておきます。


$ lxc list
+------+---------+----------------------+-----------------------------------------------+-----------+-----------+
| NAME |  STATE  |         IPV4         |                     IPV6                      |   TYPE    | SNAPSHOTS |
+------+---------+----------------------+-----------------------------------------------+-----------+-----------+
| c1   | RUNNING | 10.198.186.17 (eth0) | fd42:c8d4:ad5d:e9bd:216:3eff:fed0:5308 (eth0) | CONTAINER | 0         |
+------+---------+----------------------+-----------------------------------------------+-----------+-----------+

今回の場合では、c1インスタンスのIPアドレスは10.198.186.17になります。

このIPアドレスは、ホスト(Raspberry Pi OS)とインスタンス(Ubuntu 24.04)間、つまりは同一マシン内でのやり取りに使用するIPアドレスになりまして、ローカルネットワークの他の端末(PCやスマホ等)からアクセスすることは出来ません。


ここで、ネットワークフォワードを活用します。

ネットワークフォワードを設定する為に下記の操作を行います。


はじめにホストのローカルIPアドレスを調べます。

$ hostname -I
192.168.1.62 10.198.186.1 240d:1e:3bb:5500:90ab:dd10:efa4:dff8 fd42:c8d4:ad5d:e9bd::1

今回の場合では、ホストに割り当てられたローカルIPアドレスは192.168.1.62でした。

このアドレスを参考にして、下記のコマンドを実行します。

$ lxc network forward create lxdbr0 192.168.1.62
Network forward 192.168.1.62 created

192.168.1.62のネットワークフォワードが生成されました。


次に下記のコマンドでホストのローカルIPアドレスとc1インスタンスに振り当てられたIPアドレスを紐付けます。

$ lxc network forward port add lxdbr0 192.168.1.62 tcp 8080 10.198.186.17 80

上記コマンドはネットワークフォワードの192.168.1.62のアドレスと、lxdbr0のネットワーク内の10.198.186.17を繋ぐという意味になります。

※lxdbr0に関してはLXDを試すで触れています。

※8080と80はポート番号になり、後ほど使用します。




c1インスタンスでサーバを立ち上げます。

ターミナル(LXTerminal)で下記の操作を行います。

$ lxc exec c1 bash
# nano index.html

※# はコメントではなく、rootアカウントで操作している意味になります


index.html

hello c1 container.

index.htmlのファイルが作成できたら、下記のコマンドでサーバを起動します。

# python3 -m http.server 80



ホスト側(Raspberry Pi OS)の方でChromium等のブラウザを開き、

http://10.198.186.17:80

※末尾の:80は省略可

http://192.168.1.62:8080

でアクセス出来ることを確認します。


どちらでアクセスしても、

hello c1 container.

が表示されましたら、ローカルネットワーク内の別の端末(PCやスマホ)のブラウザを開き、http://192.168.1.62:8080にアクセス出来ることを確認してみましょう。




最後にネットワークフォワードの削除を見ていきます。

ホスト側のターミナル(LXTerminal)を開き、下記の操作を行います。

$ lxc network forward port remove lxdbr0 192.168.1.62
$ lxc network forward delete lxdbr0 192.168.1.62
Network forward 192.168.1.62 deleted
マインクラフト用ビジュアルエディタを開発しています。
詳しくはinunosinsi/mcws_blockly - githubをご覧ください。