OpenVPN成功连接后如何运行脚本?

Oxw*_*ivi 55 scripts vpn openvpn

如何将脚本关联到 OpenVPN,以便它在 VPN 连接成功时运行?

Lek*_*eyn 71

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
Run Code Online (Sandbox Code Playgroud)

OpenVPN 联机帮助页

--script-security 级别 [方法]
              该指令提供对 OpenVPN 使用的策略级控制
              外部程序和脚本。较低级别的值更多
              限制,更高的值更宽容。设置
              等级:

              0 -- 严格禁止调用外部程序。
              1 -- (默认) 只调用内置的可执行文件,如 ifconfig,
              ip、路由或 netsh。
              2 -- 允许调用内置可执行文件和用户定义
              脚本。
              3 -- 允许通过环境将密码传递给脚本
              变量(可能不安全)。
       --up cmd
              成功打开 TUN/TAP 设备后运行的 Shell 命令(预
              --用户 UID 更改)。up 脚本可用于指定
              route 命令,用于路由发往私有的 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::1
ip -6 route add 2001:db8::1:0/112 via 2001:db8::1 dev $dev
Run Code Online (Sandbox Code Playgroud)

请注意,此up脚本以 root 身份运行。如果您没有指定UserGroup设置,OpenVPN 也会像downroot一样运行脚本。


小智 6

由于这是一个相当古老的线程,我不确定是否仍然感兴趣。如果您仍想使用 NetworkManager 连接到 VPN,您可以添加一个简单的 udev 规则,如下所示:

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

这应该在创建 VPN 后运行任何脚本。


Kei*_*lds 6

问题:“如何将脚本与 OpenVPN 关联,以便在 VPN 成功连接时运行?” 我想指出Lekensteyn提供了一个很好的答案。但是,在撰写他的答案时,对于应该如何提供 openvpn 命令行参数以在 ubuntu 机器上启动 openvpn,特别是使其在重新启动后仍能正常工作,尚不清楚。


Ubuntu 上的 Openvpn 命令行参数:

自然地,您可以使用任何可用的合法选项从命令行启动 openvpn。但是,在 Ubuntu 机器上,如果想在重新启动后使用相同的命令行参数启动 openvpn,他们应该考虑编辑文件/etc/default/openvpn. 检查以下几行:

# Optional arguments to openvpn's command line
OPTARGS="" 
Run Code Online (Sandbox Code Playgroud)

社会OpenVPN的man页面--script-security

--脚本安全级别
    该指令提供对 OpenVPN 使用外部的策略级控制 
    程序和脚本。较低的级别值更具限制性,更高的
    值更宽容。等级设置:
0 -- 严格禁止调用外部程序。 
1 -- (默认) 只调用内置的可执行文件,例如 ifconfig, ip, route,
或 netsh。 
2 -- 允许调用内置的可执行文件和用户定义的脚本。 
3 -- 允许通过环境变量将密码传递给脚本
(可能不安全)。

v2.3 之前的 OpenVPN 版本也支持方法标志,指示如何 
OpenVPN 应该调用外部命令和脚本。这可以是 execve
或系统。从 OpenVPN v2.3 开始,不再接受此标志。在大多数 *nix
在环境中使用 execve() 方法没有任何问题。

一些指令(例如 --up)允许将选项传递给外部脚本。
在这些情况下,请确保脚本名称不包含任何空格或 
配置解析器会卡住,因为它无法确定脚本的位置 
名称结束,脚本选项开始。

结合简短的部分 --up

--up cmd
    在成功打开 TUN/TAP 设备后运行命令 cmd(pre--user UID 更改)。
    cmd 由脚本(或可执行程序)的路径组成,可选地跟随
    通过论据。路径和参数可以是单引号或双引号和/或
    使用反斜杠转义,并应由一个或多个空格分隔。

例子:

在我的带有 openpvn server.conf 的机器上,我的/etc/default/openvpn文件中有以下几行:

OPTARGS="
    --script-security 2
    --up /etc/openvpn/nat.sh
" 
Run Code Online (Sandbox Code Playgroud)

顺便提一下,nat.sh 设置了网络地址转换,用于将私有网络流量从 openvpn 客户端路由到公共互联网;当人们不信任公共 WIFI 接入点时,这很有用。


除了允许在重新启动后按预期重新启动之外,当正确配置文件/etc/openvpn/[client or server].conf/etc/default/openvpn文件时,可以通过以下方式启动或停止 openvpn:

sudo service openvpn start
sudo service openvpn stop
Run Code Online (Sandbox Code Playgroud)

其他有用的选项可用于service openvpn包括cond-restart,force-reload,reload, restart,soft-restart, start, status, stop.