Einen IP-Bereich vom ersten bis zum letzten Adresswert in exakte VPN-Routen übersetzen
Ein Bereich von der ersten bis zur letzten Adresse passt selten auf ein einziges Präfix. Wandeln Sie ihn in exakte CIDR-Blöcke um, damit eine Route keine Ziele außerhalb des Intervalls erfasst.
Jemand gibt Ihnen eine erste und eine letzte Adresse und verlangt eine VPN-Route. Der verführerische Schritt ist, das kürzeste Präfix zu wählen, das beide Enden enthält, und dieser Schritt fügt still Ziele hinzu, nach denen niemand gefragt hat. Ein CIDR-Block hat immer eine Größe als Zweierpotenz und eine darauf ausgerichtete Startadresse, daher braucht ein beliebiges Intervall meist mehr als einen. Gehen Sie das Intervall durch, teilen Sie es exakt und prüfen Sie dann die Adressen direkt außerhalb.
Beginnen Sie mit dem Intervall, nicht mit dem Präfix
Schreiben Sie die erste Adresse und die letzte Adresse auf, bevor Sie irgendetwas anderes schreiben. Das Paar ist die Anforderung; ein Präfix ist nur ein möglicher Ausdruck davon, und manchmal ein falscher. Zwei Zahlen sind außerdem viel leichter zu prüfen als eine Maske.
Ein ausgerichtetes Intervall fällt zu einem Block zusammen. Ein nicht ausgerichtetes zerfällt in mehrere, und die Zerlegung ist exakt statt näherungsweise. Was Sie nicht tun dürfen, ist nach außen zu runden und das für nah genug zu erklären, denn die zusätzlichen Adressen erhalten die Richtlinie, die die Route trägt.
Beide Fehlerrichtungen sind wichtig. Bei einer Route in den Tunnel werden zusätzliche Adressen in das VPN gezogen. Bei einer Bypass-Ausnahme überspringen zusätzliche Adressen es. Keines der Ergebnisse ist in einer Routentabelle sichtbar, die nur das von Ihnen installierte Präfix zeigt.
Fall eins: das Intervall ist zufällig ausgerichtet
Nehmen Sie 198.51.100.64 bis 198.51.100.127. Die erste Adresse ist auf eine Grenze von 64 Adressen ausgerichtet und das Intervall umfasst genau 64 Adressen, sodass ein einzelnes /26 es ohne Rest beschreibt.
Das ist der einfache Fall, und es lohnt sich, ihn zu erkennen, denn er bedeutet, dass die Anforderung wahrscheinlich von jemandem geschrieben wurde, der bereits in Präfixen dachte. Er bedeutet auch, dass die Prüfung kurz ist: Bestätigen Sie, dass die Größe eine Zweierpotenz ist und der Anfang ein Vielfaches dieser Größe.
Dokumentationsbereiche ergeben gute Beispiele, gerade weil niemand sie besitzt. Installieren Sie diese Adressen nicht auf einem echten Tunnel und nehmen Sie nicht an, dass ein Ihnen gegebener Bereich Dokumentationsraum ist, nur weil er ungewöhnlich aussieht.
Fall zwei: ist er nicht, also teilen Sie ihn
Nehmen Sie nun 198.51.100.100 bis 198.51.100.107. Das sind acht Adressen, also eine Zweierpotenz, aber 100 ist kein Vielfaches von acht. Ein einzelner Block dieser Größe kann dort nicht beginnen, daher muss das Intervall von mehr als einem abgedeckt werden.
Die exakte Abdeckung sind zwei /30-Blöcke: 198.51.100.100/30 deckt 100 bis 103 ab, und 198.51.100.104/30 deckt 104 bis 107 ab. Acht Adressen insgesamt, nichts außerhalb des Intervalls, und die Zerlegung ist für ein gegebenes Intervall eindeutig.
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')"
Die Standardbibliotheksfunktion erledigt die Arithmetik für Sie, und die ipaddress-Dokumentation legt fest, was sie zurückgibt. Was sie nicht tut, ist ein Gateway auszuwählen, zu entscheiden, wem die Adressen gehören, oder Zugriff auf einen Dienst dahinter zu gewähren.
Messen Sie, was das breitere Präfix erfasst hätte
Bevor Sie eine Abkürzung akzeptieren, berechnen Sie, was sie kostet. Ein /28 ab 198.51.100.96 deckt 96 bis 111 ab, also sechzehn Adressen statt acht. Die zusätzlichen acht sind 96 bis 99 und 108 bis 111, und jede von ihnen würde die Route erben.
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))"
Acht zusätzliche Ziele sind eine konkrete Zahl, die Sie in einen Änderungsantrag schreiben können. Es ist auch die Zahl, die entscheidet, ob die Abkürzung akzeptabel ist, und das ist eine Frage der Richtlinie und nicht der Arithmetik.
Halten Sie Arithmetik und Ermittlung getrennt. Ein vom Netzbetreiber geliefertes Intervall wird exakt umgewandelt. Eine einzelne DNS-Antwort eines sich ändernden Dienstes belegt nicht dessen vollständigen oder dauerhaften Bereich, und unabhängige Namen können sich eine Adresse teilen.
Installieren Sie die exakte Menge und prüfen Sie die Ränder
Geben Sie jedes resultierende Präfix an die Person, die die VPN-Konfiguration verantwortet, und lassen Sie sie es über den unterstützten Mechanismus installieren. Wenn die Anforderung zwei Einträge braucht, behalten Sie zwei Einträge, statt einen zu erweitern, damit ein Formular kürzer wird.
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
Die letzten beiden Befehle sind die, die Leute überspringen. Die erste innere Adresse sollte der neuen Route folgen, die Adresse direkt außerhalb des Intervalls nicht. Wenn beide denselben Weg gehen, wurde das Intervall irgendwo zwischen Anforderung und Konfiguration erweitert.
Halten Sie die erste Adresse, die letzte Adresse und die Präfixe fest, die sie ausdrücken. Die nächste Person, die die Regel prüft, kann die Anforderung dann gegen die Konfiguration abgleichen, ohne die Arithmetik zu wiederholen, und der Unterschied zwischen einer exakten und einer bequemen Route bleibt sichtbar.