Як запустити сценарій після успішного підключення OpenVPN?


50

Як я можу пов’язати скрипт з OpenVPN, щоб він запускався, коли VPN успішно підключено?


Що стосується клієнта, я здогадуюсь? Яке програмне забезпечення ви використовуєте? OpenVPN або обгортка (наприклад, NetworkManager)?
Лекенштейн

@Lekensteyn, обгортка network-manger-openvpn.
Oxwivi

Відповіді:


62

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, додайте свої поточні відомості про конфігурацію: тип з'єднання (наприклад, сертифікати X509), порт шлюзу, компресія LZO, сила TCP, використання крана, шифру, HMAC і TLS. Згадайте і свої IP-налаштування, якщо вони не є автоматичними. Для своєї конфіденційності залиште фактичні адреси.
Лекенштейн

Гаразд, добре, я вирішив використовувати OpenVPN безпосередньо (і так, у мене є файл .conf), але він автоматично відновиться, якщо втратиться з'єднання? І як змусити його автоматично підключатися, коли є інтернет? І нарешті, я не зрозумів, куди мені додати рядки, які ви згадали у відповіді.
Oxwivi

Я розширив відповідь openvpnбезпосередньо використовувати . Під час налаштування сервера я помітив, що OpenVPN спробує знову підключитися, коли сервер вийшов з ладу. Не впевнений, чи OpenVPN продовжує намагатися, коли ваш мережевий інтерфейс виходить з ладу
Лекенштейн

Моя проблема не в тому, коли мережевий інтерфейс виходить з ладу - він намагається знову підключитися, коли втрачено і відновиться з’єднання з Інтернетом. Я просто хочу підключитися до VPN, коли я отримую Інтернет-з'єднання.
Oxwivi

О, і чи застосовується сценарій до всіх VPN-з'єднань? І будь ласка, позначте @Oxwivi, відповідаючи, я не отримаю сповіщення інакше.
Оксвіві

5

На питання: "Як я можу пов'язати скрипт з OpenVPN, щоб він запускався, коли VPN успішно підключений?" Хочу зазначити, що Лекенштейн дав чудову відповідь . Але на той момент, коли була складена його відповідь, не вистачало ясності щодо того, як слід надати аргументи командного рядка openvpn, щоб запустити openvpn на машині ubuntu, тим більше, що він працює однаково після перезавантаження.


Аргументи командного рядка 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.


3

Оскільки це досить стара тема, я не впевнений, чи все-таки цікавить. Якщо ви все ще хочете використовувати NetworkManager для підключення до VPN, ви можете додати таке просте правило udev:

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

Цей сценарій повинен запускатися після створення VPN.


1

Я натрапив на відповідь у своєму дослідженні, щоб вирішити цю проблему, і я з'ясував, що найкращим рішенням є (використовуючи сервер 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>

Як би ви включили ім'я конфігурації клієнта у файл журналу?
callisto
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.