Planear IPv6 para um concentrador WireGuard de dois locais: prefixo, pares, rotas
Percorra um concentrador IPv6 privado para duas LAN: escolha um prefixo, reserve endereços de túnel e depois deixe o AllowedIPs expressar que par é dono de cada sub-rede.
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 written | What appears there | Block used | What it establishes |
|---|---|---|---|
| Hub wg0.conf, interface address | A single host address on the tunnel | fd7c:2e91:4a00:ff00::1/128 | The hub's own tunnel identity |
| Hub wg0.conf, Site A peer | Two ranges in one AllowedIPs line | ::2/128 and :10::/64 | That A owns its tunnel address and its LAN |
| Hub wg0.conf, Site B peer | Two ranges in one AllowedIPs line | ::3/128 and :20::/64 | That B owns its tunnel address and its LAN |
| Site A wg0.conf, interface address | A single host address on the tunnel | fd7c:2e91:4a00:ff00::2/128 | A's identity as the hub sees it |
| Site B wg0.conf, interface address | A single host address on the tunnel | fd7c:2e91:4a00:ff00::3/128 | B'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.