さくらクラウドでsystemd-nspawnを使う場合のネットワーク設定
IPが一つの場合
選ぶ余地もなく --network-veth のプライベートネットワーク。
/etc/systemd/nspawn/guest1.nspawn などのファイルに
[Network] Port=80:80
と書くと元々あったIPマスカレードに加えてポートフォワードが設定されるので、ポート競合が起きない状況だと便利。
ゲストの自動的に設定されたIPにフォワードしてくれる。
ルータ+スイッチ配下で複数IPを使う場合
https://n314.hatenablog.com/entry/2018/09/29/134220
ここの続き。
一つのMACアドレスに対して複数のIPを割り当てる必要があるのが何とも悩みどころ。
ホストOSにIPを複数割り当てつつ上で書いたポート転送で
[Network] Port=172.17.0.3:80:80
docker-composeのように書ければそれが一番楽だったんだけど、これは無理だった。
取り敢えず以下の2パターンにするしかなさそう。
ネットワーク共有
ホストOSのネットワークを共有する。
IPをホストOSで複数割り当てつつ、ゲストはその中の一つを使う。
ネットワーク絡みの問題が何も起きないが、サーバー絡みの問題が起きる。
大抵の設定ファイルには
Listen * ListenAddress 0.0.0.0
のようになっているので、これをゲストOSのIP割り当てを考慮して変更していかないといけない。
ip a でIP一覧を出すとゲストOSの分全て表示されるので数が増えるとややこしい。
あと 127.0.0.1 も競合する。localhost を 127.0.0.2 とかに変えていけばいいんだろうけど、アプリによってはIP固定で書かれていたりしそう。
ipvlan
ipvlanでは --network-ipvlan=eth0 のように設定してMACアドレスを共有しつつ、新しいNICがゲストに作られる。
ホストにIPが割り当てられないし、ゲストにログインして ip a すると自分のIPしか表示されずブリッジっぽくなっている。
ただし普通のブリッジではないので ゲストとホストは通信できない模様。
systemd-nspawnで外部からssh可能でnvidia GPUを使えるコンテナを作る - Qiita
ゲスト同士は通信できる(なんで?)
ログサーバーをゲストに立ててるんだけど、そこにホストのログを送れない。
まあその一点以外はブリッジ接続と同じ感じで使えるので、ホストはただの箱として以外使わないようにして取り敢えずこれで試してる。
プライベートネットワーク+ルーティング
NATとかマスカレードとかフォワードを自分で設定。
いちいちゲストの設定変更時にホストのルーティング変更をするのは大変そう。なので試していない。
最後の手段。