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 或防火墙的问题,我什至无法 ping 8.8.8.8,因为我什至没有本地 ip (检查我的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 23XXX在哪里民众主机的IP地址。看看iptables -L -t nat原因吧

以下是关于如何到达那里的完整指南(Ubuntu 服务器 18.04 作为主机,Debian buster 在容器中):

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

相关内容