Ktoś podaje ci pierwszy i ostatni adres i prosi o trasę VPN. Kuszącym krokiem jest wybranie najkrótszego prefiksu zawierającego oba końce, a ten krok po cichu dodaje cele, o które nikt nie prosił. Blok CIDR ma zawsze rozmiar będący potęgą dwójki i adres początkowy wyrównany do niego, więc dowolny przedział zwykle wymaga więcej niż jednego. Przejdź przedział, podziel go dokładnie, a następnie sprawdź adresy tuż poza nim.

Zacznij od przedziału, nie od prefiksu

Zapisz pierwszy adres i ostatni adres, zanim napiszesz cokolwiek innego. Para jest wymaganiem; prefiks to tylko jedno z możliwych jego wyrażeń, a czasem błędne. Dwie liczby są też znacznie łatwiejsze do sprawdzenia niż maska.

Wyrównany przedział zwija się do jednego bloku. Niewyrównany rozkłada się na kilka, a rozkład jest dokładny, a nie przybliżony. Czego nie wolno robić, to zaokrąglać na zewnątrz i nazywać to wystarczająco bliskim, ponieważ dodatkowe adresy otrzymują politykę, którą niesie trasa.

Oba kierunki błędu mają znaczenie. Dla trasy do tunelu dodatkowe adresy są wciągane do VPN. Dla wyjątku obejścia dodatkowe adresy go pomijają. Żaden z wyników nie jest widoczny w tabeli tras, która pokazuje tylko zainstalowany prefiks.

Przypadek pierwszy: przedział przypadkiem jest wyrównany

Weź 198.51.100.64 do 198.51.100.127. Pierwszy adres jest wyrównany do granicy 64 adresów, a przedział ma dokładnie 64 adresy, więc jeden /26 opisuje go bez reszty.

To łatwy przypadek i warto go rozpoznać, bo oznacza, że wymaganie napisał prawdopodobnie ktoś, kto już myślał prefiksami. Oznacza też, że sprawdzenie jest krótkie: potwierdź, że rozmiar jest potęgą dwójki, a początek jest wielokrotnością tego rozmiaru.

Zakresy dokumentacyjne są dobrymi przykładami właśnie dlatego, że nikt ich nie posiada. Nie instaluj tych adresów na prawdziwym tunelu i nie zakładaj, że otrzymany zakres jest przestrzenią dokumentacyjną tylko dlatego, że wygląda nietypowo.

Przypadek drugi: nie jest, więc podziel go

Teraz weź 198.51.100.100 do 198.51.100.107. To osiem adresów, czyli potęga dwójki, ale 100 nie jest wielokrotnością ośmiu. Jeden blok o tym rozmiarze nie może się tam zacząć, więc przedział musi być pokryty przez więcej niż jeden.

Dokładne pokrycie to dwa bloki /30: 198.51.100.100/30 obejmuje 100 do 103, a 198.51.100.104/30 obejmuje 104 do 107. Osiem adresów łącznie, nic poza przedziałem, a rozkład jest jednoznaczny dla danego przedziału.

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

Funkcja biblioteki standardowej wykonuje obliczenia za ciebie, a dokumentacja ipaddress określa, co zwraca. Czego nie robi, to wybór bramy, decyzja, do kogo należą adresy, ani udzielenie dostępu do jakiejkolwiek usługi za nimi.

Zmierz, co przechwyciłby szerszy prefiks

Zanim zaakceptujesz skrót, oblicz, ile kosztuje. /28 zaczynający się na 198.51.100.96 obejmuje 96 do 111, czyli szesnaście adresów zamiast ośmiu. Dodatkowe osiem to 96 do 99 i 108 do 111, a każdy z nich odziedziczyłby trasę.

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

Osiem dodatkowych celów to konkretna liczba, którą możesz wpisać do wniosku o zmianę. To także liczba, która decyduje, czy skrót jest akceptowalny, a to kwestia polityki, a nie arytmetyki.

Trzymaj arytmetykę i wykrywanie osobno. Przedział dostarczony przez operatora sieci jest konwertowany dokładnie. Jedna odpowiedź DNS zmieniającej się usługi nie ustala pełnego ani trwałego zakresu tej usługi, a niepowiązane nazwy mogą dzielić adres.

Zainstaluj dokładny zbiór i zweryfikuj krawędzie

Przekaż każdy wynikowy prefiks osobie odpowiedzialnej za konfigurację VPN i pozwól jej zainstalować go obsługiwanym mechanizmem. Jeśli wymaganie potrzebuje dwóch wpisów, zachowaj dwa wpisy, zamiast poszerzać jeden, aby skrócić formularz.

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

Ostatnie dwa polecenia to te, które ludzie pomijają. Pierwszy wewnętrzny adres powinien iść nową trasą, a adres tuż poza przedziałem nie powinien. Jeśli oba idą tą samą drogą, przedział został poszerzony gdzieś między wymaganiem a konfiguracją.

Zapisz pierwszy adres, ostatni adres i prefiksy, które je wyrażają. Następna osoba sprawdzająca regułę może wtedy porównać wymaganie z konfiguracją bez powtarzania arytmetyki, a różnica między dokładną a wygodną trasą pozostaje widoczna.

Powiązane artykuły