Як я можу пов’язати скрипт з OpenVPN, щоб він запускався, коли VPN успішно підключено?
network-manger-openvpn
.
Як я можу пов’язати скрипт з OpenVPN, щоб він запускався, коли VPN успішно підключено?
network-manger-openvpn
.
Відповіді:
network-manager-openvpn
не надає такої функціональності, вам доведеться користуватися openvpn
безпосередньо.
Перехід --script-security 2 --up /path/to/your/script
до нього при підключенні. Якщо ви використовуєте файл конфігурації, розташований у /etc/openvpn/
, додайте наступні рядки до файлу конфігурації:
script-security 2
# run /etc/openvpn/up.sh when the connection is set up
up /etc/openvpn/up.sh
На сторінці OpenVPN :
- рівень безпеки скрипту [метод] Ця директива пропонує контроль на рівні політики щодо використання OpenVPN зовнішніх програм та сценаріїв. Значення нижнього рівня більше обмежувальні, більш високі значення більш дозволені. Налаштування для рівень: 0 - суворо не вимагає виклику зовнішніх програм. 1 - (за замовчуванням) Викликати лише вбудовані виконувані файли, такі як ifconfig, ip, маршрут або netsh. 2 - Дозволити виклик вбудованих виконуваних файлів та визначених користувачем сценарії. 3 - Дозволити передачу паролів до сценаріїв через навколишнє середовище змінні (потенційно небезпечні). - до cmd Команда Shell для запуску після успішного відкриття пристрою TUN / TAP (попередньо) - зміна UID користувача). Скрипт вгору корисний для уточнення команди маршруту, маршрут маршруту IP призначений для приватного підмережі, які існують на іншому кінці з'єднання VPN тунель. Сценарій Порядок виконання - Запуск виконується після прив'язки сокета TCP / UDP та відкриття TUN / TAP. --запуск Виконується після закриття TCP / UDP і TUN / TAP.
Є більше подій для виконання сценарію, їх можна знайти на сторінці керівництва .
Створіть /etc/openvpn/up.sh
і дайте йому виконувати дозволи (скажімо, 755 або 700). Приклад вмісту для додавання адреси та маршруту IPv6 (показано для навчальних цілей, не копіюйте його безпосередньо):
#!/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
Зауважте, що цей up
скрипт запускається як root. Якщо ви не вказали a User
та Group
налаштування, OpenVPN запустить такі сценарії, як down
і root.
openvpn
безпосередньо використовувати . Під час налаштування сервера я помітив, що OpenVPN спробує знову підключитися, коли сервер вийшов з ладу. Не впевнений, чи OpenVPN продовжує намагатися, коли ваш мережевий інтерфейс виходить з ладу
На питання: "Як я можу пов'язати скрипт з OpenVPN, щоб він запускався, коли VPN успішно підключений?" Хочу зазначити, що Лекенштейн дав чудову відповідь . Але на той момент, коли була складена його відповідь, не вистачало ясності щодо того, як слід надати аргументи командного рядка openvpn, щоб запустити openvpn на машині ubuntu, тим більше, що він працює однаково після перезавантаження.
Звичайно, можна відкрити openvpn з командного рядка з будь-якими доступними юридичними параметрами. Але на машині Ubuntu, якщо потрібно запустити openvpn з тими ж аргументами командного рядка після перезавантаження, вони повинні розглянути можливість редагування файлу /etc/default/openvpn
. Вивчіть наступні рядки:
# Optional arguments to openvpn's command line
OPTARGS=""
Із сторінки спільноти openvpn man на--script-security
- рівень безпеки сценарію Ця директива пропонує контроль на рівні політики щодо використання зовнішнього зовнішнього середовища OpenVPN програми та сценарії. Значення нижнього рівня більш обмежувальні, вищі значення більш дозволені. Налаштування рівня: 0 - суворо не вимагає виклику зовнішніх програм. 1 - (за замовчуванням) Викликати лише вбудовані виконувані файли, такі як ifconfig, ip, route, або нетш. 2 - Дозволити виклик вбудованих виконуваних файлів та визначених користувачем сценаріїв. 3 - Дозволити передачу паролів до сценаріїв через змінні середовища (потенційно небезпечно). OpenVPN випуски перед v2.3 також підтримували прапор методу, який вказував, як OpenVPN повинен викликати зовнішні команди та сценарії. Це може бути або execve або система. Станом на OpenVPN v2.3 цей прапор більше не приймається. У більшості * nix середовищі, без будь-яких проблем використовувався підхід execve (). Деякі директиви, такі як --up, дозволяють передати параметри до зовнішнього сценарію. У цих випадках переконайтесь, що ім'я сценарію не містить пробілів або конфігураційний аналізатор задихнеться, оскільки не може визначити, де сценарій ім'я закінчується і параметри сценарію починаються.
У поєднанні зі скороченим розділом на --up
- до cmd Запустіть команду cmd після успішного відкриття пристрою TUN / TAP (зміна UID попереднього користувача). cmd складається з шляху до сценарію (або виконуваної програми), який необов'язково слід дотримуватися аргументами. Шлях та аргументи можуть бути одно- або подвійними цитуваннями та / або уникнув за допомогою косої риски, і його слід розділити одним або декількома пробілами.
На моїй машині з openpvn server.conf у моєму /etc/default/openvpn
файлі є такі рядки :
OPTARGS="
--script-security 2
--up /etc/openvpn/nat.sh
"
Між іншим, nat.sh встановлює трансляцію мережевих адрес для маршрутизації приватного мережевого трафіку від openvpn-клієнтів до загальнодоступного Інтернету; що добре для тих, хто не довіряє публічній точці доступу до WIFI.
Крім дозволяє перезапустити , як очікується , після перезавантаження, коли /etc/openvpn/[client or server].conf
і /etc/default/openvpn
файли правильно налаштовані, OpenVPN може бути запущений або зупинений:
sudo service openvpn start
sudo service openvpn stop
Інші корисні варіанти, доступні для, service openvpn
включають cond-restart,force-reload,reload, restart,soft-restart, start, status, stop
.
Оскільки це досить стара тема, я не впевнений, чи все-таки цікавить. Якщо ви все ще хочете використовувати NetworkManager для підключення до VPN, ви можете додати таке просте правило udev:
KERNEL=="vpn0", RUN+="/PATH_TO_THE_SCRIPT/SCRIPT_NAME"
Цей сценарій повинен запускатися після створення VPN.
Я натрапив на відповідь у своєму дослідженні, щоб вирішити цю проблему, і я з'ясував, що найкращим рішенням є (використовуючи сервер openvpn) наступним чином:
Створіть сценарій для виконання:
# 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>
Додайте наступні рядки до конфігурації openvpn (зазвичай /etc/openvpn/server.conf
). У відповіді вище було використано вгору і вниз, які використовуються при запуску сервера (перезавантаження). Директива client-connect (і клієнт-disconnect) використовуються, коли клієнт підключається (відключається).
# nano /etc/openvpn/server.conf
<file:add>
script-security 2
client-connect /etc/openvpn/up.sh
</file>