凌峰创科服务平台

OpenVPN服务器与客户端如何快速配置?

概述

本指南将引导你完成以下步骤:

OpenVPN服务器与客户端如何快速配置?-图1
(图片来源网络,侵删)
  1. 服务器端配置:在 Linux 服务器(以 Ubuntu 为例)上安装和配置 OpenVPN 服务器。
  2. 证书管理:使用 easy-rsa 创建证书颁发机构、服务器证书、客户端证书和密钥。
  3. 客户端配置:为 Windows, macOS, Android, iOS 生成和配置客户端配置文件(.ovpn)。
  4. 连接与验证:客户端连接到服务器并验证网络。
  5. 高级安全:配置防火墙、IP 转发和客户端 DNS 选项。

第一部分:服务器端配置

步骤 1: 准备服务器环境

你需要一台拥有公网 IP 的云服务器(如 VPS),本指南以 Ubuntu 22.04 为例。

  1. 更新系统

    sudo apt update && sudo apt upgrade -y
  2. 安装 OpenVPN 和 Easy-RSA

    sudo apt install openvpn easy-rsa -y

步骤 2: 配置 Easy-RSA

Easy-RSA 是一套用于构建和管理 PKI (Public Key Infrastructure) 的工具。

OpenVPN服务器与客户端如何快速配置?-图2
(图片来源网络,侵删)
  1. 创建 PKI 目录

    make-cadir ~/openvpn-ca
    cd ~/openvpn-ca
  2. 编辑 vars 文件 这个文件包含了生成证书时的一些默认信息,为了简化,我们可以修改默认值。

    nano vars

    找到并修改以下几行(可以根据你的情况修改):

    # 修改为你自己的信息
    set EASYRSA_REQ_COUNTRY    "CN"
    set EASYRSA_REQ_PROVINCE   "Beijing"
    set EASYRSA_REQ_CITY       "Beijing"
    set EASYRSA_REQ_ORG        "My Company"
    set EASYRSA_REQ_EMAIL      "admin@mycompany.com"
    set EASYRSA_REQ_OU         "MyOrganizationalUnit"

    保存并退出 (Ctrl+X, Y, Enter)。

  3. 初始化 PKI 这将创建一个 pki 目录,用于存放所有的证书和密钥。

    ./easyrsa init-pki
  4. 构建证书颁发机构 这是你的私有 CA,用于签发服务器和客户端的证书。

    # 注意:这里会提示你输入一个 CA 密码,请务必记住!
    # 这个密码用于保护 CA 的私钥,签发证书时需要。
    ./easyrsa build-ca nopass

    nopass 参数表示 CA 的私钥不使用密码保护,方便服务器自动启动,如果安全性要求极高,可以去掉此参数,但服务器启动时需要手动输入密码。

步骤 3: 创建服务器证书和密钥

  1. 生成服务器证书

    # 创建服务器证书,名称为 "server"
    # 同样,会提示输入你在 vars 中设置的 CA 信息,直接回车即可。
    # 最后会询问是否签名,输入 yes
    ./easyrsa gen-req server nopass
  2. 用 CA 签名服务器证书

    # 这一步需要你输入之前设置的 CA 密码
    ./easyrsa sign-req server server
  3. 生成 Diffie-Hellman 参数 这用于增强密钥交换的安全性,可能需要几分钟时间。

    ./easyrsa gen-dh
  4. 生成 HMAC 签名 用于防止某些攻击。

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

你的 ~/openvpn-ca/pki 目录下应该有这些关键文件:

  • ca.crt: CA 的证书文件。
  • issued/server.crt: 服务器的证书文件。
  • private/server.key: 服务器的私钥文件。
  • dh.pem: Diffie-Hellman 参数文件。
  • ta.key: HMAC 签名密钥文件。

