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

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

我先讲解在Debian 6.0上的搭建过程(Ubuntu下也同样适用),如有童鞋需要在CentOS上的搭建方法,请参考我的另外一篇博文《在CentOS下搭建OpenVPN》
好了,下面就准备动手折腾吧:

首先得准备个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,先安装)

apt-get 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模块检测通过后,正式进入安装阶段:
OpenVPN需要lzo支持,可以OpenVPN与lzo一起安装:

apt-get install openvpn lzop

如果执行安装提示没有可用的安装包,那先更新升级下系统

apt-get update && apt-get dist-upgrade

三、安装好后,先使用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/

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服务

/etc/init.d/openvpn restart

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

#!/bin/bash
/etc/init.d/openvpn start  #Debian下好像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刀)比起市售的各种梯子都划算而且有保障 自用或者与朋友分享都比较不错
去看看吧 :)

目前有16条回应
Comment
Trackback
  • 老男孩 回应于2012/09/17 23:07 回复TA

    技术贴,VPN是红杏出墙的选择。

  • declanvox 回应于2014/07/03 22:26 回复TA

    /etc/init.d/openvpn restart
    [....] Stopping virtual private network daemon:.
    [....] Starting virtual private network daemon: server failed!

    这个是什么意思?

    • Oo雨天阳光oO 回应于2014/07/06 21:02 回复TA

      @declanvox:服务没启动起来……
      具体什么错误,要看下日志才知道。默认位置在/etc/openvpn/openvpn.log,你也可以用

      find /* -name openvpn.log

      来查找下。

  • dreammy 回应于2014/09/04 21:11 回复TA

    我之前也发了个提问,怎么没了,下面的日志是连接成功后出现的

    • Oo雨天阳光oO 回应于2014/09/11 16:20 回复TA

      @dreammy: 可能你提问里含有太多代码 被系统当做垃圾信息屏蔽了吧 这条我也是从垃圾箱里找出来的。。。
      兄弟 你都连接成功了 还有什么问题吗?

  • MaverickChan 回应于2014/10/29 18:48 回复TA

    搬瓦工一样搭建吧。

  • Jone 回应于2014/10/30 18:08 回复TA

    楼主,你现在openvpn还能连得上服务器不?我按你的配置,一直连不上.

  • 中山王二 回应于2014/11/01 23:01 回复TA

    1 client #这个client不是自定义名称 不能更改
    2 dev tun #要与前面server.conf中的配置一致。
    3 proto udp #要与前面server.conf中的配置一致。
    4 remote 11.22.33.44 8080 #将11.22.33.44替换为你VPS的IP,端口与前面的server.conf中配置一致。
    5 resolv-retry infinite
    6 nobind
    7 persist-key
    8 persist-tun
    9 ca linodeca.crt
    10 cert linodeclient.crt
    11 key linodeclient.key
    12 ns-cert-type server
    13 redirect-gateway
    14 keepalive 20 60
    15 #tls-auth ta.key 1
    16 comp-lzo
    17 verb 3
    18 mute 20
    19 route-method exe
    20 route-delay 2
    ===================================
    9,10,11行需要去掉linode,才能成功连接。

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

      @中山王二: 是的兄弟 根据自己具体命名情况来 当时我命名那样了 现在已经把文章里的改过来并注释了

  • 一叶 回应于2014/12/28 17:08 回复TA

    为什么我的没有生成client.key和client.crt....

    • Oo雨天阳光oO 回应于2015/01/02 19:55 回复TA

      @一叶: 兄弟你的留言竟然在垃圾评论里 幸亏我有检查的习惯
      按理说应该不会没生成 重新下载源安装文件 或者看下你是不是把它命名成别的了?

  • 蓝色柠檬 回应于2015/01/31 11:04 回复TA

    - - Server不能改名,会提示如下错误
    Fri Jan 30 22:00:07 2015 Cannot load certificate file /etc/openvpn/easy-rsa/2.0/keys/server.crt: error:02001002:system library:fopen:No such file or directory: error:20074002:BIO routines:FILE_CTRL:system lib: error:140AD002:SSL routines:SSL_CTX_use_certificate_file:system lib

  • 就此路过 回应于2015/03/12 16:16 回复TA

    我的android手机可以连接上,但是完全没有网速是怎么回事,连百度都打不开。搭建在同一vps上的shadowsocks手机用起来却完全没问题。。

    • 路人 回应于2016/03/08 12:23 回复TA

      搭建的没有网是什么原因啊

  • kecheng 回应于2016/04/07 21:18 回复TA

    连接时报错了,怎么回事
    Enter Management Password:
    Thu Apr 07 21:17:50 2016 MANAGEMENT: TCP Socket listening on [AF_INET]127.0.0.1:25340
    Thu Apr 07 21:17:50 2016 Need hold release from management interface, waiting...
    Thu Apr 07 21:17:51 2016 MANAGEMENT: Client connected from [AF_INET]127.0.0.1:25340
    Thu Apr 07 21:17:51 2016 MANAGEMENT: CMD 'state on'
    Thu Apr 07 21:17:51 2016 MANAGEMENT: CMD 'log all on'
    Thu Apr 07 21:17:51 2016 MANAGEMENT: CMD 'hold off'
    Thu Apr 07 21:17:51 2016 MANAGEMENT: CMD 'hold release'
    Thu Apr 07 21:17:51 2016 NOTE: OpenVPN 2.1 requires '--script-security 2' or higher to call user-defined scripts or executables
    Thu Apr 07 21:17:51 2016 MANAGEMENT: Client disconnected
    Thu Apr 07 21:17:51 2016 Cannot load certificate file clinet.crt: error:0906D06C:PEM routines:PEM_read_bio:no start line: error:140AD009:SSL routines:SSL_CTX_use_certificate_file:PEM lib
    Thu Apr 07 21:17:51 2016 Exiting due to fatal error

  • 晓白白 回应于2016/10/05 00:05 回复TA

    电脑端OK 手机端怎么设置求教程

你好,欢迎光临!