凌峰创科服务平台

Ubuntu如何快速搭建OpenVPN服务器?

摘要

我们将使用 easy-rsa 工具来管理 PKI (Public Key Infrastructure, 公钥基础设施),这是一种推荐的最佳实践,可以简化证书的创建和管理,整个过程将在一个全新的 Ubuntu 服务器上完成。

Ubuntu如何快速搭建OpenVPN服务器?-图1
(图片来源网络,侵删)

第一步:准备工作

  1. 一台 Ubuntu 服务器

    • 推荐使用 Ubuntu 20.04 或 22.04 LTS 版本。
    • 一个干净的、非生产环境的实例。
    • 拥有 sudo 权限的非 root 用户。
    • 服务器拥有一个公网 IP 地址。
  2. 客户端设备

    您将用于连接 VPN 的电脑、手机或平板。


第二步:更新系统并安装依赖

登录到您的 Ubuntu 服务器,更新软件包列表并安装 OpenVPN 和 easy-rsa

Ubuntu如何快速搭建OpenVPN服务器?-图2
(图片来源网络,侵删)
# 更新软件包列表
sudo apt update && sudo apt upgrade -y
# 安装 OpenVPN 和 easy-rsa
sudo apt install openvpn easy-rsa -y

第三步:设置 PKI (Public Key Infrastructure)

