Zamknięcie okna terminala to nie to samo co zamknięcie tunelu, a zabicie procesu to nie to samo co zatrzymanie usługi. W systemie Linux polecenie, które faktycznie rozłącza, zależy od tego, który komponent uruchomił połączenie i tym samym posiada jego cykl życia. Poniższe porównanie obejmuje cztery układy, na które najprawdopodobniej trafisz, oraz identyfikator, którego każdy z nich wymaga.

Klienci pierwszego planu i klienci zdemonizowani

Klient uruchomiony ręcznie w terminalu należy do tego terminala. Ctrl+C przekazuje przerwanie, klient rozbiera swoją interfejs, a tunel się kończy. Nic więcej nie trzeba powiadamiać.

Klient uruchomiony przez opakowanie powłoki i pozostawiony w tle nie należy do nikogo konkretnego, i właśnie wtedy ludzie sięgają po killall. Najpierw znajdź proces, potwierdź, że jego wiersz poleceń wymienia zamierzony profil, a następnie wyślij zwykły sygnał zakończenia. Nadzorowany proces zabity pod swoim nadzorcą zostanie po prostu uruchomiony ponownie, dlatego identyfikacja właściciela jest ważniejsza niż wybór sygnału. Wysyłaj sygnał do grupy procesów tylko wtedy, gdy potwierdziłeś, że nie dzieli jej żaden inny tunel.

SIGUSR1 nie jest rozłączeniem; prosi klienta o ponowne uruchomienie tunelu.

Instancje systemd

Gdy jednostka posiada połączenie, jednostka jest obiektem do zatrzymania. Instancje szablonu, takie jak openvpn-client@office, noszą nazwę profilu, a zatrzymanie celu szablonu zamiast instancji może wpłynąć na każdego klienta na hoście.

systemctl list-units 'openvpn-client@*'
systemctl stop [email protected]

Przeczytaj ExecStart jednostki, gdy nie masz pewności, który profil wczytała instancja.

Włączona jednostka wróci przy następnym rozruchu, co jest osobną decyzją od zatrzymania jej teraz. Wyłącz ją dopiero po ustaleniu, że połączenie nie powinno wracać, i zapisz tę decyzję tam, gdzie znajdzie ją następny administrator.

Profile NetworkManager

Profil zarządzany przez NetworkManager nie jest procesem, do którego możesz wysłać sygnał. Menedżer posiada cykl życia, a obiektem, na którym trzeba działać, jest aktywne połączenie, identyfikowane przez UUID, a nie przez nazwę wyświetlaną. Wcześniejsze odczytanie aktywnej listy pokazuje też, czy nie działa drugi tunel pod nazwą, której się nie spodziewałeś.

nmcli connection show --active
nmcli connection down uuid actual-uuid

Nazwy wyświetlane się powtarzają, a nazwa pliku profilu nie jest jego identyfikatorem, więc skopiuj UUID z listy. Jeśli połączenie wraca natychmiast, coś je aktywuje: wpis secondaries w połączeniu bazowym, skrypt dispatchera albo flaga automatycznego łączenia. Zatrzymanie połączenia menedżera to właściwy pierwszy krok, a reaktywacja to następne pytanie. Nie usuwaj profilu, aby zatrzymać reaktywację, ponieważ usuwa to również dane logowania, których możesz potrzebować jutro.

Dokumentacja poleceń menedżera opisuje, jak wybierany jest cel down.

Sesje OpenVPN 3

OpenVPN 3 Linux używa modelu sesji zamiast procesu na tunel. Sprawdzasz sesje, które zna usługa, a następnie działasz na jednej ścieżce sesji. Ścieżka jest identyfikatorem i nie jest wymienna z nazwą konfiguracji.

openvpn3 sessions-list
openvpn3 session-manage --path /net/openvpn/v3/sessions/... --disconnect

Rozłączenie każdej sesji to inna czynność i powinna być świadoma.

Ten sam host może utrzymywać sesje kilku użytkowników, więc najpierw wypisz je i potwierdź właściciela sesji, którą zamierzasz zakończyć.

Co sprawdzić potem

Sprawdź trzy rzeczy po każdym z tych zatrzymań: lista aktywnych połączeń nie zawiera już tunelu, interfejs zniknął, a wyszukiwanie trasy dla adresu wewnętrznego nie wybiera już urządzenia tunelowego. Następnie zdecyduj, co stanie się przy następnym rozruchu.

ip -brief address
ip route get 10.8.0.1

Ręczne usunięcie interfejsu nie zatrzymuje właściciela i pozostawia sprzątanie w połowie.

Rozłączenie teraz, zapobieżenie następnemu automatycznemu uruchomieniu i późniejsze zezwolenie na ruch spoza VPN to trzy osobne wybory. Dokonaj każdego z nich jawnie.

Powiązane artykuły