다음을 수행할 수 있는 방법을 알고 싶습니다.
- 호스트와 컨테이너 사이의 포트 리디렉션(예: 호스트 포트 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