별도의 IP 주소(네트워크 네임스페이스)가 있는 systemd-nspawn 컨테이너가 작동하지 않습니다.

별도의 IP 주소(네트워크 네임스페이스)가 있는 systemd-nspawn 컨테이너가 작동하지 않습니다.

에 대한 문서를 보면 systemd-nspawn다른 네트워크 네임스페이스에서 컨테이너를 시작하는 매우 사용자 친화적인 방법을 제공하도록 의도되었을 것입니다. 옵션 을 사용 -n하고 systemd-networkd.service양쪽 끝에서 간단히 활성화하면 됩니다. 컨테이너는 "비공개" 범위 중 하나에서 자체 IP 주소를 얻습니다. (DNS에는 일부가 필요할 수 있습니다.추가 단계).

결과적으로 범위 내의 IP 주소를 얻게 됩니다 169.254.*.*. 기본 경로는 host0게이트웨이/라우터를 거치지 않고 인터페이스를 가리킵니다. 인터넷 서버에 연결하려는 시도가 8.8.8.8실패하고 "호스트에 대한 경로 없음"이 발생합니다. (이것이 작동하지 않으면 DNS를 작동시킬 필요가 없습니다).

호스트에서 실행하면 tcpdump -i ve-fedora-25DHCP 요청을 볼 수 있지만 응답이 없습니다. systemd-networkd가 확실히 호스트에서 실행되고 있습니다. 호스트 측 로그에는 "Gained Carrier"가 표시되고 ve-fedora-25networkctl은 이를 "라우팅 가능" 및 "구성됨"으로 모두 녹색으로 표시합니다.

내 시스템은 Fedora 25입니다. TCP/IP를 사용하여 연결할 수 있는 동시에 외부로 연결할 수 있는 OS 컨테이너를 원합니다(예: 패키지 dnf관리자 실행). libvirtVM이 기본적으로 매우 쉽게 작동하는 것과 같습니다 . 무엇이 잘못되었나요?

답변1

문제는 페도라다.방화벽. nspawn은 방화벽과 통합되지 않은 것 같습니다. (nspawn은 Fedora의 SELinux 정책과 올바르게 통합되지 않았습니다.)

질문에서 언급했듯이 libvirt는 잘 작동합니다 :). 우리는 사람들이 컨테이너를 실행할 때 발견한 것과 동일한 트릭을 사용할 수 있습니다.페도라의 LXC.

업데이트: Fedora 30으로 업그레이드한 후 해결 방법이 작동하지 않았습니다.


옵션을 사용하여 systemd-nspawn을 실행하십시오 --network-bridge virbr0. 에 의존하는 대신 systemd-networkd를 활용합니다 libvirtd.service. 후자 서비스는 이미 Fedora에서 기본적으로 시작되었습니다. 게스트에서 평소처럼 선호하는 DHCP 클라이언트를 설정하세요.

systemd-networkd를 DHCP 클라이언트로 사용할 때 DNS 확인

systemd-networkdDHCP 클라이언트로 사용 하면우연히/etc/resolv.conf이전 컨테이너 부팅에서 남은 부분이 있을 수 있는 경우 자체적으로 작업합니다 . 하지만 일반적으로 이것이 작동한다고 믿을 수는 없습니다. 실제로 와 함께 실행되도록 설계되었습니다 systemd-resolved.service.

차례로 systemd-resolved는 nss-resolve. 그러나 이것이 필수적인 AIUI는 아닙니다.

관련 정보