
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.