systemd-nspawn:ポートをリダイレクトし、インターネットをアクティブに保つ

systemd-nspawn:ポートをリダイレクトし、インターネットをアクティブに保つ

次のことができる方法を知りたいです。

  • ホストとコンテナ間のポートリダイレクト(たとえば、ホストポート23をコンテナポート22に転送)
  • ソフトウェアパッケージのインストールなどのためのインターネット接続機能

始めたばかり:

sudo systemd-nspawn -b -D debian_master

ポートを変更してsshdからSSH経由で接続でき、インターネットにも接続できますが、いいえフォワードポート。

私も次のことを試しました。

sudo bash -c "echo 1 > /proc/sys/net/ipv4/ip_forward"
sudo systemd-nspawn -b -D ./debian_master -n -p 23:22

ところでそれではインターネットにも接続できません。

ip aコンテナでコマンドを実行した結果は次のとおりです。

1: lo: <LOOPBACK,UP,LOWER_UP> 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: host0@if6: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000
    link/ether 72:ba:f6:a1:ca:f0 brd ff:ff:ff:ff:ff:ff link-netnsid 0

ありがとうございます!

- 編集する -

ホストシステムはdebian sid、コンテナはdebian stableです。このコンテナを作成するために、以下を実行しました。

sudo debootstrap stable debian_master http://deb.debian.org/debian/

その後、次のようにパスワードを編集しました。

sudo systemd-nspawn -D debian_master
passwd
logout

それから始めましょう。

sudo systemd-nspawn -b -D debian_master -n -p 22:23

...いくつかの接続の問題が発生しました。 DNSやファイアウォールの問題ではありません。8.8.8.8ローカルIPもないため、pingもできません(ip a上記で確認してください)。

また、ホストとコンテナでsystemd-networkdを実行してみましたが、機能しません。

sudo systemctl enable systemd-networkd
sudo systemctl start systemd-networkd

コンテナでエラーが発生します。

sudo: unable to resolve host <my host hostname>: Connection refused

- 編集2 -

/etc/systemd/network/MyDhcp.network進展がありました…ホスト側でファイルを次のように編集しました。

[Match]
Name=en*

[Network]
DHCP=ipv4
IPForward=1
IPMasquerade=yes

これでIPができました。しかし、まだpingできません8.8.8.8。おそらく、これはパケット転送に関連しているようです...

- 編集3 -

続行中で、次のファイルを作成して再起動すると、インターネットとDNSも使用できるようになります。

$ cat /etc/sysctl.d/ip_forward.conf 
net.ipv4.ip_forward = 1

また、私はこのレビューのすべてが正しいことを確認しました。https://github.com/systemd/systemd/issues/468#issuecomment-117904714

これで、次の方法を使用して新しく作成されたインターフェイスを介して接続できます。

ssh [email protected] -p 22

しかし、なぜかはわかりません。

ssh root@localhost -p 23

動作しません。では、このオプションはどういう意味ですか-p?私も走ってみました。

sudo netstat -antp | grep 23

しかし、ここには興味深いものはありません。参考までに私が使用するコマンドは次のとおりです。

sudo systemd-nspawn -b -D debian_master -n -p 23:22

答え1

短い答え: ssh root@XXX -p 23,XXXここで人々ホストのIPアドレス。iptables -L -t natなぜそうなのか見てみよう

ここに到達する方法の完全なガイドは次のとおりです(ホストUbuntu Server 18.04、コンテナのDebianバスター)。

apt-get install debian-archive-keyring debootstrap systemd-container
debootstrap --include=systemd-container buster /var/lib/machines/debian
systemd-nspawn -D /var/lib/machines/debian systemctl enable systemd-networkd.service systemd-resolved.service
systemd-nspawn -D /var/lib/machines/debian apt-get install -y openssh-server
systemd-nspawn -D /var/lib/machines/debian mkdir /root/.ssh

作る/etc/systemd/nspawn/debian.nspawn

[Network]
Port=tcp:23:22

それから続けてください。

machinectl start debian
machinectl copy-to debian /root/.ssh/id_rsa.pub /root/.ssh/authorized_keys
ssh -p 23 root@XXX

これで、コンテナへのSSH接続が必要です。

答え2

ssh root@localhost -p 23

nspawnポートバインディングにループバックが含まれていないため、機能しません。バグレポートがあります:https://github.com/systemd/systemd/issues/6106

関連情報