Ubuntu 9.10 Server OpenVPN的配置

SSH配置完当然那就要上VPN啦;D话说配置刚开始时候客服给我的是台CentOS的,出于对CentOS部分命令的不熟悉(现在回过头来想想其实都是大同小异的)再加上对Ubuntu的喜爱,我还是麻烦他们帮我改成了Ubuntu Server的.
9.10的,1G的内存;硬盘貌似有点小,但是跑个VPN应该是没问题的.


 

预备问题:
在VPS内安装OpenVPN,或遇到两大问题:
1) OpenVPN所调用的/dev/net/tun设备无法启动,即VPS内没有加载tun内核模块
2)OpenVPN需要进行NAT地址转换,但VPS内的iptables没有加载iptables_nat模块
这 两个问题是因为VPS所在的宿主服务器没有加载需要的内核模块和配置,导致OpenVPN依存的设备和模块不能调用.由于VPS是有自身安全保护的,因此 VPS的用户自己无法进行配置操作需要联系VPS服务商,请服务商的系统管理员登录到宿主节点,在宿主节点上按照下列流程执行配置,解决这两个问题后,在 VPS内运行OpenVPN就畅通无阻了!

#lsmod | grep tun
执行下去没反应
再试:
#modprobe tun
还是没反应,给客服发Ticket,客服回复“默认开启”(客服的回复还是很快的^_^),我想开启就开启吧,继续.
下面的没有特殊说明均在Server上执行

1.安装OpenVPN
先查看一下有没有安装
#apt-cache policy openvpn
若没有安装,执行下面的命令
#apt-get install openvpn
我的版本是OpenVPN 2.1_rc19.

2.将/usr/share/doc/openvpn/examples复制到/etc/openvpn
#cp -r /usr/share/doc/openvpn/examples /etc/openvpn

3. 将/etc/openvpn/examples/easy-rsa/2.0/vars里的下面几项修改成你自己的资料,可保持默认
export KEY_COUNTRY="US"
export KEY_PROVINCE="CA"
export KEY_CITY="SanFrancisco"
export KEY_ORG="Fort-Funston"
export KEY_EMAIL="[email protected]"

4.载入vars使其生效,生成ca.crt,ca,key
# . ./vars或者#source vars
# ./clean-all
# ./build-ca
途中会让你确认信息,一路回车,全部选yes就可以了.执行完毕后在examples/easy-rsa/2.0/keys/下会生成ca.crt和ca.key.

5. 生成服务器证书
# ./build-key-server server
server是指服务器的名字,你可以改成你想要的名字,完成后在examples/easy-rsa/2.0/keys/生成server.crt、server.csr和server.key.

6. 生成客户端的证书.
# ./build-key client
client指客户端的名字,你可以改成你想要的名字,当你要为多个用户配置的时候,就要修改这里的client名称了.完成后在examples/easy-rsa/2.0/keys/生成client.crt,client.csr和client.key.

7. 生成dh**.pem
# ./build-dh
在examples/easy-rsa/2.0/keys/会生成dh1024.pem.
P.S:如果你把vars里的export KEY_SIZE=1024成2048, 就会生成dh2048.pem,一般默认即可

*今后若要添加客户端,则需重复. ./vars及6、7两步.
服务器端的/etc/openvpn目录下需要ca.crt+ca.key+server.crt+server.key+dh1024.pem
客户端需要的文件:ca.crt+client.crt+client.key+client.conf即第6步生成的client.crt,client.key+第4步生成的ca.crt+一个客户端配置文件(稍后说明)

8.配置server.conf
#cp /etc/openvpn/examples/sample-config-files/server.conf.gz /etc/openvpn
#gzip -d server.conf.gz
vi server.conf
可以参照下面(我把大部分的注释给去掉了):

