How to install openvpn server on CentOS7

来自koorka知识分享
跳到导航 跳到搜索
可打印版不再被支持且可能有渲染错误。请更新您的浏览器书签并改用浏览器默认的打印功能。

本文同样适用于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)安装新版本或重新安装。