Hacking Limbo

Reading / Coding / Hacking

Set Up OpenVPN on Ubuntu 10.04

Updated on Oct. 14: 修复了配置文件的下载链接。

曾经很土鳖地以为 VPN 没有 SSH Tunnel 好用,理由是开了 VPN 所有网站的访问都会走 VPN 线路会很慢,后来才知道原来可以设置国内的 IP 段直接访问,而且对比 SSH 省去了浏览器插件和每个程序单独配置的麻烦。

我是买过别人的 VPN 之后才考虑自己搭建的,当时碰上长达一个月的电信线路抽风,原有的翻墙手段全部失效,我的 VPS 又还不支持 IPv6,就买了一家提供 v6 线路的 VPN. 后来我的 VPS 终于支持 IPv6 了,就 Google 了一下,找到几篇教程,比较顺利地搭建成功了,以下就是我汇总之后的完整流程,针对 Ubuntu Server 10.04,但其他发行版的做法也大同小异。

安装 & 生成证书

sudo apt-get install openvpn

cp -R /usr/share/doc/openvpn/examples/easy-rsa/ /etc/openvpn/
cd /etc/openvpn/easy-rsa/2.0

source ./vars
./clean-all

# servername 和 clientname 自己选
# 这几个命令都会问你很多问题,其实一路回车就可以了
./build-ca
./build-key-server <servername>
./build-dh

./build-key <clientname>

# 将 <servername> 替换为 build-key-server 时选定的名字
cp keys/{ca.crt,ca.key,dh1024.pem,<servername>.crt,<servername>.key} /etc/openvpn/

配置

  1. 下载服务端的配置文件,放在 /etc/openvpn/

  2. 下载先前生成的 ca.crt, .crt 和 .key 到客户端

  3. 添加 iptables 规则

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

    并将下面 4 行添加到 /etc/rc.local (在系统启动的时候添加 iptables 规则):

    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
  4. 下载客户端的配置文件,修改配置中的服务器IP和证书路径

运行

在服务端运行 sudo service openvpn start,然后在客户端运行 sudo openvpn client.conf(假定你使用的是 Linux 系统),将系统 DNS 设置为 8.8.4.4 或 208.67.222.220(避免国内的 DNS 污染),就可以翻墙了。

注:如果要多人使用的话,需要运行 build-key 为每个用户分配一个 key,或者可以 Google 一下如何配置使用用户名和密码认证。

参考

  1. Secure Communications with OpenVPN on CentOS 5

  2. Ubuntu Server 安装 OpenVPN Server