今天在 Ubuntu 的云服务器上搭建了一个 OpenVPN 服务器,并且使用 Windows 和 Linux 客户端加入到了这个 VPN 网络中,记录一下搭建的过程,以备以后查询
生成证书和密钥
Open VPN 服务器需要生成证书和密钥,这些可以使用 easy-rsa 来生成
首先在服务端下载并解压 easy-rsa
1 2 3
| wget https://github.com/OpenVPN/easy-rsa/releases/download/v3.2.1/EasyRSA-3.2.1.tgz tar -xzf EasyRSA-3.2.1.tgz cd EasyRSA-3.2.1
|
生成 CA 证书和服务端的私钥和证书
1 2 3 4 5
| ./easyrsa init-pki ./easyrsa build-ca ./easyrsa gen-req server nopass ./easyrsa sign-req server server ./easyrsa gen-dh
|
生成客户端证书和密钥,在客户端上下载并解压 EasyRSA,并执行以下命令
1 2
| ./easyrsa init-pki ./easyrsa gen-req client nopass
|
将客户端的请求文件 pki/reqs/client.req
发送给服务端,服务段对请求文件进行签名
1 2
| ./easyrsa import-req /path/to/client.req client ./easyrsa sign-req client client
|
签发完成后,将服务端的 pki/ca.crt
和 pki/issued/client.crt
文件发送到客户端
至此,证书和密钥已经生成完毕,下面开始配置 openvpn 服务器
配置 Open VPN 服务器
安装 openvpn,Ubuntu 安装
1
| sudo apt install openvpn
|
修改配置文件 /etc/openvpn/server.conf
,如果没有,可以将 /usr/share/doc/openvpn/examples/sample-config-files/server.conf
复制到 /etc/openvpn
目录下
1
| cp /usr/share/doc/openvpn/examples/sample-config-files/server.conf /etc/openvpn/server.conf
|
修改配置文件的以下内容
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| port 1194 #端口 proto udp #使用 UDP 协议 dev tun #使用 TUN 模式 ca /path/to/easy-rsa/pki/ca.crt #CA 证书 cert /path/to/easy-rsa/pki/issued/server.crt #服务端证书 key /path/to/easy-rsa/pki/private/server.key #服务端私钥 dh /path/to/easy-rsa/pki/dh.pem #Diffie-Hellman 文件 server 10.8.0.0 255.255.255.0 #服务器网段,第一个为网段,第二个为子网掩码 ifconfig-pool-persist /var/log/openvpn/ipp.txt #保存客户端 IP 地址池 client-config-dir ccd #客户端配置目录,如果需要固定客户端 IP 地址,可以在该目录下创建文件,文件名是客户端证书的名字,文件内容是客户端的 IP 地址 client-to-client #允许客户端之间互相访问 duplicate-cn #允许重复的 CN keepalive 10 120 #保持连接,第一个参数为每10秒发送一次心跳包,第二个参数为如果120秒内没有收到心跳包,则断开连接 cipher AES-256-CBC #加密算法 comp-lzo #压缩算法 persist-key #VPN重启后保持密钥 persist-tun #VPN重启后保持隧道 status /var/log/openvpn/openvpn-status.log #状态日志文件 verb 3 #日志级别 explicit-exit-notify 1 #退出通知客户端
|
改好配置后,启动服务端的 openvpn 服务
1
| systemctl start openvpn@server
|
配置 Windows 客户端
去官网下载 openvpn 客户端,解压并安装
将创建好的客户端证书(client.crt)、私钥(client.key)和服务端的CA证书(ca.crt)放在 openvpn 安装目录的config目录下,例如 C:\Users\NeroUMU\OpenVPN\config
再在config目录下创建一个客户端配置文件 client.ovpn
,这里的client为openvpn识别的客户端可以自定义,内容为
1 2 3 4 5 6 7 8 9 10 11 12
| client #这里表示客户端模式,不可自定义 dev tun proto udp remote 服务端IP 1194 #openvpn服务端的IP和端口号 resolv-retry infinite nobind ca ca.crt cert client.crt key client.key verb 3 persist-key comp-lzo
|
配置完成后,启动 Open VPN,即可连接 openvpn 服务器
配置 Linux 客户端
我是在 Arch Linux 上配置的,Arch Linux 的大部分操作都与 Ubuntu 相似,但有几处命令不同,这里可以查询 Arch Linux Wiki
安装 openvpn
将创建好的客户端证书(client.crt)、私钥(client.key)和服务端的CA证书(ca.crt)放在 /etc/openvpn/client
下
再创建配置文件 /etc/openvpn/client/.client.conf
,内容与 Windows 客户端相同,注意一定是.client.conf
,不能是 client.conf
1 2 3 4 5 6 7 8 9 10 11 12
| client #这里表示客户端模式,不可自定义 dev tun proto udp remote 服务端IP 1194 #openvpn服务端的IP和端口号 resolv-retry infinite nobind ca ca.crt cert client.crt key client.key verb 3 persist-key comp-lzo
|
如果是 Ubuntu,则都放在 /etc/openvpn
目录下,且配置文件名为 client.conf
启动客户端
1
| systemctl start openvpn-client@.client
|
固定客户端 IP 地址
如果想要固定客户端 IP 地址,可以在服务端 /etc/openvpn/ccd
目录下创建文件,文件名是客户端证书的名字(CN),文件内容如下
1
| ifconfig-push 客户端IP 对端IP
|
注意客户端 IP 和 对端 IP 都是服务器网段的,并且同在一个 255.255.255.252
的网段内,比如 10.8.0.2
与 10.8.0.1
,10.8.0.50
与 10.8.0.49
都是一对合法的客户端 IP 和 对端 IP
搭建 Open VPN 服务器看上去很复杂,但是一路搭建下来会发现脉络清晰,很简单的,在搭建过程中碰到的最大的问题可能就是最后固定IP了,那里一开始没有理解报错信息里的网段,导致浪费了一些时间,不过好在都解决了Ciallo~(∠・ω< )⌒☆