OpenVPN 101 简明教程

  本指南仅仅是保证OpenVPN服务能够正常运作起来,并打开Internet转发,文末附送iPhone OS使用OpenVPN简短指南。

安装 OpenVPN
  我使用的是系统是GNU/Linux Debian,所以以下安装方式和一些配置文件位置并不能应用在所有Linux系统上,不过既然大家都自己搭VPS了,装个软件包找个配置文件应该不在话下了。

apt-get update

对于Debian来说,这个是每次安装前必做的事情。

apt-get install openvpn udev

除了安装openvpn外,我们还需要添加tun设备,所以装个udev比较方便。

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

OpenVPN包附带的easy-rsa工具可以用于方便的生成密钥,这个步骤只是把工具copy到/etc/openvpn下方便操作。
  在生成密钥前,我建议先修改一下vars的默认内容,以便以后每次生成密钥的时候需要重复输入信息。
File: /etc/openvpn/easy-rsa/2.0/vars

export KEY_COUNTRY=”CN”
export KEY_PROVINCE=”Shanghai”
export KEY_CITY=”Shanghai”
export KEY_ORG=”FGFW”
export KEY_EMAIL=”test@test.com”

  这些值在每次生成密钥时都会询问,所以预先设置成常用的比较好。话说回来,如果只是为了看看外面的世界,这些内容随便你写什么。

初始化 Public Key Infrastructure (PKI)

cd /etc/openvpn/easy-rsa/2.0/
. vars
. clean-all
. build-ca

这些命令是用来初始化公钥的基本结构。

生成证书和私钥

. build-key-server server

生成服务器私钥,这个时候就会问你一些刚才vars里设置的信息,如果已经在vars里设置过只要一路回车下去就行。其中”password”和”company name”是可选项,个人建议”password”留空,因为像iPhone上面如果使用带有密码的证书会比较麻烦。

. build-key client1

生成客户端使用的证书,”client1″请用自己容易辨识的字符串替代,比如”desktop1″”iphone”之类的。虽然一份证书到处都可以用,不过为了安全期间还是一个用户一份证书比较好。创建用户证书只要重复这条命令就可以了。

生成Diffie Hellman

. build-dh

移动密钥文件到它该去的地方
  以上内容命令会生成一大堆证书、密钥之类的文件。位置就在/etc/openvpn/easy-rsa/2.0/keys/目录下。
  首先是用户需要的文件,3个:

ca.crt
client1.crt
client1.key

这些文件是复制在客户端使用的,不要多复制其它的,我看有些教程连ca.key都复制出去。
下面这些是服务器用的:5个:

ca.crt
ca.key
dh1024.pem
server.crt
server.key

这些文件需要复制到/etc/openvpn目录。

cd /etc/openvpn/easy-rsa/2.0/keys
cp ca.crt ca.key dh1024.pem server.crt server.key /etc/openvpn

撤回证书的操作

. /etc/openvpn/easy-rsa/2.0/vars
. /etc/openvpn/easy-rsa/2.0/revoke-full client1

如果有需要可以随时撤回证书,用以上命令就可以。

配置VPN

cd /usr/share/doc/openvpn/examples/sample-config-files
gunzip -d server.conf.gz
cp server.conf /etc/openvpn/
cp client.conf ~/

  Debian下的OpenVPN包带有一些示例的配置文件,我们直接拿来用就好了。把解出来的client.conf一并和客户端的3个密钥分发给用户就行。
client.conf里需要配置的注意以下四条就行:

remote server.com 1194

把”server.com”改成你的服务器域名或者ip地址,1194是openvpn的默认端口,如果有需要请按需更改。

ca ca.crt
cert client1.crt
key client1.key

这个就是指名那3个文件的位置,一般就扔在一个目录里比较方便。

  当然config.conf并不是必须的,一些gui客户端都有比较好的向导来填写这些内容。不过如果打算在cli或者类似iPhone OS这样的设备商使用还是写写client.conf比较好。

启动OpenVPN

/etc/init.d/openvpn start

  对于Debian来说这样就行了,我唯一赞赏Debian死板的官僚制度部分就是所有的程序、配置文件都在它该在的地方。
  正常情况下现在客户端已经能够正常连接到服务器了。

配置OpenVPN实现Internet转发
  做完上面那些虽然可以连接到VPN网络,但是并不能访问Internet。所以需要再配置点东西。(要是我教程不写这个估计会被跑过来看的人道毁灭的)

File: /etc/openvpn/server.conf

push “redirect-gateway def1”

  一般来说在server.conf里会有这样一条现成的配置,只要去掉前面的分号让它起作用就行了。

File: /etc/sysctl.conf

net.ipv4.ip_forward=1

  增加这条来启用转发。

最后增加以下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

  如果更改过server.conf中关于ip的配置,请自行更改以上命令。由于这几条命令会把所有的DNS请求都转发给VPN来处理,所以我们还需要安装dnsmasq。

apt-get install dnsmasq

修改/etc/openvpn/server.conf:

push “dhcp-option DNS 10.8.0.1”

重启openvpn服务:

/etc/init.d/openvpn restart

Tip: 如果启动openserver失败,很可能是因为缺少tun设备,用以下命令建立设备:

mkdir -p /dev/net
mknod /dev/net/tun c 10 200

随文附赠:iPhone OS启用OpenVPN支持

  1. iPhone OS需要越狱。
  2. 安装tunemu,tunemu有iPhone可以用的deb包,请自行安装。
  3. 安装Sbsettings中的OpenVPN Toggle。
  4. 把密钥和配置文件扔到/var/mobile/Library/OpenVpn/
  5. 把client.conf改名为conf.ovpn

如果你对Linode有兴趣可以用这个地址注册:http://www.linode.com/?r=2423bd4b1aea90e0163241cd71513fe1b81108d3或者在注册的referral code中填2423bd4b1aea90e0163241cd71513fe1b81108d3,大约在三个月后我能得到一些好处,当然你直接跑去注册也没问题,以上链接并不会给你带来更多的优惠(当然也没什么坏处)。我个人在这里提供一个首月返还$10的Promo Code:storecrowd,这个是实在的优惠。

7 Responses to “OpenVPN 101 简明教程”

Leave a Reply to kDolphin

Note: Commenter is allowed to use '@User+blank' to automatically notify your reply to other commenter. e.g, if ABC is one of commenter of this post, then write '@ABC '(exclude ') will automatically send your comment to ABC. Using '@all ' to notify all previous commenters. Be sure that the value of User should exactly match with commenter's name (case sensitive).