1. 机器环境

  1. 1. openvpn-server服务器
  2. eth0:10.0.0.81/24 NAT模式,模拟公网IP
  3. eth1:172.25.0.1/24 仅主机模式,模拟公司内网网关
  4. 2. 公司内网主机
  5. eth0:172.25.0.100/24 仅主机模式,公司内网IP
  6. 3. windows10 客户端
  7. 模拟在外出差员工机器

2. 安装 OpenVPN 和证书生成工具

easy-rsa 是一个实现快速简单部署 CA 和证书的软件包,也可以使用 openssl 命令来实现。

  1. [root@vpnserver ~] yum -y install openvpn easy-rsa

3. 准备证书

3.1 easy-rsa证书工具准备

  1. #拷贝整个easy-rsa工具包到openvpn目录下
  2. [root@vpnserver ~] cp -r /usr/share/easy-rsa/ /etc/openvpn/Cert
  3. #拷贝vars模板文件到/etc/openvpn/Cert/3目录下并命名为vars
  4. [root@vpnserver ~] cp /usr/share/doc/easy-rsa-3.0.8/vars.example /etc/openvpn/Cert/3/vars
  5. #修改vars文件,设置CA证书有效期,服务器有效期参数,其他如证书国家,地区,组织,加密长度等参数可按需修改,这里就不修改其他参数了
  6. #set_var EASYRSA_CA_EXPIRE 3650
  7. set_var EASYRSA_CA_EXPIRE 365000
  8. #set_var EASYRSA_CERT_EXPIRE 825
  9. set_var EASYRSA_CERT_EXPIRE 3650

3.2 搭建CA

  1. #切换目录
  2. [root@vpnserver 3] cd /etc/openvpn/Cert/3/
  3. #初始化PKI相关目录和文件
  4. [root@vpnserver 3] ./easyrsa init-pki
  5. #创建CA
  6. [root@vpnserver 3] ./easyrsa build-ca nopass #nopass 不加密

3.3 创建服务端证书申请

[root@vpnserver 3] ./easyrsa gen-req vpnServer nopass   #vpnServer  服务器申请证书名
#需要输入Common Name,直接回车使用默认名就好

3.4 签发服务端证书

[root@vpnserver 3] ./easyrsa sign server vpnServer    #server  证书类型
#需要确认申请信息,输入yes

3.5 创建Diffie-Hellman密钥

[root@vpnserver 3] ./easyrsa gen-dh
#生成随机数,需要等待一会

3.6 创建客户端证书申请

[root@vpnserver 3] ./easyrsa gen-req wuvikr nopass

3.7 签发客户端证书

[root@vpnserver 3] ./easyrsa sign client wuvikr    #client  证书类型
#建议在执行这一步之前修改下vars文件里的参数,将客户端的证书有效期适当调短一些,例如90天
#set_var EASYRSA_CERT_EXPIRE    90

3.8 将需要用到的服务端,客户端证书文件分别各自复制一份放到server,client/wuvikr文件夹中,方便后续使用

#复制服务端密钥,证书
[root@vpnserver 3] cp pki/ca.crt pki/issued/vpnServer.crt pki/private/vpnServer.key pki/dh.pem /etc/openvpn/server/

#复制客户端密钥,证书
[root@vpnserver 3] mkdir /etc/openvpn/client/wuvikr
[root@vpnserver 3] cp pki/ca.crt pki/issued/wuvikr.crt pki/private/wuvikr.key /etc/openvpn/client/wuvikr

4. 配置VPN服务

4.1 准备服务端配置文件server.conf

[root@vpnserver 3] vim /etc/openvpn/server.conf

port 1194
proto tcp
;proto udp
;explicit-exit-notify 1

dev tun
;dev tap

ca /etc/openvpn/server/ca.crt
cert /etc/openvpn/server/vpnServer.crt
key /etc/openvpn/server/vpnServer.key
dh /etc/openvpn/server/dh.pem

server 10.8.0.0 255.255.255.0
push "route 172.25.0.0 255.255.255.0"

keepalive 10 120

cipher AES-256-CBC
compress lz4-v2
push "compress lz4-v2"
max-clients 2048

user openvpn
group openvpn

# OpenVPN Log
status /var/log/openvpn/openvpn-status.log
log-append /var/log/openvpn/openvpn.log
verb 3
mute 20

#Enable multiple client to connect with same Certificate key
;duplicate-cn

4.2 准备日志相关目录

[root@vpnserver 3] mkdir /var/log/openvpn
[root@vpnserver 3] chown openvpn.openvpn /var/log/openvpn
[root@vpnserver 3] ll -d /var/log/openvpn
drwxr-xr-x 2 openvpn openvpn 6 Sep 27 17:35 /var/log/openvpn

4.3 准备iptables的SNAT规则和启用转发功能

[root@vpnserver openvpn] echo 'iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -j MASQUERADE' >> /etc/rc.d/rc.local 
[root@vpnserver openvpn] chmod +x /etc/rc.d/rc.local
[root@vpnserver openvpn] /etc/rc.d/rc.local
[root@vpnserver openvpn] echo 'net.ipv4.ip_forward = 1' >> /etc/sysctl.conf  
[root@vpnserver openvpn] sysctl -p

4.4 启动OpenVpn服务

[root@vpnserver openvpn] systemctl enable --now openvpn@server

4.5 准备客户端配置文件

[root@vpnserver openvpn] vim /etc/openvpn/client/wuvikr/wuvikr.ovpn

client
dev tun   #必须和服务端一致
proto tcp #必须和服务端一致

remote 10.0.0.71 1194  #生产环境为OpenVpn服务器公网IP

resolv-retry infinite
nobind

ca ca.crt
cert wuvikr.crt
key wuvikr.key

remote-cert-tls server

cipher AES-256-CBC
verb 3
compress lz4-v2 #需要和服务端一致,不指定默认为comp-lzo

5. 客户端测试

  1. /etc/openvpn/client/wuvikr下的所有文件打包下载到 windows 机器
    2. 在 windows 机器安装 OpenVPN 客服端软件
    3. 将复制下来的打包文件复制软件安装目录下的 config 目录下并解压
    4. 启动客户端软件,连接模拟内网的机器 172.25.0.100,测试是否链接成功