Как мне запустить скрипт после успешного подключения OpenVPN?

Как я могу связать скрипт с OpenVPN, чтобы он запускался при успешном подключении VPN?

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 upup /etc/openvpn/up.sh

Из Справочная страница OpenVPN:

--сценарий-уровень безопасности [метод] Эта директива обеспечивает контроль на уровне политики над использованием OpenVPN внешних программ и скриптов.  Значения более низкого уровня являются более ограничительными, более высокие значения являются более разрешающими.  Настройки для уровня: 0 - Строго запрещен вызов внешних программ.              1 -- (по умолчанию) Вызывайте только встроенные исполняемые файлы, такие как ifconfig, ip, route или netsh.              2 - Разрешить вызов встроенных исполняемых файлов и пользовательских скриптов.              3 - Разрешить передачу паролей скриптам через переменные среды (потенциально небезопасно).       --команда командной оболочки up cmd для запуска после успешного открытия устройства TUN /TAP (изменение UID перед пользователем).  Сценарий up полезен для указания команд маршрутизации, которые направляют IP-трафик, предназначенный для частных подсетей, которые существуют на другом конце VPN-соединения, в туннель. Порядок выполнения сценария - up Выполняется после привязки сокета TCP/UDP и открытия TUN/TAP.       --down Выполняется после закрытия 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::1ip -6 route add 2001:db8::1:0/112 via 2001:db8::1 dev $dev

Обратите внимание, что это up скрипт запускается от имени пользователя root. Если вы не указали User и Group настройка, OpenVPN будет запускать скрипты, такие как down как корень тоже.

Поскольку это довольно старая тема, я не уверен, что она все еще представляет интерес. Если вы все еще хотите использовать 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.logD=`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 (и client-disconnect) используются, когда клиент подключается (отключается).

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

Вот конфигурация для OpenVPN, чтобы отправлять почту после успешного подключения:

  1. Создайте каталог

    mkdir /mailOpenVPN
  2. Сделайте его доступным по всему миру

    chmod 777 /mailOpenVPN
  3. vim /etc/openvpn/up.sh

    #! /bin/shpython3 /mailOpenVPN/sendMail.py $X509_0_CN $trusted_ip $ifconfig_pool_remote_ip
  4. Сделай up.sh выполнимый

    chmod +x /etc/openvpn/up.sh
  5. Добавить в /etc/openvpn/server.conf

    script-security 2client-connect /etc/openvpn/up.sh
  6. Перезапустите службу OpenVPN

    service openvpn restart
  7. vim /mailOpenVPN/sendMail.py

    import sysimport smtplibimport datetimesmtp_user = "SENDER MAIL"smtp_pass = "PASS"recipients = "DEST MAIL"smtp_server = "smtp.gmail.com" # This is in my case, because sender is gmailtry:  now = str(datetime.datetime.now())  subject = "New connection to home VPN"  msg = "Hello chief,\n\n"  msg += "New connection detected:\n"  msg += "User: " + str(sys.argv[1]) + "\n"  msg += "Public IP: " + str(sys.argv[2]) + "\n"  msg += "Assigned IP: " + str(sys.argv[3]) + "\n"  msg += "Timestamp: " + str(now) + "\n\n"  msg += "Best regards,\n"  msg += "Your humble Pi"  sender = "OpenVPN Home"  message = "From: OpenVPN Home\nSubject: {0}\n\n{1}".format(subject, msg)  server = smtplib.SMTP_SSL(smtp_server, 465)  server.ehlo()  server.login(smtp_user, smtp_pass)  server.sendmail(sender, recipients, message)  server.close()except:  pass

После выполнения нескольких предложений у меня возникла одна проблема: "--up" и "route-up" выполняются до завершения всей "Последовательности инициализации".

Что касается меня, я должен открывать порты после полной инициализации.. Поэтому я последовал за ним ниже..

#1) Создайте up.sh, который запускает скрипт открытия порта(proxyports.sh ) асинхронно

#2) Создать down.sh который закрывает порты, открытые асинхронно в proxyports.sh

up.sh содержание ...

#!/bin/bash( ( sleep 1 ; ~/proxyports.sh) & echo "Open the ports" )

прокси-порты.довольный Ш...

#!/bin/bashHOME=/home/venkatdesuPID=$(/usr/sbin/lsof -i :1080 | grep LISTEN|awk '{print $2}'|sort|uniq);if [[ ! -z "$PID" ]]; then  echo "SSH Socks Process $PID running with " $(ps "$PID");  kill -9 $PID;  sleep 1;fi;ssh -D 1080 -Nf iamdvr@10.0.0.94 PID=$(/usr/sbin/lsof -i :1080 | grep LISTEN|awk '{print $2}'|sort|uniq);echo "Socks running at $PID"

down.sh содержание ...

#!/bin/bashPID=$(/usr/sbin/lsof -i :1080 | grep LISTEN|awk '{print $2}'|sort|uniq);if [[ ! -z "$PID" ]]; then echo "SSH Socks Process $PID running with " $(ps "$PID"); kill -9 $PID;fi;

В случае с клиентом, я полагаю? Какое программное обеспечение вы используете? OpenVPN или оболочка (например, NetworkManager)?

@Lekensteyn, оболочка network-manger-openvpn.