如何在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在企业服务器上该怎样选?

    在操作系统的广阔世界里,麒麟和CentOS是两个常被提及但又截然不同的名字,它们虽然都基于Linux内核,但其设计理念、发展路径、目标用户和技术生态存在着本质的区别,理解这些差异,有助于我们根据实际需求做出正确的技术选型,起源与定位的根本不同麒麟操作系统是中国自主研发的操作系统代表,其诞生和发展与国家信息安全战……

    2025-10-08
    003
  • 如何成功创建并管理DWS 3.0集群?

    摘要:本文主要介绍了如何创建DWS 3.0集群。需要准备相应的服务器硬件和网络环境;按照DWS 3.0的安装指南进行软件安装和配置;通过一系列的性能测试和优化,确保集群的稳定性和高效性。

    2024-08-05
    006
  • CentOS系统如何用命令行限制网卡上传下载速度?

    在管理和维护 CentOS 服务器的过程中,有时我们需要对网卡的速率进行限制,这可能是为了模拟特定的网络环境进行测试、遵守服务商的带宽政策,或是为了进行服务质量控制,防止单个应用占用过多带宽,本文将详细介绍在 CentOS 系统中限制网卡速度的两种主流方法,并解释如何使这些配置永久生效,使用 ethtool 命……

    2025-10-12
    004
  • 如何根据访问量优化服务器配置?

    服务器配置对于处理高访问量至关重要,需要根据网站或应用的访问量来选择合适的硬件和软件资源。合理的服务器配置可以保证网站的稳定运行,提高用户体验,并减少因访问量过大导致的宕机风险。

    2024-08-08
    005

发表回复

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

联系我们

QQ-14239236

在线咨询: QQ交谈

邮件:asy@cxas.com

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

关注微信