LXDホストのIPアドレスを変更する

LXD(lxc)でネットワークアクセスを有効にしていて、特定のIPアドレスに限っている場合、ホストのIPアドレスを変更した際にlxcコマンドがエラーとなる。

設定を行うlxc config edit自体が動作しないので対処法に困ったが、何とか見つけることが出来た。

環境

  • 変更前IPアドレス: 192.168.10.217/24
  • 変更後IPアドレス: 192.168.10.161/24

現象

lxd initのときに訊かれる、「ネットワーク経由でLXDにアクセスできるようにするか?」という質問にyesと回答し、 その次の使用するIPアドレスを訊く質問に特定のNICに割り当てられているIPアドレスを設定した場合、 ローカルのlxcコマンドもこのIPアドレスに対して通信する。

Would you like the LXD server to be available over the network? (yes/no) [default=no]: yes
Address to bind LXD to (not including port) [default=all]:192.168.10.217

そのため、ホストのIPアドレスを変更した後にlxcコマンドを実行しようとしてもソケットと通信できないとエラーが出る。

$ lxc list
Error: Get "http://unix.socket/1.0": EOF

解決手順

そこで、ループバックアドレスとして変更前のIPアドレスを追加する(サブネットマスクは/32)。

$ sudo ip -4 addr add 192.168.10.217/32 dev lo

正常にlxc listが動作することを確認。

$ lxc list
+--------------+---------+------------------------+------+-----------+-----------+
|     NAME     |  STATE  |          IPV4          | IPV6 |   TYPE    | SNAPSHOTS |
+--------------+---------+------------------------+------+-----------+-----------+
| ******       | RUNNING | ***.***.**.198 (eth0)  |      | CONTAINER | 0         |
+--------------+---------+------------------------+------+-----------+-----------+
| ************ | RUNNING | ***.***.***.102 (eth0) |      | CONTAINER | 0         |
+--------------+---------+------------------------+------+-----------+-----------+
| *****        | RUNNING | **.***.***.146 (eth0)  |      | CONTAINER | 0         |
+--------------+---------+------------------------+------+-----------+-----------+
| ********     | RUNNING | **.***.***.227 (eth0)  |      | CONTAINER | 0         |
+--------------+---------+------------------------+------+-----------+-----------+
| ********     | RUNNING | **.***.***.177 (eth0)  |      | CONTAINER | 0         |
+--------------+---------+------------------------+------+-----------+-----------+
| ********     | RUNNING | ***.***.***.103 (eth0) |      | CONTAINER | 0         |
+--------------+---------+------------------------+------+-----------+-----------+
| ******       | RUNNING | ***.***.***.104 (eth0) |      | CONTAINER | 0         |
+--------------+---------+------------------------+------+-----------+-----------+

この状態でならlxc config ***が実行できる。変更前の設定は、以前のIPアドレスのまま。

$ lxc config show
config:
  core.https_address: 192.168.10.217:8443
  core.trust_password: true

lxc config editでviを起動して設定を変更する。

$ lxc config edit

もう一度lxc config showを実行して、設定が書き換わっていること(この例では192.168.10.161に変更した)を確認。

$ lxc config show
config:
  core.https_address: 192.168.10.161:8443
  core.trust_password: true

一時的に追加したループバックアドレスを削除し、動作確認して完了。

$ sudo ip -4 addr del 192.168.10.217/32 dev lo
$ lxc list
+--------------+---------+------------------------+------+-----------+-----------+
|     NAME     |  STATE  |          IPV4          | IPV6 |   TYPE    | SNAPSHOTS |
+--------------+---------+------------------------+------+-----------+-----------+
| ******       | RUNNING | ***.***.**.198 (eth0)  |      | CONTAINER | 0         |
+--------------+---------+------------------------+------+-----------+-----------+
| ************ | RUNNING | ***.***.***.102 (eth0) |      | CONTAINER | 0         |
+--------------+---------+------------------------+------+-----------+-----------+
| *****        | RUNNING | **.***.***.146 (eth0)  |      | CONTAINER | 0         |
+--------------+---------+------------------------+------+-----------+-----------+
| ********     | RUNNING | **.***.***.227 (eth0)  |      | CONTAINER | 0         |
+--------------+---------+------------------------+------+-----------+-----------+
| ********     | RUNNING | **.***.***.177 (eth0)  |      | CONTAINER | 0         |
+--------------+---------+------------------------+------+-----------+-----------+
| ********     | RUNNING | ***.***.***.103 (eth0) |      | CONTAINER | 0         |
+--------------+---------+------------------------+------+-----------+-----------+
| ******       | RUNNING | ***.***.***.104 (eth0) |      | CONTAINER | 0         |
+--------------+---------+------------------------+------+-----------+-----------+

参考