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

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

50
задан 6 March 2011 в 12:22

6 ответов

Я наткнулся на ответ в своем исследовании для решения этой проблемы, и я узнал, что лучшее решение (использующий 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). В ответе выше его использовался вверх и вниз, которые используются, когда сервер запускается (перезапускает). Направляющее клиентское подключение (и клиентское разъединение) используется, когда клиент соединяется (разъединяется).

# nano /etc/openvpn/server.conf
<file:add>
script-security 2
client-connect /etc/openvpn/up.sh
</file>
0
ответ дан 6 March 2011 в 12:22

Поскольку это довольно старая тема, я не уверен, что она все еще интересна. Если вы все еще хотите использовать NetworkManager для подключения к VPN, вы можете добавить простое правило udev, например:

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

. Этот сценарий должен запускаться после создания VPN. [ 113]

0
ответ дан 6 March 2011 в 12:22

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 :

--script-security level [method]
              This  directive offers policy-level control over OpenVPN’s usage
              of external programs and scripts.  Lower level values  are  more
              restrictive,  higher  values  are more permissive.  Settings for
              level:

              0 -- Strictly no calling of external programs.
              1 -- (Default) Only call built-in executables such as  ifconfig,
              ip, route, or netsh.
              2  --  Allow  calling  of  built-in executables and user-defined
              scripts.
              3 -- Allow passwords to be passed to scripts  via  environmental
              variables (potentially unsafe).
       --up cmd
              Shell  command  to run after successful TUN/TAP device open (pre
              --user UID change).  The up  script  is  useful  for  specifying
              route  commands  which  route  IP  traffic  destined for private
              subnets which exist at the other end of the VPN connection  into
              the tunnel.
Script Order of Execution
       --up   Executed after TCP/UDP socket bind and TUN/TAP open.
       --down Executed after TCP/UDP and TUN/TAP close.
[ 1117] Есть еще события для выполнения скрипта, их можно найти на странице руководства .

Создайте /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. Если вы не указали параметр User и Group, OpenVPN будет запускать такие сценарии, как down, как root.

0
ответ дан 6 March 2011 в 12:22

К вопросу: "Как я могу связать сценарий к OpenVPN так, чтобы он работал, когда VPN соединена успешно?" Я хочу указать, что Lekensteyn предоставил превосходный ответ. Но, в то время, когда его ответ был составлен, он испытал недостаток в небольшой ясности в том, как openvpn параметры командной строки должны быть обеспечены для запуска openvpn на машине человечности, особенно так, чтобы он работал то же после перезагрузок.


Параметры командной строки Openvpn на Ubuntu:

Естественно, можно запустить openvpn с командной строки с любыми avalable легальными опциями. Но, на машине Ubuntu, если Вы хотите запустить openvpn с тех же параметров командной строки после перезагрузки, они должны рассмотреть редактирование файла /etc/default/openvpn. Исследуйте следующие строки:

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

От сообщества openvpn страница справочника на --script-security

--script-security level
    This directive offers policy-level control over OpenVPN's usage of external 
    programs and scripts. Lower level values are more restrictive, higher
    values are more permissive. Settings for level:
0 -- Strictly no calling of external programs. 
1 -- (Default) Only call built-in executables such as ifconfig, ip, route,
or netsh. 
2 -- Allow calling of built-in executables and user-defined scripts. 
3 -- Allow passwords to be passed to scripts via environmental variables
(potentially unsafe).

OpenVPN releases before v2.3 also supported a method flag which indicated how 
OpenVPN should call external commands and scripts. This could be either execve
or system. As of OpenVPN v2.3, this flag is no longer accepted. In most *nix 
environments the execve() approach has been used without any issues.

Some directives such as --up allow options to be passed to the external script.
In these cases make sure the script name does not contain any spaces or the 
configuration parser will choke because it can't determine where the script 
name ends and script options start.

Объединенный с сокращенным разделом по --up

--up cmd
    Run command cmd after successful TUN/TAP device open (pre --user UID change).
    cmd consists of a path to script (or executable program), optionally followed
    by arguments. The path and arguments may be single- or double-quoted and/or 
    escaped using a backslash, and should be separated by one or more spaces.

Пример:

На моей машине с openpvn server.conf, у меня есть следующие строки в моем /etc/default/openvpn файл:

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

Кстати, nat.sh настраивает преобразование сетевых адресов для маршрутизации трафика частной сети от openvpn клиентов к общедоступному Интернету; который хорош для того, когда каждый не доверяет общедоступной точке доступа WI-FI.


Кроме разрешения перезапустить как ожидалось после перезагрузки, когда /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.

5
ответ дан 6 March 2011 в 12:22

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

  1. Создать каталог

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

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

    #! /бин/ш
    python3 /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 2
    клиент-подключение /etc/openvpn/up.sh
    
  6. Перезапустить службу OpenVPN

    Перезапустить службу openvpn
    
  7. vim /mailOpenVPN/sendMail.py

    импорт системы
    импорт smtplib
    импорт даты и времени
    
    smtp_user = "ПОЧТА ОТПРАВИТЕЛЯ"
    smtp_pass = "ПРОПУСТИТЬ"
    получатели = "ПОЧТА НАЗНАЧЕНИЯ"
    smtp_server = "smtp.gmail.com" # Это в моем случае, потому что отправителем является gmail
    пытаться:
    сейчас = ул(datetime.datetime.now())
    subject = "Новое подключение к домашнему VPN"
    msg = "Здравствуйте, шеф,\n\n"
    msg += "Обнаружено новое соединение:\n"
    msg += "Пользователь: " + str(sys.argv[1]) + "\n"
    msg += "Общедоступный IP-адрес: " + str(sys.argv[2]) + "\n"
    msg += "Назначенный IP: " + str(sys.argv[3]) + "\n"
    msg += "Временная метка: " + str(сейчас) + "\n\n"
    msg += "С уважением,\n"
    msg += "Ваш скромный Пи"
    
    отправитель = "Домашняя страница OpenVPN"
    message = "От: Главная страница OpenVPN\nТема: {0}\n\n{1}".format(тема, сообщение)
    
    сервер = smtplib.SMTP_SSL(smtp_server, 465)
    сервер.elo()
    server.login(smtp_user, smtp_pass)
    server.sendmail(отправитель, получатели, сообщение)
    сервер.закрыть()
    Кроме:
    проходят
    
1
ответ дан 7 April 2020 в 20:40

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

Мне приходится открывать порты после полной инициализации. , Итак, я последовал ниже..

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

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

up.sh content ...

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

proxyports.sh content ...

#!/bin/bash
HOME=/home/venkatdesu
PID=$(/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 content ...

#!/bin/bash
PID=$(/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;
0
ответ дан 11 October 2020 в 08:14

Другие вопросы по тегам:

Похожие вопросы: