이전 답변에서 언급했듯이이 문제에 대한 해결책은 호스트에 macvlan 네트워크 어댑터를 추가하는 것입니다. 그러나 특히 IPv6 지원을 원했고 접두사가 변경되면 경로를 수동으로 설정하면 문제가 될 수 있기 때문에 macvlan 어댑터에 경로를 수동으로 다시 연결하는 것이 다소 해킹이라고 생각했습니다. 다음은 커널이 라우팅 테이블을 제어하도록하는 구성입니다.
(여기서 특정 구성은 데비안 및 Upstart에만 해당되지만 기본 단계는 모든 GNU / Linux에서 작동해야합니다.)
부팅시 macvlan 어댑터 작성
먼저 어댑터의 MAC 주소를 선택해야합니다. 임의의 어댑터를 사용할 수도 있지만 수동으로 macvlan 어댑터를 생성하고 MAC을 사용하는 것이 좋습니다. 이런 식으로 MAC은있을 수있는 모든 규칙을 준수합니다.
고정 MAC을 설정하는 것이 좋습니다. 그렇지 않으면 재부팅 후 DHCP 서버가 시스템을 인식하여 이전과 동일한 IP 주소를 할당 할 수있는 방법이 없기 때문입니다.
따라서 어댑터를 작성하고 MAC을 찾으십시오.
root@host:~# ip link add link eth0 macvlan0 type macvlan mode bridge
root@host:~# ip addr show dev macvlan0
#: macvlan0@eth0: mtu 1500 qdisc noqueue state UNKNOWN group default qlen 1
link/ether 12:34:56:78:90:ab brd ff:ff:ff:ff:ff:ff
...
강조 표시된 16 진수는 MAC 주소입니다.
이제 시작 시마다 macvlan 어댑터를 작성 하기 위해 init 스크립트를 작성 하십시오 (네트워킹을 초기화 하기 전에 실행해야 함) . 이를 수행하는 명령은 다음과 같습니다.
ip link add link eth0 address <MACADDRESS> macvlan0 type macvlan mode bridge
이 목적을위한 Upstart init 스크립트의 예는 다음과 같습니다.
start on starting networking
script
ip link add link eth0 address <MACADDRESS> macvlan0 type macvlan mode bridge
end script
이것을 예를 들어에 넣으십시오 /etc/init/macvlan.conf
.
네트워크 구성 설정
에서 /etc/network/interfaces
실제 네트워크 어댑터를 수동으로 설정하고 (자동으로 유지) 이전 구성 (일반적으로 DHCP 또는 고정 IP 주소)을 macvlan 어댑터로 이동하십시오. 예 :
auto eth0
iface eth0 inet manual
auto macvlan0
iface macvlan0 inet dhcp
물리적 어댑터에 대한 IPv6 비활성화
마지막으로, 실제 어댑터가 IP 주소를 얻지 못하게 합니다. IPv4의 경우 어댑터를 수동으로 설정하면 주소를 얻지 못하게됩니다. 그러나 커널이 어댑터의 IPv6 주소를 얻거나 할당하는 것을 막는 구성을 찾지 못했습니다. 그렇게하면 경로도 추가되어 문제가 발생할 수 있습니다. 따라서 가장 좋은 방법은 물리적 어댑터에 대해 IPv6을 비활성화하는 것 같습니다. 당신은 라인을 추가 하여이 작업을 수행 할 수 있습니다
net.ipv6.conf.eth0.disable_ipv6=1
에 /etc/sysctl.conf
,에서 파일을 생성하여 /etc/sysctl.d/
이 줄, 또는 추가하여
sysctl -w net.ipv6.conf.eth0.disable_ipv6=1
init 스크립트에.
이제 컴퓨터를 재부팅하면 호스트에서 게스트로 통신하는 것이 IPv4 및 IPv6에서 모두 작동합니다.
설정하는 동안 실수를하면 재부팅 후에도 네트워크를 통해 호스트에 연결하지 못할 수 있습니다. 기계에 물리적으로 액세스 할 수 있거나 다른 안전 장치가 마련되어 잠재적 인 문제를 해결할 수있는 경우에만이 작업을 수행하십시오.