rota ipv6 estática em um contêiner lxc

1

Eu quero rotear um ipv6 ip para um contêiner lxc, mas os pacotes não são encaminhados. Eu não quero ligar os contêineres lxc para eth0 e não quero usar o autoconfig. Além disso, eu só tenho um /64 para o host, então eu preciso usar uma rede menor para as VMs. Eu escolhi um /112 por enquanto, talvez eu pudesse usar uma rede um pouco maior, se necessário.

Eu acho que o problema é o roteamento, não o contêiner. Aqui está minha configuração:

Anfitrião:

# the host already has working ipv6, empty ip6tables FORWARD table with policy ACCEPT
ip -6 addr add prefix::1/112 dev lxcbr
ip -6 route show|grep prefix
# prefix::/112 dev lxcbr  proto kernel  metric 256
sysctl net.ipv6.conf.eth0.forwarding
# net.ipv6.conf.eth0.forwarding = 1
sysctl net.ipv6.conf.lxcbr.forwarding
# net.ipv6.conf.lxcbr.forwarding = 1

VM:

ip -6 addr add prefix::2/112 dev eth0
ip -6 route add default via fe80:: dev eth0 # routing via prefix::1 does not work either
ip -6 route show
# prefix::/112 dev eth0  proto kernel  metric 256 
# fe80::/64 dev eth0  proto kernel  metric 256 
# default via fe80:: dev eth0  metric 1024

Trabalhando (VM):

ping6 prefix::1 # host

Trabalhando (host):

ping6 prefix::2 # vm

Não está funcionando (VM):

ping6 google.com
# PING google.com (2a00:1450:4001:805::1007): 48 data bytes
# --- google.com ping statistics ---
# 7 packets transmitted, 0 packets received, 100% packet los

tcpdump no host:

tcpdump -i lxcbr icmp6
# 13:20:44.088814 IP6 prefix::1 > fra07s32-in-x07.1e100.net: ICMP6, echo request, seq 0, length 56
# 13:20:45.089268 IP6 prefix::1 > fra07s32-in-x07.1e100.net: ICMP6, echo request, seq 1, length 56
# [...]
tcpdump -i eth0 icmp6
# [no output]

ip6tables com -A FORWARD -j LOG também não registra nenhum pacote.

EDIT: Porque todo mundo reclama de redes menores que /64 : O problema persiste com /64 na interface. O problema é que nenhum pacote está entrando na fila FORWARD do iptables, ao usar uma rota estática de uma interface (virtual) para outra interface (física).

A configuração com uma rede menor é o que gostaria de ter, quando está funcionando, já que o meu provedor quer uma taxa bastante grande para mais redes (perto de 50% do aluguel do servidor). Mas para testes eu posso usar todo o /64 ou grandes redes de fd/8 se isso ajudar no teste.

    
por allo 27.12.2014 / 13:27

2 respostas

0

Eu consegui trabalhar ... mas ainda é estranho.

configurando o encaminhamento para "todos", mas desativando-o para cada interface individual:

cd /proc/sys/net/ipv6/conf/
echo 1 >all/forwarding;for i in */forwarding;do test $i = all/forwarding || echo 0 > $i;done

fazer o oposto (definir todos / encaminhamento para 0 e encaminhar para cada interface para 1) não funciona.

Outra questão interessante: Às vezes você precisa adicionar rotas APÓS a interface ser adicionada à ponte para que ela funcione, o mesmo problema que aqui: link

Graças a jeff-loughridge para o link do docker, a primeira seção deste tutorial me levou a essa solução.

Ainda estou investigando o que exatamente está acontecendo aqui (e se continuar funcionando) antes de fechar a pergunta.

    
por 07.01.2015 / 23:59
1

Eu não usaria sua configuração em um ambiente de produção. Como outros mencionaram, a quebra do / 64 terá implicações imprevistas. Se você não conseguir mais endereços do seu provedor, recomendo usar o proxy NDP para permitir que seus contêineres no / 112 cheguem à Internet IPv6. Você pode usar um daemon proxy NDP ou criar entradas estáticas na linha de comando.

Eu escrevi uma descrição detalhada de como fazer isso com o docker aqui . A mesma lógica se aplica para lxc.

    
por 29.12.2014 / 13:54

Tags