Centos6的vpn客户端安装与不走国内线路的与设置

Posted By: agon,  Published:February 5th, 2012   【Updated:October 13th, 2013】

本文主要是关于Centos6的vpn上网客户端安装设置与国内线路不走vpn的实现。
对于linux新手来说,经常遇到问题向google大婶求助,假如正当你心力憔悴眼睛疼时,忽见一缕答案曙光,满怀感激地去点击那个链接,突然一个链接重置,那只能用

来形容,或者目的链接打不开快照无法用,或者焦急的等待google链接转换,或者……,心里默默地咒骂某人,这个时候只有靠vpn来解除烦恼了。
Centos下设置vpn连接,并实现国内线路不走vpn节省流量,对新手来说并不容易,这方面的介绍也少,折腾了两天,总算成功。

安装vpn图形界面客户端

单击上面板上的连接图标->vpn连接->配置vpn,打开网络连接管理器,这个管理器的名字叫做NetWorkManager,各种上网设置都可以在这里完成,你会发现默认的vpn总是的没办法添加vpn和导入,这是因为你还没有安装”NetWorkManager-openvpn”和”NetWorkManager-pptp”组件呢。

安装步骤:
1、安装第三方软件仓库,因为默认的软件源里没有这些组件,到这里下载centos6最新的epel-release版本(在网页里查找epel-release这个词),然后到下载目录,右键打开终端,输入以下命令:
//(把epel-release*rpm替换为你下载包的名字)

# rpm -Uvh epel-release*rpm

或者鼠标直接双击安装包,来安装。
2、在终端执行下面的语句(注意大小写),是不是看到几个NetWorkManager-开头的组件,

# yum install NetworkManager*

如果没装,NetworkManager的vpn包是看不到的,选择y,全部安装
3、打开vpn配置,就可以看到添加和导入都是黑色的可选项了,可以点添加选择你的vpn上网方式,新建。

也可以用导入方式,如果你和我一样在windows下用openvpn上网,这里可以直接导入你以”.ovpn”结尾或者”.conf”结尾的文件(在),填上你的vpn用户名和密码,然后点应用。好吧,你看到我用的是谁家的vpn了。

我的例子是openvpn,填写pptp的例子见这里

4、联网正常常态下->单击面板网络连接图标->vpn链接,就会看到刚才添加的vpn了,单击它,就开始vpn链接了。第一次安装可能会报错,好象是“no valid(有效的) secret key”。重启或者在终端输入下面的命令:

# service NetworkManager restart

好了现在可以没有打扰的,网上冲浪了。

国内线路不走vpn

购买的vpn都是有流量限制的,而且vpn是全局代理,用vpn访问国内网站速度当然很慢。好在有一个chnroutes项目,可以实现只有国外的线路走vpn,他的详尽使用方法见这里

我用的是centos6具体使用方法如下:
1、下载chnroutes.py
2、在下载目录右键打开终端,输入以下命令,

# python chnroutes.py -p linux

如果运行这个命令,有”ImportError: No module named argparse”错误。解决方法是:
①确认安装过上文提到的epel-release包,添加第三方源
②运行一下命令:

# yum install python-argparse

3、运行完命令候后发现,目录下增加两个文件:ip-down和ip-pre-up,每个文件100多K,如果你生成的文件只有100多字节,说明没有下载下来路由表,重试。ip-pre-up这个文件的大概意思就是查询默认网关,把下载的路由表添加进去。执行以下命令增加执行权限:

# chmod +x ip-pre-up ip-down

执行以下命令,查看路由表信息,发现只有几条信息

# route -n

然后用root身份,在文件目录内执行以下命令

#./ip-pre-up

然后再执行以上route命令,发现路由表有很多条信息,去连接管理器连接vpn,访问国内任何一个测试ip网站,发现已经显示的已经是国内ip了,再连twi×tt×er能正常打开,说明成功。
4、自动执行这个脚本,因为权限问题,centos比较麻烦。执行以下命令,把ip-pre-up复制到/etc/ppp,把ip-down复制为/etc/ppp/ip-down.local.

# cp ip-pre-up /etc/ppp/ip-pre-up
# cp ip-down /etc/ppp/ip-down.local

断开链接或者重启NetworkManager,如果发现已经实现国外ipvpn,那么可以忽略以下步骤。
5、这一点为错误分析,不需要照着执行。我装的centos6没有这么很顺利,因为这个折腾了几天。执行以下命令查看日志最后60条信息,看看日志是都有异常。

