Questão Problemas de roteamento com o IPv6 sobre o OpenVPN


Estou tentando configurar um servidor OpenVPN para permitir que os clientes usem sua sub-rede IPv6. O servidor está executando o Debian Wheezy e o cliente é o OS X 10.9.5. Aqui está a configuração do servidor:

port 1194
proto udp
dev tun
tun-ipv6
ca ca.crt
cert server.crt
key server.key  # This file should be kept secret
dh dh1024.pem
server 10.100.100.0 255.255.255.0
ifconfig-pool-persist ipp.txt
keepalive 10 120
comp-lzo
persist-key
persist-tun
status openvpn-status.log
verb 3
tls-auth ta.key 0
cipher DES-EDE3-CBC
push "redirect-gateway def1"
push "dhcp-option DNS 8.8.8.8"
server-ipv6 MY:PUBLIC:IPV6:SUBNET::/64
push "route-ipv6 0::/0"

E aqui está a configuração do cliente:

client
dev tun
tun-ipv6
proto udp
remote server.address 1194
resolv-retry infinite
nobind
persist-key
persist-tun
ca ca.crt
cert client.crt
key client.key
comp-lzo
verb 3
tls-auth ta.key 1
cipher DES-EDE3-CBC

A conectividade IPv4 funciona sem problemas, mas existem alguns problemas estranhos com o IPv6. O cliente obtém um endereço IPv6 quando se conecta, mas a única coisa que responde a pings (ou aceita qualquer pacote IPv6) é o próprio servidor. Parece que os pacotes que devem ir para a Internet global não são roteados através da interface apropriada no servidor, que é eth0 no meu caso. O endereço IPv6 é atribuído a eth0 estaticamente da sub-rede fornecida pelo meu provedor de hospedagem e tudo funciona no servidor; por exemplo, posso pingar ipv6.google.com a partir dele. o net.ipv6.conf.default.forwarding e net.ipv6.conf.all.forwarding Opções sysctl também estão ativadas.


1


origem




Respostas:


Eu tenho lutado com o mesmo problema e coincidentemente no Debian Wheezy também.

Existem duas opções que você pode ter perdido neste momento (no servidor VPN):

  1. Não ip6tables regras de encaminhamento
  2. Nenhuma rota IPv6 padrão

1 ip6tables

Tal como acontece com o IPv4, você precisa de regras explícitas de encaminhamento de firewall, isso funcionou para mim:

# ip6tables -A FORWARD -i eth0 -o tun0 -m state --state RELATED,ESTABLISHED -j ACCEPT
# ip6tables -A FORWARD -i tun0 -o eth0 -j ACCEPT

(ajuste as interfaces de acordo, você pode querer adicionar -s VPN-IPv6-RANGE/SUBNET para a segunda regra para encaminhamento mais explícito).

2. rota padrão

Este foi o problema do meu lado; me levou cerca de dois dias antes que alguém me fizesse repensar minha configuração e descobri que sentia falta de um efeito colateral forwarding = 1 em sysctl.

Quando você definir net.ipv6.conf.all.forwarding = 1, autoconfiguração de endereço de anúncios de roteador são ignorados. Em outras palavras, quando o seu default rota é definida por autoconfiguração, essa rota é descartada com bastante rapidez e você perde a conectividade IPv6 para seu servidor. Quando sua rota padrão agora é algo como default via fe80::..., este é provavelmente o caso.

A solução para isso é adicionar uma rota padrão explícita /etc/network/interfaces, tal como:

iface eth0 inet6 static
    address 2001:db8::2
    netmask 64
    gateway 2001:db8::1

Você pode verificar se a sua configuração de VPN funciona (temporariamente) olhando para a tabela de roteamento IPv6 no seu servidor: ip -6 route show default e, quando estiver vazio, adicione a rota padrão com ip -6 route add default via 2001:db8::1 (ajuste a sua escala local em conformidade). Em seguida, verifique se o seu cliente VPN pode executar ping em algum endereço IPv6 externo.

Configuração do OpenVPN

Uma pequena diferença de configuração do meu lado é:

  • push "route-ipv6 2000::/3" (2000:: até 3fff:ffff...)

ao invés de

  • push "route-ipv6 0::/0"

mas essas rotas são equivalentes no momento.


0



Obrigado, eu tentei suas regras do ip6tables, mas isso não ajudou. Eu realmente testei minha configuração usando o netcat e acontece que os pacotes só vão para um lado, do meu cliente para a internet. Então eu posso enviar, mas não posso receber. O problema pode ser que o roteador ao qual o servidor está conectado não permite que os pacotes VPN entrem no servidor. - Grishka


Então, descobri que o roteador a montante simplesmente não envia incondicionalmente incondicionalmente pacotes para toda a minha sub-rede alocada para o meu servidor. Para saber como encaminhá-los, você precisa informar isso explicitamente por meio do protocolo NDP. Isso deve ser feito quando um cliente se conecta e recebe um endereço IPv6. Então, resumindo, aqui está como eu consertei. Adicione isto à configuração do OpenVPN no servidor:

script-security 3
client-connect /etc/openvpn/client-connect.sh

Crie um script chamado /etc/openvpn/client-connect.sh com o seguinte conteúdo:

#!/bin/sh
ip -6 neigh add proxy $ifconfig_pool_remote_ip6 dev eth0

Reinicie o OpenVPN. Conecte-se ao servidor e aproveite sua própria parte do futuro da Internet.


0