문서를 보면 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가 호스트 시스템에서 실행되고 있어야 합니다. 호스트 측 로그에는 "Getting Operator"가 표시되고 ve-fedora-25
, networkctl은 "Routeable" 및 "Configured"로 모두 녹색으로 표시됩니다.
내 시스템은 Fedora 25입니다. 저는 TCP/IP를 사용하여 연결할 수 있으면서도 세상에 연결할 수 있는 운영 체제 컨테이너를 원합니다(예: dnf
패키지 관리자 실행). 가상 머신 과 마찬가지로 libvirt
기본적으로 쉽게 사용할 수 있습니다. 무엇이 잘못되었나요?
답변1
문제는 Fedora에 있습니다.방화벽. 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
.