最近购入了Linode 的VPS ,确实很不错.自己尝试了搭建VPN,这样以后就能自由的上网了.最近把自己搭建Server方面的知识记录下来.
本来OS方面,自己一直用Ubuntu,但是在折腾了好几天后,还是选择了CentOS 5.3.因为稳定性方面还是centos更胜一筹,另外夸一句Linode VPS确实是非常好的VPS,加上他们自己开发的管理后台,很强大,也很实用,提供OS系统也很多,本来选了CentOS5.3 64位的,但发现64位内存使用量确实很高,我这个初级VPS320M的内存还是吃不消,最候选择了32位的.
建立OpenVPN一开始自己摸索了半天,后来发现Linode提供的文档很全,基本涉及了搭建服务器的方方面面,看来得认真看文档啊.
不说废话了,直接上笔记.
1.添加EPL镜像

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

更新系统

yum update

安装openvpn

yum install openvpn 

拷贝openvpn的配置工具

cp -R /usr/share/openvpn/easy-rsa/ /etc/openvpn

修改var文件成你的文件

source var
./clean-all
./build-ca

生成服务端的key

./build-key-server server

这里的server可以随便起名字,只要conf文件里指定就可以,随便你起什么,但中文的估计不行,呵呵。
生成客户端的key

./build-key clent1

生成dh文件

./bulid-dh

拷贝server端的key

cp ca.crt ca.key dh1024.pem server.crt server.key /etc/openvpn

配置server.conf

port 1194
proto udp
dev tun
ca ca.crt
cert server.crt
key server.key  # This file should be kept secret
dh dh1024.pem
server 10.8.0.0 255.255.255.0
ifconfig-pool-persist ipp.txt
push "redirect-gateway def1"
push "dhcp-option DNS 你的DNS IP"
keepalive 10 120
comp-lzo
persist-keypersist-tun
status openvpn-status.log
verb 3
;mute 20

编辑 /ec/sysctl.conf 文件 支持ipv4

net.ipv4.ip_forward = 1

添加防火墙验证规则

iptables -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -s 10.8.0.0/24 -j ACCEPT
iptables -A FORWARD -j REJECT
iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE

将规则添加进 /etc/rc.local

#!/bin/sh
#
# [...]
#
iptables -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -s 10.8.0.0/24 -j ACCEPT
iptables -A FORWARD -j REJECT
iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE
touch /var/lock/subsys/local

安装dnsmasq,不安装的话多人使用VPN可能不行。

yum install dsnamasq

启动dnsmasq

/rubyetc/init.d/dnsmasq start
chkconfig dsnsmasq on

启动openvpn服务

/etc/init.d/openvpn start
chkconfig openvpn on

配置客户端配置文件

client
dev tun
proto udp
remote 你服务器IP 1194
resolv-retry infinite
nobind
persist-key
persist-tun
ca ca.crt
cert client1.crt
key client1.key
comp-lzo
verb 3
wiki:openvpn定义如下
vpn示意图

vpn示意图

OpenVPN允许参与建立VPN的单点使用共享金鑰,電子證書,或者用户名/密碼来进行身份验证。它大量使用了OpenSSL加密库中的SSLv3/TLSv1协议函式庫。
目前OpenVPN能在Solaris、Linux、OpenBSD、FreeBSD、NetBSD、Mac OS X与Windows 2000/XP/Vista上运行,並包含了許多安全性的功能。
它并不是一个基于Web的VPN软件,也不与IPsec及其他VPN软件包兼容。OpenVPN所有的通信都基于一个单一的IP端口,默认且推荐使用UDP协议通讯,同时TCP也被支持。OpenVPN连接能通过大多数的代理服务器,并且能够在NAT的环境中很好地工作。服务端具有向客户端“推送”某些网络配置信息的功能,这些信息包括:IP地址、路由设置等。OpenVPN提供了两种虚拟网络接口:通用Tun/Tap驱动,通过它们,可以建立三层IP隧道,或者虚拟二层以太网,后者可以传送任何类型的二层以太网络数据。传送的数据可通过LZO算法压缩。IANA(Internet Assigned Numbers Authority)指定给OpenVPN的官方端口为1194。OpenVPN 2.0以后版本每个进程可以同时管理数个并发的隧道。
OpenVPN使用通用网络协议(TCP与UDP)的特点使它成为IPsec等协议的理想替代,尤其是在ISP(Internet service provider)过滤某些特定VPN协议的情况下。
在选择协议时候,需要注意2个加密隧道之间的网络状况,如有高延迟或者丢包较多的情况下,请选择TCP协议作为底层协议,UDP协议由于存在无连接和重传机制,导致要隧道上层的协议进行重传,效率非常低下。
客户端 win下可以选择openvpn带的OpenVPN GUI for Windows 虽然样子难看点,但很好用
MAC下可以选择Tunnelblick OS X OpenVPN Client 很有趣的软件,连接上VPN后,门就打开了,很像在长城上开了个洞,呵呵,有翻墙的味道哈。