如何基于Rocky Linux 9.x部署OpenVPN服务端?

VPN

1 基础知识

1.1 OpenVPN的介绍

OpenVPN是一个功能齐全的开源SSL VPN解决方案
OpenVPN能适应多种配置,包括远程访问、站点到站点VPN、WI-Fi安全以及负载均衡、故障转移和精细化功能
OpenVPN具有粒度访问控制,能达到复杂性和安全性的高度一致
OpenVPN可为中小企业和企业市场提供经济高效的轻量级替代方案

1.2 OpenVPN的特点

OpenVPN基于SSL安全模型(SSL是安全通讯行业的标准)
OpenVPN使用SSL/TLS实现OSI第二、三层的安全网络扩展(支持证书、智能卡或双因素认证等客户端身份验证方式)
OpenVPn允许结合防火墙规则对特定用户或组进行访问控制

2 最佳实践

2.1 系统环境

2.1.1 环境信息

hostname = openvpn.cmdschool.org
interface = any
ipaddress = any
gateway = any

2.1.2 配置SELinux

setenforce 0
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config

2.1.3 配置epel源

dnf install -y epel-release

2.2 软件安装

2.2.1 安装常用工具

dnf install -y vim wget

2.2.2 配置ntp

dnf install -y chrony

另外,建议设置时区,

timedatectl set-timezone Asia/Shanghai

2.2.3 安装OpenVPN软件包

dnf install -y openvpn easy-rsa

2.3 配置服务端证书

2.3.1 部署秘钥目录

cp -r /usr/share/easy-rsa/ /etc/openvpn/server/
cd /etc/openvpn/server/easy-rsa/3.0
find /usr/ -type f -name "vars.example" -exec cp {} ./vars \;

2.3.2 创建新的PIK

./easyrsa init-pki

可见如下提示信息,

[...]
Using Easy-RSA 'vars' configuration:
* /etc/openvpn/server/easy-rsa/3.0/vars

Notice
------
'init-pki' complete; you may now create a CA or requests.

Your newly created PKI dir is:
* /etc/openvpn/server/easy-rsa/3.0/pki

Using Easy-RSA configuration:
* /etc/openvpn/server/easy-rsa/3.0/vars

2.3.3 创建CA证书

./easyrsa build-ca nopass

需根据以下向导完成配置,

#...
Common Name (eg: your user, host, or server name) [Easy-RSA CA]:con.cmdschool.org
#...
Build-ca completed successfully.

2.3.4 创建服务端证书

./easyrsa gen-req server nopass

需根据以下向导完成配置,

#...
Common Name (eg: your user, host, or server name) [server]:con.cmdschool.org
#...
Private-Key and Public-Certificate-Request files created.
Your files are:
* req: /etc/openvpn/server/easy-rsa/3.0/pki/reqs/server.req
* key: /etc/openvpn/server/easy-rsa/3.0/pki/private/server.key

2.3.5 签署的服务端证书

./easyrsa sign server server

需根据以下向导完成配置,

#...
  Confirm requested details: yes
#...
Certificate created at:
* /etc/openvpn/server/easy-rsa/3.0/pki/issued/server.crt

2.3.6 创建Diffie-Hellman

./easyrsa gen-dh

需根据以下向导完成配置,

#...
DH parameters of size 2048 created at:
* /etc/openvpn/server/easy-rsa/3.0/pki/dh.pem

2.4 配置客户端证书环境

2.4.1 部署秘钥目录

cp -r /usr/share/easy-rsa/ /etc/openvpn/client/
cd /etc/openvpn/client/easy-rsa/3.0
find /usr/ -type f -name "vars.example" -exec cp {} ./vars \;

2.4.2 创建新的PIK

./easyrsa init-pki

可见如下提示信息,

#..
Your newly created PKI dir is:
* /etc/openvpn/client/easy-rsa/3.0/pki

Using Easy-RSA configuration:
* /etc/openvpn/client/easy-rsa/3.0/vars

2.5 配置服务端实例

