如何在CentOS 7上从零开始搭建OpenVPN服务器详细教程?

在当今注重网络安全的时代,构建一个个人或企业专属的虚拟专用网络(VPN)至关重要,OpenVPN 作为一款开源、强大且灵活的 VPN 解决方案,深受广大用户信赖,本文将详细介绍如何在 CentOS 7 系统上,一步步搭建一个功能完整、安全可靠的 OpenVPN 服务器,涵盖从环境准备到客户端配置的全过程。

如何在CentOS 7上从零开始搭建OpenVPN服务器详细教程?

环境准备

在开始之前,请确保您拥有一台公网可达的 CentOS 7 服务器,并且拥有 root 权限或 sudo 权限,整个搭建过程将围绕这台服务器展开。

更新系统软件包到最新版本,这是一个良好的运维习惯,可以修复已知的安全漏洞和软件缺陷。

yum update -y

安装 OpenVPN 所需的软件包,CentOS 7 的默认源中不包含 OpenVPN,因此我们需要先安装 EPEL (Extra Packages for Enterprise Linux) 扩展源。

yum install epel-release -y
yum install openvpn easy-rsa -y

这里,openvpn 是核心服务程序,而 easy-rsa 则是一个用于管理证书颁发机构(CA)和生成各类密钥、证书的实用工具集,是保障 VPN 通信安全的基石。

配置证书颁发机构 (CA)

OpenVPN 的安全性依赖于 SSL/TLS 协议,其核心是公钥基础设施(PKI),我们需要创建一个私有的 CA 来签发服务器和客户端的证书。

  1. 复制并准备 Easy-RSA 脚本
    easy-rsa 脚本目录复制到 OpenVPN 的配置目录下,便于统一管理。

    mkdir -p /etc/openvpn/easy-rsa
    cp -r /usr/share/easy-rsa/3/* /etc/openvpn/easy-rsa/
    cd /etc/openvpn/easy-rsa
  2. 初始化 PKI 并生成 CA 根证书
    Easy-RSA 3.x 版本使用了更简洁的命令。

    ./easyrsa init-pki
    ./easyrsa build-ca nopass

    init-pki 会创建一个名为 pki 的目录用于存放所有证书和密钥。build-ca nopass 会生成 CA 根证书(ca.crt)和私钥(ca.key),nopass 参数表示不为私钥设置密码,方便自动化管理,但在生产环境中建议设置强密码。

生成服务器证书与密钥

有了 CA 之后,我们就可以为 OpenVPN 服务器生成其专属的证书和密钥了。

./easyrsa gen-req server nopass
./easyrsa sign-req server server

第一条命令 gen-req server nopass 生成了服务器的证书请求文件(server.req)和私钥(server.key),第二条命令 sign-req server server 使用我们之前创建的 CA 来签署这个请求,生成最终的服务器证书(server.crt),在签署过程中,系统会要求你确认,输入 yes 即可。

如何在CentOS 7上从零开始搭建OpenVPN服务器详细教程?

为了增强安全性,还需要生成 Diffie-Hellman (DH) 参数,用于在密钥交换过程中提供前向保密性。

./easyrsa gen-dh

这个过程可能会根据服务器性能花费几分钟时间,完成后,会在 pki 目录下生成 dh.pem 文件。

生成一个 HMAC 签名(ta.key),用于抵御 DoS 攻击和 UDP 端口泛洪攻击。

openvpn --genkey --secret /etc/openvpn/ta.key

至此,服务器所需的所有证书和密钥文件都已准备就绪,下表列出了关键文件及其用途:

文件名 路径 用途
ca.crt /etc/openvpn/easy-rsa/pki/ CA 根证书,用于验证所有证书的合法性
server.crt /etc/openvpn/easy-rsa/pki/issued/ OpenVPN 服务器公钥证书
server.key /etc/openvpn/easy-rsa/pki/private/ OpenVPN 服务器私钥,需严格保密
dh.pem /etc/openvpn/easy-rsa/pki/ Diffie-Hellman 参数文件
ta.key /etc/openvpn/ HMAC 签名文件,增强安全性

配置 OpenVPN 服务器

OpenVPN 提供了一个示例配置文件,我们可以基于它进行修改。

cp /usr/share/doc/openvpn-*/sample/sample-config-files/server.conf /etc/openvpn/

