CentOS7部署OpenVPN服务端


  1. CentOS7 最高只能安装OpenVPN 2.4.12,cipher只能是AES-256-CBC,不支持最新的 AES-256-GCM
  2. 文章中easy-rsa使用的是2.3.3,不支持SHA-256,因此客户端需要增加一行兼容配置 tls-cipher "DEFAULT:@SECLEVEL=0",
  3. 如果要生成SHA-256,那么easy-rsa使用 https://github.com/OpenVPN/easy-rsa/releases/download/v3.2.1/EasyRSA-3.2.1.tgz

一、配置阿里镜像

二、安装OpenVPN

安装EPEL

额外的企业Linux软件包(EPEL)存储库是由Fedora项目管理的一个额外存储库,其中包含非标准但受欢迎的软件包。OpenVPN不在默认的CentOS存储库中,但在EPEL中可用,因此安装EPEL:

Markup 全选
yum install epel-release -y

安装OpenVPN

C# 全选
yum install -y openvpn

如果没有安装过wget,还需要安装wget,我们将使用它来安装Easy RSA

Markup 全选
yum install -y wget

wget --version 可以查看当前环境有没有安装wget

CentOS7部署OpenVPN服务端

使用wget下载Easy RSA。出于本教程的目的,我们建议使用easy-rsa-2,因为该版本有更多的可用文档。您可以在项目的Releases页面上找到easy-rsa-2最新版本的下载链接:

Markup 全选
wget -O /tmp/easy-rsa-3.2.1.tar.gz https://github.com/OpenVPN/easy-rsa/releases/download/v3.2.1/EasyRSA-3.2.1.tgz

如果遇到网络问题无法下载,可以先下载后,上传到linux系统中

接下来使用tar解压缩文件

注意,得先切换到压缩文件所在得目录,然后进行解压操作

Markup 全选
cd /tmp # 切换到tmp目录
tar -zxvf easy-rsa-3.2.1.tar.gz   # 解压缩文件

解压或会多一个easy-rsa-old-2.3.3的目录,在/etc/openvpn下创建一个新的子目录,并命名为easy-rsa:

Markup 全选
mkdir /etc/openvpn/easy-rsa

将提取的Easy RSA文件复制到新目录:

