Sua pergunta realmente me ligou, já que posso usar a mesma solução em outra rede que estou gerenciando. Eu experimentei e é de fato possível! (Eu simplesmente amo o Linux ...).
Eu criei um laboratório do Netkit que modela sua situação. Você pode baixar o laboratório aqui (1.8 KiB).
Você não precisa instalar o Netkit se não estiver interessado em testá-lo em sua máquina. Você pode simplesmente pegar o pacote acima e ver os arquivos .startup das várias máquinas. Caso você queira testar o laboratório, ele precisa de um sistema de arquivos com o "radvd" instalado, que não está incluído no sistema de arquivos padrão do Netkit. Verifique o README do pacote do sistema de arquivos para ver como montá-lo em sua máquina e, em seguida, use apt-get update && apt-get install radvd
.
O laboratório contém 6 máquinas: v6site (algum site da V6 que você deseja acessar), v6isp (seu ISP), r1 ( seu primeiro roteador com conectividade V4 e V6), r2 (seu segundo roteador que se conecta a r1 via OpenVPN), pc1 e pc2 (máquinas conectadas e servidas de IPv6 por r2 ).
Eu usei o prefixo de documentação RFC 3849 2001: DB8 :: / 32 no exemplo, em vez do exemplo aleatório endereços que você usou. Além disso, usei FEC0 :: / 96 para os pontos de extremidade do OpenVPN, que é obsoleto. Em sua implantação, é recomendável usar um prefixo pequeno no seu endereço local exclusivo .
Esclarecimento: RFC 3849 define o prefixo 2001: DB8 :: / 32 a ser usado para fins de exemplo e documentação (para unicast global). Em vez de escolher qualquer endereço IPv6 aleatório, as pessoas são incentivadas a usar endereços no prefixo 2001: DB8 :: / 32 como um curinga em exemplos que serão alterados para outra coisa na implantação real. Nesta questão, primeiro 2001: acb: 132: acb :: / 64, em seguida, 2001: 123: 123: 11a1 :: / 64. Na resposta, acabei de substituir os dois endereços no prefixo da documentação. Quando você aplica a resposta ao seu cenário real, basta procurar todas as ocorrências de 2001: DB8 :: addresses e substituí-las por seus endereços reais.
Os endpoints de túnel também precisam de endereços. Os endereços usados nos terminais de encapsulamento não precisam ser roteados externamente, pois são usados apenas internamente. Você usou endereços começando com FED1 :: e FED2 ::, enquanto eu usei o endereço começando com FECO ::. Esses endereços foram originalmente definidos em RFC 3513 . Eles são equivalentes aos endereços de uso privado do IPv4 10.0.0.0/8, 192.168.0.0/16 e 172.16.0.0/12. Devido a problemas, eles foram mais tarde reprovados no RFC 3879 em favor de Unique Local Addresses (ULA) em RFC 4193 . Os ULAs têm um prefixo "aleatório" exclusivo para cada usuário final. O benefício é que, se por qualquer motivo você rotear entre essas redes, usando túneis, por exemplo, eles poderão conversar entre si sem tradução de endereço (enquanto conflitos podem ocorrer e ocorrem ao usar 192.168.0.0/16, por exemplo). A página vinculada antes deste esclarecimento ajudará você a criar seu próprio prefixo ULA (e possivelmente registrá-lo, mas não é necessário registrá-lo).
Não há nenhum problema real em usar endereços locais de sites como FECx ou FEDx em terminais de túnel. Eles estão obsoletos, mas isso não os faz errados. Recomenda-se apenas usar ULAs.
A configuração geral do seu primeiro roteador ( r1 ) está abaixo. Siga os comentários para uma melhor compreensão.
# Enable forwarding for IPv6 (between eth0 <-> tun0)
sysctl -w net.ipv6.conf.all.forwarding=1
## ISP V6 Internal network
# Since there is no host specific address, we pick an address in the /64
# prefix. Note that this address is the same in two different prefixes:
# ..11a1::/64 and ..11a0::/59. This requires a proxing hack in R2.
# Optimally, you would have an address in the /59 prefix to use here,
# outside the delegated /64 prefix.
ip link set eth0 up
ip addr add 2001:db8:1:11a1::1/59 dev eth0
ip route add default via 2001:db8:1:11a0::1 dev eth0
## V4 Internet
ip link set eth1 up
ip addr add 192.168.1.1/24 dev eth1
## OpenVPN tunnel via IPv4 Internet to R2
# This is the most basic configuration of OpenVPN. No encryption, no security,
# no nothing. DO NOT USE THIS OUTSIDE THIS LABORATORY.
openvpn --dev tun --tun-ipv6 --daemon
while ! ip link show tun0 2>/dev/null
do
echo "Waiting for OpenVPN to connect..."
sleep 1
done
# Configure OpenVPN endpoints. Choose a distinct small prefix for the endpoints
# and use it to route the the /64 prefix to R2.
ip link set tun0 up
ip addr add fec0::1/96 dev tun0
ip route add 2001:db8:1:11a1::/64 via fec0::2 dev tun0
A configuração global para o segundo roteador ( r2 ):
# Enable forwarding for IPv6 (between eth0 <-> tun0)
sysctl -w net.ipv6.conf.all.forwarding=1
## Internal Company IPv6 Network
# The router address is arbitrary.
ip link set eth0 up
ip addr add 2001:db8:1:11a1::ffff/64 dev eth0
## V4 Internet
ip link set eth1 up
ip addr add 192.168.1.2/24 dev eth1
## OpenVPN tunnel via IPv4 Internet to R1
# This is the most basic configuration of OpenVPN. No encryption, no security,
# no nothing. DO NOT USE THIS OUTSIDE THIS LABORATORY.
openvpn --remote 192.168.1.1 --dev tun --tun-ipv6 --daemon
# Wait for OpenVPN...
while ! ip link show tun0 2>/dev/null
do
echo "Waiting for OpenVPN to connect..."
sleep 1
done
# Configure OpenVPN endpoints. See comments for R1 above.
# Note that we route ALL IPv6 traffic through the tunnel.
ip link set tun0 up
ip addr add fec0::2/96 dev tun0
ip route add default via fec0::1 dev tun0
# R1 address is in our private network (eth0, see above), but on the other
# side of the tunnel. We need a more specific route specifically for it.
# Also, make this router (R2) act as a neighbor proxy so that other
# machines on the private network can see R1 through the tunnel.
# This is a hack that would be avoided if we had a bigger prefix than
# /64, or if R1 had a host-specific address outside of the /64.
ip route add 2001:db8:1:11a1::1/128 via fec0::1 dev tun0
ip neigh add proxy 2001:db8:1:11a1::1 dev eth0
## Routing advertisement daemon
# NOTE: The standard Netkit filesystem does not have radvd, it has to be
# installed manually with 'apt-get update && apt-get install radvd' in
# the model fs.
chmod 644 /etc/radvd.conf
radvd
A configuração dos PCs conectados ao r1 (eth0) é extremamente simples, graças ao radvd:
sysctl -w net.ipv6.conf.all.autoconf=1
ip link set eth0 up
Esta é a configuração mais importante. Os outros detalhes (incluindo uma cópia do arquivo /etc/radvd.conf do r2 ) estão no pacote de laboratório acima.