Um intervalo não é uma rota: transforme 200-255 em três prefixos
Uma linha de rota recebe uma rede e uma máscara, nunca um endereço de início e fim. Some o intervalo em prefixos alinhados antes de o OpenVPN o instalar.
As regras da firewall aceitam um primeiro e um último endereço, como 192.168.0.200 a 192.168.0.255, mas as rotas não. Uma entrada de rota só tem espaço para uma rede e uma máscara, o que significa que um intervalo contíguo tem de se tornar um ou mais prefixos alinhados antes de OpenVPN o instalar. Um perfil que junta route-nopull com um intervalo não alinhado é onde a falha costuma esconder-se, porque o ficheiro é analisado e nenhuma rota corresponde. Corrige os blocos e a falha torna-se visível num único comando.
O mito: um intervalo é uma rota
As tabelas de encaminhamento guardam pares de rede e máscara e escolhem a correspondência mais longa, por isso um intervalo com início e fim não tem onde morar. Um prefixo que abrange 256 endereços cobre .0 a .255, metade desse tamanho cobre .0 a .127, e só um intervalo alinhado com essas bordas é mapeado num passo. Tudo o resto tem de ser cortado em blocos. Uma rota menor continua a significar o intervalo original.
Um intervalo que não está alinhado com o prefixo não é uma rota comprimida. É outro tipo de objeto, e tratá-lo como uma rota é onde a falha silenciosa começa.
O alinhamento é aritmética, não estilo
Os tamanhos dos blocos são fixados pelo comprimento do prefixo. Um /29 só pode começar num endereço divisível por 8, um /28 num divisível por 16, um /27 num divisível por 32. Move um bloco da sua fronteira e a máscara cobre um conjunto de endereços diferente do que pretendias.
Soma a partir do extremo inferior. Em cada passo pega no maior bloco alinhado que não passa o fim do intervalo e continua no primeiro endereço depois dele. Os blocos não podem sobrepor-se, porque cada um começa onde o anterior parou.
Duas pessoas a fazer isto à mão devem chegar ao mesmo resultado. Uma divergência significa que alguém permitiu um início que não estava alinhado.
Percorre 200 a 255
| Step | Start | Block that fits | Line for the profile |
|---|---|---|---|
| 1 | .200, multiple of 8 | /29, 8 addresses | 192.168.0.200 255.255.255.248 |
| 2 | .208, multiple of 16 | /28, 16 addresses | 192.168.0.208 255.255.255.240 |
| 3 | .224, multiple of 32 | /27, 32 addresses | 192.168.0.224 255.255.255.224 |
O intervalo começa em .200, que é múltiplo de 8, por isso o primeiro bloco é um /29 de .200 a .207. Depois desses oito endereços o primeiro valor livre é .208, que se divide por 16, por isso um /28 ocupa .208 a .223. O que resta é .224 a .255, trinta e dois endereços que começam num múltiplo de 32, portanto um /27. Essas três linhas são toda a decomposição.
Escreve-os como linhas de rota em vez de prosa. Um perfil que só tem a primeira linha cobre oito endereços e deixa o resto fora do túnel.
route-nopull
route 192.168.0.200 255.255.255.248
route 192.168.0.208 255.255.255.240
route 192.168.0.224 255.255.255.224
O último bloco precisa de uma verificação de fronteira. Dentro de 192.168.0.224/27, .224 é o endereço de rede e .255 é o endereço de difusão, por isso um anfitrião que tem de responder em .255 fica coberto pelo prefixo e continua inalcançável. Move esse anfitrião ou divide o intervalo de outra forma em vez de encaminhar o bloco e esperar.
O que o route-nopull faz à imagem
Adiciona route-nopull apenas quando as rotas empurradas pelo servidor não são desejadas. Sem a diretiva, as rotas empurradas e estas linhas coexistem, e vence o prefixo mais específico. Com ela, as opções DNS e DHCP empurradas também desaparecem, por isso a resolução de nomes interna precisa da sua própria configuração. Esse efeito secundário surpreende quem acrescentou a diretiva para corrigir um problema de rota.
Acrescenta-a pelo motivo certo, não como reflexo automático. Remover as rotas empurradas é uma decisão de política com uma consequência para o DNS. Se o servidor pode empurrar os mesmos três prefixos, deixa-o, e apaga as cópias do lado do cliente para que um só proprietário controle a lista.
Verificações que apanham os erros habituais
Verifica que cada máscara é uma sequência contígua de uns. O valor 255.255.255.248 passa e 255.255.255.200 falha, e uma máscara que não é contígua é rejeitada ou mal lida. Depois confirma o caminho para um endereço de cada bloco.
ip route get 192.168.0.205
ip route get 192.168.0.220
ip route get 192.168.0.240
Cada resposta deve nomear a interface do túnel. Um resultado que nomeia o adaptador físico significa que a linha nunca foi instalada, o que acontece muitas vezes quando um gestor de rede do ambiente de trabalho reescreve a tabela depois de o perfil se ligar.
Escolhe um só proprietário para a lista. Quando o servidor pode empurrar os mesmos prefixos, empurra-os e remove as edições do lado do cliente. Um só proprietário significa que um erro de escrita tem um lugar, e o cliente e o servidor não podem discordar sobre que endereços estão dentro do túnel.