步骤 4: 配置 OpenVPN 服务器

  1. 复制证书和密钥到 OpenVPN 配置目录

    sudo cp pki/ca.crt /etc/openvpn/
    sudo cp pki/issued/server.crt /etc/openvpn/
    sudo cp pki/private/server.key /etc/openvpn/
    sudo cp pki/dh.pem /etc/openvpn/
    sudo cp pki/ta.key /etc/openvpn/
  2. 创建服务器配置文件 我们将创建一个新的配置文件 server.conf

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

    粘贴进去,并根据注释进行修改:

    # 监听端口和协议 (推荐使用 UDP,性能更好)
    port 1194
    proto udp
    # 使用 TUN 虚拟网卡
    dev tun
    # CA 证书
    ca ca.crt
    # 服务器证书
    cert server.crt
    # 服务器私钥
    key server.key
    # DH 参数
    dh dh.pem
    # 指定 VPN 客户端连接后分配的 IP 地址池
    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 8.8.4.4"
    # 启用客户端之间相互通信
    client-to-client
    # 为每个客户端维护一个独立的文件,方便管理
    ifconfig-pool-persist /var/log/openvpn/ipp.txt
    # 使用 HMAC 签名增强安全性
    tls-crypt ta.key
    # 指定使用的加密算法 (推荐使用强加密)
    cipher AES-256-CBC
    auth SHA256
    # 用户和运行 OpenVPN 的用户
    user nobody
    group nogroup
    # 保持连接,并在断线后自动重连
    keepalive 10 120
    # 降低日志级别
    verb 3
  3. 创建日志目录

    sudo mkdir /var/log/openvpn
    sudo chown nobody:nogroup /var/log/openvpn

步骤 5: 配置系统防火墙和网络转发

  1. 启用 IP 转发

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

    取消注释或添加下面这行:

    net.ipv4.ip_forward=1

    使其立即生效:

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

    # 允许 SSH 连接 (非常重要,防止把自己锁在外面)
    sudo ufw allow OpenSSH
    # 允许 OpenVPN 端口 (1194/udp)
    sudo ufw allow 1194/udp
    # 允许转发数据包
    sudo ufw route allow in on tun0 from 10.8.0.0/24 out on eth0 to any
    # 启用 UFW
    sudo ufw enable

    (请将 eth0 替换为你服务器的主要网络接口名称,可以用 ip a 查看)

步骤 6: 启动并启用 OpenVPN 服务

  1. 启动 OpenVPN 服务

    # 指定配置文件名启动
    sudo systemctl start openvpn@server
  2. 设置开机自启

    sudo systemctl enable openvpn@server
  3. 检查服务状态

    sudo systemctl status openvpn@server

    如果看到 active (running),说明服务器已成功启动。


第二部分:客户端配置

现在服务器已经运行,我们需要为客户端创建配置文件和证书。

步骤 1: 创建客户端证书和密钥

在服务器上继续操作。

  1. 为每个客户端生成证书client1 替换为你的客户端名称(如 john-pc, samsung-phone)。

    cd ~/openvpn-ca
    ./easyrsa gen-req client1 nopass
  2. 用 CA 签名客户端证书

    # 输入 CA 密码
    ./easyrsa sign-req client client1

~/openvpn-ca/pki/issued/ 目录下有了 client1.crt~/openvpn-ca/pki/private/ 目录下有了 client1.key

步骤 2: 创建客户端配置文件

我们需要一个通用的 .ovpn 文件,并将客户端的证书和密钥嵌入进去。

  1. 创建基础配置文件

    sudo nano /etc/openvpn/client/client1.ovpn

    粘贴进去。请务必修改 remote 指令为你的服务器域名或公网 IP 地址。

    client
    dev tun
    proto udp
    # 将 your_server_ip 替换为你的服务器公网 IP 或域名
    remote your_server_ip 1194
    resolv-retry infinite
    nobind
    persist-key
    persist-tun
    remote-cert-tls server
    cipher AES-256-CBC
    auth SHA256
    key-direction 1
    verb 3
  2. 嵌入证书和密钥 最简单的方法是使用 cat 命令将证书和密钥内容追加到 .ovpn 文件的末尾。

    # 在服务器上执行
    # 1. 将 CA 证书追加
    cat ~/openvpn-ca/pki/ca.crt >> /etc/openvpn/client/client1.ovpn
    # 2. 将客户端证书追加
    cat ~/openvpn-ca/pki/issued/client1.crt >> /etc/openvpn/client/client1.ovpn
    # 3. 将客户端密钥追加
    cat ~/openvpn-ca/pki/private/client1.key >> /etc/openvpn/client/client1.ovpn
    # 4. 将 HMAC 密钥追加
    cat /etc/openvpn/server/ta.key >> /etc/openvpn/client/client1.ovpn

