VPN自动连接


39

我在Gnome上使用Ubuntu 13.04,最近我建立了一个(开放的)VPN。有什么方法可以默认启用它吗?每次启动或什至失去连接时,都必须手动启用VPN。我有没有选择?

Answers:


66

通过网络管理器指示器nm-applet(默认情况下已安装GNOME或Unity网络托盘小程序),可以将NetworkManager配置为在连接网络后自动连接到VPN。

  1. 单击网络托盘小程序,然后单击“编辑连接...”,或运行nm-connection-editor
  2. 选择一个网络连接,然后单击“编辑...”
  3. 选中“使用此连接时自动连接到VPN”,然后在下拉列表中选择所需的VPN。
  4. 救。

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/。去做这个:

  1. 打开一个终端。
  2. sudoedit /etc/NetworkManager/system-connections/<VPN>,其中<VPN>是VPN的配置文件(文件名通常是您分配给VPN的名称)。
  3. 将行更改password-flags=1password-flags=0
  4. 保存并退出。

NetworkManager现在将自己存储VPN密码(man nm-settings有关详细信息,请参阅),并且网络自动连接将再次起作用。


5
在gnome网络管理器中不存在。
Paul Woitaschek

4
打开时,nm-connection-editor您可以在常规选项卡中编辑连接时找到它。
罗德2014年

1
这会导致连接本身无法自动连接。有什么解决办法吗?
塔玛斯·巴塔

@Barta这是NetworkManager中的错误。我为答案添加了解决方法。
文森特·于

8

看一下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


我安装并配置了它,重新启动了计算机,但是它不起作用。
Paul Woitaschek

我在答案中添加了更多信息。
米奇

是否有任何可用的文档vpnautoconnect?他们的网站是一个废弃的SourceForge项目页面,该软件包不提供手册页。听起来很艰难。
塔玛斯·巴塔

我似乎找不到任何东西,但我会继续寻找。
米奇

行动名单已更名为展示在15.04或15.10
克罗尔

2

我建议您查看本文中的脚本:

#!/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

2

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

说明:

  1. 创建一个名为vpn-auto-connector.sh的空白文本文件(我将其保存在主文件夹中。右键单击该文件,然后选择“属性”->“权限”,然后选中“允许以程序方式执行文件”。(您可能必须存储该文件如果您的计算机有多个用户,则也可以更改其他位置和/或更改读取/写入/执行权限。)

  2. 从上面将代码复制到您创建的文件中。替换以下三个变量的值:

    connection =“自动以太网”

    vpn_connection =“我的VPN连接”

    run_interval =“ 60”

    可以通过打开网络管理器找到它们。在我的情况下,connection =“ Auto Ethernet”是我的活动有线连接(未经无线测试),而vpn_connection =“ My VPN connection”是我的VPN连接的名称。run_interval =“ 60”是重复脚本的时间间隔(以秒为单位)。

  3. 打开应用程序->系统工具->首选项->启动应用程序。添加一个合适的名称,例如“ VPN Auto Connector”,然后为该命令选择您之前保存的.sh文件。现在,bash脚本将在启动时运行,并将继续检查VPN连接是否处于活动状态。您可以通过断开VPN连接来尝试它,它应该会再次自动激活。


万分谢意。这个脚本很容易理解。
Evan Hu

0

Vpnautoconnect在Ubuntu 12.04、13.04和13.10中可以正常工作(我认为在13.10中,Network-Manager中的“自动连接”选项已修复,现在可以使用)

因此,如果您在安装或工作时遇到麻烦,或者在Network-Manager的下拉菜单中找不到“ openvpn”选项来创建开放的vpn连接,则可以按照此教程操作,这将为您提供全部步骤,非常清楚且易于应用。

这里看看

让我知道:-)


0

这是一个非常健壮和可靠的脚本,它将:

  • 检查您是否连接到任何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

这确实很有趣,但是会引发以下错误:$ nmcli -version nmcli工具,版本0.9.10.0 $ lsb_release -a没有可用的LSB模块。发行者ID:Ubuntu说明:Ubuntu 15.04版本:15.04代号:vivid
gare

0

我在多台计算机上使用Ubuntu 14.04 LTS。由于这个事实,我有一些特殊的先决条件:

  1. 我不想将密码保存在密码管理器中
  2. 我正在使用VirtualBox来宾,它在网络重新连接时丢失了VPN
  3. 密码对话框在重新连接后会多次打开
  4. 我正在使用备用VPN服务器(故障转移)
  5. 为我的uuid使用配置文件

我正在使用这个非常成熟且非常可靠的脚本:

但是,我可以暂时解决一些有关网络管理器小程序的警告(请参阅本文的“疑难解答”部分)。

vpnautoconnect对我不起作用。


0

@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中运行良好。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.