本来想写一篇在Gentoo下安装OpenVPN Server的文章,可是Gentoo下还没有测试成功,所以先写一篇Ubuntu Server下安装OpenVPN Server。OpenVPN在Linux下作为Server还是Client,就看配置文件怎么写了。
Ubuntu下安装OpenVPN还是那句经典的apt-get:
sudo apt-get install openvpn
配置证书的过程稍微复杂一点,先拷贝/usr/share/doc/openvpn/examples/easy-rsa/2.0目录到/etc/openvpn目录下或者home目录里。修改目录里面的vars文件中的几个配置项:
export KEY_COUNTRY=""
export KEY_PROVINCE=""
export KEY_CITY=""
export KEY_ORG=""
export KEY_EMAIL=""
注意:KEY_COUNTRY使用2个大写字母来表示国家。
source ./vars
./clean-all
./build-ca
./build-key-server <servername>
./build-key <clientname>
./build-dh
build-ca是创建根证书,除非是打算重置全部的证书,否则第一次运行完这个命令后就不要再运行了。build-key-server和build-key的命令可以多次运行,最好是为每一个用户做一个client的key。
拷贝示例的server.conf文件到/etc/openvpn目录,进行修改:
sudo cp /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz /etc/openvpn/
sudo gzip -d /etc/openvpn/server.conf.gz
server.conf文件中对每个选项都有详细的解释,根据自己需要进行修改。下面是一个删除注释的配置文件示例:
#OpenVPN的监听地址
local xxx.xxx.xxx.xxx
#OpenVPN的监听端口
port 1194
#使用UDP Server
proto udp
#使用tun通道
dev tun
#相对路径 /etc/openvpn
ca ca.crt
cert server.crt
key server.key
dh dh1024.pem
#OpenVPN的子网地址
server 10.8.0.0 255.255.255.0
#客户端的Internet访问使用OpenVPN通道
push "redirect-gateway def1"
#Windows客户端会使用此DNS地址
push "dhcp-option DNS 208.67.222.222"
push "dhcp-option DNS 208.67.220.220"
#记录客户端分配的ip地址情况,如果OpenVPN服务重启,
#客户端重新连接的时候会按照此文件分配原先的地址。
ifconfig-pool-persist ipp.txt
#每10秒ping一次,120秒内客户端没有动作就断开连接
keepalive 10 120
#客户端之间可以互相访问
client-to-client
#对OpenVPN链接进行压缩,客户端的配置文件必须同时使用
comp-lzo
#OpenVPN的用户和用户组
user nobody
group nobody
#如果user和group的用户和用户组没有访问key的权限
#避免产生权限不足的bug
persist-key
persist-tun
#日志文件
status openvpn-status.log
#日志文件的记录级别
verb 3
OpenVPN的安装设置完成,还需要设置数据包转发:
sudo sysctl -w net.ipv4.ip_forward=1
sudo iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE
这两个命令如果不执行,OpenVPN的客户端虽然能连接成功,但不能访问Internet。iptables需要内核的支持,如果在Gentoo系统下就需要编译内核的一些选项了。