Jak uruchomić skrypt po udanym połączeniu OpenVPN?


50

Jak mogę powiązać skrypt z OpenVPN, aby działał po pomyślnym połączeniu VPN?


Chyba w przypadku klienta? Z jakiego oprogramowania korzystasz? OpenVPN, czy opakowanie (np. NetworkManager)?
— Lekensteyn

@Lekensteyn, opakowanie network-manger-openvpn.
— Oxwivi

Odpowiedzi:


62

network-manager-openvpnnie zapewnia takiej funkcjonalności, musisz użyć openvpnbezpośrednio.

Przejdź --script-security 2 --up /path/to/your/scriptdo niego podczas łączenia. Jeśli używasz pliku konfiguracyjnego znajdującego się w /etc/openvpn/, dodaj kolejne wiersze do pliku konfiguracyjnego:

script-security 2
# run /etc/openvpn/up.sh when the connection is set up
up /etc/openvpn/up.sh

Ze strony OpenVPN :

--script-poziom bezpieczeństwa [metoda]
              Niniejsza dyrektywa oferuje kontrolę na poziomie polityki nad wykorzystaniem OpenVPN
              zewnętrznych programów i skryptów. Wartości niższego poziomu są większe
              restrykcyjne, wyższe wartości są bardziej liberalne. Ustawienia dla
              poziom:

              0 - Całkowicie brak wywoływania programów zewnętrznych.
              1 - (Domyślnie) Wywołaj tylko wbudowane pliki wykonywalne, takie jak ifconfig,
              ip, route lub netsh.
              2 - Zezwól na wywoływanie wbudowanych plików wykonywalnych i zdefiniowanych przez użytkownika
              skrypty.
              3 - Zezwól na przekazywanie haseł do skryptów za pośrednictwem środowiska
              zmienne (potencjalnie niebezpieczne).
       --up cmd
              Polecenie powłoki do uruchomienia po pomyślnym otwarciu urządzenia TUN / TAP (wcześniej
              - zmiana identyfikatora użytkownika). Skrypt up jest przydatny do określania
              polecenia trasujące, które kierują ruch IP przeznaczony do prywatnego
              podsieci, które istnieją na drugim końcu połączenia VPN z
              tunel.
Kolejność wykonywania skryptów
       --up Wykonane po powiązaniu gniazda TCP / UDP i otwarciu TUN / TAP.
       - down Wykonane po zamknięciu TCP / UDP i TUN / TAP.

Istnieje więcej zdarzeń do wykonania skryptu, które można znaleźć na stronie podręcznika .

Utwórz /etc/openvpn/up.shi nadaj mu uprawnienia do wykonywania (powiedzmy 755 lub 700). Przykładowa treść dodawania adresu IPv6 i trasy (wyświetlana w celach edukacyjnych, nie kopiuj go bezpośrednio):

#!/bin/sh
# add an IPv6 address to device $dev (environment variable)
ip -6 addr add 2001:db8::1:2/112 dev $dev
# and the IPv6 route for this net using gateway 2001:db8::1
ip -6 route add 2001:db8::1:0/112 via 2001:db8::1 dev $dev

Zauważ, że ten upskrypt jest uruchamiany jako root. Jeśli nie określiłeś ustawienia Useri Group, OpenVPN będzie uruchamiał skrypty jak downroot.


Jeśli nie wiesz, jak bezpośrednio korzystać z openvpn, dodaj bieżące szczegóły konfiguracji: typ połączenia (np. Certyfikaty X509), port bramy, kompresja LZO, siła TCP, użycie urządzenia zaczepowego, szyfru, HMAC i TLS. Wspomnij również o ustawieniach IP, jeśli nie są one automatyczne. Aby zachować prywatność, pomiń swoje rzeczywiste adresy.
— Lekensteyn

Okej, zdecydowałem się użyć OpenVPN bezpośrednio (i tak, mam plik .conf), ale czy automatycznie połączy się ponownie, jeśli połączenie zostanie utracone? I jak sprawić, by łączył się automatycznie, gdy istnieje połączenie z Internetem? I w końcu nie zrozumiałem, gdzie muszę dodać wiersze, o których wspomniałeś w odpowiedzi.
— Oxwivi,

Rozszerzyłem odpowiedź do openvpnbezpośredniego użycia . Podczas konfigurowania serwera zauważyłem, że OpenVPN będzie próbował połączyć się ponownie, gdy serwer ulegnie awarii. Nie jestem pewien, czy OpenVPN nadal próbuje, gdy twój interfejs sieciowy przestaje działać.
— Lekensteyn,

Mój problem nie dotyczy awarii interfejsu sieciowego - próbuje się połączyć ponownie, gdy połączenie internetowe zostanie utracone i odzyskane. Chcę tylko połączyć się z VPN za każdym razem, gdy otrzymam połączenie z Internetem.
— Oxwivi,

Aha, czy skrypt dotyczy wszystkich połączeń VPN? I proszę otagować @Oxwivi, odpowiadając, nie otrzymam powiadomienia inaczej.
— Oxwivi,

5

Na pytanie: „W jaki sposób mogę powiązać skrypt z OpenVPN, aby działał, gdy VPN jest prawidłowo podłączony?” Chcę podkreślić, że Lekensteyn udzielił doskonałej odpowiedzi . Ale w chwili, gdy jego odpowiedź była skomponowana, brakowało niejasności co do tego, w jaki sposób należy podać argumenty wiersza poleceń openvpn, aby uruchomić openvpn na maszynie z Ubuntu, szczególnie, aby działał tak samo po ponownym uruchomieniu.


