Twój kontener może nasłuchiwać na UDP 1195, podczas gdy host publikuje 1194, i jest to poprawne, dopóki mapowanie tak mówi. Liczby tworzą tabelę tłumaczeń: klient wybiera port hosta, Docker przepisuje cel na port kontenera, a OpenVPN odpowiada na porcie, który podaje jego własna konfiguracja. Niezgodność w którymkolwiek z tych ogniw daje cichą awarię wyglądającą jak zapora. Certyfikaty i szyfry są poniżej i nie mogą tego naprawić.

Prześledź jeden pakiet od klienta do procesu, zanim zmienisz cokolwiek w uwierzytelnianiu.

Trzy liczby, jedno połączenie

Te trzy liczby to zdalny cel używany przez klienta, opublikowane mapowanie na hoście i nasłuchujący w kontenerze. Nie muszą być równe, ale muszą tworzyć łańcuch. Równe liczby to przypadek szczególny, który bywa najczęstszy, dlatego niezgodność łatwo raz zapisać, a trudno później zauważyć.

Zapisz łańcuch w jednej linii przed debugowaniem: adres i port klienta, mapowanie hosta, nasłuchujący kontenera, transport. Usterka w łańcuchu ujawnia się jako liczba, która pojawia się dwukrotnie z różnymi wartościami.

LocationExample
Remote client destinationHost address, UDP 1194
Published mappingHost UDP 1194 to container UDP 1195
Container listenerOpenVPN on UDP 1195

Co naprawdę mówi krótka składnia

W krótkiej formie lewa strona to port hosta, a prawa to port kontenera, a przyrostek z ukośnikiem wybiera transport. Jeśli pominiesz przyrostek, Docker potraktuje mapowanie jako TCP, więc nasłuchujący UDP za mapowaniem bez protokołu to nasłuchujący, do którego nikt nie dotrze. Ta wartość domyślna jest udokumentowana i wciąż zaskakuje tych, którzy dopasowali liczby i uznali sprawę za zamkniętą.

Długa forma jawnie ustala adres wiązania i protokół, co jest warte dodatkowych linii w wszystkim, co jest zwrócone do sieci. Odczytaj opublikowane mapowanie z powrotem, zamiast ufać plikowi, który je utworzył.

ports:
  - 1194:1195/udp

Gdzie pakiet może się zatrzymać

Żądanie może zostać odrzucone przed Dockerem, w Dockerze lub u nasłuchującego. Przed Dockerem może być zapora chmurowa lub router wykonujący własne przekazywanie, a to urządzenie potrzebuje portu zwróconego do hosta i właściwego transportu. W Dockerze mapowanie na zły port kontenera przekazuje do zamkniętego gniazda.

Potem nasłuchujący: konfiguracja OpenVPN podaje port i protokół, a klient, który wewnątrz kontenera trafi na inny, nie dociera do niczego. Testowanie usługi UDP przez TCP niczego nie dowodzi na żadnym z tych etapów, więc używaj transportu, którego użyje klient.

Adresy wiązania decydują o osiągalności

Opublikowane mapowanie przypisane do loopback jest osiągalne tylko z hosta, a przypisane do wszystkich interfejsów jest osiągalne tam, gdzie pozwala zapora. W pliku Compose bez adresu oba wyglądają identycznie, a domyślna wartość Dockera jest szersza.

Zdecyduj, jakie wystawienie ma na myśli wdrożenie, a potem zapisz je jawnie. Wewnętrzny test łączący się przez loopback i zdalny klient, który nie może się połączyć, mogą być oba trafnymi opisami tego samego kontenera.

Odczytaj stan działania

Sprawdź faktyczne mapowanie działającego kontenera i nasłuchującego w jego przestrzeni nazw sieci. Plik Compose mógł zostać zmieniony po starcie kontenera, metadane obrazu mogą deklarować port bez publikowania go, a drugi kontener może już zajmować port hosta. Deklarowanie portu w obrazie nie jest jego publikowaniem, a żadne z tych nie jest tym samym co nasłuchiwanie.

Trzy różne stany, trzy różne polecenia, i tylko ostatnie dotyczy OpenVPN.

Gdy mapowanie jest poprawne

Gdy pakiet dotrze do OpenVPN, jego dziennik jest miejscem, gdzie czyta się o TLS i uwierzytelnianiu. Regenerowanie certyfikatów, aby naprawić pakiet, który nigdy nie dotarł, to zmarnowana praca, która dodaje drugą zmienną. Trzymaj notatkę o mapowaniu obok profilu klienta, aby następna osoba przeczytała jedną linię zamiast odkrywać na nowo wszystkie trzy liczby. Jedno przechwycenie pakietów po stronie hosta rozstrzyga, które z trzech ogniw jest błędne, i kosztuje mniej niż regeneracja certyfikatu.

Opisany tutaj przypadek to publikowanie przez most. Sieć hosta i trasowane adresy kontenerów pomijają tłumaczenie, więc te same liczby znaczą coś innego w tych projektach.

Powiązane artykuły