Gjør et IP-område fra første til siste adresse om til nøyaktige VPN-ruter
Et område fra første til siste adresse passer sjelden på ett prefiks. Gjør det om til nøyaktige CIDR-blokker, slik at en rute ikke fanger destinasjoner utenfor intervallet.
Noen gir deg en første og en siste adresse og ber om en VPN-rute. Det fristende trekket er å velge det korteste prefikset som inneholder begge endene, og det trekket legger stille til destinasjoner ingen har spurt om. En CIDR-blokk har alltid en størrelse som er en potens av to og en startadresse justert til den, så et vilkårlig intervall trenger vanligvis mer enn én. Gå gjennom intervallet, del det nøyaktig, og kontroller deretter adressene rett utenfor.
Begynn med intervallet, ikke prefikset
Skriv ned den første adressen og den siste adressen før du skriver noe annet. Paret er kravet; et prefiks er bare ett mulig uttrykk for det, og noen ganger et feil. To tall er også mye lettere å kontrollere enn en maske.
Et justert intervall faller sammen til én blokk. Et ujustert deles opp i flere, og oppdelingen er nøyaktig og ikke omtrentlig. Det du ikke må gjøre, er å runde utover og kalle det nært nok, fordi de ekstra adressene får den policyen ruten bærer.
Begge feilretningene betyr noe. For en rute inn i tunnelen trekkes ekstra adresser inn i VPN-et. For et unntak for omkjøring hopper ekstra adresser over det. Ingen av utfallene er synlige i en rutetabell som bare viser prefikset du installerte.
Første tilfelle: intervallet er tilfeldigvis justert
Ta 198.51.100.64 til 198.51.100.127. Den første adressen er justert på en grense på 64 adresser, og intervallet er nøyaktig 64 adresser, så ett enkelt /26 beskriver det uten noe til overs.
Det er det enkle tilfellet, og det er verdt å kjenne igjen, fordi det betyr at kravet sannsynligvis ble skrevet av noen som allerede tenkte i prefikser. Det betyr også at kontrollen er kort: bekreft at størrelsen er en potens av to, og at starten er et multiplum av den størrelsen.
Dokumentasjonsområder gir gode eksempler nettopp fordi ingen eier dem. Ikke installer disse adressene på en ekte tunnel, og ikke anta at et område du har fått, er dokumentasjonsplass bare fordi det ser uvanlig ut.
Andre tilfelle: det er det ikke, så del det opp
Ta nå 198.51.100.100 til 198.51.100.107. Det er åtte adresser, som er en potens av to, men 100 er ikke et multiplum av åtte. En enkelt blokk av den størrelsen kan ikke starte der, så intervallet må dekkes av mer enn én.
Den nøyaktige dekningen er to /30-blokker: 198.51.100.100/30 dekker 100 til 103, og 198.51.100.104/30 dekker 104 til 107. Åtte adresser totalt, ingenting utenfor intervallet, og oppdelingen er entydig for et gitt intervall.
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')"
Standardbibliotekfunksjonen gjør aritmetikken for deg, og ipaddress-dokumentasjonen definerer hva den returnerer. Det den ikke gjør, er å velge en gateway, avgjøre hvem som eier adressene, eller gi tilgang til noen tjeneste bak dem.
Mål hva det bredere prefikset ville ha fanget
Før du godtar en snarvei, beregn hva den koster. Et /28 som starter på 198.51.100.96, dekker 96 til 111, som er seksten adresser i stedet for åtte. De ekstra åtte er 96 til 99 og 108 til 111, og hver av 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))"
Åtte ekstra destinasjoner er et konkret tall du kan sette i en endringsforespørsel. Det er også tallet som avgjør om snarveien er akseptabel, og det er et spørsmål om policy, ikke om aritmetikk.
Hold aritmetikk og oppdagelse atskilt. Et intervall som nettverksoperatøren leverer, konverteres nøyaktig. Ett DNS-svar fra en tjeneste som endrer seg, fastslår ikke tjenestens fullstendige eller permanente område, og urelaterte navn kan dele en adresse.
Installer det nøyaktige settet og verifiser kantene
Gi hvert resulterende prefiks til den som eier VPN-konfigurasjonen, og la dem installere det gjennom den støttede mekanismen. Hvis kravet trenger to oppføringer, behold to oppføringer i stedet for å utvide én for å gjøre et skjema 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 to siste kommandoene er dem folk hopper over. Den første indre adressen bør følge den nye ruten, og adressen rett utenfor intervallet bør ikke. Hvis begge går samme vei, er intervallet blitt utvidet et sted mellom kravet og konfigurasjonen.
Noter den første adressen, den siste adressen og prefiksene som uttrykker dem. Den neste personen som gjennomgår regelen, kan da kontrollere kravet mot konfigurasjonen uten å gjøre aritmetikken på nytt, og forskjellen mellom en nøyaktig og en praktisk rute forblir synlig.