Cineva vă dă o primă și o ultimă adresă și cere o rută VPN. Mișcarea tentantă este să alegeți cel mai scurt prefix care conține ambele capete, iar această mișcare adaugă în tăcere destinații pe care nimeni nu le-a cerut. Un bloc CIDR are întotdeauna o dimensiune putere a lui doi și o adresă de start aliniată la ea, așa că un interval arbitrar are nevoie de obicei de mai mult de unul. Parcurgeți intervalul, împărțiți-l exact, apoi verificați adresele imediat din afara lui.

Începeți cu intervalul, nu cu prefixul

Notați prima adresă și ultima adresă înainte de a scrie orice altceva. Perechea este cerința; un prefix este doar o expresie posibilă a ei, și uneori una greșită. Două numere sunt, de asemenea, mult mai ușor de verificat decât o mască.

Un interval aliniat se restrânge la un singur bloc. Unul nealiniat se descompune în mai multe, iar descompunerea este exactă, nu aproximativă. Ce nu trebuie să faceți este să rotunjiți în afară și să spuneți că e destul de aproape, pentru că adresele suplimentare primesc politica pe care o poartă ruta.

Ambele direcții ale erorii contează. Pentru o rută în tunel, adresele suplimentare sunt trase în VPN. Pentru o excepție de ocolire, adresele suplimentare o sar. Niciunul dintre rezultate nu este vizibil într-un tabel de rute care arată doar prefixul instalat.

Primul caz: intervalul se întâmplă să fie aliniat

Luați 198.51.100.64 până la 198.51.100.127. Prima adresă este aliniată pe o graniță de 64 de adrese și intervalul este exact 64 de adrese, așa că un singur /26 îl descrie fără nimic în plus.

Acesta este cazul ușor și merită recunoscut, pentru că înseamnă că cerința a fost probabil scrisă de cineva care gândea deja în prefixe. Înseamnă și că verificarea este scurtă: confirmați că dimensiunea este o putere a lui doi și că începutul este un multiplu al acelei dimensiuni.

Intervalele de documentație oferă exemple bune tocmai pentru că nimeni nu le deține. Nu instalați aceste adrese pe un tunel real și nu presupuneți că un interval primit este spațiu de documentație doar pentru că pare neobișnuit.

Al doilea caz: nu este, așa că împărțiți-l

Acum luați 198.51.100.100 până la 198.51.100.107. Sunt opt adrese, ceea ce este o putere a lui doi, dar 100 nu este multiplu de opt. Un singur bloc de acea dimensiune nu poate începe acolo, așa că intervalul trebuie acoperit de mai mult de unul.

Acoperirea exactă este de două blocuri /30: 198.51.100.100/30 acoperă 100 până la 103, iar 198.51.100.104/30 acoperă 104 până la 107. Opt adrese în total, nimic în afara intervalului, iar descompunerea este unică pentru un interval dat.

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

Funcția din biblioteca standard face aritmetica pentru dumneavoastră, iar documentația ipaddress definește ce returnează. Ce nu face este să aleagă o poartă, să decidă cui aparțin adresele sau să acorde acces la vreun serviciu din spatele lor.

Măsurați ce ar fi capturat prefixul mai larg

Înainte de a accepta o scurtătură, calculați cât costă. Un /28 care începe la 198.51.100.96 acoperă 96 până la 111, adică șaisprezece adrese în loc de opt. Cele opt în plus sunt 96 până la 99 și 108 până la 111, și fiecare dintre ele ar moșteni 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))"

Opt destinații în plus este un număr concret pe care îl puteți pune într-o cerere de modificare. Este și numărul care decide dacă scurtătura este acceptabilă, iar aceasta este o chestiune de politică, nu de aritmetică.

Țineți aritmetica și descoperirea separate. Un interval furnizat de operatorul de rețea este convertit exact. Un singur răspuns DNS de la un serviciu care se schimbă nu stabilește intervalul complet sau permanent al acelui serviciu, iar nume neînrudite pot împărtăși o adresă.

Instalați setul exact și verificați marginile

Predați fiecare prefix rezultat celui care deține configurația VPN și lăsați-l să îl instaleze prin mecanismul acceptat. Dacă cerința are nevoie de două intrări, păstrați două intrări în loc să lărgiți una pentru a scurta un formular.

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

Ultimele două comenzi sunt cele pe care oamenii le sar. Prima adresă interioară ar trebui să urmeze ruta nouă, iar adresa imediat din afara intervalului nu. Dacă ambele merg pe același drum, intervalul a fost lărgit undeva între cerință și configurație.

Înregistrați prima adresă, ultima adresă și prefixele care le exprimă. Următoarea persoană care verifică regula poate apoi compara cerința cu configurația fără a reface aritmetica, iar diferența dintre o rută exactă și una comodă rămâne vizibilă.

Articole similare