国内网络环境不怎么好,为了更好地在互联网中学习和娱乐,弄部梯子也是有必要的,当然市售的有很多,但不折腾下怎么能睡得着觉呢 ^_^

那梯子各式各样,为什么用OpenVPN而不用PPTP或是更简单的SSH呢?SSH是简单但是打开网页多了,它也就力不从心了;OpenVPN比PPTP好伺候,能装在基于OpenVZ虚拟化技术的VPS上,当然装Xen上更好(PPTP只能装在基于Xen的VPS,但大多数VPS因为成本原因是OpenVZ的),而且它穿透性更强,功能更强大,比如能穿透中国移动的cmwap代理实现cmnet的功能。

我这篇讲解在CentOS 5.6上的搭建过程,如有童鞋需要在Debian上的搭建方法,请参考我的另外一篇博文《在Debian下搭建OpenVPN》

为什么会写两篇基于不同系统的教程呢?这里有个小插曲,同事L小姐在MAC下更换授权文件时没有全部更换完,加上本人对tunnelblick不熟,以为是VPN服务端的原因,所以就在两种系统下都进行了搭建,然后调整各种参数……最后的最后L小姐以初次安装时的配置方法去配置授权文件才结束了这次各种折腾。虽然过程有些曲折,不过收获还是蛮多,优化后的速度比之前快了许多。

好了,下面就准备动手折腾吧:

首先得准备个VPS,起步配置很低,128M内存的就OK,要有哪位看客非得用32G独服来搭,那爷您里边请,VIP雅座——美女水果、茶水点心伺候。

一、OpenVPN需要tun和iptables_nat模块支持,所以先检查你的VPS支持不支持。
SSH登陆VPS后输入

cat /dev/net/tun

若返回信息为:cat: /dev/net/tun: File descriptor in bad state 说明tun/tap已经可以使用;
如果返回:cat: /dev/net/tun: No such device 或其他则说明tun/tap没有被正确配置,发TK联系客服申请开通tun/tap。

然后检查iptables_nat模块(如果还没有安装iptables,先安装)

yum install iptables    #如已安装跳过

如果你的VPS是Xen或KVM的请输入:(eth0要根据具体的网卡标识来,可以通过ifconfig查看)

iptables -t nat -A POSTROUTING -s 10.168.0.0/16 -o eth0 -j MASQUERADE

如果是OpenVZ的请输入:(11.22.33.44是你VPS的IP)

iptables -t nat -A POSTROUTING -s 10.168.0.0/16 -j SNAT --to-source 11.22.33.44

然后用

iptables -t nat -L

查看iptables转发状态,如果显示以下类似的结果则说明转发成功:
target             prot opt source                      destination
SNAT              all -- 10.168.0.0/16                anywhere                    to:11.22.33.44

二、tun和iptables_nat模块检测通过后,正式进入安装阶段:
默认情况下CentOS的yum源是没有OpenVPN的(不像Debian很多东西都可以一键apt-get install,这也是我比较喜欢Debian的原因),不过安装EPEL这个东西成功后,yum源里面就有OpenVPN了。
5.x版系统安装EPEL:

rpm -Uvh http://dl.fedoraproject.org/pub/epel/5/i386/epel-release-5-4.noarch.rpm

6.x版系统安装EPEL:

rpm -Uvh http://dl.fedoraproject.org/pub/epel/6/i386/epel-release-6-5.noarch.rpm

有的童鞋可能会说直接去openvpn.net下载安装包手动编译好了,个人认为手动编译听起来是比较cool,不过没有yum方便,像这里OpenVPN需要lzo支持,安装的时候会自动检测系统,把lzo也安装进去,手动的话还需要编译其他没有的组件。

yum -y install openvpn

对了,在所有步骤之前(就是刚登陆进来时),最好先更新升级下系统,这样可以自动分析当前系统的安装环境并根据具体命令网络升级安装所需组件,更便于之后组件的安装。

yum -y update

三、安装好后,先使用easy-rsa生成服务端证书:
默认OpenVPN的easy-rsa文档会在/usr/share/doc/openvpn/examples/easy-rsa/,如果不在的话请先检查是否安装成功然后用locate或find命令查找该文档。然后将该文档下所需的配置文件复制到/etc/openvpn/下面:

cp -r /usr/share/doc/openvpn/examples/easy-rsa/ /etc/openvpn/

根据网友@kuge反映的情况——CentOS 6 系统升级后,如果安装的是OpenVPN2.3版本,执行这一步时OpenVPN2.3版本报错,显示:

