Poradnik
Jak skonfigurować VPN w systemie Linux
Klient dostawcy z jego własnego repozytorium, alternatywa w postaci pliku konfiguracyjnego w narzędziach systemowych, szczegół dotyczący DNS, który w systemie Linux powoduje więcej wycieków niż gdziekolwiek indziej, oraz testy wykonywane w terminalu. Tekst przygotowany dla Ubuntu 26.04 LTS i NetworkManager.
Zanim zaczniesz
Ten poradnik nie wybiera dostawcy za Ciebie
Każdy z poniższych kroków wygląda tak samo niezależnie od używanego dostawcy, dlatego żaden nie jest tu wymieniony. Wybór to osobne zadanie, które wykonuje się w rejestrze, gdzie decyzję podejmuje się na podstawie opublikowanego wyniku, a nie strony pobierania.
Zainstaluj klienta z własnego repozytorium dostawcy, używając klucza podpisującego z własnych instrukcji dostawcy. Nigdy nie wklejaj do terminala jednowierszowego polecenia instalacyjnego z forum ani bloga: polecenie działa jako root, a Ty nie masz pojęcia, co zostało pobrane. Pakiet z podpisanego repozytorium można sprawdzić; skrypt przekierowany do powłoki — nie.
Zainstaluj klienta
W systemie Linux są dwie uczciwe możliwości. Pierwszą jest własny klient dostawcy; zapewnia on wyłącznik awaryjny, wybór serwera i obsługę DNS. Drugą jest plik konfiguracyjny używany przez własne narzędzia systemu — w końcowej części poradnika wyjaśniamy, jaki jest tego koszt.
- Zaloguj się na stronie dostawcy i otwórz instrukcje dotyczące systemu Linux w sekcji konta. Znajdziesz tam repozytorium, klucz i pakiet; postępuj zgodnie z nimi i z niczym więcej.
- Dodaj repozytorium i jego klucz, a następnie zainstaluj pakiet za pomocą menedżera pakietów dystrybucji. Klucz pozwala menedżerowi pakietów odrzucić zmodyfikowany pakiet, więc repozytorium dodane bez niego jest repozytorium, któremu musisz zaufać.
- Włącz usługę klienta, aby uruchamiała się podczas startu systemu. Klient to zwykle demon działający jako root oraz aplikacja desktopowa, która się z nim komunikuje; demon zarządza tunelem, a wyłącznik awaryjny, który ma działać od uruchomienia systemu, wymaga, by demon działał od uruchomienia systemu.
- Zaloguj się do klienta — w aplikacji albo w wierszu poleceń za pomocą tokenu udostępnionego w sekcji konta — i nadaj urządzeniu nazwę, która nie pozwala Cię zidentyfikować.
- Nie łącz się jeszcze. Najpierw otwórz ustawienia. W większości klientów dwa z trzech poniższych ustawień są domyślnie wyłączone.
Trzy ustawienia, które warto sprawdzić
Menu klientów się różnią, ale ustawienia pozostają takie same. Każde z tych trzech ustawień ma własne hasło w glosariuszu, jeśli jego nazwa jest Ci nieznana.
Wyłącznik awaryjny
Blokuje cały ruch, gdy tunel przestaje działać, zamiast po cichu pozwolić połączeniu wrócić do zwykłej sieci. W systemie Linux jest to zestaw reguł zapory zapisywanych przez klienta: odrzucane jest wszystko poza interfejsem tunelu i własnym punktem końcowym tunelu. Włącz go, a jeśli klient oferuje taką opcję, wybierz tryb zawsze aktywny lub lockdown, aby reguły obowiązywały od uruchomienia systemu, a nie tylko podczas połączenia. Opis działania wyłącznika znajduje się na osobnej stronie.
DNS wewnątrz tunelu
Zapytania o nazwy mogą opuszczać urządzenie poza tunelem, nawet gdy cała reszta ruchu jest w jego wnętrzu. W systemie Linux jest to najczęstszy rodzaj wycieku, ponieważ resolver jest elementem zmiennym. W Ubuntu tym elementem jest systemd-resolved: każdy interfejs ma własne resolvery, a ten, któremu przypisano domyślną trasę DNS, odpowiada na wszystko, czego nie obejmuje bardziej szczegółowa domena. Klient powinien kierować tę domyślną trasę do resolvera dostawcy przez interfejs tunelu. Ustaw DNS dostawcy, a nie podmiotu trzeciego; kolejny podmiot, który widzi tylko zapytania, to kolejny podmiot. Opis powstawania wycieku znajduje się na stronie o wyciekach DNS.
Protokół
Pozostaw nowoczesne ustawienie domyślne, chyba że coś nie działa — strona protokołów wymienia te aktualne i starsze. Jeśli klient oferuje starszą opcję w celu naprawienia problemu z połączeniem, jest to kompromis, który należy świadomie zaakceptować, a następnie cofnąć: rejestr wskazuje najsłabszy protokół nadal oferowany przez dostawcę, a ręczne wybranie go oznacza wybranie tego oznaczenia dla siebie.
Potwierdź, że wszystko rzeczywiście działa
Połącz się, a następnie sprawdź działanie zamiast zakładać, że jest poprawne. Wykonaj te trzy testy w terminalu, w podanej kolejności:
- Twój adres się zmienił. Użyj
curlw dowolnej usłudze typu „jaki jest mój adres IP” albo otwórz taką usługę w przeglądarce i potwierdź, że kraj odpowiada wybranemu węzłowi wyjściowemu. Polecenieip route getdla publicznego adresu powinno wskazać interfejs tunelu, a nie interfejs Wi-Fi lub Ethernet. - Zapytania są obsługiwane wewnątrz tunelu. Sprawdź
resolvectl status: interfejs tunelu powinien używać resolvera dostawcy i domyślnej trasy DNS, a resolver interfejsu fizycznego powinien pozostać nieużywany. Test wycieku DNS w przeglądarce jest drugim sprawdzianem; obecność czegokolwiek należącego do dostawcy internetu oznacza, że ustawienie DNS nie zadziałało. - Wyłącznik awaryjny działa zgodnie z opisem. Przy uruchomionym pobieraniu zatrzymaj usługę klienta poleceniem
systemctl stopalbo wyłącz interfejs tunelu poleceniemip link set … down, tak aby tunel został rozłączony bez żądania klienta. Transfer powinien natychmiast się zatrzymać. Jeśli trwa dalej, wyłącznik jest tylko dekoracją.
Dłuższy zestaw testów oraz wyjaśnienie, co każdy z nich może, a czego nie może wykazać, znajduje się w osobnym poradniku.
Co potwierdzają te testy
+Twój ruch wychodzi przez serwer wyjściowy w wybranym kraju
+Resolver odpowiadający na Twoje zapytania należy do dostawcy i znajduje się wewnątrz tunelu
+Przerwany tunel kończy połączenie zamiast po cichu wrócić do zwykłej sieci
Czego nie potwierdzają
−Nie mówią nic o tym, co dostawca przechowuje — to kwestia dokumentów, na którą odpowiadają strony dotyczące retencji
−Nie zapewniają anonimowości: przeglądarka i logowania pozostają bez zmian; zobacz przed czym VPN Cię nie chroni
−Pozytywny wynik testu dzisiaj nie jest obietnicą dotyczącą kolejnej aktualizacji pakietu ani kolejnego jądra systemu
Wariant z plikiem konfiguracyjnym i jego koszt
Większość dostawców publikuje w sekcji konta pliki konfiguracyjne dla dwóch powszechnych protokołów. Plik WireGuard można zaimportować do NetworkManager z edytora połączeń albo poleceniem nmcli connection import; równie dobrze działa on z użyciem wg-quick. Plik OpenVPN importuje się tak samo za pomocą wtyczki OpenVPN. Otrzymujesz tunel, własny systemowy przełącznik interfejsu i nic więcej, czego dostawca nie umieścił w pliku.
Tracisz resztę funkcji klienta. Nie ma wyłącznika awaryjnego, chyba że samodzielnie napiszesz reguły zapory; zaimportowany do NetworkManager plik, którego działanie się urwie, po prostu przekaże ruch z powrotem do zwykłej sieci. Nie ma obsługi DNS wykraczającej poza wiersz DNS w pliku, a plik bez tego wiersza jest źródłem wycieku wskazywanym w pierwszej odpowiedzi na problemy. Nie ma wyboru serwera: każdy plik oznacza jeden węzeł wyjściowy, a zmiana węzła wymaga użycia innego pliku. Generuj pliki w sekcji konta i przechowuj je prywatnie: plik WireGuard zawiera klucz prywatny, który jest Twoją tożsamością wobec dostawcy.
Ten wariant sprawdza się w przypadku serwera, maszyny bez interfejsu graficznego lub dystrybucji, której klient nie obsługuje. Na laptopie wybierz raczej klienta; przełącznik, który zapewnia, jest właśnie tym, czego nie może zapewnić plik konfiguracyjny.
Gdy coś nie działa
Tunel działa, ale DNS nadal trafia do mojego dostawcy internetu
To klasyczny wyciek w systemie Linux. Plik konfiguracyjny, w którym nie ustawiono DNS, pozostawia systemd-resolved z resolverem przekazanym przez sieć, poza tunelem. Uruchom resolvectl status: interfejs tunelu powinien wskazywać resolver dostawcy i mieć domyślną trasę DNS, oznaczoną znakiem plus.
Dodaj wiersz DNS do konfiguracji albo ustaw DNS dla połączenia w NetworkManager, a następnie połącz się ponownie. Własny klient dostawcy ustawia to sam, co jest jednym z powodów, by go preferować.
Gdy tunel się rozłącza, wszystko przestaje działać i jest to irytujące
To wyłącznik awaryjny wykonujący swoje zadanie: przerwany tunel oznacza martwe połączenie, a nie cichy powrót do zwykłej sieci. Połącz się ponownie zamiast wyłączać wyłącznik.
Jeśli na jednej sieci rozłącza się często, a w innych rzadko, zmień raz protokół i spróbuj bliższego węzła wyjściowego. Jeśli na tej sieci nie działa stabilnie żaden protokół, sieć blokuje ruch VPN i na tym ten poradnik się kończy.
Klient za każdym razem prosi o sudo lub hasło
Utworzenie interfejsu sieciowego wymaga uprawnień, a klient, który nie instaluje usługi działającej w tle, musi prosić o nie za każdym razem. Większość klientów instaluje taką usługę — demona działającego jako root oraz aplikację desktopową, która się z nim komunikuje — więc powtarzający się monit oznacza, że usługa nie działa albo nie jest włączona.
Sprawdź ją poleceniem systemctl status, używając nazwy usługi z instrukcji dostawcy, i włącz ją, aby uruchamiała się podczas startu systemu.
Na stronie testowej pojawiają się adresy IPv6
Tunel przenosi IPv4, ale urządzenie nadal ma trasę IPv6 poza tunelem, więc wszystko, co preferuje IPv6, omija VPN. Dostawcy, którzy nie tunelują IPv6, powinni wyłączyć je na interfejsie; lepsi klienci robią to automatycznie.
Jeśli utworzyłeś połączenie z pliku, wyłącz IPv6 dla połączenia w NetworkManager albo wyłącz je za pomocą sysctl i wykonaj test ponownie. Tunel, który pozostawia otwartą drugą rodzinę adresów, jest tylko połową tunelu.
Te same kroki, inne systemy
Pozostałe platformy
Każda platforma ma własny poradnik, a nie zakładkę w tym jednym. Kroki rozjeżdżają się już od momentu otwarcia instalatora, a strona odpowiadająca na trzy platformy naraz nie odpowiada porządnie na żadną z nich.