Argumenty wiersza polecenia Openvpn w systemie Ubuntu:

Oczywiście openvpn można uruchomić z wiersza poleceń z dowolnymi dostępnymi opcjami prawnymi. Ale na komputerze Ubuntu, jeśli ktoś chce uruchomić openvpn z tymi samymi argumentami wiersza poleceń po ponownym uruchomieniu, powinien rozważyć edycję pliku /etc/default/openvpn. Sprawdź następujące linie:

# Optional arguments to openvpn's command line
OPTARGS="" 

Ze strony podręcznika społeczności openvpn na--script-security

- poziom bezpieczeństwa skryptu
    Niniejsza dyrektywa oferuje kontrolę na poziomie polityki nad wykorzystaniem zewnętrznych źródeł przez OpenVPN 
    programy i skrypty. Wartości niższego poziomu są bardziej restrykcyjne, wyższe
    wartości są bardziej liberalne. Ustawienia dla poziomu:
0 - Całkowicie brak wywoływania programów zewnętrznych. 
1 - (Domyślnie) Wywołaj tylko wbudowane pliki wykonywalne, takie jak ifconfig, ip, route,
lub netsh. 
2 - Zezwól na wywoływanie wbudowanych plików wykonywalnych i skryptów zdefiniowanych przez użytkownika. 
3 - Zezwól na przekazywanie haseł do skryptów za pomocą zmiennych środowiskowych
(potencjalnie niebezpieczne).

Wersje OpenVPN przed wersją 2.3 wspierały także flagę metody wskazującą jak 
OpenVPN powinien wywoływać zewnętrzne polecenia i skrypty. Może to być albo wykonanie
lub system. Od wersji OpenVPN v2.3 ta flaga nie jest już akceptowana. W większości * nix
środowiska podejście execve () zostało użyte bez żadnych problemów.

Niektóre dyrektywy, takie jak --up, umożliwiają przekazywanie opcji do zewnętrznego skryptu.
W takich przypadkach upewnij się, że nazwa skryptu nie zawiera spacji ani znaku 
parser konfiguracji zadławi się, ponieważ nie może określić, gdzie skrypt 
kończą się nazwy i zaczynają się opcje skryptu.

W połączeniu ze skróconą sekcją na --up

--up cmd
    Uruchom polecenie cmd po pomyślnym otwarciu urządzenia TUN / TAP (zmiana UID użytkownika przed).
    cmd składa się ze ścieżki do skryptu (lub programu wykonywalnego), opcjonalnie podanej
    przez argumenty. Ścieżka i argumenty mogą być jedno- lub podwójnie cytowane i / lub
    uciekł za pomocą odwrotnego ukośnika i powinien być oddzielony jednym lub kilkoma spacjami.

Przykład:

Na moim komputerze z openpvn server.conf mam następujące linie w moim /etc/default/openvpnpliku:

OPTARGS="
    --script-security 2
    --up /etc/openvpn/nat.sh
" 

Nawiasem mówiąc, nat.sh konfiguruje translację adresów sieciowych w celu kierowania prywatnego ruchu sieciowego od klientów openvpn do publicznego Internetu; co jest dobre, gdy nie ufa się publicznemu punktowi dostępowemu WIFI.


Oprócz umożliwienia ponownego uruchomienia zgodnie z oczekiwaniami po ponownym uruchomieniu, kiedy /etc/openvpn/[client or server].confi /etc/default/openvpnpliki są poprawnie skonfigurowane, openvpn można uruchomić lub zatrzymać za pomocą:

sudo service openvpn start
sudo service openvpn stop

Inne przydatne opcje dostępne service openvpnobejmują cond-restart,force-reload,reload, restart,soft-restart, start, status, stop.


3

Ponieważ jest to dość stary wątek, nie jestem pewien, czy nadal go interesuję. Jeśli nadal chcesz używać Menedżera sieci do łączenia się z VPN, możesz dodać prostą regułę udev w ten sposób:

KERNEL=="vpn0", RUN+="/PATH_TO_THE_SCRIPT/SCRIPT_NAME"

To powinno uruchomić dowolny skrypt po utworzeniu VPN.


1

Natknąłem się na odpowiedź w swoich badaniach, aby rozwiązać ten problem i odkryłem, że najlepszym rozwiązaniem jest (przy użyciu serwera openvpn), jak następuje:

Utwórz skrypt do wykonania:

# nano /etc/openvpn/up.sh
<file:contents>
#!/bin/sh

# export >> /var/log/openvpn/openvpn-up.log
D=`date "+%Y-%m-%d %H:%M"`
echo "[$D] ($local_port_1:$proto_1) $X509_0_CN: $trusted_ip => $ifconfig_pool_remote_ip" >> /var/log/openvpn/openvpn-up.log
</file>

Dodaj następujące wiersze do konfiguracji openvpn (zwykle /etc/openvpn/server.conf). W powyższej odpowiedzi użyto go w górę iw dół, które są używane podczas uruchamiania serwera (restartowania). Dyrektywa klient-podłącz (i klient-odłącz) jest używany, gdy klient łączy się (odłącza).

# nano /etc/openvpn/server.conf
<file:add>
script-security 2
client-connect /etc/openvpn/up.sh
</file>

Jak zamieścisz nazwę konfiguracji klienta w pliku dziennika?
— callisto
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.