Answers:
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
--script-security level [方法] 该指令提供对OpenVPN使用情况的策略级控制 外部程序和脚本。级别越低越好 限制性的,较高的值更宽松。的设定 水平: 0-完全不调用外部程序。 1-(默认)仅调用内置可执行文件,例如ifconfig, ip,路由或netsh。 2-允许调用内置可执行文件和用户定义的 脚本。 3-允许将密码通过环境传递到脚本 变量(可能不安全)。 --up cmd 成功打开TUN / TAP设备后运行Shell命令 --user UID更改)。up脚本对于指定 用于路由发往专用IP流量的route命令 存在于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
请注意,此up
脚本以root身份运行。如果未指定User
和Group
设置,OpenVPN也将以down
root用户身份运行脚本。
openvpn
直接使用。设置服务器时,我注意到OpenVPN将在服务器关闭时尝试重新连接。不确定网络接口出现故障时OpenVPN是否继续尝试。
问一个问题:“如何将脚本与OpenVPN关联,以便在成功连接VPN后运行脚本?” 我想指出,莱肯斯坦提供了一个很好的答案。但是,在撰写他的答案时,它在应如何提供openvpn命令行参数以在ubuntu机器上启动openvpn方面尚不清楚,尤其是在重启后其工作方式相同。
自然,可以使用任何可用的法律选项从命令行启动openvpn。但是,在Ubuntu机器上,如果要在重启后使用相同的命令行参数启动openvpn,他们应该考虑编辑文件/etc/default/openvpn
。检查以下几行:
# Optional arguments to openvpn's command line
OPTARGS=""
从社区openvpn手册页上--script-security
-脚本安全级别 该指令提供对OpenVPN外部使用的策略级别控制 程序和脚本。较低的值越严格,越高 值更宽松。级别设置: 0-完全不调用外部程序。 1-(默认)仅调用内置可执行文件,例如ifconfig,ip,route, 或netsh。 2-允许调用内置的可执行文件和用户定义的脚本。 3-允许通过环境变量将密码传递给脚本 (可能不安全)。 v2.3之前的OpenVPN版本还支持方法标志,该标志指示 OpenVPN应该调用外部命令和脚本。这可以是执行 或系统。从OpenVPN v2.3开始,此标志不再被接受。在大多数* nix中 使用execve()方法的环境没有任何问题。 某些指令(例如--up)允许将选项传递到外部脚本。 在这些情况下,请确保脚本名称不包含任何空格或 配置解析器会阻塞,因为它无法确定脚本的位置 名称结束并且脚本选项开始。
结合有关的缩写部分 --up
--up cmd 成功打开TUN / TAP设备(更改--UID之前)后,运行cmd命令。 cmd由脚本(或可执行程序)的路径组成,可以选择遵循 通过争论。路径和参数可以被单引号或双引号和/或 使用反斜杠转义,并且应以一个或多个空格分隔。
在带有openpvn server.conf的计算机上,/etc/default/openvpn
文件中包含以下几行:
OPTARGS="
--script-security 2
--up /etc/openvpn/nat.sh
"
顺便说一句,nat.sh设置了网络地址转换,以将专用网络流量从openvpn客户端路由到公共Internet。当不信任公共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
。
我在研究中偶然发现了解决该问题的答案,发现最好的解决方案是(使用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>