Narzędzia pomocnicze serwera konfigurują podsieć, a następnie wypełniają ją dynamiczną pulą według własnego wyboru. To ustawienie domyślne jest wygodne, dopóki niektóre adresy muszą pozostać poza przydziałem — czy to zarezerwowane dla stałych przypisań, czy odłożone na przyszły segment. Wyłączenie automatycznej puli i samodzielne zadeklarowanie zakresu wymaga dwóch linii i jednej świadomej decyzji o tym, które adresy nie są do przydziału. Reszta to dyscyplina operacyjna: inwentaryzacja, zastosowanie, weryfikacja, wycofanie.

To zmiana w działającej usłudze, więc traktuj ją jako zadanie operacyjne: najpierw inwentaryzacja, potem zastosowanie w normalnym cyklu życia, weryfikacja nowym klientem i przygotowane wycofanie.

Zacznij od podsieci, którą już masz

Przeczytaj bieżącą konfigurację serwera i adresy, które klienci faktycznie trzymają. Zmiana puli ma sens tylko względem tej podstawy, a podstawa nie zawsze jest tym, co sugeruje plik, ponieważ zarządzany produkt lub generator konfiguracji może być właścicielem czytanego pliku.

grep -nE '^(topology|server|ifconfig-pool|max-clients|client-config-dir)' /etc/openvpn/server/lab.conf
ip -4 addr show tun0

Potwierdź obowiązującą topologię. W topologii podsieci każdy klient bierze jeden adres z puli; starsze układy net30 przydzielają każdemu klientowi mały blok, a arytmetyka jest zupełnie inna. Jeśli serwer nadal działa na net30, ta strona jest niewłaściwym przewodnikiem migracji, a liczby puli nie będą znaczyć tego, czego oczekujesz. Sprawdź tę linię, zanim skopiujesz arytmetykę adresów skądinąd.

Zapisz własny adres serwera, każde stałe przypisanie w katalogu konfiguracji klientów oraz każdy adres, od którego zależy trasa lub reguła dostępu. To są adresy, które muszą pozostać poza zakresem dynamicznym. Zapisanie ich najpierw czyni zakres decyzją, a nie domysłem. Daje też wycofaniu coś konkretnego do przywrócenia.

Dodaj nopool i zadeklaruj zakres

Słowo kluczowe pomocnika przyjmuje nopool, które zachowuje konfigurację podsieci i wyłącza automatyczną pulę dynamiczną, jak opisuje podręcznik OpenVPN 2.6. Następnie jawna linia ifconfig-pool podaje zamierzony zakres włącznie, a jej maska sieci odpowiada podsieci. Obie linie należą do tego samego bloku serwera, ponieważ pula bez swojej podsieci nie ma znaczenia. Kolejność między nimi ma znaczenie tylko dla czytelności, bo pomocnik rozwija parę przy starcie usługi.

topology subnet
server 10.70.0.0 255.255.255.0 nopool
ifconfig-pool 10.70.0.50 10.70.0.120 255.255.255.0

Obie granice są włączne, więc przykład oferuje siedemdziesiąt jeden adresów. Trzymaj adres serwera i każde stałe przypisanie poza tym przedziałem; stałe przypisanie wewnątrz zakresu dynamicznego powoduje kolizję zależną od kolejności połączeń, a to najgorszy rodzaj do debugowania. Zostaw margines między zbiorem zarezerwowanym a zakresem, jeśli stałe przypisania prawdopodobnie będą rosły.

Rozmiar zakresu i współbieżność to odrębne limity. Sto adresów nie oznacza stu jednoczesnych klientów, jeśli max-clients mówi co innego, a pula większa niż limit współbieżności jest normalna, a nie marnotrawna. Ważne jest, aby oba limity były wybierane świadomie, a nie dziedziczone z wartości domyślnej.

Trzymaj stałe przypisania poza zakresem dynamicznym

Przypisanie ifconfig-push dla konkretnego klienta to inny mechanizm niż przydział z puli i musi używać parametrów odpowiednich dla aktywnej topologii. W trybie podsieci to jeden adres i maska sieci; przenoszenie pary net30 tylko dlatego, że pojawiła się w starym przykładzie, to częsty błąd.

Historia przydziału jest wskazówką, nie autorytetem. Plik persist pamięta, który klient miał który adres, więc klienci ponownie się łączący zwykle otrzymują ten sam, i nie rezerwuje adresów, nie zwalnia ich ani nie zastępuje stałego przypisania. Jeśli konkretne urządzenie musi zawsze mieć konkretny adres, użyj stałego przypisania zamiast polegać na pliku persist.

Następnie sprawdź ścieżki zależne od adresów. Trasa wypychana do klientów, reguła zapory dopuszczająca podsieć albo kontrola monitoringu oczekująca konkretnego hosta mogą zakładać stary zakres. Zmiana puli bez ich przeczytania przenosi awarię w miejsce, które wygląda na niezwiązane.

Zastosuj przez cykl życia, a potem zweryfikuj

Zastosuj zmianę tak, jak usługa zwykle otrzymuje konfigurację — czy to bezpośredni plik plus restart, czy warstwa zarządzania, która regeneruje plik. Ręczna zmiana w generowanym pliku przetrwa do następnego generowania i nie dłużej. Zapisz, który mechanizm jest właścicielem pliku, bo następny operator musi wiedzieć, gdzie zrobić tę samą zmianę. Potem zrestartuj raz i przeczytaj dziennik, zanim zaprosisz klienta.

systemctl restart openvpn-server@lab
journalctl -u openvpn-server@lab -n 30 --no-pager
# on a fresh client
ip -4 addr show tun0

Podłącz klienta, który wcześniej się nie łączył, i potwierdź, że adres mieści się w zadeklarowanym zakresie i poza zbiorem zarezerwowanym. Następnie potwierdź drogę powrotną: klient powinien osiągać to, na co pozwala polityka, i nic więcej. Adres zgodny z planem, ale bez działającej trasy, nie jest udaną zmianą.

Podłącz ponownie klienta, który miał adres ze starego zakresu. Powinien otrzymać adres z nowego zakresu, a wszelki stan na poziomie sesji powiązany ze starym adresem powinien zniknąć. Jeśli zachowuje stary adres, przydziela go coś innego i pula nie jest właścicielem, którego oczekujesz.

Wycofanie zmiany zakresu

Zachowaj poprzednie trzy linie w rejestrze zmian, nie tylko poprzedni plik. Przywrócenie ich i restart przywracają przydział do starego zachowania, a klienci, którzy połączą się później, otrzymają z niego adresy.

Do rejestru należą dwa ostrzeżenia. Klienci już połączeni w chwili wycofania zachowują bieżące adresy, dopóki nie połączą się ponownie, więc wycofanie nie jest natychmiastowe w całej flocie. A jeśli stary zakres nakładał się na stałe przypisanie, przywrócenie go przywraca też kolizję; to właśnie to nakładanie było powodem zmiany i wymaga innego rozwiązania niż wycofanie.

Zmiana puli jest zakończona, gdy nowy klient otrzyma adres w zakresie, zarezerwowany adres nigdy nie zostanie wydany, a trasy i reguły korzystające z tych adresów nadal zachowują się zgodnie z zamiarem. Cokolwiek mniej zostawia następnej osobie odkrycie, która z trzech rzeczy nie jest prawdą.

Powiązane artykuły