/etc/openvpn/client/client1.ovpn 文件包含了所有必要的信息。

步骤 3: 传输配置文件到客户端

使用 scpSFTP 或其他任何安全方式,将 client1.ovpn 文件从服务器下载到你的客户端设备上。

# 在你的本地电脑上执行,替换 username 和 server_ip
scp username@server_ip:/etc/openvpn/client/client1.ovpn ~/Downloads/

第三部分:客户端连接与验证

Windows 客户端

  1. 下载并安装 OpenVPN GUI
  2. client1.ovpn 文件复制到 C:\Program Files\OpenVPN\config\ 目录下。
  3. 右键点击 OpenVPN GUI 图标,选择 client1 连接。
  4. 系统可能会弹出安全提示,允许 OpenVPN 修改网络适配器。
  5. 连接成功后,任务栏的图标会变成绿色。

macOS 客户端

  1. 通过 Homebrew 安装: brew install openvpn
  2. 或者从 Mac App Store 下载并安装 Tunnelblick。
  3. client1.ovpn 文件拖到 Tunnelblick 的配置窗口中,它会自动导入。
  4. 双击 Tunnelblick 图标,选择你的配置文件连接。

Android 客户端

  1. 从 Google Play 商店安装 OpenVPN Connect
  2. 使用文件管理器找到 client1.ovpn 文件,点击它。
  3. OpenVPN Connect 会提示你导入配置,点击“导入”。
  4. 点击连接按钮。

iOS 客户端

  1. 从 App Store 安装 OpenVPN Connect
  2. 使用 AirDrop、邮件或其他方式将 client1.ovpn 文件发送到你的 iPhone/iPad。
  3. 打开文件,选择用 OpenVPN Connect 打开。
  4. 点击绿色的 "Add" 按钮,然后点击 "Connect"。

验证连接

连接成功后,你可以通过以下方式验证:

  1. 访问 IP 查询网站:打开浏览器,访问 whatismyip.comip.sb,你的 IP 地址应该变成了服务器的公网 IP。
  2. Ping VPN 网关:在 Windows/macOS 的命令行中执行 ping 10.8.0.1,应该能通。
  3. Ping 内网:如果你的服务器有内网 IP,可以尝试访问它,以验证客户端是否能通过 VPN 访问服务器所在的内网。

第四部分:高级安全与维护

为多个客户端创建配置

要为第二个客户端(如 client2)创建配置,只需重复 第二部分 的步骤 1 和 2,生成新的证书和新的 .ovpn 文件即可,服务器配置无需更改。

吊销客户端证书

如果某个客户端的设备丢失或不再使用,你应该吊销其证书。

  1. 在服务器上执行吊销命令:

    cd ~/openvpn-ca
    ./easyrsa revoke client1

    输入 yes 确认。

  2. 生成证书吊销列表:

    ./easyrsa gen-crl
  3. 将 CRL 文件复制到 OpenVPN 目录并设置权限:

    sudo cp pki/crl.pem /etc/openvpn/server/
    sudo chmod 644 /etc/openvpn/server/crl.pem
  4. 编辑服务器配置文件 server.conf,添加以下行:

    crl-verify crl.pem
  5. 重启 OpenVPN 服务:

    sudo systemctl restart openvpn@server

    被吊销的客户端将无法再连接。


故障排除

  • 连接失败
    • 检查服务器防火墙(UFW)是否放行了 1194/udp 端口。
    • 检查云服务商(如阿里云、腾讯云、AWS)的安全组是否放行了 1194/udp 端口。
    • 使用 tail -f /var/log/syslogjournalctl -u openvpn@server -f 查看服务器日志。
    • 检查客户端日志,查看具体错误信息(如证书验证失败、密钥不匹配等)。
  • 能连上但无法上网
    • 检查 server.conf 中的 push "redirect-gateway..." 指令是否存在。
    • 检查服务器的 IP 转发是否已启用 (sysctl -p)。
    • 检查 UFW 的转发规则是否正确配置。

这份指南应该能帮助你成功搭建一个功能完善且安全的 OpenVPN 服务器,祝你使用愉快!

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