macvlan 및 dhcp를 통해 네트워크에 연결하는 nspawn 컨테이너를 만들고 싶습니다. 내가 찾은 모든 문서는 매우 유익했지만 이를 설정하는 단계별 프로세스를 제공하지 않았습니다.
지금까지 내가 한 일은 systemd-container를 포함한 debootstrap을 사용하여 컨테이너(debian 기반)를 만드는 것입니다:
debootstrap --arch=armhf --include=systemd-container stretch /var/lib/machines/raspbian-09 http://archive.raspbian.org/raspbian
로컬 호스트 네트워크
달리기:
systemd-nspawn -b -M raspbian-09
또는
machinectl raspbian-09
유닛 파일 /etc/systemd/nspawn/raspbian-09.nspawn에는 다음이 포함됩니다.
[Exec]
Boot=true
PrivateUsers=no
[Network]
Private=no
VirtualEthernet=no
두 경우 모두 네트워크 연결이 양호합니다.
맥에버랜드
macvlan의 경우 다음 명령을 실행합니다.
systemd-nspawn -b -M raspbian-09 --network-macvlan=eth0
또는
machinectl raspbian-09
유닛 파일 /etc/systemd/nspawn/raspbian-09.nspawn에는 다음이 포함됩니다.
[Exec]
Boot=true
PrivateUsers=no
[Network]
MACVLAN=eth0
두 경우 모두 네트워크 연결이 작동하지 않습니다.
컨테이너 내부에서 mv-eth0 인터페이스가 생성된 것을 볼 수 있습니다.
# networkctl
IDX LINK TYPE OPERATIONAL SETUP
1 lo loopback carrier unmanaged
2 mv-eth0 ether degraded configuring
하지만 IPv4 주소는 없습니다:
# ip a
mv-eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
link/ether xx:xx:xx:xx:xx:xx brd ff:ff:ff:ff:ff:ff link-netnsid 0
inet6 xxxx::xxxx:xxxx:xxxx:xxxx/64 scope link
valid_lft forever preferred_lft forever
호스트와 컨테이너에서는 어떤 다른 구성을 수행해야 합니까?
답변1
가능한 해결책 중 하나는 다음과 같습니다.
다음 작업은 모두 컨테이너에서 완료되어야 합니다.
컨테이너가 systemd-networkd를 사용하고 있는지 확인하세요. 다음 명령을 실행하여 이러한 경우인지 확인할 수 있습니다.
systemctl status systemd-networkd
서비스가 활성화되어 실행되고 있지 않은 경우 서비스를 활성화하고 시작해야 합니다.
systemctl enable systemd-networkd
systemctl start systemd-networkd
활성화 및 시작되지 않은 경우 systemd-resolved 서비스를 활성화하고 시작해야 할 수도 있습니다.
systemctl enable systemd-resolved
systemctl start systemd-resolved
macvlan 인터페이스에서 동적 ipv4 주소를 생성해야 하는 경우 /etc/systemd/network/mveth0.network
다음 내용으로 네트워크 설정 파일을 생성할 수 있습니다.
[Match]
Name=mv-eth0
[Network]
DHCP=ipv4
macvlan 인터페이스에 고정 ipv4 주소를 설정해야 하는 경우. 예를 들어 게이트웨이 주소가 192.168.1.1이고 ipv4 주소를 192.168.1.14/24로 설정해야 하는 경우 네트워크 설정 파일에서 다음을 사용할 수 있습니다 /etc/systemd/network/mveth0.network
.
[Match]
Name=mv-eth0
[Network]
IPForward=yes
Address=192.168.1.14/24
Gateway=192.168.1.1
# DNS= ?
파일을 생성한 후 systemd-networkd 서비스를 다시 시작해야 합니다.
systemctl restart systemd-networkd
명령을 실행하려면 sudo를 사용해야 할 수도 있습니다.