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도 없어서 핑조차 할 수 없습니다( 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 서버 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

관련 정보