为什么用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: File descriptor in bad state 说明tun/tap已经可以使用;
如果返回:cat: /dev/net/tun: No such device 或其他则说明tun/tap没有被正确配置,发TK联系客服申请开通tun/tap。
然后检查iptables_nat模块(如果还没有安装iptables,先安装)
1 |
apt-get install iptables #如已安装跳过 |
如果你的VPS是Xen或KVM的请输入:(eth0要根据具体的网卡标识来,可以通过ifconfig查看)
1 |
iptables -t nat -A POSTROUTING -s 10.168.0.0/16 -o eth0 -j MASQUERADE |
如果是OpenVZ的请输入:(11.22.33.44是你VPS的IP)
1 |
iptables -t nat -A POSTROUTING -s 10.168.0.0/16 -j SNAT --to-source 11.22.33.44 |
然后用
查看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一起安装:
1 |
apt-get install openvpn lzop |
如果执行安装提示没有可用的安装包,那先更新升级下系统
1 |
apt-get update && apt-get dist-upgrade |
三、安装好后,先使用easy-rsa生成服务端证书:
默认OpenVPN的easy-rsa文档会在/usr/share/doc/openvpn/examples/easy-rsa/,如果不在的话请先检查是否安装成功然后用locate或find命令查找该文档。然后将该文档下所需的配置文件复制到/etc/openvpn/下面:
1 |
cp -r /usr/share/doc/openvpn/examples/easy-rsa/ /etc/openvpn/ |
1、生成CA证书:
1 |
cd /etc/openvpn/easy-rsa/2.0 |
期间会提示输入一些信息,直接回车默认即可。
2、生成服务器端证书和密钥:(server为服务端名字可以自定义)
1 |
./build-key-server server |
期间也会提示输入一些信息,直接回车默认,选择[Y/n]的都选Y。
3、生成客户端证书和密钥:(client为客户端名字可以自定义,注意这里的客户端名字不能与上步的服务端名字相同)
期间也会提示输入一些信息,直接回车默认,选择[Y/n]的都选Y。 若要生成多个客户端的证书和密钥,将client改成另外的名字重复操作即可。所有生成的证书和密钥存都放在/etc/openvpn/easy-rsa/2.0/keys/下面。
4、生成Diffie Hellman参数:
四、配置OpenVPN服务器端文件
1、编辑/etc/openvpn/server.conf 文件,如果没有可以创建一个,加入下面的内容:(复制到VPS上时,最好把注释去掉)
1 |
local 11.22.33.44 #11.22.33.44为VPS的IP |
2 |
port 8080 #端口,需要与客户端配置保持一致,并保证与其他软件无共用 |
3 |
proto udp #使用协议,需要与客户端配置保持一致 |
5 |
ca /etc/openvpn/easy-rsa/2.0/keys/ca.crt |
6 |
cert /etc/openvpn/easy-rsa/2.0/keys/server.crt |
7 |
key /etc/openvpn/easy-rsa/2.0/keys/server.key |
8 |
dh /etc/openvpn/easy-rsa/2.0/keys/dh1024.pem |
10 |
ifconfig-pool-persist ipp.txt |
12 |
server 10.168.1.0 255.255.255.0 #给客户的分配的局域网IP段,注意不要与客户端网段冲突! |
14 |
push "redirect-gateway" |
15 |
push "dhcp-option DNS 8.8.8.8" |
16 |
push "dhcp-option DNS 8.8.4.4" |
19 |
;duplicate-cn #若不止一人同时使用该证书,请去掉前面的; |
28 |
status openvpn-status.log |
29 |
log-append openvpn.log |
2、设置IP转发,其实刚检查iptables_nat模块的步骤就是在设置转发IP,再重复一遍:
若Xen或KVM的请输入:(eth0要根据具体的网卡标示来,可以通过ifconfig查看)
1 |
iptables -t nat -A POSTROUTING -s 10.168.0.0/16 -o eth0 -j MASQUERADE |
若OpenVZ的请输入:(11.22.33.44是你VPS的IP)
1 |
iptables -t nat -A POSTROUTING -s 10.168.0.0/16 -j SNAT --to-source 11.22.33.44 |
3、修改/etc/sysctl.conf的内容为:
1 |
net.ipv4.ip_forward = 1 |
2 |
net.ipv4.conf.all.send_redirects = 0 |
3 |
net.ipv4.conf.default.send_redirects = 0 |
4 |
net.ipv4.conf.all.accept_redirects = 0 |
5 |
net.ipv4.conf.default.accept_redirects = 0 |
重新载入/etc/sysctl.conf使其生效,执行如下命令:
至此VPS上的服务器端配置就全部完成了。
若想使其配置生效,则需重启OpenVPN服务
1 |
/etc/init.d/openvpn restart |
由于VPS可能会因为各种原因被重启,为了方便可以使用cron写个小脚本让VPS在启动时自动运行OpenVPN服务并设置iptables_nat转发。
创建/root/vpn.sh 文件,加入下面的内容:(复制到VPS上时,最好把注释去掉)
2 |
/etc/init.d/openvpn start #Debian下好像OpenVPN不用设置就可以开机自动运行,如可以自动运行就去掉这句 |
3 |
/sbin/iptables -t nat -A POSTROUTING -s 10.168.0.0/16 -j SNAT --to-source 11.22.33.44 #实际根据自己VPS来做调整,这只做示例 |
然后将这一脚本写入cron执行计划
3 |
@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的文件,添加如下内容:
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中配置一致。 |
10 |
cert client.crt #具体名称以刚下载的为准 |
11 |
key client.key #具体名称以刚下载的为准 |
六、运行OpenVPN客户端
运行OpenVPN GUI后,屏幕右下角的系统托盘区,会显示一个由两个红屏电脑组成的图标,右击它,选中菜单中添加的名为sunny的服务器,点击Connect,过一会儿,OpenVPN图标变成绿色时就表示链接成功了。