cp : cannot stat ' /usr/share/doc/openvpn/examples/easy-rsa/ ' no such file or dictionary

解决办法:(感谢@kuge

wget https://cloud.github.com/downloads/OpenVPN/easy-rsa/easy-rsa-2.2.0_master.tar.gz
tar -zxvf easy-rsa-2.2.0_master.tar.gz
cp -R easy-rsa-2.2.0_master/easy-rsa/ /etc/openvpn/

1、生成CA证书:

cd /etc/openvpn/easy-rsa/2.0
source vars
./clean-all
./build-ca

期间会提示输入一些信息,直接回车默认即可。

2、生成服务器端证书和密钥:(server为服务端名字可以自定义)

./build-key-server server

期间也会提示输入一些信息,直接回车默认,选择[Y/n]的都选Y。

3、生成客户端证书和密钥:(client为客户端名字可以自定义,注意这里的客户端名字不能与上步的服务端名字相同)

./build-key client

期间也会提示输入一些信息,直接回车默认,选择[Y/n]的都选Y。 若要生成多个客户端的证书和密钥,将client改成另外的名字重复操作即可。所有生成的证书和密钥存都放在/etc/openvpn/easy-rsa/2.0/keys/下面。

4、生成Diffie Hellman参数:

./build-dh

四、配置OpenVPN服务器端文件

1、编辑/etc/openvpn/server.conf 文件,如果没有可以创建一个,加入下面的内容:(复制到VPS上时,最好把注释去掉)

local 11.22.33.44    #11.22.33.44为VPS的IP
port 8080    #端口,需要与客户端配置保持一致,并保证与其他软件无共用
proto udp    #使用协议,需要与客户端配置保持一致
dev tun      #也可以选择tap模式
ca /etc/openvpn/easy-rsa/2.0/keys/ca.crt
cert /etc/openvpn/easy-rsa/2.0/keys/server.crt
key /etc/openvpn/easy-rsa/2.0/keys/server.key
dh /etc/openvpn/easy-rsa/2.0/keys/dh1024.pem

ifconfig-pool-persist ipp.txt

server 10.168.1.0 255.255.255.0    #给客户的分配的局域网IP段,注意不要与客户端网段冲突!

push "redirect-gateway"
push "dhcp-option DNS 8.8.8.8"
push "dhcp-option DNS 8.8.4.4"
client-to-client

;duplicate-cn        #若不止一人同时使用该证书,请去掉前面的;

keepalive 20 60
comp-lzo
max-clients 50

persist-key
persist-tun

status openvpn-status.log
log-append openvpn.log

verb 3
mute 20

2、设置IP转发,其实刚检查iptables_nat模块的步骤就是在设置转发IP,再重复一遍:
若Xen或KVM的请输入:(eth0要根据具体的网卡标示来,可以通过ifconfig查看)

iptables -t nat -A POSTROUTING -s 10.168.0.0/16 -o eth0 -j MASQUERADE

若OpenVZ的请输入:(11.22.33.44是你VPS的IP)

iptables -t nat -A POSTROUTING -s 10.168.0.0/16 -j SNAT --to-source 11.22.33.44

3、修改/etc/sysctl.conf的内容为:

net.ipv4.ip_forward = 1
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.default.accept_redirects = 0

重新载入/etc/sysctl.conf使其生效,执行如下命令:

sysctl -p

至此VPS上的服务器端配置就全部完成了。
若想使其配置生效,则需重启OpenVPN服务

service openvpn restart --config /etc/openvpn/server.conf

由于VPS可能会因为各种原因被重启,为了方便,可以使用cron写个小脚本让VPS在启动时自动运行OpenVPN服务并设置iptables_nat转发。
创建/root/vpn.sh 文件,加入下面的内容:(复制到VPS上时,最好把注释去掉)

#!/bin/bash
/sbin/service openvpn start --config /etc/openvpn/server.conf   #CentOS下好像OpenVPN不能开机就自动运行,所以这里设置下,如可以自动运行就去掉这句
/sbin/iptables -t nat -A POSTROUTING -s 10.168.0.0/16 -j SNAT --to-source 11.22.33.44    #实际根据自己VPS来做调整,这只做示例

然后将这一脚本写入cron执行计划

crontab -e

@reboot /bin/bash /root/vpn.sh >/dev/null 2>&1

五、安装配置OpenVPN客户端文件

1、下载安装客户端
Windwos用户推荐去openvpn.net选择合适的版本进行安装,安装中的选项全部按默认即可;Mac用户推荐使用tunnelblick

2、下载之前在VPS上生成的客户端证书及密钥
证书和密钥存都在/etc/openvpn/easy-rsa/2.0/keys/里,可以使用winscp链接到VPS上下载,将ca.crt、client.crt、client.key这三个文件下载到OpenVPN客户端程序的config文件夹里,默认为:C:\Program Files\OpenVPN\config

3、创建客户端配置文件
在C:\Program Files\OpenVPN\config 下面创建一个sunny.ovpn的文件,添加如下内容:

client        #这个client不是自定义名称 不能更改
dev tun       #要与前面server.conf中的配置一致。
proto udp              #要与前面server.conf中的配置一致。
remote 11.22.33.44 8080    #将11.22.33.44替换为你VPS的IP,端口与前面的server.conf中配置一致。
resolv-retry infinite
nobind
persist-key
persist-tun
ca ca.crt              #具体名称以刚下载的为准
cert client.crt              #具体名称以刚下载的为准
key client.key              #具体名称以刚下载的为准
ns-cert-type server
redirect-gateway
keepalive 20 60
#tls-auth ta.key 1
comp-lzo
verb 3
mute 20
route-method exe
route-delay 2

六、运行OpenVPN客户端
运行OpenVPN GUI后,屏幕右下角的系统托盘区,会显示一个由两个红屏电脑组成的图标,右击它,选中菜单中添加的名为sunny的服务器,点击Connect,过一会儿,OpenVPN图标变成绿色时就表示链接成功了。

文章最后给大家推荐个性价比超高的搭梯用VPS
123systems的VPS用来搭梯是个非常不错的选择——稳定、速度也不错 128M的每月有250G的流量可以用 而且更关键的是年付才10刀(192M的每月500G流量 年付15刀)比起市售的各种梯子都划算而且有保障 自用或者与朋友分享都比较不错
去看看吧 :)

