凌峰创科服务平台

CentOS OpenVPN服务器如何搭建?

重要提示

  • 操作系统: 本教程主要针对 CentOS 7/8/9,对于其他 Red Hat 系发行版(如 RHEL, Rocky Linux, AlmaLinux),命令基本通用。
  • 权限: 大部分操作需要 root 权限,你可以使用 sudo 前缀,或者直接 su - 切换到 root 用户。
  • 防火墙: 本教程会详细配置防火墙,确保 OpenVPN 服务能被正常访问。
  • 安全性: 这份教程会设置强密码和加密参数,但请务必定期更新系统和软件。

第一步:准备工作

  1. 更新系统 确保你的系统是最新的,这是安全的基础。

    # 对于 CentOS 7
    sudo yum update -y
    # 对于 CentOS 8/9
    sudo dnf update -y
  2. 安装必要工具 安装 wget(用于下载安装包)、iptables(用于配置防火墙,即使使用 firewalld 底层也是它)和 git(方便获取 easy-rsa)。

    # 对于 CentOS 7
    sudo yum install -y wget iptables-services git
    # 对于 CentOS 8/9
    sudo dnf install -y wget iptables-services git
  3. 关闭 SELinux 和防火墙(临时操作) 为了简化安装过程,我们先临时关闭它们,安装成功后再按需开启。

    # 1. 关闭 SELinux
    sudo setenforce 0
    # 编辑 SELinux 配置文件,使其永久关闭(可选,但生产环境建议设置为 Permissive)
    sudo sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
    # 2. 停止并禁用 firewalld
    sudo systemctl stop firewalld
    sudo systemctl disable firewalld

第二步:安装 OpenVPN 和 Easy-RSA

  1. 安装 EPEL 仓库 OpenVPN 不在 CentOS 的默认源中,我们需要启用 EPEL (Extra Packages for Enterprise Linux) 仓库。

    # 对于 CentOS 7
    sudo yum install -y epel-release
    # 对于 CentOS 8/9
    sudo dnf install -y epel-release
  2. 安装 OpenVPN 和 Easy-RSA easy-rsa 是一个用于构建和管理 PKI (Public Key Infrastructure) 的工具集,用于生成服务器和客户端的证书。

    # 对于 CentOS 7
    sudo yum install -y openvpn easy-rsa
    # 对于 CentOS 8/9
    sudo dnf install -y openvpn easy-rsa

第三步:配置 PKI (证书颁发机构) 和密钥

这是最关键的一步,我们将创建一个私有的 CA 来签发所有 VPN 使用的证书。

  1. 准备 Easy-RSA 工作目录 我们将创建一个专门用于存放证书和密钥的目录。

    # 创建一个工作目录
    mkdir -p ~/openvpn-ca
    # 将 easy-rsa 的示例配置文件复制到我们的工作目录
    cp -r /usr/share/easy-rsa/3/* ~/openvpn-ca/
  2. 初始化 PKI 并创建 CA 进入工作目录,初始化 PKI,并创建我们自己的根证书颁发机构。

    cd ~/openvpn-ca
    # 初始化 PKI
    ./easyrsa init-pki
    # 创建 CA,系统会提示你输入一个 Common Name (CN),"MyVPN-CA",并设置一个密码,请务必记住这个密码!
    ./easyrsa build-ca nopass
    • nopass: 表示 CA 私钥不使用密码保护,方便服务器自动启动,如果安全性要求极高,可以去掉此参数,但每次启动 OpenVPN 时都需要手动输入密码。
  3. 生成服务器证书和密钥 为 OpenVPN 服务器生成一个证书和私钥。

    # 生成服务器证书,Common Name 可以是服务器的域名或 IP,"server" 或 "vpn.mydomain.com"
    ./easyrsa gen-req server nopass
    # 使用 CA 来签署服务器证书
    ./easyrsa sign-req server server

    系统会问你 Confirm request details: (y/n),输入 y,然后会要求你输入之前创建 CA 时设置的密码。

  4. 生成 Diffie-Hellman 参数 这个参数用于增强前向保密性,生成过程可能需要几分钟。

    ./easyrsa gen-dh
  5. 生成 HMAC 密钥 这个密钥用于验证数据包的来源,防止某些攻击。

    openvpn --genkey --secret pki/ta.key
  6. 生成客户端证书和密钥 为你的第一个客户端生成证书,你可以为每个客户端都执行此步骤,使用不同的 Common Name。

    # 为客户端 "client1" 生成证书
    ./easyrsa gen-req client1 nopass
    # 使用 CA 签署客户端证书
    ./easyrsa sign-req client client1

    同样,输入 y 确认,并输入 CA 的密码。


第四步:配置 OpenVPN 服务器

  1. 创建服务器配置文件 将 OpenVPN 的示例配置文件复制到 /etc/openvpn/server/ 目录下,并命名为 server.conf

    sudo cp /usr/share/doc/openvpn-*/sample/sample-config-files/server.conf /etc/openvpn/server/
  2. 编辑配置文件 用你喜欢的编辑器(如 vimnano)打开并编辑配置文件。

    sudo vim /etc/openvpn/server/server.conf

    找到并修改以下几行:

    port 1194
    proto udp
    dev tun
    # 将 ca, cert, key 的路径指向我们生成的文件
    ca /root/openvpn-ca/pki/ca.crt
    cert /root/openvpn-ca/pki/issued/server.crt
    key /root/openvpn-ca/pki/private/server.key
    dh /root/openvpn-ca/pki/dh.pem
    # 推送 DNS 服务器给客户端,避免 DNS 泄漏
    push "redirect-gateway def1 bypass-dhcp"
    push "dhcp-option DNS 8.8.8.8"
    push "dhcp-option DNS 1.1.1.1"
    # 保持客户端连接
    keepalive 10 120
    # 使用 HMAC
    tls-crypt /root/openvpn-ca/pki/ta.key
    # 使用更强的加密算法
    cipher AES-256-CBC
    auth SHA256
    # 启用用户/密码认证(可选,但推荐)
    ;client-cert-not-required
    ;username-as-common-name
    ;plugin /usr/lib64/openvpn/plugins/openvpn-plugin-auth-pam.so /etc/pam.d/login
    # 让 OpenVPN 作为网关
    server 10.8.0.0 255.255.255.0
    # 允许客户端之间互相通信(可选)
    ;client-to-client
    # 为客户端分配的 IP 地址池
    ;ifconfig-pool-persist /var/log/openvpn/ipp.txt
    # 启用日志
    user nobody
    group nobody
    persist-key
    persist-tun
    status /var/log/openvpn/openvpn-status.log
    log-append /var/log/openvpn/openvpn.log
    verb 3

    重要说明:

    • plugin ... pam.so 这几行默认是注释掉的,如果你希望用户可以使用用户名和密码登录,而不仅仅是证书,可以取消注释它们,本教程暂不启用,以证书认证为主。
    • cipherauth 设置了强加密算法,与你的客户端配置必须一致。

第五步:配置系统防火墙和 IP 转发

  1. 启用 IP 转发 VPN 需要服务器作为客户端的网关,因此必须开启内核的 IP 转发功能。

    # 临时生效
    sudo sysctl -w net.ipv4.ip_forward=1
    # 永久生效
    echo "net.ipv4.ip_forward=1" | sudo tee -a /etc/sysctl.conf
    sudo sysctl -p
  2. 配置防火墙规则 我们重新启用并配置 firewalld,这是 CentOS 推荐的防火墙工具。

    
    
分享:
扫描分享到社交APP
上一篇
下一篇