Debian 7이 설치된 Hetzner에 외부 서버가 있고 IPv6 라우팅으로 KVM을 설정하려고 합니다(IPv4에서도 동일한 설정이 문제 없이 작동합니다).
두 개의 서로 다른 서브넷에 있는 두 개의 인터페이스가 있는 하나의 Ubuntu Server VM이 있습니다. 첫 번째 인터페이스는 브리지를 통해 호스트에 연결됩니다.
Host-eth0 <-- external bridge --> vnet0-VM-vnet1 <-- internal bridge
첫 번째 VM 인터페이스를 통해 두 번째 서브넷에 고정 경로를 추가하도록 브리지를 구성했습니다.
ip -6 route add 2a01:4f8:X:Y:2::/80 via 2a01:4f8:X:Y:1::3 dev virbr_external
그러면 VM이 시작되기 전에 경로 항목이 추가됩니다. 호스트에서 vnet1 인터페이스(2::2)로 ping6을 사용할 때 다음 오류 메시지가 나타납니다.
ping: sendmsg: Network is down
인터페이스 구성에 경로를 추가하지 않고 VM이 시작된 후 수동으로 호출하면 모든 것이 작동합니다.
그래서 내 질문은 IPv6 주소에 대한 경로 추가가 VM이 시작된 후에만 작동하는 이유는 무엇입니까?
추가 구성 세부정보:
호스트 인터페이스
auto lo
iface lo inet6 loopback
auto eth0
iface eth0 inet6 static
address 2a01:4f8:X:Y:0::2
netmask 128
gateway fe80::1
# Bridge between Host and VM
auto virbr_external
iface virbr_external inet6 static
bridge_ports none
bridge_stp off
bridge_fd 0
address 2a01:4f8:X:Y:1::2
netmask 80
up ip -6 route add 2a01:4f8:X:Y:2::/80 via 2a01:4f8:X:Y:1::3 dev virbr_external
# Bridge between VM and other VMs
auto virbr_internal
iface virbr_internal inet6 manual
bridge_ports none
bridge_stp off
bridge_fd 0
VM 인터페이스
auto lo
iface lo inet6 loopback
auto eth0
iface eth0 inet6 static
address 2a01:4f8:X:Y:1::3
netmask 80
gateway 2a01:4f8:X:Y:1::2
auto eth1
iface eth1 inet6 static
address 2a01:4f8:X:Y:2::2
netmask 80
로그가 더 필요한 경우(작동 전후) 알려주시면 수집하겠습니다.
답변1
여기에도 같은 문제가 있습니다. 해결책은 경로를 설정한 후 IPV6 경로 캐시를 플러시하는 것입니다.
ip -6 route flush cache
인터페이스 섹션을 다음으로 변경합니다.
...
auto virbr_external
iface virbr_external inet6 static
bridge_ports none
bridge_stp off
bridge_fd 0
address 2a01:4f8:X:Y:1::2
netmask 80
up ip -6 route add 2a01:4f8:X:Y:2::/80 via 2a01:4f8:X:Y:1::3 dev virbr_external
up ip -6 route flush cache # Flush cache after setting route
...
부팅 시 문제를 해결합니다.
답변2
메트릭을 다른 경로보다 낮게 설정하는 논리가 없는 한 VM 시작/경로 추가 순서와 관련이 있는지 잘 모르겠습니다. 여러 인터페이스가 ipv6 트래픽과 커널을 라우팅하려고 할 수 있습니다. 측정항목이 가장 낮은 경로를 선택합니다.
내 시스템에서 내 브리지의 기본 메트릭은 425였으므로 VM이 시작되고 메트릭 256을 사용하여 기본 경로를 설정하면 기본 bridge0 경로보다 우선 적용되며 기본적으로 트래픽이 내 VM으로 전송됩니다. 경로는 다음을 사용하여 인쇄할 수 있습니다.
ip -6 route show
Libvirt는 아마도 해당 인터페이스가 브리지의 일부인 ipv6 주소와 경로를 갖는 것을 허용해서는 안 되지만 그렇게 하기 때문에 해결 방법은 단순히 브리지의 기본 경로를 vmnet 인터페이스보다 낮은 값으로 설정하는 것입니다. 네트워크 관리자 사용:
nmcli connection modify bridge0 ipv6.route-metric 128
이제 libvirt가 vnet0 인터페이스에 경로를 생성하더라도 브리지가 우선순위를 갖기 때문에 사용되지 않습니다.
이것버그 보고서관련이 있는 것 같습니다. 비록 매우 오래되었으므로 제가 보고 있는 새로운 버그일 수도 있습니다...