使用文本编辑器(如 vinano)打开 /etc/openvpn/server.conf,进行以下关键配置:

port 1194
proto udp
dev tun
ca ca.crt
cert server.crt
key server.key
dh dh.pem
server 10.8.0.0 255.255.255.0
ifconfig-pool-persist ipp.txt
push "redirect-gateway def1 bypass-dhcp"
push "dhcp-option DNS 8.8.8.8"
push "dhcp-option DNS 8.8.4.4"
tls-auth ta.key 0
cipher AES-256-CBC
auth SHA256
user nobody
group nobody
persist-key
persist-tun
status openvpn-status.log
verb 3

配置项解释:

  • portproto:指定 OpenVPN 监听的端口和协议,UDP 性能更佳。
  • dev tun:使用 TUN 虚拟网络设备,创建一个路由模式的 VPN。
  • ca, cert, key, dh:指定我们刚刚生成的证书和密钥文件的路径。
  • server 10.8.0.0 255.255.255.0:为 VPN 客户端分配一个虚拟网段。
  • push "redirect-gateway...":将客户端的所有流量都通过 VPN 服务器转发。
  • push "dhcp-option DNS...":为客户端指定 DNS 服务器。
  • tls-auth ta.key 0:启用 HMAC 签名验证。
  • user nobody, group nobody:以低权限用户运行 OpenVPN 服务,提高安全性。

配置网络与防火墙

为了让客户端的流量能够通过 VPN 服务器访问互联网,需要开启内核的 IP 转发功能。

echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf
sysctl -p

CentOS 7 默认使用 firewalld 作为防火墙管理工具,我们需要配置防火墙,允许 VPN 流量并设置 NAT。

# 添加 OpenVPN 服务到防火墙
firewall-cmd --add-service=openvpn --permanent
# 添加 tun0 接口到信任区域
firewall-cmd --add-interface=tun0 --permanent
# 设置地址伪装(MASQUERADE),实现 NAT
firewall-cmd --add-masquerade --permanent
# 重新加载防火墙配置
firewall-cmd --reload

启动服务并生成客户端证书

可以启动 OpenVPN 服务并设置其开机自启。

如何在CentOS 7上从零开始搭建OpenVPN服务器详细教程?

systemctl start openvpn@server
systemctl enable openvpn@server

检查服务状态和 tun0 接口是否已成功创建:

systemctl status openvpn@server
ip addr show tun0

为客户端生成证书,为名为 client1 的客户端生成证书:

cd /etc/openvpn/easy-rsa
./easyrsa gen-req client1 nopass
./easyrsa sign-req client client1

生成后,需要将以下文件安全地传输到客户端设备上:

  • /etc/openvpn/easy-rsa/pki/ca.crt
  • /etc/openvpn/easy-rsa/pki/issued/client1.crt
  • /etc/openvpn/easy-rsa/pki/private/client1.key
  • /etc/openvpn/ta.key

在客户端,创建一个 .ovpn 配置文件,内容如下:

client
dev tun
proto udp
remote YOUR_SERVER_IP 1194
resolv-retry infinite
nobind
user nobody
group nogroup
persist-key
persist-tun
ca ca.crt
cert client1.crt
key client1.key
remote-cert-tls server
tls-auth ta.key 1
cipher AES-256-CBC
auth SHA256
verb 3

YOUR_SERVER_IP 替换为你的服务器公网 IP 地址,将此文件与下载的四个证书/密钥文件放在同一目录,即可使用 OpenVPN 客户端连接。


