首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >systemd-n nspawn:重定向端口并保持internet

systemd-n nspawn:重定向端口并保持internet
EN

Unix & Linux用户
提问于 2017-12-18 16:26:43
回答 2查看 4.2K关注 0票数 2

我想知道如何:

  • 重定向主机和容器之间的端口(例如,将主机23端口转发到容器22端口)
  • 能够连接到internet,例如安装软件包

如果我只是使用:

代码语言:javascript
复制
sudo systemd-nspawn -b -D debian_master

我可以改变sshd的端口,然后我可以通过ssh连接到它,也可以连接到互联网,但是它不是端口转发。

我也试过:

代码语言:javascript
复制
sudo bash -c "echo 1 > /proc/sys/net/ipv4/ip_forward"
sudo systemd-nspawn -b -D ./debian_master -n -p 23:22

但是我甚至连不上互联网。

下面是我在容器上的ip a命令的结果:

代码语言:javascript
复制
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稳定的。为了创建这个容器,我只运行了:

代码语言:javascript
复制
sudo debootstrap stable debian_master http://deb.debian.org/debian/

然后,我使用以下方法编辑密码:

代码语言:javascript
复制
sudo systemd-nspawn -D debian_master
passwd
logout

然后我可以试着开始:

代码语言:javascript
复制
sudo systemd-nspawn -b -D debian_master -n -p 22:23

..。找点联系麻烦。这不是DNS或防火墙的问题,我甚至不能ping 8.8.8.8,因为我甚至没有本地ip (查看上面的ip a )。

我还尝试在主机和容器上运行systemd-networkd,但是它不起作用:

代码语言:javascript
复制
sudo systemctl enable systemd-networkd
sudo systemctl start systemd-networkd

在容器上,我得到一个错误

代码语言:javascript
复制
sudo: unable to resolve host <my host hostname>: Connection refused

-编辑2 --

我进步了。我在主机端编辑了这样的文件/etc/systemd/network/MyDhcp.network

代码语言:javascript
复制
[Match]
Name=en*

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

现在我有IP了。但是我仍然无法控制8.8.8.8,也许它与数据包转发有关.

-编辑3 --

我仍然在进步,现在如果我创建以下文件并重新启动,我就有了internet,甚至DNS:

代码语言:javascript
复制
$ cat /etc/sysctl.d/ip_forward.conf 
net.ipv4.ip_forward = 1

我还确保了这条评论中的所有内容都是正确的:https://github.com/systemd/systemd/issues/468#issuecomment-117904714

现在,我设法通过新创建的接口进行连接,使用如下所示:

代码语言:javascript
复制
ssh root@169.254.183.137 -p 22

但我不知道为什么

代码语言:javascript
复制
ssh root@localhost -p 23

不管用。那么,-p选项的含义是什么?我也试着跑

代码语言:javascript
复制
sudo netstat -antp | grep 23

但这里没有什么有趣的东西。作为提醒,下面是我使用的命令:

代码语言:javascript
复制
sudo systemd-nspawn -b -D debian_master -n -p 23:22
EN

回答 2

Unix & Linux用户

发布于 2019-09-08 11:58:37

简单回答:ssh root@XXX -p 23,其中XXX是主机的公共IP地址。请参阅iptables -L -t nat的原因。

下面是关于如何到达那里的完整方法(Ubuntu服务器18.04作为主机,容器中的Debian破坏程序):

代码语言:javascript
复制
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

代码语言:javascript
复制
[Network]
Port=tcp:23:22

然后继续:

代码语言:javascript
复制
machinectl start debian
machinectl copy-to debian /root/.ssh/id_rsa.pub /root/.ssh/authorized_keys
ssh -p 23 root@XXX

现在应该有到容器的SSH连接。

票数 1
EN

Unix & Linux用户

发布于 2020-09-05 09:13:11

代码语言:javascript
复制
ssh root@localhost -p 23

不工作,因为n派生端口绑定排除了环回。有一个错误报告:https://github.com/systemd/systemd/issues/6106

票数 0
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/411622

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档