#将1.2.3.4修改成你的VPS的地址
local 1.2.3.4
port 1194
proto udp
dev tun
#我是将所有的文件都放在同一个目录/etc/openvpn下的,所以可以写成相对的路径
ca ca.crt
cert server.crt
key server.key  
dh dh1024.pem
server 10.8.0.0 255.255.255.0
ifconfig-pool-persist ipp.txt
push "redirect-gateway def1 bypass-dhcp"
keepalive 10 120
comp-lzo
persist-key
persist-tun
status openvpn-status.log
verb 3

9.现在开始配置客户端的文件,这一部分是在你自己的机器上执行的
$sudo scp [email protected]:/etc/openvpn/examples/sample-config-files/client.conf  /etc/openvpn
vi /etc/openvpn/client.conf

client
dev tun
proto udp
#将1.2.3.4改成你的VPS的地址
remote 1.2.3.4 1194
resolv-retry infinite
nobind
persist-key
persist-tun
#客户端的证书,跟你当初使用./build-key client的这个“client”名字相同
ca ca.crt
cert client.crt
key client.key
ns-cert-type server
comp-lzo
verb 3

10.在Server上重启VPN
# service openvpn start
在执行完该命令后,出现Fail的提示,debug:
#openvpn /etc/openvpn/server.conf
*****************省略**********************
Cannot allocate TUN/TAP dev dynamically
*****************省略**********************

原来是确实没有支持TUN,再次发Ticket,经过一番小波折,终于帮我开通了,在此还是要赞一下cmded的客服的,回复速度比较快而且态度也很好.
P.S:本人绝非打广告,本人使用的全是cmded的免费服务:)
restart,OK

11.连接上openvpn以后还是不能连接外网的, 现在需要配置你的iptables
#echo 1 > /proc/sys/net/ipv4/ip_forward
#iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o venet0 -j MASQUERADE

经过这两步,应该就能连接了:)

参考:
http://blog.sinzy.net/pcman/entry/21433
http://www.vpskong.com/archives/13.html
http://www.zoleet.com/index.php/basic-openvpn-server-ubuntu-and-debian-openvz
https://www.deleak.com/blog/2010/06/04/openvpn-on-vps/

我这边ping下来整体在400ms左右,浏览网页应该没什么问题

放3个账号,要的在底下留下gmail邮箱(已经有VPN的就不要申请了)

  • http://www.zypatroon.com zypatroon

    我勒个去.. 我又出现了…

    • jaseywang

      你们两个坏蛋!我的博客有这么火吗?

  • http://blog.ibfsu.com/ Carlos Gong

    终于有沙发了 ^_^

    • jaseywang

      你也是个坏蛋!不过没抢的过@zypatroon.

    • http://www.zypatroon.com zypatroon

      领先一分钟也是一分钟啊…. 我骄傲!

      • jaseywang

        送你13个点:………….==

  • http://blog.ibfsu.com/ Carlos Gong

    汗。。。 发完评论发现沙发被抢只有板凳和地板了。。。。

  • kiki

    唉,偏挑我出门的时候发文…

  • http://sunshineg.com Sunny

    good job

    • jaseywang

      Tx;-)

  • http://www.freetstar.com freetstar

    VPN的话得貌似是像你说的chnroutes,需要配置一下。。
    之前我搞的vpn,youtube打不开。。。

    • jaseywang

      是要配置啊,一行命令就可以解决了,效果蛮好的.

  • http://pityonline.info pityonline

    奇怪的是,我的 vps 上和本地电脑上都安装了 openvpn,但以普通用户或 root 执行 lsmod | grep tun 后都没有回显……

  • z

    不知到此方法适用于ipv6吗,我把服务器地址设为ipv6地址,配置好之后,连接时显示

    RESOLVE: Cannot resolve host address

    [HOST_NOT_FOUND] The specified host is unknown.

    是什么问题?

    • http://jaseywang.info jaseywang

      不好意思,ipv6的我也没有试过,应该不是同一个方法:)

  • Pingback: 写在Ubuntu 10.10发行之际 « Jasey Wang()