Ubuntu deploy OpenVPN
参照 OpenVPN文档
大概流程:
- 安装 OpenVPN
- 生成 PKI:CA 证书和密钥、服务器端证书和密钥、客户端证书和密钥、迪菲·赫尔曼密钥
- 服务器端配置
- 客户端配置
OpenVPN Server
安装 OpenVPN
1 | apt-get install openvpn easy-rsa |
OpenVPN PKI
构建 OpenVPN 配置的第一步是建立一个公钥基础设施(PKI)。PKI 包括:
- 一个主证书颁发机构(CA)的证书(即公钥)和密钥,用于签名服务器和客户端的证书(English:a master Certificate Authority (CA) certificate and key which is used to sign each of the server and client certificates.)
- OpenVPN Server 证书(公钥)和密钥
- OpenVPN Client 证书(公钥)和密钥
1、CA 设置,生成证书和密钥
用安装的
easy-rsa
包来制作 CA/服务器端/客户端的证书和密钥1
cp -r /usr/share/easy-rsa/ /etc/openvpn/
设置默认的基本参数:
/etc/openvpn/easy-rsa/vars
1
2
3
4
5
6
7
8export KEY_COUNTRY="CN"
export KEY_PROVINCE="GuangDong"
export KEY_CITY="FoShan"
export KEY_ORG="easecloud" # organization 组织
export KEY_EMAIL="*@easecloud.cn"
export KEY_OU="easecloud" # organization unit 单位
export KEY_NAME="easecloudVPN"
export KEY_CN="ecVPN" # common name for all keys 常用名生成 CA 证书和密钥
1
2
3source vars
./clean-all
./build-ca # 生成 CA 证书和密钥执行
./build-ca
时,可以一直回车,默认使用 vars 的设置。执行完之后,就会生成 CA 证书(keys/ca.crt
)和密钥(keys/ca.key
)。
运行
./build-ca
时可能报错:
错误一:
error on line 198 of /etc/openvpn/easy-rsa/openssl-1.0.0.cnf
139749463725728:error:0E065068:configuration file routines:STR_COPY:variable has no value:conf_def.c:618:line 198
错误二:
error on line 220 of /etc/openvpn/easy-rsa/openssl-1.0.0.cnf
140566456841888:error:0E065068:configuration file routines:STR_COPY:variable has no value:conf_def.c:618:line 220
解决:
分别注释到 openssl-1.0.0.cnf 文件中 198 和 220 行的内容 subjectAltName=$ENV::KEY_ALTNAMES
2、服务器端证书和密钥,迪菲·赫尔曼密钥
生成服务器端的证书和密钥
1
./build-key-server myservername
myservername
:服务器证书名称,如:easecloudVPN- 执行:一直回车,直到
Sign the certificate?[y/n]y
,1 out of 1 certificate requests certified, commit? [y/n]y
- 执行完之后,我们就可以得到服务器证书(keys/easecloudVPN.crt)和密钥(keys/easecloudVPN.key)。
同时,为 OpenVPN 服务器生成迪菲·赫尔曼密钥
1
./build-dh
执行完
./build-dh
之后,会根据 /easy-ras/vars 的KEY_SIZE
参数来生成相应的 Diffie Hellman 参数文件(keys/dh-2048.pem)
迪菲·赫尔曼密钥交换(Diffie–Hellman key exchange,简称“D–H”) 是一种安全协议。它可以让双方在完全没有对方任何预先信息的条件下通过不安全信道创建起一个密钥。这个密钥可以在后续的通讯中作为对称密钥来加密通讯内容。
3、客户端证书和密钥
生成客户端证书。一般,不同的客户端各自创建自己的客户端证书和密钥。1
2cd /etc/openvpn/easy-rsa/
./build-key clientName
clientName
:客户端证书名称,如:lizs- 执行:一直回车,直到
Sign the certificate?[y/n]y
,1 out of 1 certificate requests certified, commit? [y/n]y
- 执行完之后,我们就可以得到客户端证书(keys/lizs.crt)和密钥(keys/lizs.key)
- 先将以下证书拷贝到 OpenVPN Client 所在环境,等下配置客户端 OpenVPN 要用到
- ca.crt
- lizs.crt
- lizs.key
服务器配置
先将生成的相关证书复制到
/etc/openvpn/
1
2cd keys/
cp easecloudVPN.crt easecloudVPN.key ca.crt dh2048.pem /etc/openvpn/安装了 OpenVPN 之后会自动带有一些服务器端和客户端的简单配置的例子。
1
2
3ls -l /usr/share/doc/openvpn/examples/sample-config-files/
-rw-r--r-- 1 root root 3427 Dec 2 2014 client.conf # 客户端配置
-rw-r--r-- 1 root root 4141 Dec 2 2014 server.conf.gz # 服务器端配置服务器端配置,我们可以使用例子中的配置
server.conf.gz
,将它复制到/etc/openvpn/
目录下解压就可以使用了1
2cp /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz /etc/openvpn/
gunzip /etc/openvpn/server.conf.gz接下来,编辑
server.conf
1
2
3
4ca ca.crt # 刚生成的 CA 证书
cert easecloudVPN.crt # 刚生成的服务器端证书
key easecloudVPN.key # 刚生成的服务器端密钥
dh dh2048.pem # 刚生成的 Diffie Hellman 参数文件编辑 sysctl 配置文件
/etc/sysctl.conf
并且重新加载1
2#net.ipv4.ip_forward=1 # default
net.ipv4.ip_forward=1 # we just need to uncomment it重新加载 sysctl
1
sysctl -p /etc/sysctl.conf
开启服务器端 OpenVPN
1
service openvpn start
检查 OpenVPN 是否创建了一个
tun0
接口(可以查看 server.conf 配置文件中的dev
参数)1
2
3
4
5
6
7
8$ ifconfig tun0
tun0 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
inet addr:10.8.0.1 P-t-P:10.8.0.2 Mask:255.255.255.255
UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:100
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
OpenVPN Client
安装 OpenVPN
1 | sudo apt-get install openvpn |
客户端配置
先将服务器端生成的相关证书文件复制到
/etc/openvpn/
目录下ca.crt
:CA 证书lizs.crt
:客户端证书lizs.key
:客户端密钥
客户端配置也可以使用 OpenVPN 自带的客户端配置例子
client.conf
,将其复制到/etc/openvpn
1
sudo cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf /etc/openvpn/
编辑客户端配置文件
/etc/openvpn/client.conf
:1
2
3
4remote 123.123.123.123 1194
ca ca.crt # 服务器端生成的 CA 证书
cert lizs.crt # 客户端证书
key lizs.key # 客户端密钥其中
123.123.123.123
为 OpenVPN Server 所在服务器的 IP 或域名。开启 OpenVPN Client
1
service openvpn@client start
检查 OpenVPN 是否创建了一个
tun0
接口(可以查看 server.conf 配置文件中的dev
参数)1
ifconfig tun0
如果没有成功开启,重启服务器端的 OpenVPN 和 客户端的 OpenVPN 试试看。
附 windows openvpn client
- 安装 OpenVPN GUI
首先,将服务器生成的相关证书复制到安装目录的
config
文件夹下面。ca.crt
:CA 证书lizs.crt
:客户端证书lizs.key
:客户端密钥
修改配置文件。同样,使用自带的配置例子
sample-config/client.ovpn
。将其复制到config
目录下,然后编辑:1
2
3
4
5dev tun # 和服务器的保持一致
remote 123.123.123.123 1194
ca ca.crt # 服务器端生成的 CA 证书
cert lizs.crt # 客户端证书
key lizs.key # 客户端密钥其中
123.123.123.123
为 OpenVPN Server 所在服务器的 IP 或域名。最后以管理员身份运行 OpenVPN。启动之后,右键菜单栏 OpenVPN 图标,
connect
。