Haga que los contenedores LXC sean directamente accesibles con ipv6

Haga que los contenedores LXC sean directamente accesibles con ipv6

En primer lugar, tengo una dirección IPv6 especial asignada a mi servidor dedicado, solo 1. A ::1/128.PeroPuedo asignar direcciones a eth0 (por ejemplo, ::2/128, ::3/128, etc.).

Ahora me gustaría ejecutar contenedores LXC en ese servidor pero me gustaría que fueran ciudadanos de primera, me gustaría que tuvieran una dirección IPv6 propia.

LXC con IPv4 funciona bien. Puedo iniciar un contenedor y desde él hacer ping al mundo. Tengo un dispositivo puente llamado lxcbr0.

Sinceramente no sé cómo proceder. En la configuración LXC específica que tengo ('prefijo' significa mi prefijo asignado):

lxc.network.ipv6 = prefix::3/128
lxc.network.ipv6.gateway = prefix::2 # iffy, not sure this is correct

En el host he configurado sysctl para usar el reenvío:

net.ipv6.conf.default.forwarding = 1
net.ipv6.conf.eth0.forwarding = 1

Ahora estoy perdiendo la pista. IpensarNecesito asignarle una IP al puente. Le asigné el prefijo::2/128, este lo uso en la configuración de LXC anterior. En 'interfaces':

iface lxcbr0 inet6 static
        address prefix::2
        netmask 128
        # use arp proxy? Read that somewhere. 
        post-up /sbin/ip -6 neigh add proxy prefix::3 dev eth0 #container 1
        post-up /sbin/ip -6 neigh add proxy prefix::4 dev eth0 #container 2

No hace falta decir que esto no funciona. Puedo iniciar el contenedor e iniciar sesión, pero no puedo hacer ping a nada. Tampoco puedo hacer ping al contenedor desde el host. ¿Sé que hay algún negocio con el enrutamiento...?

Algunos resultados del estado actual: Host 'ip -6 a':

4: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qlen 1000
    inet6 2607:5300:60:714::1/128 scope global 
       valid_lft forever preferred_lft forever
    inet6 fe80::ea40:f2ff:feed:106f/64 scope link 
       valid_lft forever preferred_lft forever
8: lxcbr0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 
    inet6 2607:5300:60:714::2/128 scope global 
       valid_lft forever preferred_lft forever
    inet6 fe80::b07b:e3ff:fe33:22e7/64 scope link 
       valid_lft forever preferred_lft forever
18: vethPVJQ6M: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qlen 1000
    inet6 fe80::fcb7:57ff:fe3c:bcd1/64 scope link 
       valid_lft forever preferred_lft forever

Contenedor 'ip -6 a':

20: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qlen 1000
    inet6 2607:5300:60:714::3/128 scope global 
       valid_lft forever preferred_lft forever
    inet6 fe80::216:3eff:fe59:679f/64 scope link 
       valid_lft forever preferred_lft forever

Anfitrión 'ip -6 r':

2607:5300:60:714::1 dev eth0  proto kernel  metric 256 
2607:5300:60:714::2 dev lxcbr0  proto kernel  metric 256 
2607:5300:60:7ff:ff:ff:ff:ff dev eth0  metric 1024 
fe80::/64 dev eth0  proto kernel  metric 256 
fe80::/64 dev lxcbr0  proto kernel  metric 256 
fe80::/64 dev vethPVJQ6M  proto kernel  metric 256 
fe80::/64 dev vethWT7OPQ  proto kernel  metric 256 
default via 2607:5300:60:7ff:ff:ff:ff:ff dev eth0  metric 1024 

Contenedor 'ip -6 r':

2607:5300:60:714::2 dev eth0  metric 1024 
2607:5300:60:714::3 dev eth0  proto kernel  metric 256 
fe80::/64 dev eth0  proto kernel  metric 256 
default via 2607:5300:60:714::2 dev eth0  metric 1024 

El host ejecuta Ubuntu 15.04, LXC versión 1.1.2.

¡Agradecería algunos consejos!

Respuesta1

Me parece que aquí estás combinando varias cosas diferentes. Primero, dudo que la máscara de red en el puerto Ethernet de su servidor sea en realidad /128. Sospecho que es otra cosa (quizás/64) y que estás en un segmento compartido con muchos otros clientes.

A juzgar por el resultado de su comando "ip -6 a":

4: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qlen 1000
    inet6 2607:5300:60:714::1/128 scope global 
       valid_lft forever preferred_lft forever
    inet6 fe80::ea40:f2ff:feed:106f/64 scope link 
       valid_lft forever preferred_lft forever
8: lxcbr0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 
    inet6 2607:5300:60:714::2/128 scope global 
       valid_lft forever preferred_lft forever
    inet6 fe80::b07b:e3ff:fe33:22e7/64 scope link 
       valid_lft forever preferred_lft forever
18: vethPVJQ6M: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qlen 1000
    inet6 fe80::fcb7:57ff:fe3c:bcd1/64 scope link 
       valid_lft forever preferred_lft forever

Yo diría que el /128 en las interfaces es un error. Su prefijo parece ser 2607:5300:60:714::/64 (lo más probable).

Suponiendo que eso sea correcto, deberá configurar su archivo de interfaces de la siguiente manera (agregue su IPv4 según sea necesario):

auto lxcbr0
iface lxcbr0 inet6 static
  bridge_ports eth0
  bridge_fd 0
  address 2607:5300:60:714::1
  net mask 64
  gateway 2607:5300:60:7ff:ff:ff:ff:ff

Nota: No está claro cómo se llega a 2607:5300:60:7ff::/64 para acceder a su puerta de enlace predeterminada. Sería muy útil saber cómo espera tu proveedor que configures tu red o ver de primera mano cualquier documentación que te haya proporcionado. La mejor suposición desde aquí es que la red 2607:5300:60:714::/64 está en el mismo enlace que 2607:5300:60:7ff::/64. Ese 2607:5300:60:7ff::/64 se utiliza para la infraestructura del proveedor. No está claro si obtiene el 2607:5300:60:714:/64 completo o si se comparte con otros clientes en el mismo enlace.

Suponiendo que tiene la libertad de asignar direcciones dentro de ese rango, entonces todo lo que realmente necesita hacer es conectar sus contenedores a la misma interfaz lxcbr0 y asignar la dirección de cada contenedor a esa interfaz puente.

Nuevamente, esta es solo una mejor suposición basada en los datos que proporcionó. Sin conocer la configuración real de su proveedor, es imposible saberlo con seguridad.

información relacionada