
Primeiro, tenho um endereço IPv6 especial alocado para meu servidor dedicado, apenas 1. A ::1/128.MasPosso atribuir endereços à eth0 (por exemplo: ::2/128, ::3/128, etc).
Agora eu gostaria de executar contêineres LXC nesse servidor, mas gostaria que eles fossem cidadãos de primeira classe, gostaria que tivessem um endereço IPv6 próprio.
LXC com IPv4 funciona bem. Posso iniciar um contêiner e a partir dele executar ping no mundo. Eu tenho um dispositivo bridge chamado lxcbr0
.
Sinceramente não sei como proceder. Na configuração específica do LXC que tenho ('prefixo' significa meu prefixo atribuído):
lxc.network.ipv6 = prefix::3/128
lxc.network.ipv6.gateway = prefix::2 # iffy, not sure this is correct
No host eu configurei o sysctl para usar o encaminhamento:
net.ipv6.conf.default.forwarding = 1
net.ipv6.conf.eth0.forwarding = 1
Agora estou perdendo a noção. EUpensarPreciso atribuir um IP à ponte. Atribuí-lhe o prefixo::2/128, que uso na configuração LXC acima. Em '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
Escusado será dizer que isso não funciona. Posso iniciar o contêiner e fazer login, mas não consigo executar ping6 em nada. Nem posso executar ping no contêiner do host. Eu sei que há algum negócio com roteamento...?
Alguma saída do estado atual: 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
Contêiner '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
Host '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
Contêiner '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
O host executa Ubuntu 15.04, LXC versão 1.1.2.
Eu apreciaria algumas dicas!
Responder1
Parece-me que você está confundindo uma série de coisas diferentes aqui. Primeiro, duvido que a máscara de rede na porta Ethernet do seu servidor seja realmente/128. Suspeito que seja outra coisa (/64 talvez) e que você esteja em um segmento compartilhado com vários outros clientes.
A julgar pela saída do seu 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
Eu diria que o /128 nas interfaces é um erro. Seu prefixo parece ser 2607:5300:60:714::/64 (provavelmente).
Supondo que esteja correto, você precisará configurar seu arquivo de interfaces da seguinte maneira (adicione seu IPv4 conforme necessário):
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
Observação: não está claro como você chega a 2607:5300:60:7ff::/64 para chegar ao seu gateway padrão. Seria muito útil saber como o seu provedor espera que você configure sua rede ou dar uma olhada em primeira mão em qualquer documentação fornecida por ele. O melhor palpite daqui é que a rede 2607:5300:60:714::/64 está no mesmo link que 2607:5300:60:7ff::/64. Esse 2607:5300:60:7ff::/64 é usado para a infraestrutura do provedor. Não está claro se você obtém o 2607:5300:60:714:/64 inteiro ou se ele é compartilhado com outros clientes no mesmo link.
Supondo que você tenha a liberdade de atribuir endereços dentro desse intervalo, tudo o que você realmente precisa fazer é conectar seus contêineres à mesma interface lxcbr0 e atribuir o endereço de cada contêiner a essa interface de ponte.
Novamente, este é apenas um palpite com base nos dados que você forneceu. Sem conhecer a configuração real do seu provedor, é impossível ter certeza.