Torne os contêineres LXC diretamente acessíveis com ipv6

Torne os contêineres LXC diretamente acessíveis com ipv6

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.

informação relacionada