systemd-nspawn 컨테이너에서 네트워킹을 활성화합니다.

systemd-nspawn 컨테이너에서 네트워킹을 활성화합니다.

인터넷 액세스가 가능한 컨테이너를 설정하려고 하는데 지금까지 성공하지 못했습니다.

# sudo systemd-nspawn -nb -M debian-tree
# systemctl enable --now systemd-networkd systemd-resolved
# ln -sf /run/systemd/resolve/resolv.conf /etc/resolv.conf
# ip link
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: host0@if8: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state LOWERLAYERDOWN mode DEFAULT group default qlen 1000
    link/ether 42:ca:d5:8c:af:60 brd ff:ff:ff:ff:ff:ff link-netnsid 0
# ping google.com
ping: google.com: Temporary failure in name resolution

호스트에서

# ip link
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: wlp1s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP mode DORMANT group default qlen 1000
    link/ether 7c:7a:91:ae:7d:47 brd ff:ff:ff:ff:ff:ff
8: ve-debian-tree@if2: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1000
    link/ether 92:f7:e1:4b:c6:6f brd ff:ff:ff:ff:ff:ff link-netnsid 0

왜 작동하지 않는지 아시나요?

답변1

내 경험에 따르면 컨테이너와 호스트 모두 systemd-networkd 및 systemd-resolved를 실행해야 합니다. Ubuntu Bionic에서는 작동하지만 Xenial에서는 systemd-networkd 대신 /etc/network/interfaces(networking.service)를 사용하기 때문에 Xenial에서는 작동하지 않습니다.

같은 이유로 Debian Stretch에서도 작동하지 않습니다.

답변2

문제는 DNS 확인자가 올바르게 설정되지 않았을 수 있다는 것입니다.

출력을 검사하면 컨테이너에 자체 네트워크 네임스페이스가 연결되어 있고(네트워크 스택) 스택이 호스트에서 연결이 끊어졌으며 host0@if8호스트로 들어오는 가상 네트워크 케이블이 있음을 알 수 있습니다 link-netnsid 0(netns 0 = 호스트 네트워크 스택).

2: host0@if8: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state LOWERLAYERDOWN mode DEFAULT group default qlen 1000
    link/ether 42:ca:d5:8c:af:60 brd ff:ff:ff:ff:ff:ff link-netnsid 0

또한 이 가상 네트워크 케이블의 다른 부분이 기본 호스트 네트워크 네임스페이스(기본 네트워크 스택)에 갇혀 있는 것을 볼 수 있습니다.

8: ve-debian-tree@if2: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1000
    link/ether 92:f7:e1:4b:c6:6f brd ff:ff:ff:ff:ff:ff link-netnsid 0

확실하지는 않지만 콘솔의 상태는 보고된 것과는 state UP달리 이어야 합니다 state DOWN.

그럼에도 불구하고 주어진 링크의 IP 주소를 가져와야 하며 ip addr컨테이너 내에서 다양한 인터페이스(로컬 및 호스트)를 ping할 수 있어야 합니다.

성공하면 DNS 서버가 실행 중인 인터페이스를 ping할 수 있습니다. 이 DNS 서버에 연결할 수 없으면 수정해야 합니다.

일단 시작하면 외부 DNS 이름을 확인할 수 있습니다.

관련 정보