Odpowiedzi:
network-manager-openvpn
nie zapewnia takiej funkcjonalności, musisz użyć openvpn
bezpośrednio.
Przejdź --script-security 2 --up /path/to/your/script
do 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.sh
i 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 up
skrypt jest uruchamiany jako root. Jeśli nie określiłeś ustawienia User
i Group
, OpenVPN będzie uruchamiał skrypty jak down
root.
openvpn
bezpoś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ć.
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.
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.
Na moim komputerze z openpvn server.conf mam następujące linie w moim /etc/default/openvpn
pliku:
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].conf
i /etc/default/openvpn
pliki 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 openvpn
obejmują cond-restart,force-reload,reload, restart,soft-restart, start, status, stop
.
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.
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>