Algú us dona una primera i una última adreça i us demana una ruta VPN. El moviment temptador és triar el prefix més curt que conté tots dos extrems, i aquest moviment afegeix silenciosament destinacions que ningú no havia demanat. Un bloc CIDR sempre té una mida potència de dos i una adreça inicial alineada amb ella, així que un interval arbitrari normalment en necessita més d’un. Recorreu l’interval, dividiu-lo exactament i després comproveu les adreces just fora d’ell.

Comenceu per l’interval, no pel prefix

Anoteu la primera adreça i l’última abans d’escriure res més. La parella és el requisit; un prefix només és una expressió possible d’aquest requisit, i de vegades una de incorrecta. Dos nombres també són molt més fàcils de comprovar que una màscara.

Un interval alineat es redueix a un sol bloc. Un de no alineat es descompon en diversos, i la descomposició és exacta, no aproximada. El que no heu de fer és arrodonir cap enfora i dir-ne prou a prop, perquè les adreces addicionals reben la política que porti la ruta.

Totes dues direccions de l’error importen. Per a una ruta cap al túnel, les adreces addicionals s’atreuen a la VPN. Per a una excepció de bypass, les adreces addicionals se la salten. Cap dels dos resultats no és visible en una taula de rutes que només mostra el prefix que heu instal·lat.

Cas u: l’interval resulta estar alineat

Agafeu 198.51.100.64 fins a 198.51.100.127. La primera adreça està alineada en una frontera de 64 adreces i l’interval és exactament de 64 adreces, així que un sol /26 el descriu sense cap sobrant.

Aquest és el cas fàcil i val la pena reconèixer-lo, perquè vol dir que el requisit probablement el va escriure algú que ja pensava en prefixos. També vol dir que la comprovació és curta: confirmeu que la mida és una potència de dos i que l’inici és un múltiple d’aquesta mida.

Els rangs de documentació fan bons exemples precisament perquè ningú no els posseeix. No instal·leu aquestes adreces en un túnel real i no suposeu que un rang que us han donat és espai de documentació només perquè sembla inusual.

Cas dos: no ho està, així que dividiu-lo

Ara agafeu 198.51.100.100 fins a 198.51.100.107. Són vuit adreces, que és una potència de dos, però 100 no és múltiple de vuit. Un sol bloc d’aquesta mida no pot començar allà, així que l’interval s’ha de cobrir amb més d’un.

La cobertura exacta són dos blocs /30: 198.51.100.100/30 cobreix de 100 a 103, i 198.51.100.104/30 cobreix de 104 a 107. Vuit adreces en total, res fora de l’interval, i la descomposició és única per a un interval donat.

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 funció de la biblioteca estàndard fa l’aritmètica per vosaltres, i la documentació d’ipaddress defineix què retorna. El que no fa és triar una passarel·la, decidir qui posseeix les adreces ni concedir accés a cap servei que hi hagi al darrere.

Mesureu què hauria capturat el prefix més ampli

Abans d’acceptar una drecera, calculeu quant costa. Un /28 que comença a 198.51.100.96 cobreix de 96 a 111, que són setze adreces en lloc de vuit. Les vuit addicionals són de 96 a 99 i de 108 a 111, i totes heretarien la ruta.

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))"

Vuit destinacions addicionals és un nombre concret que podeu posar en una sol·licitud de canvi. També és el nombre que decideix si la drecera és acceptable, cosa que és una qüestió de política i no d’aritmètica.

Manteniu l’aritmètica i el descobriment separats. Un interval proporcionat per l’operador de xarxa es converteix exactament. Una sola resposta DNS d’un servei canviant no estableix el rang complet o permanent d’aquest servei, i noms no relacionats poden compartir una adreça.

Instal·leu el conjunt exacte i verifiqueu les vores

Lliureu cada prefix resultant a qui posseeix la configuració de la VPN i deixeu que l’instal·li pel mecanisme suportat. Si el requisit necessita dues entrades, manteniu-ne dues en lloc d’ampliar-ne una per fer un formulari més curt.

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 dues últimes ordres són les que la gent s’estalvia. La primera adreça interior hauria de seguir la ruta nova, i l’adreça just fora de l’interval no. Si totes dues van pel mateix camí, l’interval s’ha ampliat en algun punt entre el requisit i la configuració.

Registreu la primera adreça, l’última adreça i els prefixos que les expressen. La següent persona que revisi la regla podrà comprovar el requisit contra la configuració sense refer l’aritmètica, i la diferència entre una ruta exacta i una de còmoda continua sent visible.

Articles relacionats