2.5.1 部署服务端证书

cp /etc/openvpn/server/easy-rsa/3.0/pki/ca.crt /etc/openvpn/server/
cp /etc/openvpn/server/easy-rsa/3.0/pki/private/server.key /etc/openvpn/server/
cp /etc/openvpn/server/easy-rsa/3.0/pki/issued/server.crt /etc/openvpn/server/
cp /etc/openvpn/server/easy-rsa/3.0/pki/dh.pem /etc/openvpn/server/

注:由于tcp与udp两个实例使用同一份服务端证书,便于管理起见,证书没有部署到实例文件夹,而是部署到server文件夹

2.5.2 增加配置tcp服务的文件

vim /etc/openvpn/server/tcp.conf

加入如下配置:

server 10.8.1.0 255.255.255.0
dev tun
proto tcp
port 1194

ca /etc/openvpn/server/ca.crt
cert /etc/openvpn/server/server.crt
key /etc/openvpn/server/server.key
dh /etc/openvpn/server/dh.pem
data-ciphers AES-256-GCM:AES-128-GCM:AES-256-CBC:AES-128-CBC
cipher AES-256-GCM

client-config-dir /etc/openvpn/server/ccd
ifconfig-pool-persist /etc/openvpn/server/ipp_tcp.txt

client-to-client
keepalive 10 120
max-clients 100
user root
group root
persist-key
persist-tun
mssfix 1300

status /var/log/openvpn/status_tcp.log
status-version 2
suppress-timestamps
log /var/log/openvpn/tcp.log
verb 3

#public conf see /etc/openvpn/server/public.conf
push "route 10.8.0.0 255.255.255.0"

#route 192.168.0.0 255.255.255.0

以上使用需要注意,
– 参数“proto”声明OpenVPN服务端与客户端的通讯协议,可选值有“udp”和“tcp”
– 参数“dev”声明设备的类型“tun”(OSI第三层)、“tap”(OSI第二层)
– 参数“ca”声明证书颁发机构即根证书证书路径
– 参数“cert”声明服务器端公钥证书路径
– 参数“key”声明服务器端私钥证书路径
– 参数“dh”声明服务器端秘钥交换证书路径
– 参数“status”声明记录服务器端的状态文件
– 参数“server”声明使用的网段,服务器默认使用“.1”地址作为TUN/TAP的网关,其他的分配给客户端
– 参数“ifconfig-pool-persist”声明登录客户端与地址的记录文件路径
– 参数“push”声明推动到客户端操作(例如推送route、dhcp-option等)
– 参数“client-to-client”声明客户端到客户端可相互访问
– 参数“keepalive”声明服务端到客户端之间的断开超时时间
– 参数“tls-auth”声明TLS控制通道之上添加额外的HMAC身份验证层以减轻Dos攻击和TLS堆栈攻击(启用HMAC防火墙)
– 参数“max-clients”声明最大并发的客户端数量
– 参数“user”声明VPN隧道的所有者用户
– 参数“group”声明VPN隧道的所有组
– 参数“persist-key”声明不通过SIGUSR1或“ping-restart”参数重读配置文件
– 参数“persist-tun”声明不通过SIGUSR1或“ping-restart”参数重启up/down脚本
– 参数“log”声明日志文件的路径
– 参数“verb”声明日志输出的详细级别,1-4正常范围、5包含数据包读写输出、6-11包含调试
– 参数“mssfix”声明VPN隧道的TCP恢复数据包的大小限制

2.5.3 增加配置udp服务的文件

vim /etc/openvpn/server/udp.conf

加入如下配置:

server 10.8.0.0 255.255.255.0
dev tun
proto udp
port 1194

ca /etc/openvpn/server/ca.crt
cert /etc/openvpn/server/server.crt
key /etc/openvpn/server/server.key
dh /etc/openvpn/server/dh.pem
data-ciphers AES-256-GCM:AES-128-GCM:AES-256-CBC:AES-128-CBC
cipher AES-256-GCM

