1 背景与需求
我只需要internet上的client端直接访问这台OpenVPN server (一台NetBSD 6.1.3的电脑),所以不关心 ip forwarding 和 ip route。 这台server直接接入公网,有固定IP。为了保证server的安全,下一步计划在server上启用NPF,初步搜索了一下,这方面的文档很少。
2 用OpenSSL命令生成证书
OpenVPN的安装过程就不说了,但我通过最新的pkgsrc-stable来源码安装,安装后没找到easy-rsa目录,只能手动创建密钥对。
2.1 编辑openssl.cnf
- 找到openssl.cnf的范本并COPY到你的工作目录(这里假设是你的home里的myca目录)
cp /usr/share/examples/openssl/openssl.cnf ~/myca
- 把openssl.cnf里的 dir 指向你的工作目录 /home/xxxx/myca
- default_days默认365天,最好设时间长一些
- 把 certificate 和 private_key 指向你的根证书和私钥文件(这两个文件会在后面创建,你可以创建之后再来指定)。为方便使用,这里我的根证书为my-ca.crt, 对应的私钥文件为my-ca.key。这里的证书、私钥都是成对出现的,.crt表示证书,.key表示私钥,下同。而NetBSD默认用.pem
- 创建index.txt 和 serial 文件。index.txt为空文件,serial 初始化为一个数字序列如01
touch index.txt
echo "01" >serial
- 创建文件夹 newcerts 和 private
2.2 创建根证书/私钥对
openssl req -nodes -new -x509 -keyout my-ca.key -out my-ca.crt -days 3650 -config ~/myca/openssl.cnf
把生成的 my-ca.key移到 private 文件夹中,修改openssl.cnf 文件中的 certificate 和 private_key, 见上文。
2.3 创建服务器端和用户端的密钥对,我用Office代表服务器端,Home代表用户端。
openssl req -nodes -new -keyout office.key -out office.csr -config ~/myca/openssl.cnf
openssl ca -out office.crt -in office.csr -config ~/myca/openssl.cnf
openssl req -nodes -new -keyout home.key -out home.csr -config ~/myca/openssl.cnf
openssl ca -out home.crt -in home.csr -config ~/myca/openssl.cnf
把生成的 home.crt, home.key 和之前生成的 my-ca.crt, 拷贝一份到 Home 电脑上。注意:创建各密钥对时,不要输入相同的 Common Name 。
2.4 创建 Diffie Hellman 参数
openssl dhparam -out dh1024.pem 1024 -config ~/myca/openssl.cnf
上面openssl 命令中的 -nodes 选项用于对私钥不做口令加密,如果去掉此选项,将要求输入一个密码,这样以后你每次建立一个OpenVPN通道里都要求输入这个密码。
3 配置OpenVPN 服务端
- 把OpenVPN的范本文件 server.conf 拷贝到配置目录
cp /usr/pkg/share/examples/openvpn/config/server.conf /usr/pkg/etc/openvpn/
- 修改 server.conf 中的
ca ,指向上文生成的my-ca.crt
cert , 指向上文生成的office.crt
key , 指向上文生成的office.key
dh , 指向上文中生成的 dh1024.pem
- 设置 user nobody 和 group nobody
保存后,启动openvpn服务,运行 ifconfig -a 将看到 tun0 设备的信息。如果您是用openvpn server 做网关,则需启用ip转发并可能需要设置与路由有关的参数,请自行研究server.conf文件。
4 配置OpenVPN 用户端
用户端的设置相当简单,只要在配置文件中设置好上文中已拷贝到Home电脑上的三个密钥文件,并保证配置文件中的协议、加密方式的设置与服务端server.conf中的设置一致就可以了。Win7的用户端请注意,可能需要“以管理员身份运行”OpenVPN的用户端程序。
至此,完成所有的配置,在用户端就可以发起连接了。连接成功后,服务端和用户端应能够互PING。此配置过程参考了大量的网上文档,特别是《OpenVPN HOWTO 中文版》一文,特此感谢原文作者,网址:http://wenku.baidu.com/view/415b52fec8d376eeaeaa3174.html