PKI 是用于创建和管理 SSL/TLS 证书的框架,我们将使用 easy-rsa 来构建它。

  1. 创建 PKI 目录结构

    我们将在 /etc/openvpn/server/ 目录下创建一个名为 easy-rsa 的子目录来存放我们的密钥和证书。

    # 创建目录
    sudo mkdir -p /etc/openvpn/server/easy-rsa
    # 将 easy-rsa 的示例配置文件复制到新目录
    sudo cp -r /usr/share/easy-rsa/* /etc/openvpn/server/easy-rsa/
  2. 配置 vars 文件

    vars 文件用于存储证书生成时需要使用的默认变量,如国家、组织、邮箱等,编辑它以符合您的需求。

    sudo nano /etc/openvpn/server/easy-rsa/vars

    在文件末尾,您可以修改或取消注释以下行,填入您的信息:

    # 设置默认变量
    set_var EASYRSA_REQ_COUNTRY     "CN"
    set_var EASYRSA_REQ_PROVINCE    "Beijing"
    set_var EASYRSA_REQ_CITY        "Beijing"
    set_var EASYRSA_REQ_ORG         "My Company"
    set_var EASYRSA_REQ_EMAIL       "admin@example.com"
    set_var EASYRSA_REQ_OU          "My VPN OU"
    # 其他可选设置
    set_var EASYRSA_KEY_SIZE        2048  # 密钥大小,2048或4096
    set_var EASYRSA_ALGO            rsa
    set_var EASYRSA_CA_EXPIRE       3650  # CA证书有效期
    set_var EASYRSA_CERT_EXPIRE     365   # 服务器/客户端证书有效期

    保存并退出 (Ctrl+X, 然后按 Y, 最后按 Enter)。

  3. 初始化 PKI

    切换到 easy-rsa 目录并运行初始化脚本。

    cd /etc/openvpn/server/easy-rsa
    sudo ./easyrsa init-pki
  4. 构建 CA (Certificate Authority)

    CA 是信任的根机构,所有其他证书都由它签名。

    # 交互式创建 CA
    sudo ./easyrsa build-ca nopass

    当提示时,它会使用 vars 文件中的信息,您可以直接按 Enter 确认。nopass 参数表示 CA 私钥不带密码,方便服务器自动启动。

  5. 生成服务器证书和密钥

    我们为 OpenVPN 服务器本身生成证书和私钥。

    # 创建服务器证书请求并签名
    # 服务器名称可以自定义,这里用 "server"
    sudo ./easyrsa gen-req server nopass

    再次确认信息,使用 CA 来签署这个请求:

    sudo ./easyrsa sign-req server server

    系统会问您是否要签署请求,并验证请求是否来自 CA,输入 yes 并按 Enter。

  6. 生成 Diffie-Hellman 参数

    DH 参数用于增强前向安全性,防止窃听。

    sudo ./easyrsa gen-dh

    这个过程可能需要几分钟时间。

  7. 生成 HMAC 密钥

    HMAC 用于验证消息的完整性,可以防止某些攻击。

    sudo openvpn --genkey --secret ta.key
  8. 生成客户端证书(可选但推荐)

    为每个客户端生成唯一的证书是最安全的做法,这里我们为第一个客户端生成一个证书。

    # 创建客户端证书请求
    # 将 "client1" 替换为您的客户端名称
    sudo ./easyrsa gen-req client1 nopass

    注意:在实际使用中,您需要为每个连接的设备都执行此步骤,并为它们命名不同的名称(如 client2, phone, laptop 等)。

    使用 CA 签署客户端证书:

    sudo ./easyrsa sign-req client client1

    输入 yes 确认。


第四步:配置 OpenVPN 服务器

我们将所有生成的文件和配置文件放到正确的位置。

  1. 移动生成的文件

    # 移动 CA 和服务器证书/密钥
    sudo cp pki/ca.crt /etc/openvpn/server/
    sudo cp pki/issued/server.crt /etc/openvpn/server/
    sudo cp pki/private/server.key /etc/openvpn/server/
    sudo cp pki/dh.pem /etc/openvpn/server/ # (dh.pem 是 gen-dh 的输出文件)
    sudo cp ta.key /etc/openvpn/server/
    # 设置正确的权限
    sudo chmod 600 /etc/openvpn/server/*
  2. 创建服务器配置文件

    我们将创建一个主配置文件 server.conf

    sudo nano /etc/openvpn/server/server.conf

    粘贴到文件中,请务必根据您的网络环境修改 server 指令和 push 指令中的网段。

    # 协议和端口
    port 1194
    proto udp
    # 创建一个 TUN 虚拟网卡
    dev tun
    # 服务器提供的 VPN 网段和子网掩码
    # 这个网段不能与您服务器或客户端所在局域网的网段冲突!
    server 10.8.0.0 255.255.255.0
    # 推送路由和 DNS 设置给客户端
    push "redirect-gateway def1 bypass-dhcp"
    push "dhcp-option DNS 8.8.8.8"
    push "dhcp-option DNS 1.1.1.1"
    # 允许客户端之间相互通信
    client-to-client
    # 为客户端分配固定 IP(可选)
    # client-config-dir /etc/openvpn/ccd
    # 在 ccd 目录下创建一个与客户端名同名的文件,内容为: ifconfig-push 10.8.0.2 255.255.255.0
    # 使用密钥文件提高安全性
    tls-crypt ta.key
    # 证书和密钥路径
    ca ca.crt
    cert server.crt
    key server.key
    dh dh.pem
    # 使用加密算法
    cipher AES-256-CBC
    auth SHA256
    # 用户和组
    user nobody
    group nogroup
    # 保持状态,避免频繁重启
    persist-key
    persist-tun
    # 日志设置
    status /var/log/openvpn/openvpn-status.log
    verb 3
    explicit-exit-notify 1

    保存并退出。


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

  1. 启用 IP 转发

    VPN 客户端需要通过服务器访问互联网,因此必须开启服务器的 IP 转发功能。

    # 编辑 sysctl.conf 文件
    sudo nano /etc/sysctl.conf

    找到或添加下面这行,确保它没有被注释掉():

    net.ipv4.ip_forward=1

    保存后,使更改立即生效:

    sudo sysctl -p
  2. 配置 UFW (Uncomplicated Firewall)

    如果您使用 UFW(Ubuntu 默认防火墙),需要允许 OpenVPN 端口和 NAT 转发。

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