Zadanie jest jasne: gdy laptop się łączy, coś na laptopie powinno się zmienić. Konfiguracja, którą się edytuje, należy do serwera, i właśnie tam założenie się załamuje. Ścieżka w pliku serwera wskazuje plik na tym serwerze, a żadna ilość push nie zmienia tego, którego proces go wykonuje. Wybór między dwoma hakami to głównie decyzja, która maszyna posiada pracę, i akceptacja wynikających z tego ograniczeń.

Dwie maszyny, dwa pytania, na które trzeba najpierw odpowiedzieć

Zapytaj, gdzie musi nastąpić zmiana stanu, a potem zapytaj, które zdarzenie jej odpowiada. Jeśli zmiana jest autoryzacją na użytkownika albo decyzją konfiguracyjną na klienta, należy tam, gdzie znany jest katalog użytkowników: na serwer. Jeśli zmiana jest trasą, ustawieniem resolvera lub lokalnym pomocnikiem na punkcie końcowym, należy do punktu końcowego, i tylko punkt końcowy może to zrobić.

Odpowiadanie na te dwa pytania w odwrotnej kolejności to droga, którą ludzie kończą, próbując wepchnąć plik wsadowy na laptop z Windows. Serwer wie, kto się połączył; laptop wie, jak wygląda jego własny stos sieciowy. Żaden nie ma informacji drugiego, a próba zwykle kończy się cicho, a nie jasnym błędem.

Przed oboma warto zadać trzecie pytanie: czy platforma w ogóle udostępnia hak, którego chcesz? Urządzenie, które samo generuje konfigurację, może nie oferować tych samych nazw zdarzeń, a klient desktopowy importujący plik .ovpn niekoniecznie jest tym samym klientem, dla którego plik napisano. Potwierdzenie platformy na początku oszczędza projektowania wokół haka, którego tam nie ma. Mówi też, która dokumentacja naprawdę dotyczy maszyny przed tobą.

Opcja po stronie serwera: zdarzenie na połączenie

Skrypt client-connect działa w kontekście procesu serwera, gdy łączy się uwierzytelniony klient, i otrzymuje udokumentowane szczegóły połączenia, takie jak common name i przydzielony adres. To właściwe miejsce na zapisanie fragmentu konfiguracji dla klienta, wyegzekwowanie decyzji polityki lub zapisanie stanu, który posiada serwer.

Rozróżnienie, które ludzie pomijają, to różnica między tym hakiem a hakiem up serwera. Hak up uruchamia się, gdy serwer otwiera swoje urządzenie tunelowe, co na serwerze z wieloma klientami zdarza się raz przy starcie demona. To nie jest zdarzenie na logowanie, a kod tam umieszczony działa przy starcie usługi, a nie gdy użytkownicy się łączą.

Na urządzeniu z interfejsem web użyj obsługiwanego mechanizmu rozszerzeń, zamiast edytować generowane pliki demona. Generowane pliki są nadpisywane przy następnym zapisie, a nadpisanie po cichu usuwa twoją zmianę w najgorszym możliwym momencie. Trzymaj kopię tekstu rozszerzenia poza urządzeniem, aby aktualizacja oprogramowania sprzętowego nie zgubiła także intencji.

Opcja po stronie klienta: praca, która musi wykonać się lokalnie

Klient społecznościowy może uruchomić lokalny skrypt, gdy pojawia się urządzenie tunelowe, i ponownie, gdy instalowane są trasy. To dwa różne momenty, a wybór niewłaściwego tworzy klasyczny wyścig, w którym pomocnik startuje, zanim istnieje trasa, od której zależy.

Pomocnik musi istnieć na tym kliencie, być czytelny i wykonywalny dla konta uruchamiającego klienta oraz dozwolony przez wyraźne ustawienie script-security. Skrypt, który działa, gdy uruchamiasz klienta jako administrator, nic nie mówi o usłudze przed logowaniem ani o sesji innego użytkownika.

Nazewnictwo też ma znaczenie. Hak up odpowiada utworzeniu urządzenia, a route-up instalacji tras, ale zadanie wymagające osiągalnej sieci prywatnej powinno weryfikować osiągalność, zamiast zakładać, że utworzenie urządzenia oznacza gotowość każdej trasy, wpisu resolvera i aplikacji.

Dlaczego wypychanie kodu wykonywalnego nie jest w opcjach

Opcje wypychane przez push są celowo ograniczone, a opcje uruchamiające skrypty należą do kategorii, których serwer nie może przekazywać. To ograniczenie istnieje, ponieważ alternatywa pozwoliłaby przejętemu lub źle skonfigurowanemu serwerowi uruchamiać dowolne polecenia na każdym kliencie, który kiedykolwiek się połączy.

Włączenie wykonywania skryptów lokalnie tego nie zmienia. Twoje ustawienie script-security zezwala na lokalne skrypty, które sam wybrałeś; nie upoważnia serwera do dostarczania nowych.

Jeśli celem jest po prostu zainstalowanie tras VPN, użyj obsługiwanej konfiguracji tras, zamiast wymyślać schemat zdalnego wykonywania. Jeśli cel naprawdę wymaga lokalnego kodu, rozprowadź go przez narzędzia organizacji do zarządzania punktami końcowymi i przejrzyj go jak każde inne oprogramowanie działające z uprawnieniami użytkownika.

Co sprawdzić, zanim zaufasz któremukolwiek z haków

Zapisz cztery rzeczy dla każdego haka: maszynę, nazwę zdarzenia, konto, na którym działa, oraz zmianę stanu, którą ma wywołać. Następnie przetestuj połączenie, ponowne połączenie i ścieżkę sprzątania, ponieważ hak, który przy ponownym połączeniu przecieka stan, jest gorszy od tego, który nigdy nie zadziałał.

Testuj na koncie, które naprawdę go wykona, w momencie, w którym naprawdę zostanie wykonany. Podręcznik openvpn(8) dokumentuje obie rodziny haków i ograniczenia push; platforma, na której wdrażasz, dokumentuje, czy w ogóle je udostępnia. Skrypt, który działa w interaktywnym terminalu administratora, jest hipotezą, nie weryfikacją.

Powiązane artykuły