Quelqu’un vous donne une première et une dernière adresse et demande une route VPN. Le geste tentant est de choisir le préfixe le plus court qui contient les deux extrémités, et ce geste ajoute discrètement des destinations que personne n’a demandées. Un bloc CIDR a toujours une taille en puissance de deux et une adresse de départ alignée sur elle, donc un intervalle arbitraire en demande généralement plus d’un. Parcourez l’intervalle, découpez-le exactement, puis vérifiez les adresses juste en dehors.

Partez de l’intervalle, pas du préfixe

Notez la première adresse et la dernière avant d’écrire quoi que ce soit d’autre. La paire est l’exigence ; un préfixe n’en est qu’une expression possible, et parfois une mauvaise. Deux nombres sont aussi bien plus faciles à vérifier qu’un masque.

Un intervalle aligné se réduit à un seul bloc. Un intervalle non aligné se décompose en plusieurs, et la décomposition est exacte plutôt qu’approximative. Ce que vous ne devez pas faire, c’est arrondir vers l’extérieur et juger cela suffisamment proche, car les adresses supplémentaires reçoivent la politique que porte la route.

Les deux sens de l’erreur comptent. Pour une route vers le tunnel, les adresses supplémentaires sont attirées dans le VPN. Pour une exception de contournement, les adresses supplémentaires l’évitent. Aucun des deux résultats n’est visible dans une table de routage qui n’affiche que le préfixe installé.

Premier cas : l’intervalle se trouve être aligné

Prenez 198.51.100.64 à 198.51.100.127. La première adresse est alignée sur une frontière de 64 adresses et l’intervalle fait exactement 64 adresses, donc un seul /26 le décrit sans rien laisser de côté.

C’est le cas facile et il vaut la peine de le reconnaître, car cela signifie que l’exigence a probablement été écrite par quelqu’un qui pensait déjà en préfixes. Cela signifie aussi que la vérification est courte : confirmez que la taille est une puissance de deux et que le début est un multiple de cette taille.

Les plages de documentation font de bons exemples précisément parce que personne ne les possède. N’installez pas ces adresses sur un vrai tunnel et ne supposez pas qu’une plage qui vous a été donnée est un espace de documentation simplement parce qu’elle semble inhabituelle.

Deuxième cas : il ne l’est pas, alors découpez-le

Prenez maintenant 198.51.100.100 à 198.51.100.107. Cela fait huit adresses, ce qui est une puissance de deux, mais 100 n’est pas un multiple de huit. Un seul bloc de cette taille ne peut pas commencer là, donc l’intervalle doit être couvert par plus d’un.

La couverture exacte est de deux blocs /30 : 198.51.100.100/30 couvre 100 à 103, et 198.51.100.104/30 couvre 104 à 107. Huit adresses au total, rien en dehors de l’intervalle, et la décomposition est unique pour un intervalle donné.

python3 -c "from ipaddress import ip_address, summarize_address_range as s; print(*s(ip_address('198.51.100.100'), ip_address('198.51.100.107')), sep='\n')"

La fonction de la bibliothèque standard fait l’arithmétique pour vous, et la documentation d’ipaddress définit ce qu’elle renvoie. Ce qu’elle ne fait pas, c’est choisir une passerelle, décider à qui appartiennent les adresses ou accorder l’accès à un service derrière elles.

Mesurez ce que le préfixe plus large aurait capturé

Avant d’accepter un raccourci, calculez ce qu’il coûte. Un /28 commençant à 198.51.100.96 couvre 96 à 111, soit seize adresses au lieu de huit. Les huit supplémentaires vont de 96 à 99 et de 108 à 111, et chacune d’elles hériterait de la route.

python3 -c "from ipaddress import ip_network as n; w=set(n('198.51.100.96/28')); t=set(n('198.51.100.100/30'))|set(n('198.51.100.104/30')); print(len(w), len(t), sorted(w-t))"

Huit destinations supplémentaires est un nombre concret que vous pouvez mettre dans une demande de changement. C’est aussi le nombre qui décide si le raccourci est acceptable, et c’est une question de politique et non d’arithmétique.

Gardez l’arithmétique et la découverte séparées. Un intervalle fourni par l’opérateur réseau se convertit exactement. Une seule réponse DNS d’un service changeant n’établit pas la plage complète ou permanente de ce service, et des noms sans rapport peuvent partager une adresse.

Installez l’ensemble exact et vérifiez les bords

Remettez chaque préfixe obtenu à la personne qui possède la configuration VPN et laissez-la l’installer par le mécanisme pris en charge. Si l’exigence nécessite deux entrées, gardez deux entrées plutôt que d’en élargir une pour raccourcir un formulaire.

sudo ip route add 198.51.100.100/30 via 10.90.0.1 dev tun0
sudo ip route add 198.51.100.104/30 via 10.90.0.1 dev tun0
ip route get 198.51.100.101
ip route get 198.51.100.97

Les deux dernières commandes sont celles que les gens sautent. La première adresse intérieure devrait suivre la nouvelle route, et l’adresse juste en dehors de l’intervalle ne devrait pas. Si les deux passent par le même chemin, l’intervalle a été élargi quelque part entre l’exigence et la configuration.

Consignez la première adresse, la dernière adresse et les préfixes qui les expriment. La personne suivante qui examine la règle peut alors confronter l’exigence à la configuration sans refaire l’arithmétique, et la différence entre une route exacte et une route commode reste visible.

Articles similaires