client-config-dir /etc/openvpn/server/ccd
ifconfig-pool-persist /etc/openvpn/server/ipp_udp.txt

client-to-client
keepalive 10 120
max-clients 100
user root
group root
persist-key
persist-tun
mssfix 1300

status /var/log/openvpn/status_udp.log
status-version 2
suppress-timestamps
log /var/log/openvpn/udp.log
verb 3

#public conf see /etc/openvpn/server/public.conf
push "route 10.8.1.0 255.255.255.0"

#route 192.168.1.0 255.255.255.0

根据以上配置,我们需要创建配置文件定义的目录,

mkdir -p /etc/openvpn/server/ccd /var/log/openvpn

2.5.4 配置TCP与UDP实例服务控制脚本

cp /usr/lib/systemd/system/openvpn-server@.service /usr/lib/systemd/system/openvpn-server@tcp.service
cp /usr/lib/systemd/system/openvpn-server@.service /usr/lib/systemd/system/openvpn-server@udp.service

2.5.5 启动TCP与UDP服务并设置自启动

systemctl start openvpn-server@tcp.service
systemctl start openvpn-server@udp.service
systemctl enable openvpn-server@tcp.service
systemctl enable openvpn-server@udp.service

如果启动服务有异常,请通过以下日志排错,

tail -f /var/log/messages
tail -f /var/log/openvpn*.log

2.5.6 设置实例共同配置文件

如何实现OpenVPN多实例共用配置文件?

2.5.7 开放服务端口

firewall-cmd --permanent --add-service=openvpn
firewall-cmd --permanent --add-port=1194/tcp
firewall-cmd --reload
firewall-cmd --list-all

2.5.8 实现两实例间的相互通讯

如何实现OpenVPN实例间相互通讯?

2.6 配置OpenVPN客户端

2.6.1 签发客户端证书

如何签发OpenVPN客户端证书?

2.6.2 Linux客户端配置

如何配置Debian OpenVPN客户端?

2.6.3 RouterOS客户端配置

如何设置RouterOS作为OpenVPN客户端?

2.6.4 Windows端的安装部署

请从以下链接下载并安装OpenVPN Windows客户端
https://openvpn.net/community-downloads/
客户端由于非本章重点,以上请自行下载安装,配置文件请

notepad C:\Program Files\OpenVPN\config\client.ovpn

配置修改如下,

client
;dev tap
dev tun
;proto tcp
proto udp
remote openvpnser.cmdschool.org 1194
resolv-retry infinite
nobind
persist-key
persist-tun
ca ca.crt
cert clientName.crt
key clientName.key
remote-cert-tls server
#comp-lzo
verb 3

以上使用需要注意,
– 参数“remote”声明远程主机名称(IP地址)、端口、协议
– 客户端证书“ca.crt”、“clientName.crt”、“clientName.key”请复制到“C:\Program Files\OpenVPN\config\”目录

2.6.5 安卓端的安装部署

请从以下链接下载并安装OpenVPN 安卓客户端
https://github.com/schwabe/ics-openvpn

参阅文档:
==================

OpenVPN参数解析
—————
https://openvpn.net/community-resources/reference-manual-for-openvpn-2-4/#scripting-and-environmental-variables

参考手册
——————
https://openvpn.net/community-resources/#articles
https://openvpn.net/community-resources/#documentation
https://community.openvpn.net/openvpn/wiki

没有评论

发表回复

VPN
如何基于Ubuntu部署OpenVPN服务端?

1 基础知识 1.1 OpenVPN的介绍 OpenVPN是一个功能齐全的开源SSL VPN解决方案 …

VPN
如何签发OpenVPN客户端证书?

1 前言 一个问题,一篇文章,一出故事。 以下章节在一部服务器上同时运行一个TCP OpenVPN实 …

VPN
如何实现OpenVPN多实例共用配置文件?

1 前言 一个问题,一篇文章,一出故事。 以下章节在一部服务器上同时运行一个TCP OpenVPN实 …