据说,53 DUP端口的VPN可以突破CMZZ和CHINANET的验证而免费上网,所以研究起OpenVPN,搭建一个特殊的VPN。 

为什么说这个VPN特殊呢,特殊在于是OpenVPN,OpenVPN可以在openvz的VPS上跑,比起PPTP,PPTP只能在xen的架构跑,而大多数VPS是基于OpenVPN的。 

另外,VPN走的是DNS端口,这个的好处就是如果学校有计费系统,或者周围有电信,移动的WIFI热点,多数情况下是可以越过计费系统直接上网的。 

环境声明: 

下文,输入的命令以         标注。 

VPS内核:Linux vps.lolis.info 2.6.18-164.15.1.el5.028stab068.9 #1 SMP Tue Mar 30
18:07:38 MSD 2010 i686 i686 i386 GNU/Linux 

Tun的支持。 

Tun的支持请在VPS面板启用,比如我的是enable tun/tap 

Ssh权限(root) 

启用Tun后,在ssh中输入: 

cat /dev/net/tun 

反馈: 

cat: /dev/net/tun: File descriptor in bad state 则说明安装正常。 

53端口: 

输入: 

service named stop以使53端口不被DNS占用。 

**存在争议的iptables_nat模块 

Black-xstar(下文简称star)文中表示: 

另外如果你需要连上OpenVPN后能访问互联网,还需要iptables_nat模块支持,用这个命令检测:iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o
venet0 -j MASQUERADE
 

如果返回信息为:iptables: Unknown error 4294967295 说明正常,否则同样需要发个ticket让VPS公司帮忙开通。 

但是,我的VPS输入上述命令没有回显,与文中提到的反馈不同,但是照常可以试用。 

请保证有充足的带宽以及内存。 

VPN部署: 

首先登入ssh,在ssh中输入: 

rpm-Uvh http://download.fedora.redhat.com/pub/epel/5/i386/epel-release-5-3.noarch.rpm 

成功后就可以用yum直接安装了。 

以下为shell记录 

[root@vps ~]# yum -y install
openvpn
 

Loaded plugins: fastestmirror 

Loading mirror speeds from cached hostfile 

 * epel: serverbeach1.fedoraproject.org 

 * base: mirror.trouble-free.net 

 * updates: mirror.trouble-free.net 

 * addons: mirror.cisp.com 

 * extras: mirror.atlanticmetro.net 

epel                       
                                                                                 |
3.4 kB     00:00     

ebdb729a3d0909032214d70acf18e2b36ab08a21-primary.sqlite.bz2                                                 
| 2.5 MB     00:00     

Setting up Install Process 

Parsing package install arguments 

Resolving Dependencies 

–> Running transaction check 

—> Package openvpn.i386 0:2.1.1-2.el5 set to be updated 

–> Processing Dependency: liblzo2.so.2 for package: openvpn 

–> Processing Dependency: libpkcs11-helper.so.1 for package: openvpn 

–> Running transaction check 

—> Package lzo.i386 0:2.02-2.el5.1 set to be updated 

—> Package pkcs11-helper.i386 0:1.07-2.el5.1 set to be updated 

–> Finished Dependency Resolution 

Dependencies Resolved 

==================================================================================================================================== 

 Package                            
Arch                      
Version                           
Repository             
    Size 

==================================================================================================================================== 

Installing: 

 openvpn                            
i386                      
2.1.1-2.el5                       
epel                      
371 k 

Installing for dependencies: 

 lzo                                
i386                      
2.02-2.el5.1                      
epel                       
63 k 

 pkcs11-helper                      
i386                      
1.07-2.el5.1                      
epel                       
51 k 

Transaction Summary 

==================================================================================================================================== 

Install      3
Package(s)         

Update       0
Package(s)         

Remove       0
Package(s)         

Total download size: 485 k 

Downloading Packages: 

(1/3):
pkcs11-helper-1.07-2.el5.1.i386.rpm                                                                  
|  51 kB     00:00     

(2/3):
lzo-2.02-2.el5.1.i386.rpm                                                                            
|  63 kB     00:00     

(3/3):
openvpn-2.1.1-2.el5.i386.rpm                                                                         
| 371 kB     00:00     

———————————————————————————————————————————— 

Total                                                                                              
2.1 MB/s | 485 kB     00:00     

warning: rpmts_HdrFromFdno: Header V3 DSA signature: NOKEY, key ID
217521f6 

Importing GPG key 0x217521F6 “Fedora EPEL <epel@fedoraproject.org>”
from /etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL 

Running rpm_check_debug 

Running Transaction Test 

Finished Transaction Test 

Transaction Test Succeeded 

Running Transaction 

  Installing     :
pkcs11-helper                                    
[1/3] 

  Installing     :
lzo                                              
[2/3] 

  Installing     :
openvpn                                          
[3/3] 

Installed: openvpn.i386 0:2.1.1-2.el5 

Dependency Installed: lzo.i386 0:2.02-2.el5.1 pkcs11-helper.i386
0:1.07-2.el5.1 

Complete! 

完毕后,执行: 

locate easy-rsa 

回显: 

