手動での設定が多いものの、そこまで難しくはない。
構築する前に
ipv4 forwardingのカーネル設定をしていない方
/etc/sysctl.d/30-ipforward.conf
net.ipv4.ip_forward=1
sudo reboot
ファイアウォールを利用している方
コンテナから外への通信を許可しましょう。
iptables -A FORWARD -i ve-+ -o 物理NIC -j ACCEPT
必要に応じて永続化してください。
テンプレート
テンプレートがあるので、適宜コピーして利用すると良いかもしれません:
Host: /lib/systemd/network/80-container-ve.network
Container: /lib/systemd/network/80-container-host0.network
systemd-networkd
ホスト・コンテナ共にsystemd-networkdの使用が前提です。
systemctl enable systemd-networkd && reboot
構築
ホスト
テンプレートを利用すれば編集が必要なのはアドレスのみです。
/etc/systemd/network/80-container-ve.network
|
|
コンテナ
外部ネットワークへの接続が必要ない場合
DHCPに任せて設定不要で動きます。
外部ネットワークに接続する場合
手動設定が必要です。
ホストでDNSを動かしていない場合等、必要に応じて設定を変更してください。
/etc/systemd/network/80-container-host0.network
|
|
sudo systemctl restart systemd-networkd
テスト
コンテナー内からping等を打って確認。
=> ホスト
ping 10.1.0.1
=> インターネット
ping 1.1.1.1
おまけ
ブリッジ
NATを構築する他に、既存のブリッジに接続させることもできます。
systemd-nspawn --network-bridge br0 ...
ポートマッピング
--network-veth
が有効の場合--private-network
のオプションが利用可能です。
巷で流行りのDockerのように-p tcp:80:80
のようにしてNATポートマッピングでポート開放が出来ます。