Gør et IP-interval fra første til sidste adresse til præcise VPN-ruter
Et interval fra første til sidste adresse passer sjældent på ét præfiks. Konverter det til præcise CIDR-blokke, så en rute ikke fanger destinationer uden for intervallet.
Nogen giver dig en første og en sidste adresse og beder om en VPN-rute. Det fristende træk er at vælge det korteste præfiks, der rummer begge ender, og det træk tilføjer stille destinationer, som ingen har spurgt om. En CIDR-blok har altid en størrelse, der er en potens af to, og en startadresse, der er justeret til den, så et vilkårligt interval kræver normalt mere end én. Gå gennem intervallet, opdel det præcist, og kontrollér derefter adresserne lige uden for det.
Begynd med intervallet, ikke præfikset
Skriv den første adresse og den sidste adresse ned, før du skriver noget andet. Parret er kravet; et præfiks er kun ét muligt udtryk for det, og nogle gange et forkert. To tal er også meget lettere at kontrollere end en maske.
Et justeret interval falder sammen til én blok. Et ujusteret opløses i flere, og opløsningen er præcis og ikke omtrentlig. Det, du ikke må gøre, er at runde udad og kalde det tæt nok, for de ekstra adresser får den politik, ruten bærer.
Begge fejlretninger betyder noget. For en rute ind i tunnelen trækkes ekstra adresser ind i VPN'et. For en bypass-undtagelse springer ekstra adresser det over. Ingen af udfaldene er synlige i en rutetabel, der kun viser det præfiks, du installerede.
Tilfælde et: intervallet er tilfældigvis justeret
Tag 198.51.100.64 til 198.51.100.127. Den første adresse er justeret på en grænse på 64 adresser, og intervallet er præcis 64 adresser, så et enkelt /26 beskriver det uden noget til overs.
Det er det nemme tilfælde, og det er værd at genkende, fordi det betyder, at kravet sandsynligvis blev skrevet af nogen, der allerede tænkte i præfikser. Det betyder også, at kontrollen er kort: bekræft, at størrelsen er en potens af to, og at starten er et multiplum af den størrelse.
Dokumentationsintervaller er gode eksempler netop, fordi ingen ejer dem. Installér ikke disse adresser på en rigtig tunnel, og antag ikke, at et interval, du har fået, er dokumentationsplads, bare fordi det ser usædvanligt ud.
Tilfælde to: det er det ikke, så del det op
Tag nu 198.51.100.100 til 198.51.100.107. Det er otte adresser, som er en potens af to, men 100 er ikke et multiplum af otte. En enkelt blok af den størrelse kan ikke starte der, så intervallet skal dækkes af mere end én.
Den præcise dækning er to /30-blokke: 198.51.100.100/30 dækker 100 til 103, og 198.51.100.104/30 dækker 104 til 107. Otte adresser i alt, intet uden for intervallet, og opløsningen er entydig for et givet interval.
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')"
Standardbiblioteksfunktionen klarer aritmetikken for dig, og ipaddress-dokumentationen definerer, hvad den returnerer. Det, den ikke gør, er at vælge en gateway, afgøre, hvem der ejer adresserne, eller give adgang til nogen tjeneste bag dem.
Mål, hvad det bredere præfiks ville have fanget
Før du accepterer en genvej, skal du beregne, hvad den koster. Et /28, der starter på 198.51.100.96, dækker 96 til 111, hvilket er seksten adresser i stedet for otte. De ekstra otte er 96 til 99 og 108 til 111, og hver af dem ville arve ruten.
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))"
Otte ekstra destinationer er et konkret tal, du kan sætte i en ændringsanmodning. Det er også det tal, der afgør, om genvejen er acceptabel, og det er et spørgsmål om politik, ikke om aritmetik.
Hold aritmetik og opdagelse adskilt. Et interval, som netværksoperatøren leverer, konverteres præcist. Et enkelt DNS-svar fra en skiftende tjeneste fastslår ikke den tjenestes fuldstændige eller permanente interval, og urelaterede navne kan dele en adresse.
Installér det præcise sæt og verificér kanterne
Giv hvert resulterende præfiks til den, der ejer VPN-konfigurationen, og lad dem installere det gennem den understøttede mekanisme. Hvis kravet har brug for to poster, så behold to poster i stedet for at udvide én for at gøre en formular kortere.
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
De sidste to kommandoer er dem, folk springer over. Den første indre adresse bør følge den nye rute, og adressen lige uden for intervallet bør ikke. Hvis begge går samme vej, er intervallet blevet udvidet et sted mellem kravet og konfigurationen.
Notér den første adresse, den sidste adresse og de præfikser, der udtrykker dem. Den næste person, der gennemgår reglen, kan så kontrollere kravet mod konfigurationen uden at gøre aritmetikken om, og forskellen mellem en præcis og en bekvem rute forbliver synlig.