Martwy listener OpenVPN 2.5 na DD-WRT? Przeczytaj wygenerowaną konfigurację
OpenVPN 2.5 odrzuca konfiguracje, które akceptowały starsze kompilacje. Na DD-WRT przeczytaj wygenerowany plik i dziennik demona, zanim dotkniesz firewalla.
Martwy listener na DD-WRT zwykle oznacza, że demon zakończył działanie podczas analizy swojej konfiguracji, a nie że reguła firewalla zablokowała port. OpenVPN 2.5 zaostrzył kilka wartości domyślnych, na których opierały się starsze konfiguracje, a wygenerowana konfiguracja, która działała na starszej kompilacji, może zostać odrzucona, zanim gniazdo w ogóle się otworzy. Przyczyna jest w dzienniku samego routera, a dane wejściowe w wygenerowanym pliku. Czytanie obu w tej kolejności jest szybsze niż jakiekolwiek przechwytywanie pakietów.
Demon to nie firewall
Różnica ma znaczenie, bo z zewnątrz oba błędy wyglądają identycznie: klient wysyła uścisk dłoni i nic nie dostaje. Jeden to proces, który nie działa, a drugi to proces, który działa i filtruje.
Oddziel je dwiema kontrolami, zanim cokolwiek zmienisz, bo edycja firewalla na martwym demonie tylko dodaje drugą zmienną.
Przeczytaj konfigurację wygenerowaną przez DD-WRT
DD-WRT nie przekazuje OpenVPN tekstu wpisanego w interfejsie web. Zapisuje wygenerowaną konfigurację do /tmp/openvpn/openvpn.conf i uruchamia demona z tym plikiem, więc pola interfejsu i dowolny tekst w Additional Config są łączone, zanim OpenVPN je zobaczy. Jeśli debugujesz formularz zamiast wygenerowanego pliku, czytasz zamiar, a nie rzeczywiste dane wejściowe. Skopiuj ten plik w trwałe miejsce, zanim restart /tmp go wyczyści.
Porównaj wygenerowany plik z tym, co zamierzałeś, zwłaszcza tam, gdzie interfejs zapisuje dyrektywę, której nigdy nie wybrałeś. Lista rozwijana, która emituje przestarzałą opcję, jest niewidoczna w formularzu i zabójcza dla demona.
Jeśli wygenerowany plik jest pusty lub go brakuje, demon nawet nie dotarł do startu, a problem leży powyżej OpenVPN.
Czego OpenVPN 2.5 przestał akceptować
OpenVPN 2.5 zastąpił ncp-ciphers przez data-ciphers, i podniósł domyślną minimalną wersję TLS do 1.2. Zmienił też obsługę kompresji, tak że partner oferujący kompresję jest odrzucany, chyba że konfiguracja wyraźnie na to pozwala, i oznaczył jako przestarzałe starsze nazwy opcji, takie jak ns-cert-type na rzecz remote-cert-tls. Każda z tych zmian zamienia wcześniej działającą konfigurację w błąd analizy lub negocjacji.
Tryb błędu zależy od dyrektywy. Nieznana lub usunięta opcja zatrzymuje demona przy starcie, to twój martwy listener. Niezgodność negocjacji pozwala demonowi działać i odrzuca klientów, co z perspektywy klienta wygląda jak problem z firewallem.
Czytaj pierwszy błąd w dzienniku, nie ostatni. Analiza zatrzymuje się na pierwszej błędnej dyrektywie, a wszystko po niej to szum z zamykania.
Wymagania specyficzne dla Broadcom
Na kompilacjach Broadcom urządzenie tunelowe musi istnieć, zanim demon będzie mógł go użyć. Sprawdź, czy moduł tun jest załadowany i czy /dev/net/tun istnieje, bo brakujące urządzenie daje błąd startu, który nie ma nic wspólnego z certyfikatami. To samo dotyczy skryptów pomocniczych, które DD-WRT generuje dla tras i DNS: jeśli ich nie ma lub nie są wykonywalne, demon może wystartować i mimo to nie dokończyć konfiguracji.
Uruchom demona na pierwszym planie z większą szczegółowością wobec wygenerowanej konfiguracji, gdy potrzebujesz prawdziwego komunikatu. Uruchomienie na pierwszym planie wypisuje błąd analizy, który połknął skrypt init.
Potem przywróć normalną usługę, bo demon na pierwszym planie i skrypt init będą walczyć o port.
Udowodnij, że listener istnieje, zanim zaczniesz debugować klientów
Potwierdź proces i gniazdo osobno: jedno polecenie dla działającego demona, drugie dla związanego portu UDP na oczekiwanym adresie. Proces bez gniazda oznacza, że wciąż jest w konfiguracji albo związany z niewłaściwym interfejsem. Ta para jest użytecznym testem właśnie dlatego, że jedna połowa nie może być prawdziwa bez drugiej.
Debugowanie po stronie klienta ma sens dopiero, gdy listener istnieje. Wtedy sprawdź, czy szyfr i ustawienia TLS klienta pasują do listy data-ciphers serwera i jego minimalnej wersji, oraz czy port jest faktycznie przekierowany do routera.
Zachowaj wygenerowaną konfigurację i linię dziennika, która dowiodła poprawki. Następna aktualizacja oprogramowania może znowu zmienić wartości domyślne, a to właśnie ten zapis zamienia powtórkę w pięciominutową kontrolę.