这两天买了台入门级的VPS,厂家是RAMHOST,详细的清单这里有,他们家的VPS都是OpenVZ上的虚拟机,带个极其简单的web控制面板,可以预装若干种Linux系统,开通了/dev/net/tun和iptables SNAT/DNAT,能搭建支持转发的OpenVPN服务。各种型号唯一不同的是内存硬盘和流量,我挑了个倒数第二的micro plan,128M内存,10G空间,150G流量,每月4.99刀,季付。

购买挺简单,先注册帐号,选择机器,然后Payal付钱,等待审核一段时间,开通后他们家给我发了封邮件,整个过程相当简洁。邮件里面有web控制面板的链接,用之前的帐号密码登录,能够看到VPS的IP和VPS所在HOST的IP。预装的系统是Debian 5,我就没动他,保持原样。

然后就是SSH到HOST,用户名和密码都是vz,进去之后根据提示用账号密码登录就能获得root的环境了。这样总归是挺麻烦的,还是先把ssh装上吧,aptitude轻松加愉快。顺手adduser再加上普通权限用户若干,给一个加上sudo的权限(原始安装的deb包相当少,sudo都是要额外装的。),其他的作为SSH Tunnel的帐号,就不给了。

这里默认是开启SSH的TCP Forward的,因此干到这里,用来起SSH Tunnel的帐号已经都配置好了,其实这样有不少安全隐患的,但是没心思仔细改参数,现这样得了。宿舍网络太破,速度不快,比Dreamhost的帐号速度略慢。

买低端VPS主要目的还是爬爬墙,目前来说用的SSH Tunnel + FireFox + FoxyProxy + MyEtunnel (windows) or Gnome SSH Tunnel Manager (Linux)的组合还是很方便的,不过还是折腾折腾VPN,多条路子好办事。

他们家机器已经明说了只能OpenVPN,因此不能尝试PPTP模式的VPN了,虽然大家都说OpenVPN更好一点,但我还是觉得PPTP这种记个用户名和密码就能满街跑的要比随身带着配置文件和证书密钥的要方便。

以前没配过OpenVPN,花了我老多精力,总结靠谱精简流程如下。

装软件 aptitude install openvpn lzop,装完后,证书制作工具在 /usr/share/doc/openvpn/examples/easy-rsa/2.0 下面,cd进去,执行如下。

. ./vars #设置一些变量 这里是.空格./vars,不然设置不了变量
./clean-all #清理一下之前生成的、扔在同级keys目录下的证书
./build-ca #建立ca证书
./build-key-server server #生成服务器端的证书和密钥,名字自选
./build-key client1 #生成客户端的证书和密钥,名字自选,可以做若干个
./build-dh #生成Diffie Hellman参数,非对称加密传递密钥用

完了之后所有有用的东西都在keys文件夹下面了,也包括很多没用的,了解一点原理的就知道哪些有用哪些没用了。下一步是建立配置文件。

我想要的效果是这样的,分发若干个客户端的证书和配置文件,每个客户端连过来之后分配固定的IP地址,所有客户的流量全部走VPN所在的服务器。

服务器端的配置文件server.conf这么写

port 1194
proto udp
dev tun
ca ca.crt
cert server.crt
key server.key
dh dh1024.pem
server 10.8.0.0 255.255.255.0 #服务器的IP
ifconfig-pool-persist ipp.txt
client-config-dir ccd #同级ccd目录下创建跟客户端用户同名文件,给客户端指定ip,内容写 ifconfig-push 10.8.0.5(号称这里要是4*n+1,不知道为啥) 10.8.0.6
route 10.8.1.0 255.255.255.0 #添加如上的这套子网
push “redirect-gateway def1″  #指定该服务器IP为客户端默认网关
push “dhcp-option DNS 8.8.8.8″ #让客户端使用指定的DNS,linux无效,需要手动改/etc/resolv.conf
push “dhcp-option DNS 8.8.4.4″
client-to-client #客户端之间互相可见,我觉得似乎应该不可见,暂时自己用,先不管
keepalive 10 120 #以下都不懂,原配
comp-lzo
user nobody
group nogroup
persist-key
persist-tun
status openvpn-status.log
verb 3

配置文件完成,设置v4的转发,/etc/sysctl.conf使用net.ipv4.ip_forward = 1参数,完了之后sysctrl -p保存修改。

然后是防火墙上加条规则,iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -j SNAT –to-source *.*.*.*,*.*.*.*为VPS的IP。对于Debian系统,让该规则生效,执行如下:

iptables-save > /etc/network/iptables
iptables-apply

服务器端配置完了,把sever.conf ca.crt等等扔到/etc/openvpn下面,/etc/init.d/openvpn start启动,用netstat -pln看一下1194端口是否在监听就完了。

客户端的配置文件client.conf这么写,没什么特别的,****为VPS的IP,域名亦可,这只是linux下面的配置文件,最近不去windows下干活儿,先不管。#更新,windows下的写法跟这个一样,配置文件后缀名改成.ovpn,证书和密钥文件的路径按需修改,可以是相对路径,nobody和nogroup两行可以删掉。

client
dev tun
proto udp
remote ************** 1194
resolv-retry infinite
nobind
user nobody
group nogroup
persist-key
persist-tun
mute-replay-warnings
ca /etc/openvpn/ramhost/ca.crt
cert /etc/openvpn/ramhost/spehio.crt
key /etc/openvpn/ramhost/spehio.key
comp-lzo
verb 3
redirect-gateway def1

这堆文件拾掇拾掇收拾好,openvpn –config client.conf &,基本上就可以了,之前说的修改/etc/resolv.conf的事情,因为我现在直接在宿舍路由上已经设了8.8.8.8的DNS,也就不用自己改了,不用国内被污染了的DNS就行。补充一条,测试通过之后可以通过openvpn –daemon –config这样来启动,不会独占在shell里面,或者写到/etc/rc.local里面。

这样基本算搞定了,整个就是在外面世界的网络环境了,我测试了一下速度,惨不忍睹,我对宿舍的网络实在不抱什么想法了。

留几个参考链接如下。
http://openvpn.net/index.php/open-source/documentation/howto.html
http://kangzj.net/setup-openvpn-on-openvz-vps/
http://www.black-xstar.com/blog/693.html
http://hi.baidu.com/cnfug/blog/item/c7a4fa2a6e383390033bf6c5.html

我觉着上面写的可能还有问题,等我什么时候再安装的时候按照我自己说的再做一遍应该就完善了。