# tail -60 /var/log/messages

发现有一条“pppd… Can’t execute /etc/ppp/ip-pre-up: Permission denied”,可是ip-pre-up的权限没问题啊,755或者777都不行,最后发现是SELinux的mode问题,通过”getenforce”查看SELinux模式,发现是enforcing模式,在”/etc/sysconfig/selinux”里把”SELINUX=enforcing“改为”SELINUX=disabled”,使系统变为Permissive模式,然后重启。执行以上日志查看命令发现没有错误报告了,可是连上adsl后执行,并没有发现自动添加路由表。在”/etc/ppp/ip-pre-up”里加上以下代码:

echo ip-pre-up is running >> test.log
echo ip-pre-up is running >> /home/你的用户名/桌面/test.log

如果ip-pre-up脚本执行了,会在本地和你的桌面生成一个test.log文件,里面会echo后面的字。断开网络连接,重新连上网,发现/etc/ppp/下没有生成test.log,而桌面上生成test.log了。说明虽然在Permissive模式下,ip-pre-up可以被执行,但权限还是不够。而ip-pre-up里的一堆route add …命令是需要root权限的。最终放弃折腾ip-pre-up,寻找在别的地方来调用ip-pre-up的办法。
6、终于找到一个地方”/etc/NetworkManager/dispatcher.d/”, NetworkManager每次接口启动和关闭都会执行这个目录下的所有脚本,执行顺序是按照文档名的字母数序,如果脚本执行有错误可以在”/var/log/messages.log”里看到,这个地方执行的脚本权限能够添加路由表,SELinux 在enforcing下也可以执行。新建一个文件,尽量排在此文件下,别的脚本后面执行,我用vpnroutes,在里面添加以下内容:

#!/bin/bash
#export PATH="/bin:/sbin:/usr/sbin:/usr/bin"
#执行添加路由表的脚本
INTERFACE=$1 # The interface which is brought up or down
STATUS=$2 # The new state of the interface

case "$STATUS" in
    'up') # $INTERFACE is up
	exec /etc/ppp/vpnup
	;;
    'down') # $INTERFACE is down
	# Check for active interface and down if no one active
	if [ ! `nm-tool|grep State|cut -f2 -d' '` = "connected" ]; then
		exec /etc/ppp/vpndown
	fi
	;;
esac

把/etc/ppp/下的ip-pre-up改名为和脚本里一样的名字,此处为vpnup,ip-down.local改为vpndown,这样当网络连接的时候自动执行添加路由表的脚本。
7、好了,可以洗洗睡了。

注意事项:

  • 以下命令语句需要root权限,不是root的话命令前加sudo,或者终端输入su -,输入root密码,或者以root身份登录(推荐)。
  • 不要用你搜到的老文章里的链接下载,如chnroutes_ovpn_linux(里面下载路由表的网址已经失效,无法生成路由表),因为这个多好n倍时间,作者2011年11月26日已经更新了脚本,用上文详尽方法的链接。
  • 上面第2点命令不是python chnroutes.py,后面参数一定要带上,因为这个又多好好多时间
  • 域名不能解析的话,把dns设为google的8.8.8.8,8.8.4.4
  • 每月更新一下两个文件
  • 确认所有的脚本权限是root所有,root用户组,其他只读,可执行,其他组不能有读写权限,如设成755权限,可能造成脚本不会执行

参考链接:
有关Python argpase:
http://pkgs.org/centos-6-rhel-6/epel-i386/python-argparse-1.2.1-2.el6.noarch.rpm.html
有关SELinux:
http://www.cyberciti.biz/tips/enable-permissive-mode-for-selinux-troubleshooting-purpose.html
有关ppp:
http://ppp.samba.org/pppd.html#toc13
有关NetworkManager_Dispatcher:
https://wiki.archlinux.org/index.php/NetworkManager#Network_Services_with_NetworkManager_Dispatcher
有关NetworkManager安装与vpn路由表脚本
http://blog.xuming.net/2010/04/openvpn.html
http://gnailuy.com/2011/08/07/%E8%AE%BE%E7%BD%AE%E8%B7%AF%E7%94%B1%E8%A1%A8%E4%BD%BF%E5%9B%BD%E5%86%85ip%E4%B8%8D%E8%B5%B0vpn%E7%BA%BF%E8%B7%AF/
http://www.vhaixi.com/blogs/entry/CentOS6-0-PPTP-VPN

本文暂无回复

添加回复

你的回复