Pomocnik serwera OpenVPN: sieć plus maska, nigdy CIDR
Pomocnik serwera IPv4 przyjmuje wyrównaną sieć i maskę kropkową, a nie przyrostek CIDR. Sprawdź zakres, potwierdź pulę w logu, a następnie bezpiecznie zmień rozmiar.
Linia serwera, która miesza przyrostek CIDR z maską kropkową, zatrzymuje demona, zanim ten w ogóle otworzy port. Pomocnik server dla IPv4 chce dwóch osobnych argumentów: wyrównanego adresu sieci, a potem maski sieci w postaci kropkowej. Wszystko inne w tej linii to domysł, a w domyśle mylą się rozmiary puli i maski klientów.
Dwa argumenty, które przyjmuje pomocnik
Najpierw wpisz sieć, a potem maskę, bez niczego doczepionego do adresu:
server 10.72.16.0 255.255.240.0To jest postać dla /20. Linia poniżej to błąd i zawodzi przy analizie opcji, a nie w czasie działania:
server 10.72.16.0/20 255.255.240.0Podczas debugowania trzymaj oba pomysły osobno. Długość prefiksu i maska kropkowa opisują ten sam zakres, ale pomocnik nie przyjmuje obu naraz, a odrzucona linia daje błąd opcji, który wskazuje dyrektywę, a nie arytmetykę.
Wyrównaj sieć, zanim wpiszesz maskę
Pierwszy adres to adres sieci zakresu, a nie wygodny adres klienta w jego wnętrzu. Dla /20 zakres biegnie od 10.72.16.0 do 10.72.31.255, i tylko pierwszy z nich jest prawidłowym argumentem sieci. /21 używa 255.255.248.0 i obejmuje od 10.72.16.0 do 10.72.23.255, więc jego linia to server 10.72.16.0 255.255.248.0.
Zmiana prefiksu zmienia zakres i nic więcej. Nie zmienia tego, ile adresów otrzymuje jeden klient, bo to cecha topologii, a nie maski w tej linii.
Potwierdź pulę po stronie serwera
Uruchom instancję na pierwszym planie ze szczegółowym logowaniem i czytaj linie, które wypisuje pomocnik. Pula, którą zbudował, jest drukowana przy starcie, co jest pewniejsze niż liczenie arytmetyki ręcznie:
openvpn --config /etc/openvpn/server.conf --verb 4 --dev tun9 --port 1195Poszukaj podsumowania puli w górnej części wyjścia. Wymienia ono zakres, który pomocnik zarezerwował, a jeśli ten zakres nie odpowiada twojemu zamiarowi, argumenty w linii są błędne, cokolwiek mówi arytmetyka maski.
Następnie podłącz jednego klienta i znajdź linię, która zapisuje przydzielony mu adres. Ten jeden adres obok zakresu puli mówi ci, czy klient wylądował w zarezerwowanym bloku, czy gdzieś, gdzie się nie spodziewałeś. Jeśli oba się nie zgadzają, popraw argumenty, a nie klienta. Jeśli się zgadzają, a klient nadal nic nie osiąga, pula nigdy nie była problemem.
Czytaj maskę klienta, pamiętając o topologii
Klient pokazujący /30 na swoim interfejsie tunelu nie jest dowodem zepsutej puli. Przy adresowaniu punkt-punkt każdy klient otrzymuje mały blok, a maska jego interfejsu opisuje ten blok, podczas gdy pula serwera obejmuje całość. W topologii podsieci maska klienta zgadza się natomiast z maską puli. Sama maska mówi więc, która topologia jest w grze, a nie czy pula została poprawnie zapisana.
Sprawdź skonfigurowaną topologię i przydzielony adres razem, zanim wyciągniesz wniosek:
ip -4 addr show tun0Jeśli adres jest w puli, a maska jest węższa niż pula, to topologia wykonuje swoją pracę. Jeśli adres jest poza pulą, pula jest błędna i żadna inspekcja po stronie klienta tego nie naprawi.
Zmiana działającej puli
Wybierz zakres, który nie nakłada się na bieżącą pulę, sieć LAN ani żadną trasę już wysłaną do klientów. Nakładanie się to awaria, która przetrwa restart, a potem po kilku dniach objawi się jako jedna lokalizacja nieosiągalna z jednego kierunku.
Zmień linię, zrestartuj i ponownie odczytaj pulę startową, zanim wpuścisz użytkowników. Jeśli nowy zakres z czymś koliduje, to samo wyjście startowe pokaże to od razu, a wycofanie to edycja jednej linii plus jeszcze jeden restart.
Zatrzymaj stary zakres w rezerwie jeszcze przez jakiś czas po zmianie. Klienci, którzy połączą się późno, mogą nadal mieć adres z poprzedniej puli, a nowy zakres, który ponownie wykorzystuje te adresy, tworzy podwójne przydziały wyglądające jak awaria routingu. Podręcznik OpenVPN 2.6 dokumentuje argumenty pomocnika i jego rozwinięcie, co warto przeczytać, zanim założysz, że dyrektywa używa tej samej notacji co jej sąsiadka.