Czy łącze OpenVPN z kluczem statycznym może obsłużyć wielu klientów?
Tryb klucza statycznego łączy dwa równorzędne punkty. Dodanie client-to-client nie czyni z niego serwera dla wielu klientów; wymaga to trybu TLS i tożsamości dla każdego urządzenia.
Tryb klucza statycznego łączy dokładnie dwa równorzędne punkty i jest to jego konstrukcja, a nie ograniczenie, którego ktoś zapomniał znieść. client-to-client to opcja przekazywania w trybie serwera, więc dodanie jej do konfiguracji --secret nic nie zmienia w tym, ile klientów może się połączyć. Decyzja nie dotyczy tego, którą flagę dodać, lecz tego, czy wdrożenie potrzebuje łącza punkt-punkt, czy usługi dla wielu klientów. Jeśli kilka urządzeń musi łączyć się niezależnie, tryb ochrony się zmienia, a każde urządzenie otrzymuje tożsamość.
Dwa punkty, jeden klucz i żadnego stanu na klienta: ten kształt to cała historia trybu.
Do czego służy tryb klucza statycznego
W trybie tajnym oba punkty dzielą jeden plik klucza i ten klucz bezpośrednio chroni ruch. Nie ma uścisku dłoni, wymiany certyfikatów ani sesji na klienta, ponieważ nie ma klientów w rozumieniu serwera, są tylko dwa punkty końcowe.
Tryb pozostaje przydatny dla stałej pary maszyn z udokumentowanym procesem rotacji kluczy, a OpenVPN 2.6 oznacza go jako przestarzały właśnie dlatego, że tryb TLS obejmuje te przypadki lepszymi właściwościami. Nie potrafi natomiast odróżnić jednego łączącego się urządzenia od drugiego, ponieważ posiadanie pliku to cała historia uwierzytelniania. Dodanie trzeciego urządzenia oznacza współdzielenie z nim tego samego klucza, po czym pierwsze dwa nie potrafią już odróżnić go od siebie.
Dlatego granica dwóch punktów jest strukturalna, a nie ustawieniem do zmiany.
Dlaczego client-to-client nie jest brakującym elementem
client-to-client kontroluje, czy połączone klienty mogą wymieniać ruch przez serwer. Nie przyjmuje klientów, nie przydziela tożsamości ani nie tworzy nie skonfigurowanego trybu serwera, a w konfiguracji klucza statycznego nie ma listy klientów, którą mógłby zarządzać.
Inne częste nieporozumienie dotyczy materiału tls-crypt lub tls-auth. Serwer TLS może współdzielić jeden z tych kluczy między wszystkimi klientami, ponieważ chroni kanał sterowania, a nie dowodzi, kim jest każdy klient. Współdzielony klucz kanału sterowania w trybie TLS to inny obiekt niż współdzielony statyczny klucz danych, choć oba przychodzą jako podobnie wyglądające pliki.
Wybór między trybami sprowadza się do dwóch pytań. Czy więcej niż jedno urządzenie musi łączyć się niezależnie, i czy wdrożenie potrzebuje unieważniania na urządzenie? Nie na oba pozostawia tryb klucza statycznego opłacalnym; tak na którekolwiek z nich wskazuje na TLS. Nie ma trzeciej opcji, w której drugi klient jest dopuszczany bez własnej tożsamości.
Budowa serwera dla wielu klientów
Serwer dla wielu klientów wymaga trybu TLS, certyfikatu po stronie serwera i tożsamości na klienta. Pomocnik serwera ustawia pulę adresów i tryb wielu klientów, ale nie dostarcza konfiguracji TLS, kotwicy zaufania ani certyfikatów klientów, które czynią dopuszczenie sensownym.
Zarejestruj każde urządzenie przez istniejący urząd certyfikacji, zamiast kopiować poświadczenia jednego klienta. Właśnie odrębne tożsamości umożliwiają unieważnianie, routing na klienta i użyteczne logi, a jeden współdzielony certyfikat klienta zawala wszystkie trzy.
Jeśli wdrożenie uwierzytelnia użytkowników przez katalog zewnętrzny lub drugi czynnik, ten projekt pozostaje bez zmian. Przejście do trybu serwera TLS decyduje, jak punkty dowodzą swojej tożsamości na warstwie tunelu, i nie narzuca backendu kont. Utrzymuj obie decyzje osobno, aby zmiana w jednej nie zmieniała po cichu drugiej.
Następnie świadomie zdecyduj o polityce przekazywania. client-to-client włącza ruch między klientami na ścieżce serwera w przestrzeni użytkownika, czego wiele wdrożeń chce, a niektóre nie mogą mieć. To przełącznik polityki, a nie mechanizm tożsamości, i należy go włączyć, ponieważ wymaga tego projekt, a nie dlatego, że samouczek go zawierał.
Sprawdzenie, czy klienci są naprawdę niezależni
Połącz dwa klienty i potwierdź, że otrzymują różne adresy i pojawiają się z różnymi tożsamościami w logu serwera. Następnie unieważnij jeden i potwierdź, że drugi nadal działa, co jest praktycznym testem, że tożsamości nie były współdzielone.
Przetestuj dozwoloną usługę między punktami i tę, która powinna pozostać zablokowana. Dwa udane logowania dowodzą dopuszczenia, a nie izolacji, i ta różnica ma znaczenie, gdy wdrożenie ma rozdzielać grupy użytkowników.
Na koniec odczytaj tryb serwera z działającej konfiguracji, a nie z pamięci. Konfiguracja klucza statycznego z dodatkowymi opcjami nadal jest łączem punkt-punkt, a poprawny serwer TLS to jedyny układ, w którym kilka klientów to naprawdę odrębne punkty.
Jeśli log pokazuje jedną wspólną nazwę dla każdego urządzenia, problemem nie jest tryb. Problemem jest proces rejestracji.