Markup 全选
cp -rf /tmp/EasyRSA-3.2.1/* /etc/openvpn/easy-rsa/

然后将目录的所有者更改为您的非root sudo用户:

Markup 全选
chown garson /etc/openvpn/easy-rsa/

三、生成密钥和证书

进入 /etc/openvpn/easy-rsa目录

 

3.1 适用与较新版本 easy-rsa-3.2.1 版本

Markup 全选
# 初始化 PKI 目录
./easyrsa init-pki

# 创建 CA (会提示你输入密码,此过程默认生成 SHA-256)
./easyrsa build-ca nopass

# 生成服务器证书
./easyrsa gen-req server nopass
./easyrsa sign-req server server

# 生成客户端私钥和请求文件
./easyrsa gen-req clientLinux nopass
# 签署证书(类型为 client)
./easyrsa sign-req client clientLinux

# 生成 Diffie-Hellman 参数 (2048位)
./easyrsa gen-dh

CentOS7部署OpenVPN服务端

CentOS7部署OpenVPN服务端

CentOS7部署OpenVPN服务端

 

CentOS7部署OpenVPN服务端

CentOS7部署OpenVPN服务端

CentOS7部署OpenVPN服务端

CentOS7部署OpenVPN服务端

复制文件到/etc/openvpn/server

cp ca.crt dh.pem issued/server.crt private/server.key /etc/openvpn/server/

 

 

3.2 适用与 easy-rsa-2.3.3  版本

----------- BEGIN 以下是 2.3.3的运行脚本,已经不适用了,留着备份 -----------

vars文件配置

参考:https://www.yesdotnet.com/archive/post/611695169900549.html#mcetoc_1ick3lmavi1

Markup 全选
source ./vars

使用 build-ca 脚本构建证书颁发机构。您将被提示输入证书字段的值,但如果您之前在  vars 文件中设置了变量,所有选项都将已设置为默认值。您可以按  ENTER 接受每个选项的默认值:

Markup 全选
./build-ca nopass

执行命令如果出现./clan-all提示,那么就执行一下下 ./clean-all

 

此脚本将生成一个名为 ca.key  的文件。这是用于签署服务器和客户端证书的私钥。如果丢失该文件,您将无法再信任来自此证书颁发机构的任何证书,如果有人能够访问此文件,则可以签署新证书并在您不知情的情况下访问您的 VPN。因此,OpenVPN 建议将 ca.key 存储在尽可能脱机的位置,并且只有在创建新证书时才应激活它。

CentOS7部署OpenVPN服务端

接下来,使用 build-key-server 脚本为服务器创建密钥和证书:

Markup 全选
./build-key-server server

与构建 CA 一样,您将看到您设置的默认值,因此您可以在提示时按ENTER。此外,您将被提示输入挑战密码和可选的公司名称。如果您设置了挑战密码,连接到 VPN 时将要求您输入该密码。如果您不想设置挑战密码,只需将此行留空并按ENTER。最后,输入 Y  以提交更改。

CentOS7部署OpenVPN服务端

创建服务器密钥和证书的最后一部分是生成 Diffie-Hellman 密钥交换文件。使用 build-dh  脚本来完成此操作:

Markup 全选
./build-dh

CentOS7部署OpenVPN服务端

一旦服务器完成生成密钥交换文件,将服务器密钥和证书从  keys 目录复制到 openvpn/server 目录:

Markup 全选
# 切换keys目录
cd keys/
cp dh2048.pem ca.crt server.crt server.key /etc/openvpn
# 返回上级目录
cd ..

每个客户端还需要一个证书,以便 OpenVPN 服务器对其进行身份验证。这些密钥和证书将在服务器上创建,然后您将不得不将它们复制到您的客户端,这将在后续步骤中完成。建议您为打算连接到您的 VPN 的每个客户端生成单独的密钥和证书。

因为我们只在这里设置了一个客户端,我们将其称为client,但如果您愿意,可以将其更改为更具描述性的名称:

Markup 全选
cd /etc/openvpn/easy-rsa
./build-key client

CentOS7部署OpenVPN服务端

最后,将带版本号的 OpenSSL 配置文件 openssl-1.0.0.cnf 复制为无版本名称的文件 openssl.cnf。如果未执行此操作,可能会导致 OpenSSL 无法加载配置,因为它无法检测到其版本:

Markup 全选
cp /etc/openvpn/easy-rsa/openssl-1.0.0.cnf /etc/openvpn/easy-rsa/openssl.cnf

现在,您的服务器和客户端所需的所有必要密钥和证书都已生成,您可以继续设置两台机器之间的路由。

copy文件到/etc/openvpn/server目录

/etc/openvpn/easy-rsa/keys/ca.crt
/etc/openvpn/easy-rsa/keys/server.crt
/etc/openvpn/easy-rsa/keys/server.key
/etc/openvpn/easy-rsa/keys/dh2048.pem

 

----------- End 以上是 2.3.3的运行脚本,已经不适用了,留着备份 -----------

四、配置OpvnVPN

OpenVPN在其文档目录中有几个示例配置文件。首先,将示例server.conf文件复制为您自己配置文件的起点。

Markup 全选
sudo cp /usr/share/doc/openvpn-2.4.12/sample/sample-config-files/server.conf /etc/openvpn/

输入编辑配置文件

 

在此文件中,有几行需要更改,其中大多数只需要取消注释,即删除行首的分号;。这些行的功能以及本教程未提及的其他行在每行上方的注释中都有详细说明。

首先,找到并取消注释包含push "redirect-gateway def1 bypass-dhcp"的行。这样做将告诉您的客户端通过OpenVPN服务器重定向其所有流量。请注意,启用此功能可能会导致其他网络服务(如SSH)的连接问题:

Markup 全选
push "redirect-gateway def1 bypass-dhcp"

因为您的客户端将无法使用由ISP提供的默认DNS服务器(因为其流量将被重新路由),您需要告诉它可以使用哪些DNS服务器连接到OpenVPN。您可以选择不同的DNS服务器,但在这里我们将使用Google的公共DNS服务器,其IP为8.8.8.8和8.8.4.4。

通过取消注释push "dhcp-option DNS ..."行并更新IP地址来设置这一点:

Markup 全选
push "dhcp-option DNS 8.8.8.8"
push "dhcp-option DNS 8.8.4.4"

我们希望OpenVPN在启动后不具备特权,因此我们需要告诉它以nobody用户和组运行。为此,请取消注释user nobody和group nobody行:

Markup 全选
user nobody
group nobody

接下来,取消注释topology subnet行。这与其下面的server 10.8.0.0 255.255.255.0行一起,将配置您的OpenVPN安装为子网,并告诉客户机应使用哪个IP地址。在本例中,服务器将成为10.8.0.1,第一个客户端将成为10.8.0.2:

Markup 全选
topology subnet

还建议您在服务器配置文件中添加以下行。这样可以双重检查任何传入的客户端证书是否真的来自客户端,从而加强我们稍后将建立的安全参数:

Markup 全选
# 阿里云开启这个后,会失败,不知道为什么,所以阿里云上这个可以不用
remote-cert-eku "TLS Web Client Authentication"

最后,这是一种确保计算机网络上安全通信的加密协议。为此,您需要生成一个静态加密密钥(在我们的示例中命名为myvpn.tlsauth,但您可以选择任何名称)。在创建此密钥之前,通过在配置文件中的tls-auth ta.key 0行前面加上分号来注释该行。然后,在其下一行添加tls-crypt myvpn.tlsauth:

Markup 全选
;tls-auth ta.key 0
tls-crypt myvpn.tlsauth

使用以下命令生成静态加密密钥

Markup 全选
sudo openvpn --genkey --secret /etc/openvpn/myvpn.tlsauth

允许多个客户端使用相同的证书连接到服务器。如果要固定证书的IP地址,就不应该启用这个

Markup 全选
duplicate-cn

适用CCD固定客户端IP地址

client-config-dir /etc/openvpn/server/ccd

需要配合ccd目录,文件名需要和客户端证书的 Common Name (CN)。假设你的客户端证书 CN 是 clientWinserver。

配置方式和 topology subnet 有关系,子网的话,后面的IP一般为:255.255.255.0

CentOS7部署OpenVPN服务端

查看现有客户端证书的 Common Name (CN):

Markup 全选
openssl x509 -in /etc/openvpn/easy-rsa/pki/issued/clientWinserver.crt -noout -subject

CentOS7部署OpenVPN服务端

如果要通过VPN可以访问到内网

Markup 全选
push "route 192.168.3.0 255.255.255.0"

这样,外网就可以通过VPN访问内部3网段的设备了

 

现在,您的服务器已配置完成

服务端完整配置如下(删除注释后的配置)

Markup 全选
local 0.0.0.0
port 1194
proto udp
dev tun
ca ca.crt
cert server.crt
key server.key  # This file should be kept secret
dh dh.pem
topology subnet
server 10.8.0.0 255.255.255.0
ifconfig-pool-persist ipp.txt
client-config-dir /etc/openvpn/server/ccd
push "redirect-gateway def1 bypass-dhcp"
push "dhcp-option DNS 8.8.8.8"
push "dhcp-option DNS 8.8.4.4"
;client-to-client
;duplicate-cn
keepalive 10 120
;tls-auth ta.key 0 # This file is secret
tls-crypt myvpn.tlsauth
# 阿里云开启这个后,会失败
# remote-cert-eku "TLS Web Server Authentication"
cipher AES-256-CBC
;user nobody
;group nobody
persist-key
persist-tun
status openvpn-status.log
verb 3
explicit-exit-notify 1

客户端配置如下Windows:

Markup 全选
client
dev tun
proto udp
remote <server> 1194
resolv-retry infinite
nobind

# Downgrade privileges after initialization (non-Windows only)
;user nobody
;group nobody

persist-key
persist-tun
ca ca.crt
cert client.crt
key client.key
remote-cert-tls server
tls-crypt myvpn.tlsauth
cipher AES-256-CBC
verb 3
# 根据服务器配置
# remote-cert-eku "TLS Web Server Authentication"

 

五、防火墙设置

将 openvpn 服务添加到 firewalld 允许的服务列表中,然后再次运行该命令,但加上 --permanent 选项,使该设置永久生效

Markup 全选
firewall-cmd --zone=trusted --add-service openvpn
firewall-cmd --zone=trusted --add-service openvpn --permanent

您可以使用以下命令检查服务是否已正确添加:

Markup 全选
firewall-cmd --list-services --zone=trusted

CentOS7部署OpenVPN服务端

确保通过重新加载 firewalld 来实施这些防火墙规则的更改:

Markup 全选
firewall-cmd --reload

启用 IP 转发。这将会将来自客户端的所有网络流量路由到您服务器的 IP 地址,客户端的公共 IP 地址将被有效地隐藏。

打开 sysctl.conf 进行编辑:

Markup 全选
vi /etc/sysctl.conf 

然后在文件顶部添加以下行:

Markup 全选
net.ipv4.ip_forward = 1

最后,重新启动网络服务,以便 IP 转发生效:

Markup 全选
systemctl restart network.service

有了路由和防火墙规则,我们可以在服务器上启动 OpenVPN 服务。

启动OpenVPN

OpenVPN 是一个使用 systemctl 作为 systemd 服务进行管理的。我们将配置 OpenVPN 在启动时启动,这样只要您的服务器运行,您就可以随时连接到您的 VPN。为此,通过将其添加到 systemctl 来启用 OpenVPN 服务器:

Markup 全选
systemctl -f enable openvpn@server.service

然后启动 OpenVPN 服务:

Markup 全选
systemctl start openvpn@server.service

使用以下命令再次检查 OpenVPN 服务是否处于活动状态。您应该在输出中看到 active (running)

Markup 全选
systemctl status openvpn@server.service

 

固定IP

/etc/openvpn 下创建ccd文件夹

Markup 全选
/etc/openvpn

创建客户端节点配置文件,文件名和生成客户端证书名称相同

Markup 全选
touch <client-name>

配置文件内容:

Markup 全选
ifconfig-push 10.8.0.2 255.255.255.0

配置好后重启openvpn

Markup 全选
systemctl status openvpn@server.service

 

 

参考来源:

如何在Cent OS 7上设置和配置OpenVPN服务器_centos7 openv-CSDN博客

 

 

 

 

版权声明:本文为YES开发框架网发布内容,转载请附上原文出处连接
张国生
上一篇:CentOS安装宝塔
下一篇:CentOS7 nginx SSL证书申请并自动续期
评论列表

发表评论

评论内容
昵称:
关联文章

CentOS7部署OpenVPN服务
RockyLinux OpenVPN
CentOS7安装Docker
openVPN客户windows开机自动启动
Linux Open VPN客户部署
CentOS7 nginx SSL证书申请并自动续期
Linux CentOS7挂在共享目录
window server部署open VPN
服务实现
服务获取客户连接
2.客户服务连接
FTP服务软件 Xlight
客户发送,服务接收并输出
Nginx部署
服务回发,客户接收并输出
FTP服务软件 Serv-U
C# .net项目Docker方式部署
《步步入门》 .NET 6 部署到Linux
1.服务对端口进行侦听
JAVA环境部署

联系我们
联系电话:15090125178(微信同号)
电子邮箱:garson_zhang@163.com
站长微信二维码
微信二维码