相关问答FAQs

Q1:客户端可以成功连接到 VPN 服务器,但无法访问互联网,是什么原因?
A: 这是一个非常常见的网络配置问题,通常由以下两个原因导致:

  1. IP 转发未开启:请检查 /etc/sysctl.conf 文件中是否包含 net.ipv4.ip_forward = 1,并使用 sysctl -p 使其生效。
  2. 防火墙 NAT 规则错误:请确认 firewalld 已经正确配置了地址伪装,可以使用 firewall-cmd --query-masquerade 命令检查,如果返回 no,请重新执行 firewall-cmd --add-masquerade --permanentfirewall-cmd --reload

Q2:如何撤销一个已发放的客户端证书,例如禁用丢失设备的访问权限?
A: Easy-RSA 提供了便捷的证书撤销功能,操作步骤如下:

  1. 进入 Easy-RSA 目录:cd /etc/openvpn/easy-rsa
  2. 执行撤销命令,例如撤销 client1 的证书:./easyrsa revoke client1,过程中需要输入 yes 确认。
  3. 生成新的证书吊销列表(CRL):./easyrsa gen-crl
  4. 将生成的 CRL 文件复制到 OpenVPN 配置目录:cp pki/crl.pem /etc/openvpn/
  5. 编辑 /etc/openvpn/server.conf 文件,添加一行 crl-verify crl.pem
  6. 重启 OpenVPN 服务使配置生效:systemctl restart openvpn@server
    完成以上步骤后,client1 的证书将被列入黑名单,无法再连接到 VPN 服务器。

【版权声明】:本站所有内容均来自网络,若无意侵犯到您的权利,请及时与我们联系将尽快删除相关内容!

(0)
热舞的头像热舞
上一篇 2025-10-13 13:04
下一篇 2025-10-13 13:08

相关推荐

  • centos怎么破密

    在Linux系统管理中,忘记CentOS系统密码是一种常见但令人头疼的问题,幸运的是,通过单用户模式或救援模式,我们可以绕过密码验证并重置root密码,本文将详细介绍在CentOS 7及更高版本中破解密码的具体步骤,涵盖准备工作、操作流程和注意事项,帮助用户安全高效地解决密码问题,准备工作与注意事项在开始操作前……

    2026-01-01
    005
  • CentOS安装RAID驱动找不到设备怎么办?

    在CentOS系统中安装RAID驱动是确保服务器或工作站存储性能与数据安全的关键步骤,RAID(磁盘阵列)技术通过多块硬盘的组合实现数据冗余、读写加速或容量扩展,而正确的驱动安装则是RAID控制器被系统识别和正常工作的前提,本文将详细介绍CentOS系统下RAID驱动的安装流程、注意事项及常见问题解决方案,RA……

    2025-11-03
    0011
  • CentOS 6.5 Final如何升级或安全维护?

    CentOS 6.5 Final作为一款经典的Linux发行版,自发布以来在企业级环境中得到了广泛应用,尽管其生命周期已结束,但在某些特定场景下,它仍具有一定的参考价值,本文将从系统概述、安装配置、核心组件管理、安全维护及常见应用场景等方面,详细介绍CentOS 6.5 Final的关键信息,系统概述与历史背景……

    2025-12-10
    003
  • CentOS 7.3如何升级到内核4.10?详细步骤与注意事项

    CentOS 7.3 作为一款广泛使用的服务器操作系统,其默认内核版本可能无法满足某些特定场景下的性能需求或新功能支持,升级内核至 4.10 版本可以带来显著的性能提升、更好的硬件兼容性以及最新的安全补丁,本文将详细介绍在 CentOS 7.3 系统中升级内核至 4.10 的完整步骤、注意事项及相关配置优化,升……

    2025-11-05
    007

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

广告合作

QQ:14239236

在线咨询: QQ交谈

邮件:asy@cxas.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信