Asignar dirección ipv6 a invitados KVM en modo puente

Asignar dirección ipv6 a invitados KVM en modo puente

Sistema: CentOS 6.5

Red: Puente en br0

IPv6: ISP Nativo /bloque 64.

IPv4: dirección ISP (no LAN interna)

Propósito: Para asignar IPv6 solo a invitados (manualmente), no quiero que se asigne una dirección ipv4 al sistema operativo invitado.


En anfitrión:

/etc/sysctl.conf:

net.ipv4.ip_forward = 1
net.ipv6.conf.all.forwarding = 1 
net.ipv6.conf.br0.forwarding = 1
net.ipv6.conf.default.forwarding = 1

espectáculo brctl

bridge name     bridge id               STP enabled     interfaces
br0             8000.e840f2ecdfed       no              eth0
                                                        vnet0
virbr0          8000.52540051ef3c       yes             virbr0-nic

ifconfig:

br0       Link encap:Ethernet  HWaddr E8:40:F2:EC:DF:ED  
      inet addr:xxx.xxx.xxx.xxx  Bcast:xxx.xxx.xxx.255  Mask:255.255.255.0
      inet6 addr: 2607:beef:be:beef::1/64 Scope:Global
      inet6 addr: fe80::ea40:f2ff:feec:dfed/64 Scope:Link
      UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
      RX packets:365707 errors:0 dropped:0 overruns:0 frame:0
      TX packets:470458 errors:0 dropped:0 overruns:0 carrier:0
      collisions:0 txqueuelen:0 
      RX bytes:28867567 (27.5 MiB)  TX bytes:574512176 (547.8 MiB)

eth0      Link encap:Ethernet  HWaddr E8:40:F2:EC:DF:ED  
      inet6 addr: fe80::ea40:f2ff:feec:dfed/64 Scope:Link
      UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
      RX packets:392675 errors:0 dropped:0 overruns:0 frame:0
      TX packets:608319 errors:0 dropped:0 overruns:0 carrier:0
      collisions:0 txqueuelen:1000 
      RX bytes:46359514 (44.2 MiB)  TX bytes:586262036 (559.1 MiB)
      Interrupt:20 Memory:fe500000-fe520000 

/etc/sysconfig/networt-scripts/ifcfg-br0:

DEVICE=br0
BOOTPROTO=static
IPADDR=xxx.xxx.xxx.xxx
NETMASK=255.255.255.0
ONBOOT=yes
GATEWAY=xxx.xxx.xxx.xxx
IPV6INIT=yes
IPV6_AUTOCONF=no
IPV6ADDR=2607:beef:be:beef::1/64
TYPE=Bridge
DELAY=0

gato /etc/sysconfig/network-scripts/route6-br0

2607:beef:be:bff:ff:ff:ff:ff dev br0
default via 2607:beef:be:bff:ff:ff:ff:ff

ruta -A inet6 -n

Kernel IPv6 routing table
Destination                                 Next Hop                                Flags Metric Ref    Use Iface
2607:beef:be:beef::/64                       ::                                      U     256    0        0 br0     
2607:beef:be:bff:ff:ff:ff:ff/128            ::                                      U     1024   1        0 br0     
fe80::/64                                   ::                                      U     256    0        0 virbr0  
fe80::/64                                   ::                                      U     256    0        0 vnet0   
fe80::/64                                   ::                                      U     256    0        0 br0     
fe80::/64                                   ::                                      U     256    0        0 eth0    
::/0                                        2607:beef:be:bff:ff:ff:ff:ff            UG    1024   20281       4 br0     
::1/128                                     ::                                      U     0      1        1 lo      
2607:beef:be:beef::/128                      ::                                      U     0      0        1 lo      
2607:beef:be:beef::1/128                     ::                                      U     0      36128       1 lo     
...

ip6tables-S:

-P INPUT ACCEPT
-P FORWARD ACCEPT
-P OUTPUT ACCEPT
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT 
-A INPUT -p ipv6-icmp -j ACCEPT 
-A INPUT -i lo -j ACCEPT 
-A INPUT -p tcp -m state --state NEW -m tcp --dport 8888 -j ACCEPT 
-A INPUT -j REJECT --reject-with icmp6-adm-prohibited 
-A FORWARD -s 2607:beef:be:beef::/64 -i br0 -j ACCEPT 

En invitado:

SO: CentOS 6.5 mínimo

Red: Manual

gato /etc/sysconfig/network-scripts/ifcfg-eth0:

ONBOOT=yes
NM_CONTROLLED=no
IPV6INIT=yes
IPV6ADDR=2607:beef:be:beef::2/64
IPV6_DEFAULTGW=2607:beef:be:beef::1 (The host's ipv6 address)

Comportamiento:

En el Host, puedo hacer ping a la dirección ipv6 del huésped, vise-vesa.

No puedo hacer ping a ninguna otra dirección IPv6 del invitado, incluido Google DNS 2001:4860:4860::8888/8844. (Caducado)

No puedo hacer ping desde ninguna dirección IPv6 de ISP no asignada al invitado. (Caducado)

ping6 desde los hosts hacia el exterior está bien.


Actualizar:

  1. Si cambio la puerta de enlace del huésped a 2607:beef:be:bff:ff:ff:ff:ff (puerta de enlace del host), el huésped se quejará "no hay ruta al host". Incluso agregué la información de la ruta estática (ruta6-eth0) al Invitado, todavía no se conecta.

¿Alguien podría ayudarme a descubrir qué está pasando, por favor? Gracias.

Respuesta1

Entonces, con el aviso de Mark, responderé mi propia pregunta.

Configuración del anfitrión:

Asigne el subbloque IPv6 a su puente virtual, en mi ejemplo:

Agregar

<ip family='ipv6' address='2607:beef:be:beef:1::' prefix='96'>

Para /etc/libvirt/qemu/networks/default.xmlusar virshdestruir y reconstruir el dispositivo virbr0, en mi caso generó un dispositivo virbr1.

Agregue la regla ip6tables:

ip6tables -A FORWARD -m physdev --physdev-is-bridged -j ACCEPT

ip6tables -A FORWARD -i br0 -j ACCEPT

Del lado de la máquina virtual:

Agregue la dirección IPv6 seleccionada a su archivo de configuración:

IPV6INIT=yes
IPV6ADDR=2607:beef:be:beef:1::253:8/128

Reinicie la interfaz de red de su VM, simplemente funciona.

Supongo que eso se debe a que la VM se conecta con el mundo exterior a través de la interfaz virbr1 en el host. La puerta de enlace del host es br0. Con la regla ip6tables todo se solucionará.

He recopilado una guía paso a paso en mi blog.https://luxing.im/adding-ipv6-support-for-kvm-vms/

Respuesta2

Su puerta de enlace está mal en su invitado.

Dado que conectó su conexión de red, es como si la VM estuviera en la misma subred (LAN) que el host. Por lo tanto, debe utilizar la misma dirección de puerta de enlace que el host.

información relacionada