红联Linux门户
Linux帮助

ubuntu vpn自动切换路由

发布时间:2016-06-05 15:41:54来源:linux网站作者:wswang

需要的工作有以下三项:

Ubuntu Network Manager Client (nmcli)
用来建立VPN连线的工具
其实在UBUNTU在桌面上就有VPN连线可以用, 为什么我们还要这么大费周章的用command line来连呢? 主要是因为我们要用script来做, 才能在crontab 排程中呼叫.
pptp script
建立VPN连线的config档案
crontab 排程
每十分钟检查一次ifconfig
看看是否有ppp0,如果没有则视为断线,进行重连


步骤:
[connection]
id=vpn-officiallin
uuid=dff71e8d-e040-4e92-bc86-80c59e160a94
type=vpn
permissions=user:chijung:;
autoconnect=false

[vpn]
service-type=org.freedesktop.NetworkManager.pptp
gateway=your.host.address
user=chijung
password-flags=0
[vpn-secrets]
password=xxxxx

[ipv4]
method=auto


先用Ubuntu 桌面建立目标的VPN连线, 成功连线后, 查看 /etc/NetworkManager/system-connections/ 底下, 就会产生一个和你VPN connection相同名称的config档案(vpn-config), 请注意password-flags & vpn-secrets部份.

到/usr/local/bin/ 目录底下, 建立一个vpn-auto-on.sh 的档案(并给予可执行的属性), 内容如下(以下的script, 其实很简单, 就是去看看ppp0 在不在, 如果不在就呼叫nmcli 直接进行VPN连线.)


#!/bin/sh
VPN=`ifconfig | grep ppp0`
#echo $VPN
if [ -z "$VPN" ] ; then
echo "connect to vpn ..."
sudo nmcli con up id vpn-config
ifconfig
echo `date +%Y%m%d--%T`"==> connect" >> /home/username/vpnlog.log
fi


看到script裡面呼叫nmcli前面的sudo了吗? 这个命令需要root permission才可以, 如果每次都要sudo 然后敲密码, 那不是就破功了吗? 所以照著下面作, 让你的user帐号可以不必每次都敲root password就可以执行nmcli, 修改/etc/sudoers 将内容加入以下的内容

wang(这里改成你的用户名) ALL=NOPASSWD: /usr/bin/nmcli


执行crontab -e 加入排程

SHELL=/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
*/10 * * * * /usr/local/bin/vpn-auto-on.sh


最上面那二行的SHELL & PATH很重要, 因为是环境变数所以一定要记得加入, 最后一行的 */10 代表每十分钟执行一次, 如果想要更动自动执行的频率, 请自行GOOGLE corntab的语法


但是会出现Error: Connection activation failed: no valid VPN secrets 问题

解决措施:
参考这篇文章http://askubuntu.com/questions/198136/error-when-trying-to-connect-to-vpn-on-startup

Solution mentioned there is to open file /etc/NetworkManager/system-connections/ConnectionName and set the

password-flags=0

and add the below lines to the file

[vpn-secrets]
password=YourPassword

Then restart network manager to pick up the change:

sudo restart network-manager

解决该问题。


本文永久更新地址:http://www.linuxdiyf.com/linux/21262.html