Um pacote sai de um portátil, nunca chega à gateway VPN e nenhum contador da firewall se move. A tabela de rotas já decidiu o destino do pacote: uma entrada blackhole correspondeu a ele e o kernel descartou-o antes de qualquer interface o ver. Esse comportamento é útil quando um destino deve falhar de forma fechada, mas é uma ação de encaminhamento com alcance estreito. Tratá-la como um kill switch completo é onde os projetos erram.

O que a ação de descarte realmente abrange

Uma consulta de rota escolhe uma tabela e, depois, o prefixo correspondente mais longo dentro dela. Uma rota blackhole é uma entrada normal cuja ação é descartar, por isso só afeta pacotes que teriam escolhido essa entrada depois de toda a decisão. Mude a tabela com uma regra de política, ou acrescente um prefixo mais específico, e o descarte deixa de se aplicar.

Por isso o alcance de um blackhole é exato e fácil de enunciar: cobre o prefixo, na tabela, para essa família de endereços. Não cobre um destino que outra tabela ganharia, e não cobre IPv6 só porque o prefixo IPv4 é descartado.

ip route get mostra a decisão antes de implementar seja o que for, incluindo a tabela e o tipo de rota. Ler essa saída é mais rápido do que deduzir de um pedido falhado que regra ou prefixo atuou.

Blackhole não é o mesmo que unreachable ou prohibit

O Linux oferece três tipos de rota semelhantes ao descarte, e diferem no que o emissor observa. Um blackhole descarta o pacote sem resposta, por isso o cliente vê um tempo limite. Uma rota unreachable devolve uma mensagem ICMP unreachable, por isso a ligação falha depressa com um erro de anfitrião ou de rede. Uma rota prohibit devolve um erro de proibição administrativa, mais próximo de uma recusa deliberada de política.

Escolha o comportamento que quer que a aplicação veja. Um descarte silencioso é adequado quando não quer revelar a política, e um erro imediato é melhor quando os utilizadores precisam de perceber porque um destino está indisponível. Misturar os tipos numa rede gera pedidos de suporte que descrevem a mesma política como três avarias diferentes.

Não assuma que toda a entrada de descarte é permutável quando diagnostica uma ligação. O texto do erro, o momento e a captura de pacotes diferem, e o tipo de rota na tabela diz qual está a observar. O manual do ip-route lista os tipos e o comportamento em caso de erro.

Como se compara com um kill switch

Um kill switch é filtragem de pacotes: uma regra de firewall que descarta o tráfego de saída que sairia fora do túnel. Uma rota blackhole é uma decisão de encaminhamento tomada mais cedo na pilha. Ambas podem parar tráfego, mas veem coisas diferentes e falham em casos diferentes.

MechanismWhat it blocksWhat it missesHow failure looks
Blackhole routeDestinations matching the prefix and tableOther tables, other address families, traffic with a different routeSilent timeout
Firewall kill switchEgress not bound to the tunnel interfaceRules that are too broad can break the endpoint or DHCPDropped packets with counters
WireGuard AllowedIPsDestinations not routed into the interfaceTraffic that never enters the interface at allNo tunnel route, direct egress

A cobertura é onde a comparação importa. Uma firewall pode corresponder ao proprietário, à porta ou à interface e bloquear uma aplicação enquanto o ponto final continua acessível; uma rota não consegue. Inversamente, uma rota pode enviar um prefixo inteiro para o descarte sem que qualquer filtro de pacotes esteja carregado, o que é útil num sistema mínimo.

AllowedIPs do WireGuard é encaminhamento por chave criptográfica, não uma firewall. Decide que prefixos de destino são aceites na interface, e um perfil que lista apenas a sub-rede do túnel deixa simplesmente os outros destinos para a rota predefinida normal. É por isso que os perfis de túnel completo usam 0.0.0.0/0 e é por isso que o wg-quick também instala regras de firewall quando pode.

Mantenha o ponto final do túnel fora do descarte

O endereço exterior do ponto final tem de continuar acessível através da interface física. Um descarte que também captura esse endereço impede o aperto de mão de sair, e o túnel nunca sobe, o que parece uma falha de VPN em vez de uma política de encaminhamento. Verifique a rota até ao ponto final antes e depois da alteração.

O acesso de gestão pertence à mesma revisão. Se o único caminho até ao router ou ao cliente for o túnel, um descarte demasiado amplo pode fechá-lo fora da máquina que lhe permitiria removê-lo. Mantenha uma rota fora de banda documentada, uma consola ou uma reversão temporizada.

IPv6 precisa de uma entrada própria e de uma revisão própria. Um projeto que descarta IPv4 num blackhole e deixa IPv6 na rota predefinida vaza exatamente o tráfego que a política pretendia parar, e o erro é invisível num teste apenas de IPv4.

Implemente com um temporizador e uma reversão

Aplique a rota com uma remoção automática curta para que um erro não sobreviva a um reinício. Os comandos abaixo usam um intervalo de documentação; substitua-o pelo prefixo que o seu projeto descarta de facto:

sudo ip route replace blackhole 10.0.0.0/8
ip route get 10.1.2.3
sudo systemd-run --on-active=60 /sbin/ip route del blackhole 10.0.0.0/8

O segundo comando deve reportar a rota blackhole e a tabela de onde veio. O terceiro agenda a remoção dentro de um minuto, o que é tempo suficiente para confirmar a política e curto o bastante para recuperar de um erro num anfitrião remoto. Depois de confirmado o comportamento, torne a entrada persistente através da mesma gestão de configuração que detém as outras rotas.

Feche a alteração registando o prefixo, a tabela, a família de endereços e o método de reversão. Um descarte é uma exceção deliberada no projeto de encaminhamento, e o próximo engenheiro precisa de saber que tráfego devia parar antes de decidir se ainda pertence ali.

Artigos relacionados