에 대한 문서를 보면 systemd-nspawn
다른 네트워크 네임스페이스에서 컨테이너를 시작하는 매우 사용자 친화적인 방법을 제공하도록 의도되었을 것입니다. 옵션 을 사용 -n
하고 systemd-networkd.service
양쪽 끝에서 간단히 활성화하면 됩니다. 컨테이너는 "비공개" 범위 중 하나에서 자체 IP 주소를 얻습니다. (DNS에는 일부가 필요할 수 있습니다.추가 단계).
결과적으로 범위 내의 IP 주소를 얻게 됩니다 169.254.*.*
. 기본 경로는 host0
게이트웨이/라우터를 거치지 않고 인터페이스를 가리킵니다. 인터넷 서버에 연결하려는 시도가 8.8.8.8
실패하고 "호스트에 대한 경로 없음"이 발생합니다. (이것이 작동하지 않으면 DNS를 작동시킬 필요가 없습니다).
호스트에서 실행하면 tcpdump -i ve-fedora-25
DHCP 요청을 볼 수 있지만 응답이 없습니다. systemd-networkd가 확실히 호스트에서 실행되고 있습니다. 호스트 측 로그에는 "Gained Carrier"가 표시되고 ve-fedora-25
networkctl은 이를 "라우팅 가능" 및 "구성됨"으로 모두 녹색으로 표시합니다.
내 시스템은 Fedora 25입니다. TCP/IP를 사용하여 연결할 수 있는 동시에 외부로 연결할 수 있는 OS 컨테이너를 원합니다(예: 패키지 dnf
관리자 실행). libvirt
VM이 기본적으로 매우 쉽게 작동하는 것과 같습니다 . 무엇이 잘못되었나요?
답변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-networkd
DHCP 클라이언트로 사용 하면우연히/etc/resolv.conf
이전 컨테이너 부팅에서 남은 부분이 있을 수 있는 경우 자체적으로 작업합니다 . 하지만 일반적으로 이것이 작동한다고 믿을 수는 없습니다. 실제로 와 함께 실행되도록 설계되었습니다 systemd-resolved.service
.
차례로 systemd-resolved는 nss-resolve
. 그러나 이것이 필수적인 AIUI는 아닙니다.