目前有33条回应
Comment
Trackback
  • sun 回应于2012/09/20 22:13 回复TA

    此主题出现率好高啊

    • Oo雨天阳光oO 回应于2012/09/20 23:17 回复TA

      @sun: 这个主题Jezzzz他们做得比较用心 而且售后做的非常不错 也许是这些吸引了我们吧
      还有就是我们这个主题群里比较活跃 bloger们经常到群友的博客上灌水、围观 换友链 有时就会一连打开几个博客都是用一样主题的 呵呵

  • Surpet 回应于2012/10/20 14:11 回复TA

    留言时候都是白色的 感觉有点摸不到北

  • lee 回应于2012/11/09 15:56 回复TA

    学习啦,以后不用买vpn啦!

  • Jeremy 回应于2013/02/01 14:37 回复TA

    域名带感!

    • Oo雨天阳光oO 回应于2013/02/08 12:40 回复TA

      欢迎围观 :)

  • Carson 回应于2013/03/12 11:44 回复TA

    不知道怎么回事 我发现在usr/share/doc/openvpn-2.2下面没有easy-ras 只在usr/share/openvpn下找到了 然后我cp到了 /etc/openvpn 下面 source vars 发现只有./clean-all命令没有任何其他脚本
    不知道./build-ca在什么地方 或者中间出什么问题了

    • Oo雨天阳光oO 回应于2013/03/12 12:53 回复TA

      建议先 yum -y update 升级下系统,然后安装EPEL,最后再 yum -y install openvpn 安装

  • maicoo 回应于2013/06/03 20:49 回复TA

    这模板今天撞N多次

    • Oo雨天阳光oO 回应于2013/06/04 09:15 回复TA

      @maicoo: 买的收费主题 又不是限量版 而且现在盗版严重 所以就泛滥了 :sad:

  • 子痕 回应于2013/08/12 19:49 回复TA

    手机可以通过此vpn穿墙而过吗?

    • Oo雨天阳光oO 回应于2013/08/18 23:10 回复TA

      @子痕: 这个在手机上倒没试过 不过市面上有很多搭梯软件既支持PC端又支持移动端 一搜一大把啊

  • ai 回应于2013/09/04 17:57 回复TA

    cp -r /usr/share/doc/openvpn/examples/easy-rsa/ /etc/openvpn/ 报错,cp : cannot stat ' /usr/share/doc/openvpn/examples/easy-rsa/ ' no such file or dictionary
    是因为openvpn后面还要加版本吗,我进sftp看了,有openvpn-2.3.2

  • ai 回应于2013/09/04 18:01 回复TA

    openvpn-2.3.2/下无examples/easy-rsa/ 目录,只有samples,同时也没有easy-rsa目录

    • Oo雨天阳光oO 回应于2013/09/04 21:04 回复TA

      @ai: 兄弟 你搭梯心切 看得不仔细啊 那段代码上面不是已经说了吗——“默认OpenVPN的easy-rsa文档会在/usr/share/doc/openvpn/examples/easy-rsa/,如果不在的话请先检查是否安装成功然后用locate或find命令查找该文档。”

      • ai 回应于2013/09/05 07:44 回复TA

        @Oo雨天阳光oO: easy-rsa目录我是找着了,但是没有2.0目录,也没有vars文件,只能再次安装,但是提示已安装,但是幸好已经解决了,目前运行良好

        • Oo雨天阳光oO 回应于2013/09/05 22:55 回复TA

          @ai: OK 解决了就好 恭喜兄弟搭梯成功! :roll:

  • kuge 回应于2013/10/09 10:35 回复TA

    完美的教程,谢谢!
    另外,centOS6系统升级后,如果安装的是OpenVPN2.3版本,执行文章中"三、安装好后,先使用easy-rsa生成服务端证书“这一步时OpenVPN2.3版本报错,cp : cannot stat ' /usr/share/doc/openvpn/examples/easy-rsa/ ' no such file or dictionary,解决办法:
    下载
    wget https://github.com/downloads/OpenVPN/easy-rsa/easy-rsa-2.2.0_master.tar.gz
    tar -zxvf easy-rsa-2.2.0_master.tar.gz
    cp -R easy-rsa-2.2.0_master/easy-rsa/ /etc/openvpn/
    博主看情况,把解决办法加到文章中吧。

    • Oo雨天阳光oO 回应于2013/10/10 11:45 回复TA

      @kuge: 谢谢兄弟提供解决方案 :roll:
      貌似楼上的兄弟也遇到了一样的问题 我已经将你提供的办法加到文章中了

  • CONEY 回应于2014/09/27 18:12 回复TA

    openVPN用过的么,不过不多。

  • 李阳博客 回应于2014/11/19 10:35 回复TA

    特意在买了个国外的VPS搭个梯子。哈哈

  • 李阳博客 回应于2014/12/22 18:56 回复TA

    已经自己搭建了,哈哈

  • CA 回应于2014/12/28 13:27 回复TA

    启动不了阿
    启动情况
    service openvpn restart --config /etc/openvpn/server.conf
    Shutting down openvpn: [ OK ]
    Starting openvpn: [FAILED]
    配置文件
    [……]

    • Oo雨天阳光oO 回应于2014/12/31 12:02 回复TA

      @CA: 兄弟你的配置文件我已经看过了 为了保护隐私 我已经把它隐去了
      启动不了的话 你看下配置文件中ca cert key dh引用路径下是否有这些文件 另外看你命名是大小写混合的 你看下改成纯小写试试
      另外给客户分配的局域网IP段 不要改成你自己VPS的网段 直接按博文里来就行了 10.168.1.0是局域网啊 文章一开头就让检查iptables_nat模块外网转发内网功能了啊

  • 天气不太好 回应于2014/12/30 23:10 回复TA

    根据网友@kuge反映的情况——CentOS 6 系统升级后,如果安装的是OpenVPN2.3版本,执行这一步时OpenVPN2.3版本报错,显示:

    cp : cannot stat ' /usr/share/doc/openvpn/examples/easy-rsa/ ' no such file or dictionary
    解决办法:(感谢@kuge)

    wget https://github.com/downloads/OpenVPN/easy-rsa/easy-rsa-2.2.0_master.tar.gz
    tar -zxvf easy-rsa-2.2.0_master.tar.gz
    cp -R easy-rsa-2.2.0_master/easy-rsa/ /etc/openvpn/

    上面的wget连接失效。我找了个。
    wget http://ftp.jaist.ac.jp/pub/sourceforge/s/s5/s5752/easy-rsa-2.2.0_master.tar.gz

    • Oo雨天阳光oO 回应于2014/12/31 11:50 回复TA

      @天气不太好: 谢谢兄弟 其实链接没有失效 它会自己专跳至:https://cloud.github.com/downloads/OpenVPN/easy-rsa/easy-rsa-2.2.0_master.tar.gz 不过我已经将博文中的地址换成跳转后的了

  • 浪里个浪 回应于2015/08/12 13:37 回复TA

    成功了哈哈 很棒的教程

  • 寻寻觅觅 回应于2015/09/21 17:53 回复TA

    搭建好了后,链接获取内网ip成功,但是无法访问外网,不知道怎么解决

你好,欢迎光临!