Kažkas duoda jums pirmą ir paskutinį adresą ir prašo VPN maršruto. Viliojantis žingsnis yra pasirinkti trumpiausią priešdėlį, apimantį abu galus, ir tas žingsnis tyliai prideda tikslų, kurių niekas neprašė. CIDR blokas visada turi dviejų laipsnio dydį ir su juo sulygiuotą pradžios adresą, todėl savavališkam intervalui paprastai reikia daugiau nei vieno. Pereikite intervalą, padalykite jį tiksliai, tada patikrinkite adresus iškart už jo.

Pradėkite nuo intervalo, o ne nuo priešdėlio

Užsirašykite pirmą adresą ir paskutinį adresą, prieš rašydami ką nors kita. Pora yra reikalavimas; priešdėlis tėra viena galima jo išraiška, o kartais neteisinga. Du skaičius taip pat daug lengviau patikrinti nei kaukę.

Sulygiuotas intervalas susitraukia į vieną bloką. Nesulygiuotas suskaidomas į kelis, o skaidymas yra tikslus, o ne apytikslis. Ko neturite daryti, tai apvalinti į išorę ir vadinti tai pakankamai artimu, nes papildomi adresai gauna tą politiką, kurią neša maršrutas.

Abi klaidos kryptys svarbios. Maršrutui į tunelį papildomi adresai įtraukiami į VPN. Apėjimo išimčiai papildomi adresai ją praleidžia. Nė vienas rezultatas nematomas maršrutų lentelėje, kuri rodo tik jūsų įdiegtą priešdėlį.

Pirmasis atvejis: intervalas atsitiktinai sulygiuotas

Paimkite 198.51.100.64 iki 198.51.100.127. Pirmasis adresas sulygiuotas su 64 adresų riba, o intervalas yra lygiai 64 adresai, todėl vienas /26 jį aprašo be jokios liekanos.

Tai lengvas atvejis ir verta jį atpažinti, nes tai reiškia, kad reikalavimą tikriausiai parašė žmogus, jau galvojęs priešdėliais. Tai taip pat reiškia, kad patikra trumpa: patvirtinkite, kad dydis yra dviejų laipsnis, o pradžia yra to dydžio kartotinis.

Dokumentacijos intervalai yra geri pavyzdžiai būtent todėl, kad niekas jų neturi. Neįdiekite šių adresų realiame tunelyje ir nelaikykite gauto intervalo dokumentacijos erdve vien todėl, kad jis atrodo neįprastai.

Antrasis atvejis: nesutampa, todėl padalykite

Dabar paimkite 198.51.100.100 iki 198.51.100.107. Tai aštuoni adresai, kurie yra dviejų laipsnis, bet 100 nėra aštuonių kartotinis. Vienas tokio dydžio blokas negali prasidėti ten, todėl intervalą turi uždengti daugiau nei vienas.

Tikslus uždengimas yra du /30 blokai: 198.51.100.100/30 dengia 100 iki 103, o 198.51.100.104/30 dengia 104 iki 107. Iš viso aštuoni adresai, nieko už intervalo, o skaidymas yra unikalus duotam intervalui.

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

Standartinės bibliotekos funkcija atlieka aritmetiką už jus, o ipaddress dokumentacija apibrėžia, ką ji grąžina. Ko ji nedaro, tai nepasirenka tinklų sietuvos, nenusprendžia, kam priklauso adresai, ir nesuteikia prieigos prie jokios už jų esančios paslaugos.

Išmatuokite, ką būtų užgriebęs platesnis priešdėlis

Prieš priimdami sutrumpinimą, apskaičiuokite, kiek jis kainuoja. /28, prasidedantis nuo 198.51.100.96, dengia 96 iki 111, tai šešiolika adresų vietoj aštuonių. Papildomi aštuoni yra 96 iki 99 ir 108 iki 111, ir kiekvienas jų paveldėtų maršrutą.

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

Aštuoni papildomi tikslai yra konkretus skaičius, kurį galite įrašyti į pakeitimo prašymą. Tai taip pat skaičius, nusprendžiantis, ar sutrumpinimas priimtinas, ir tai yra politikos, o ne aritmetikos klausimas.

Laikykite aritmetiką ir atradimą atskirai. Tinklo operatoriaus pateiktas intervalas konvertuojamas tiksliai. Vienas kintančios paslaugos DNS atsakymas nenustato viso ar nuolatinio tos paslaugos intervalo, o nesusiję vardai gali dalytis adresu.

Įdiekite tikslų rinkinį ir patikrinkite kraštus

Kiekvieną gautą priešdėlį perduokite tam, kas valdo VPN konfigūraciją, ir leiskite jam įdiegti jį palaikomu mechanizmu. Jei reikalavimui reikia dviejų įrašų, palikite du įrašus, o ne praplėskite vieną, kad forma būtų trumpesnė.

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

Paskutinės dvi komandos yra tos, kurias žmonės praleidžia. Pirmasis vidinis adresas turėtų eiti nauju maršrutu, o adresas iškart už intervalo neturėtų. Jei abu eina tuo pačiu keliu, intervalas kažkur tarp reikalavimo ir konfigūracijos buvo praplėstas.

Užrašykite pirmą adresą, paskutinį adresą ir priešdėlius, kurie juos išreiškia. Kitas žmogus, peržiūrėjęs taisyklę, galės palyginti reikalavimą su konfigūracija neperdaręs aritmetikos, o skirtumas tarp tikslaus ir patogaus maršruto liks matomas.

Susiję straipsniai