Duas LAN, um concentrador WireGuard e um plano de endereços IPv6 que tem de responder a três perguntas distintas: que prefixo, que endereço pertence a cada router e que par é dono de que sub-rede. Um erro em qualquer delas produz um túnel que faz o aperto de mão e não encaminha nada. O plano abaixo percorre um desenho privado de dois locais nessa ordem. Deliberadamente não fornece acesso à Internet por IPv6.

Decida para que serve o prefixo

Um prefixo local único de fd00::/8 é a escolha natural quando o objetivo é a alcançabilidade privada entre locais. Mantém-se estável independentemente de que operador serve cada local e não é anunciado na tabela de encaminhamento global, pelo que não pode deixar escapar a sua numeração interna para a Internet.

A mesma propriedade é a limitação. Uma ULA não dá qualquer caminho de retorno público, porque nenhum fornecedor a montante sabe encaminhá-la para a sua gateway. Se o requisito incluir saída para a Internet por IPv6, precisa de uma atribuição de um fornecedor que a encaminhe para si, e essa é uma decisão de desenho separada com o seu próprio tamanho de prefixo.

Não assuma que cada implementação precisa de um /48. RFC 6177 afastou-se de um único tamanho obrigatório para o local final, e o tamanho correto depende do número de redes que vai operar. Gere a ULA com o procedimento RFC 4193 em vez de inventar um prefixo que outra organização também poderá usar. Escreva o resultado no plano de endereços antes de configurar qualquer dispositivo, porque um prefixo que ninguém registou é um prefixo que alguém vai reutilizar.

Divida o prefixo em papéis

O exemplo abaixo usa fd7c:2e91:4a00::/48, e a tabela está organizada por onde cada bloco é escrito, não por local. Trate os valores como amostra e gere os seus antes de implementar seja o que for.

Where it is writtenWhat appears thereBlock usedWhat it establishes
Hub wg0.conf, interface addressA single host address on the tunnelfd7c:2e91:4a00:ff00::1/128The hub's own tunnel identity
Hub wg0.conf, Site A peerTwo ranges in one AllowedIPs line::2/128 and :10::/64That A owns its tunnel address and its LAN
Hub wg0.conf, Site B peerTwo ranges in one AllowedIPs line::3/128 and :20::/64That B owns its tunnel address and its LAN
Site A wg0.conf, interface addressA single host address on the tunnelfd7c:2e91:4a00:ff00::2/128A's identity as the hub sees it
Site B wg0.conf, interface addressA single host address on the tunnelfd7c:2e91:4a00:ff00::3/128B's identity as the hub sees it

Os blocos LAN são /64 porque o SLAAC comum espera um identificador de interface de 64 bits. Dividir uma LAN num bloco menor quebra essa suposição na maioria dos anfitriões, e o custo operacional não compensa a poupança de endereços num plano privado. Ambos os blocos LAN vêm do meio do /48, deixando o intervalo baixo livre para locais posteriores.

Os endereços de túnel são um depósito administrativo, não uma rede no link. Cada interface recebe uma única /128 dele, pelo que nenhum anfitrião assume uma sub-rede partilhada no túnel e a descoberta de vizinhos não corre onde não é precisa. Mantenha os papéis disjuntos e registe-os no plano de endereços da organização para que um local posterior não reutilize um bloco.

Dê a cada router um endereço de túnel

Atribua uma /128 por router e mantenha as chaves e os pontos finais existentes do concentrador que funciona. Os três valores abaixo diferem apenas na parte do anfitrião.

Hub:    Address = fd7c:2e91:4a00:ff00::1/128
Site A: Address = fd7c:2e91:4a00:ff00::2/128
Site B: Address = fd7c:2e91:4a00:ff00::3/128

Esta /128 descreve o único endereço atribuído a essa interface. Não diz nada sobre quantos destinos o par pode encaminhar, porque a alcançabilidade exprime-se em AllowedIPs e não no prefixo da interface.

Cada router de local também precisa de um endereço no seu bloco LAN e de uma forma de o distribuir, normalmente anúncios de router para SLAAC. O WireGuard não envia esses anúncios por si e não faz ponte entre as duas LAN. O router do local é um router nos dois sentidos.

Coloque a propriedade da sub-rede em AllowedIPs

A entrada de par do concentrador para o Local A possui o endereço de túnel de A e a LAN de A, e esse emparelhamento é toda a declaração de propriedade. Nada mais nessa secção de par precisa de descrever o local.

AllowedIPs = fd7c:2e91:4a00:ff00::2/128, fd7c:2e91:4a00:10::/64

A entrada de par para o Local B possui o par correspondente, e aqui a simetria importa mais do que a brevidade. Leia as duas linhas em conjunto e a divisão de propriedade torna-se visível num relance.

AllowedIPs = fd7c:2e91:4a00:ff00::3/128, fd7c:2e91:4a00:20::/64

São duas secções de par separadas, não duas listas a competir por um par. O WireGuard usa o AllowedIPs nos dois sentidos: escolhe o par para um destino de saída e rejeita um pacote recebido cuja origem não corresponde ao intervalo atribuído ao par que o decifrou. Dar todo o /48 aos dois pares desativaria essa segunda verificação e tornaria difuso qual local possui qual bloco. É essa distinção que torna um endereço de origem errado visível em vez de silenciosamente aceite.

Cada local só precisa dos destinos alcançáveis através do seu par de concentrador: o Local A lista o endereço do concentrador, o endereço de túnel do Local B e a LAN de B, e o Local B lista o conjunto recíproco. As listas são assimétricas de propósito, porque cada router vê um lado diferente da topologia. Escreva ambas a partir do plano de endereços e não da configuração do outro local, que é como um intervalo obsoleto sobrevive a uma renumeração.

Com wg-quick, estes intervalos também criam rotas. Com systemd-networkd ou uma configuração manual, acrescente você as rotas equivalentes; caso contrário o túnel transporta pacotes que o núcleo nunca lá envia.

Conclua o encaminhamento e teste os dois sentidos

Ative o encaminhamento IPv6 no concentrador e nos dois routers de local, e permita os serviços necessários entre locais na política de encaminhamento. Mantenha as mensagens ICMPv6 Packet Too Big utilizáveis, porque descartá-las quebra a descoberta de MTU do caminho e produz bloqueios em transferências grandes que parecem falhas de aplicação. Um concentrador que encaminha sem a permissão da firewall descarta o pacote entre o encaminhamento e o túnel. Esse modo de falha vale a pena conhecer, porque o túnel mantém-se ativo e só morrem alguns fluxos.

sysctl net.ipv6.conf.all.forwarding
ip -6 route
ping -6 -c 3 fd7c:2e91:4a00:20::1

Teste de um anfitrião no Local A para um anfitrião no Local B e depois no sentido oposto. Um ping ao endereço de túnel do concentrador exercita apenas o primeiro salto e passará mesmo quando as rotas LAN estão erradas. O fluxo de anfitrião para anfitrião é o que prova o plano.

A ligação WireGuard exterior pode correr sobre IPv4 enquanto o tráfego interior é IPv6, e essa independência é útil durante a migração. Se mais tarde for acrescentada saída IPv6 global, reveja a atribuição do fornecedor, a seleção do endereço de origem e o encaminhamento de retorno como um novo passo de desenho; o plano privado acima continua válido para tráfego entre locais.

Artigos relacionados