How to install openvpn server on CentOS7
本文同样适用于RockyLinux 8 和 9,不同的地方在于软件版本和给不配置参数。如果涉及个别配置参数,请参考官方文档。
安装OpenVPN Server
安装yum源
使用yum search openvpn 搜索,如果没有,则先安装epel
yum install epel-release
安装必要的软件包
yum -y install openvpn easy-rsa
配置OpenVPN服务器
cp /usr/share/doc/openvpn-*/sample/sample-config-files/server.conf /etc/openvpn/server/
vi /etc/openvpn/server/server.conf
OpenVPN Server 作为各客户端的缺省网关(即客户端所在的局域网络不加入VPN网络中):
push "redirect-gateway def1 bypass-dhcp"
push "dhcp-option DNS 106.187.95.5"
push "dhcp-option DNS 106.186.116.5"
将VPN Server 所在的内网路由信息推送到各客户端,以便各客户端访问VPN Server所在的内网,以阿里云为例:
push "route 172.17.240.0 255.255.240.0"
push "dhcp-option DNS 172.17.240.10"
push "dhcp-option DNS 202.106.196.115”
将客户端所在的局域网添加到 VPN网络中,以便其它VPN客户端所在的网络可以访问。例如:天津分公司局域网网络为 192.168.18.0/24,上海分公司的局域网为 192.168.10.0/24: 要使两个局域网可以互相访问,则在做如下设置(假定 天津、上海的客户端认证证书的 common name 分别为 "TianJin", "ShangHai"):
client-config-dir ccd
route 192.168.18.0 255.255.255.0
route 192.168.10.0 255.255.255.0
然后 分别创建 TianJin , ShangHai的 ccd文件
mkdir /etc/openvpn/server/ccd
touch /etc/openvpn/server/ccd/TianJin
touch /etc/openvpn/server/ccd/ShangHai
echo 'iroute 192.168.18.0 255.255.255.0' > /etc/openvpn/server/ccd/TianJin
echo 'iroute 192.168.10.0 255.255.255.0' > /etc/openvpn/server/ccd/ShangHai
备注: ccd文件中iroute其实就是告诉VPN服务器,我所在的子网是多少(如果有路由到我的子网的数据包,请给我)。配置参数中的TianJin,ShangHai为创建客户端证书时指定的CN。
user nobody
group nobody
#explicit-exit-notify 1
生成认证证书Generating Keys and Certificates
sudo mkdir -p /etc/openvpn/easy-rsa
sudo cp -rf /usr/share/easy-rsa/3/* /etc/openvpn/easy-rsa
su - root
cd /etc/openvpn/easy-rsa
如果需要修改证书保存路径等相关配置参数,修改 openssl-easyrsa.cnf文件。
初始化pki
./easyrsa init-pki
上面的命令将生成pki目录下的: openssl-easyrsa.cnf文件、safessl-easyrsa.cnf文件 、reqs目录和 private目录。
创建root CA证书 (pki/ca.crt):
./easyrsa build-ca nopass
#此处生成 pki/ca.crt文件 和pki/private/ca.key,仅需要输入CN信息即可。
创建DH parameters ( pki/dh.pem)
./easyrsa gen-dh
#此处生成 pki/dh.pem 文件,该文件用于服务器和客户端进行密钥交换。
开始生成证书之前,如果需要修改证书的有效期(或者其它参数),可以编辑 /etc/openvpn/easy-rsa/pki/vars
set_var EASYRSA_CA_EXPIRE 3650 #CA证书证书的有效期(10年)
set_var EASYRSA_CERT_EXPIRE 825 #签发的证书有效期(2年半)
创建服务端证书: 创建服务端证书 和 签约服务端证书 可以使用 ./easyrsa build-server-full VPNServer nopass 命令一步完成。
./easyrsa build-server-full VPNServer nopass
#此处生成 pki/private/VPNServer.key 和 pki/issued/VPNServer.crt文件
分别为天津和上海分公司创建客户端证书
./easyrsa build-client-full TianJin nopass
./easyrsa build-client-full ShangHai nopass
#此处生成 xxx.req , xxx.key 和 xxx.crt文件
生成tls认证密钥ta.key
openvpn --genkey tls-auth ta.key
拷贝证书:
拷贝ta.key ca.crt dh.pem VPNServer.crt VPNServer.key到 服务器端
cp ta.key ca.crt dh.pem issued/VPNServer.crt private/VPNServer.key /etc/openvpn/server
拷贝 ta.key ca.crt dh.pem xxx.crt xxx.key到 客户端
服务器端Configure Routing and firewall
vi /etc/sysctl.conf :
net.ipv4.ip_forward = 1
执行下面命令让配置立即生效
sysctl -p
如果VPN Server作为缺省网关(即push "redirect-gateway def1 bypass-dhcp")则需要做 SNAT
iptables -t nat -A POSTROUTING -s 10.0.0.0/24 -o eth0 -j MASQUERADE
启动 OpenVPN服务
systemctl -f enable openvpn-server@server.service
systemctl start openvpn-server@server.service
配置Linux客户端
在客户端,如果要使VPNServer自己 和 其它 独立 vpn client能访问 客户端所在的子网,则在客户端机器上需要做SNAT:
iptables -t nat -A POSTROUTING -s 10.0.0.0/24 -o eth0 -j MASQUERADE
need the following client files:
/etc/openvpn/easy-rsa/keys/ta.key
/etc/openvpn/easy-rsa/keys/ca.crt
/etc/openvpn/easy-rsa/keys/koorka_client.crt
/etc/openvpn/easy-rsa/keys/koorka_client.key
create client file koorka_client.ovpn:
client
dev tun
proto tcp
remote 111.164.217.112 1281
resolv-retry infinite
nobind
persist-key
persist-tun
link-mtu 1559
cipher AES-256-CBC
keysize 256
ca ca.crt
cert koorka_client.crt
key koorka_client.key
tls-auth ta.key 1
for Linux client:
openvpn --config ~/path/to/koorka_client.ovpn
配置Windows客户端
安装OpenVPN GUI
1、下OpenVPN的Windows安装包(已包含OpenVPN GUI),官方下载地址:https://openvpn.net/community-downloads/
2、根据提示安装软件包即可,安装完成后,将在桌面生成OpenVPN GUI图标
3、双击图标启动OpenVPN GUI,在Windows右下角的应用图标中将出现OpenVPN GUI图标
配置OpenVPN GUI
1、在Windows右下角的应用图标中,右键点击OpenVPN GUI图标,并选择“导入-》导入配置文件。
2、复制证书文件到配置目录。例如:C:\Users\zhaoxiong\OpenVPN\config\zhangzhaoxiong
3、连接到服务器:在Windows右下角的应用图标中,右键点击OpenVPN GUI图标,选择连接。
配置MacOS客户端
安装客户端软件tunnelblick
1、下载: https://tunnelblick.net/downloads.html
2、依照提示安装软件即可。安装完成后,启动程序即可。
3、在MacOS的“菜单栏应用”位置会显示tunnelblick图标。“菜单栏应用”中的tunnelblick图标,点击“VPN详情”进行VPN配置。
配置tunnelblick
1、在tunnelblick VPN详情中,点击“进入管理模式”。
2、将自己的配置文件拖拽到配置位置,自动导入配置
3、连接到服务器
更新证书文件
当证书已过期或即将过期时,需要使用新证书替换旧证书。证书存储位置如下:
/Users/zhaoxiong/Library/Application\ Support/Tunnelblick/Configurations/zhangzhaoxiong.tblk/Contents/Resources
其中zhangzhaoxiong为您的配置名称。
吊销客户端证书
例如当签发的证书尚未到期,单是员工已离职,这时我们需要吊销(使签发的证书无效)签发的证书。步骤如下:
1、使用下面的命令吊销证书
./easyrsa --batch revoke zhangzhaoxiong
其中zhangzhaoxiong为在签发证书时使用的用户名即,即证书CN的值。
上面的命令将做以下几件事:
(1)在pki/index.txt文件中生成一条revoke记录,类似下面:
R 241121083703Z 231124075854Z 80ACE8F1D7CE171D9805B41F82C0D4D9 unknown /CN=zhangzhaoxiong
(2)将下面的文件(私钥、签名请求、证书)移动到revoke目录中
pki/issued/zhangzhaoxiong.crt
pki/private/zhangzhaoxiong.key
pki/reqs/zhangzhaoxiong.req
(3) 删除其它的相关文件,如inline file、PKCS file、pem等。
2、使用下面的命令生成或更新crl.pem文件。CRL (certificate revocation list)
./easyrsa gen-crl
可以通过查看 pki/index.txt 和下面的命令来确认吊销证书是否已在列表中。
./easyrsa show-crl
例如在查看pki/index.txt,有一个系列号为 `80ACE8F1D7CE171D9805B41F82C0D4D9`的证书已被吊销。则在执行上面的 show-crl命令时,在列表中有上面的序列号即可。
3、配置VPN服务器
将步骤2中生成的crl.pem文件拷贝到 VPN服务器的 /etc/openvpn/server目录下(即与server.conf在同一目录)。修改server.conf,增加下面的行:
crl-verify crl.pem
然后重启VPN服务器即可。
此时使用已吊销证书连接VPN服务器,已无法连接。
如果出现误操作(例如吊销错了用户),编辑pki/index.txt删除不想吊销的行,然后重新生成crl.pem,拷贝到服务器并重启服务器即可。
常见错误处理
VPN服务器不转发客户端子网的数据包 或 VPN客户端不转发服务器端子网的数据包
通过执行 iptable -P FORWARD ACCEPT 确保转发策略默认是开启的。
MacOS客户端出现“tunnelblick执行安装修复超时或已失败”错误的解决方法
(1)卸载tunnelblick (2)备份配置文件
#个人用户配置
/Users/zhaoxiong/Library/Application Support/Tunnelblick/Configrations/*
#系统配置
/Library/Application Support/Tunnelblick/Users/*
(3)删除旧文件:
sudo rm -rf /Users/zhaoxiong/Library/Application\ Support/Tunnelblick
sudo rm -rf /Library/Application\ Support/Tunnelblick
(4)安装新版本或重新安装。