locate: can not open `XXXXXXXXX’: No such file or directory 

将XXXXXXXXXX中内容复制,执行: 

Cd  XXXXXXXXXXX 

找出来了原来在这里:/usr/share/openvpn/easy-rsa 大家应该都是一样的。

我们把easy-rsa这个文件夹移出来,用命令:cp -R /usr/share/openvpn/easy-rsa /etc/openvpn/

比如/etc/openvpn/easy-rsa/2.0,则运行:   cd /etc/openvpn/easy-rsa/2.0 

以下为shell记录: 

[root@vps easy-rsa]# cd
/etc/openvpn/easy-rsa/2.0
 

[root@vps 2.0]# vi vars 

然后,我们用vi打开了vars文件,首先输入I  使之成为insert模式 

然后操作方向键,调到文件末尾,按照实际修改 

export KEY_COUNTRY=”CN”  

export KEY_PROVINCE=”GD”  

export KEY_CITY=”GZ”  

export KEY_ORG=”Lolita Ltd.”
 

export
KEY_EMAIL=”loli@lolis.info”
 

修改完毕后,按下esc返回查看模式,按下shift+; 输入:   并在:后输入wq   回车。 

反馈: 

 “vars” 68L, 1664C written 

使设置生效:输入. Vars 

Shell: 

[root@vps 2.0]# . vars 

NOTE: If you run ./clean-all, I will be doing a rm -rf on
/etc/openvpn/easy-rsa/2.0/keys 

首先创建CA证书

./build-ca

接着创建服务器证书: 

./build-key-server server 

一路回车,直到Sign the certificate? [y/n]:   输入y  回车 

1 out of 1 certificate requests certified, commit?  输入y  回车 

建立客户端证书: 

./build-key user 

过程同服务器,也是直到 

Sign the certificate? [y/n]:   输入y  回车 

1 out of 1 certificate requests certified, commit?  输入y  回车 

到此就建立了一个客户端了,如果需要多客户端,请更换user到其他用户名即可。 

然后执行: 

./build-dh 

Shell: 

[root@vps 2.0]# ./build-dh 

Generating DH parameters, 1024 bit long safe prime, generator 2 

This is going to take a long time 

………………………………………………+.+……………………………………………+…………..+………………………………………………………..+……………………………………………………………………………………………………………+……………………………………………………………………………………………………………………………………………………………..+………………………………………………..+…………………………………………………………………………………………………+………………….+………………………………………………..+………….+……………………………………………………………………………………………………………………………..++*++*++* 

[root@vps 2.0]# 

运行winSCP(请自行下载),将/etc/openvpn/2.0/keys中的文件下载到本地。 

输入:  cd
/etc/openvpn/
   返回到OpenVPN文件夹,输入vi server.conf 
创建配置文件。输入i到可写模式,将编写好的配置文件写入。以下是我的配置文件,请按需修改。 

port 53
proto udp
dev tun
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
server 10.8.0.0 255.255.255.0
 

push “redirect-gateway def1”
push “dhcp-option DNS 8.8.8.8”
push
“dhcp-option DNS 8.8.4.4”
client-to-client
keepalive 10 120
comp-lzo

persist-key
persist-tun
verb 3
crl-verify
/etc/openvpn/easy-rsa/2.0/keys/crl.pem

然后保存。以上配置均可在winscp修改。 

返回ssh,接着输入vi /etc/sysctl.conf 

老规矩,找到net.ipv4.ip_forward 将后面的0改成1  保存。 

防火墙配置: 

输入iptables -t nat -A POSTROUTING -s
10.8.0.0/24 -j SNAT –to-source YOUR-IP
 

将your ip改成你服务器的IP即可。 

执行: 

/etc/init.d/iptables save 

/etc/init.d/iptables restart 

/usr/sbin/openvpn –config
/etc/openvpn/server.conf &
 

没有报错,在本地连接一遍,能成功即可(下文介绍如何配置客户端。) 

添加自启动: 

vi /etc/rc.local 

最后加上   /usr/sbin/openvpn
–config /etc/openvpn/server.conf &
 

保存,重启服务器。 

到此服务器端配置完毕。 

客户端配置: 

安装OpenVPN,win安装很简单,不再累述。 

首先回头看看下载回来的KEY文件夹,挑出ca.crt,user.key,user.crt 

找到C:Program
FilesOpenVPNconfig
(如果默认的话) 

把以上3个文件放进去,并创建user.ovpn文件。 

以下是我的配置文件,请按需修改: 

client  

dev tun  

proto udp 

remote “SERVER-IP” 53 

resolv-retry infinite  

nobind  

persist-key  

persist-tun  

ca ca.crt  

cert user.crt  

key user.key  

ns-cert-type server  

comp-lzo  

verb 3 

route-method exe 

route-delay 2 

保存。 

这里不同于xstar的配置,区别是多了后面两行,因为我发现少了这两行win7和vista不能使用。如果xp用户发现有问题,不妨注释掉这两行。 

到此,配置完成。 

欢迎提出意见和建议,共同交流。

哟?不错哎 订阅小米的RSS Feeds 回去慢慢看^_^