Answers:
通过网络管理器指示器nm-applet(默认情况下已安装GNOME或Unity网络托盘小程序),可以将NetworkManager配置为在连接网络后自动连接到VPN。
nm-connection-editor
。启用此功能后,NetworkManager中将存在一个错误,该错误可能会破坏“自动连接到此网络”功能。(编辑:此错误现已在Ubuntu 16.04中标记为“已修复”)。如果NetworkManager尝试自动连接并失败,您将在中看到类似以下内容的行/var/log/syslog
:
<error> [1401130450.367538] [nm-vpn-connection.c:1374] get_secrets_cb(): Failed to request VPN secrets #2: (6) No agents were available for this request.
看来NetworkManager无法从获得用户的VPN密码gnome-keyring-daemon
。一种解决方法是让NetworkManager以纯文本格式将密码存储在中的配置文件中/etc/NetworkManager/system-connections/
。去做这个:
sudoedit /etc/NetworkManager/system-connections/<VPN>
,其中<VPN>
是VPN的配置文件(文件名通常是您分配给VPN的名称)。password-flags=1
为password-flags=0
NetworkManager现在将自己存储VPN密码(man nm-settings
有关详细信息,请参阅),并且网络自动连接将再次起作用。
nm-connection-editor
您可以在常规选项卡中编辑连接时找到它。
看一下vpnautoconnect。
vpnautoconnect是一个守护程序,可让您自动(也可以在启动时)重新连接与网络管理器的vpn创建。它可以非常快速地重新连接并监视带宽,它可与pptp和openvpn连接一起使用。
有关更多信息和下载,请访问网站。
也尝试一下:
使用中的AUTOSTART功能 /etc/default/openvpn
要么
找出您的VPN连接的UUID。
nmcli con list | grep -i vpn
UUID是第二列,包含字母,数字和破折号。
在终端中启动连接。只需按键盘上的Ctrl+ Alt+ T打开终端。打开时,运行以下命令:
nmcli con up uuid <put you UUID here>
将此设置为在启动时运行。
转到Dash,键入并选择“启动应用程序”,单击“添加”,然后添加上面的nmcli命令(带有UUID)。点击“添加”。在名称中,键入要使用的名称,然后在Command中将整个nmcli行放在上面。再次单击“添加”。现在,重新启动并尝试。
资料来源:SourceForge
vpnautoconnect
?他们的网站是一个废弃的SourceForge项目页面,该软件包不提供手册页。听起来很艰难。
我建议您查看本文中的脚本:
#!/bin/bash
# YourVPN here is the name of desired vpn connection to monitor
# edit this line:
##################
VPNNAME=YourVPNUUID
# enter desired time between checks here (in seconds)
SLEEPTIME=15
##################
nice=0
for (( ; ; )); do
# creating infinite loop
tested=$(nmcli con status uuid $VPNNAME | grep -c UUID)
#possible results:
# 0 - no connection - need to start
# 1 - working connection, continue.
case $tested in
"0")
echo "Not connected - starting"
#increase nice counter
nice=$[nice+1]
#if "nice start" fails for 3 times
if [ $nice -ge 3 ];
then
#TRY to knock hard way, resetting the network-manager (sometimes it happens in my kubuntu 12.04).
echo "HARD RESTART!"
nmcli nm enable false
nmcli nm enable true
sleep 5
nmcli con up uuid $VPNNAME
nice=0
else
#not yet 3 falures - try starting normal way
echo "trying to enable."
nmcli con up uuid $VPNNAME
fi
;;
"1")
echo "VPN seems to work"
;;
esac
sleep $SLEEPTIME
done
要找出YourVPNUUID
$ VPNNAME 的值,只需运行以下命令;
nmcli con list | grep -i vpn
vpnautoconnect在12.04 LTS中对我不起作用,而且我似乎并不是唯一的一个。
我对其进行了一些研究,并结合了一些现有代码来制作我的第一个bash脚本。它检查给定的VPN连接是否处于活动状态,否则将进行连接。如果已连接,它将在给定的时间(例如1分钟)内休眠,并无限期重复该过程。
#! /bin/bash
while true
do
connection="Auto Ethernet"
vpn_connection="My VPN connection"
run_interval="60"
active_connection=$(nmcli dev status | grep "${connection}")
active_vpn=$(nmcli dev status | grep "${vpn_connection}")
if [ "${active_connection}" -a ! "${active_vpn}" ];
then
nmcli con up id "${vpn_connection}"
fi
sleep $run_interval
done
说明:
创建一个名为vpn-auto-connector.sh的空白文本文件(我将其保存在主文件夹中。右键单击该文件,然后选择“属性”->“权限”,然后选中“允许以程序方式执行文件”。(您可能必须存储该文件如果您的计算机有多个用户,则也可以更改其他位置和/或更改读取/写入/执行权限。)
从上面将代码复制到您创建的文件中。替换以下三个变量的值:
connection =“自动以太网”
vpn_connection =“我的VPN连接”
run_interval =“ 60”
可以通过打开网络管理器找到它们。在我的情况下,connection =“ Auto Ethernet”是我的活动有线连接(未经无线测试),而vpn_connection =“ My VPN connection”是我的VPN连接的名称。run_interval =“ 60”是重复脚本的时间间隔(以秒为单位)。
打开应用程序->系统工具->首选项->启动应用程序。添加一个合适的名称,例如“ VPN Auto Connector”,然后为该命令选择您之前保存的.sh文件。现在,bash脚本将在启动时运行,并将继续检查VPN连接是否处于活动状态。您可以通过断开VPN连接来尝试它,它应该会再次自动激活。
这是一个非常健壮和可靠的脚本,它将:
如果您经常连接到不同的VPN,这将特别有用,因为您不必指定单个VPN连接即可重新连接。
#!/bin/bash
nmcli --mode multiline --fields uuid,vpn connection status | grep -qc "^VPN:.*yes" 1>/dev/null 2>&1
if [ $? -ne 0 ]; then
last_vpn_uuid=`nmcli --mode tabular --fields uuid,type,timestamp connection list | grep -E "\s+vpn\s+" | sort -k3 -nr | head -n1 | awk '{ print $1 }'`
nmcli connection up uuid "$last_vpn_uuid"
fi
我在多台计算机上使用Ubuntu 14.04 LTS。由于这个事实,我有一些特殊的先决条件:
我正在使用这个非常成熟且非常可靠的脚本:
但是,我可以暂时解决一些有关网络管理器小程序的警告(请参阅本文的“疑难解答”部分)。
vpnautoconnect对我不起作用。
@vincentYo的回答看起来直截了当,但是我无法完成,所以我做了如下操作。
第一步:创建一个shell脚本并添加vpn命令
vim auto_vpn.sh
#!/bin/sh
vpnc --enable-1des
第二步:打开一个sudoer文件,并告诉内核不要询问该文件的密码。
sudo vim / etc / sudoers
此文件中的大多数内容都会被注释,只需如下添加
用户名ALL =(root)NOPASSWD:your_shell_script.sh
例:
sharath ALL =(root)NOPASSWD:/home/sharath/workspace/work/src/auto_vpn.sh
第三步:设置一个cron作业,它将触发此shell脚本,下面的cron作业将每分钟运行一次(因为我的互联网一直处于打开和关闭状态,所以每分钟)
* * * * * sudo /home/sharath/workspace/work/src/auto_vpn.sh
我从很多天开始使用它,在ubuntu 16.04 LTS中运行良好。