OpenVPN服务器安装与优化:打造专属VPN – wiki大全

OpenVPN服务器安装与优化:打造专属VPN

随着网络隐私和安全的日益受到关注,搭建个人VPN成为了许多用户的选择。OpenVPN作为一款开源的VPN解决方案,以其强大的加密能力、灵活的配置以及跨平台支持,成为了自建VPN的首选。本文将详细指导您如何安装和优化OpenVPN服务器,打造一个专属且高效的VPN服务。

前言

OpenVPN允许您通过加密隧道安全地连接到远程网络,保护您的在线隐私,绕过地理限制,并安全访问内部资源。本文将以Ubuntu系统为例,介绍OpenVPN的安装与优化步骤。

第一部分:OpenVPN 服务器安装

1. 系统更新与软件包安装

首先,更新您的系统并安装必要的软件包:OpenVPN本身和用于证书管理的Easy-RSA。

bash
sudo apt update && sudo apt upgrade -y
sudo apt install -y openvpn easy-rsa

2. 配置Easy-RSA公钥基础设施 (PKI)

Easy-RSA用于创建证书颁发机构 (CA) 以及为服务器和客户端生成证书和密钥。

  1. 准备Easy-RSA目录:
    将Easy-RSA脚本复制到一个工作目录,例如 /etc/openvpn/easy-rsa

    bash
    sudo make-cadir /etc/openvpn/easy-rsa
    cd /etc/openvpn/easy-rsa

  2. 初始化PKI:
    初始化一个新的公钥基础设施。

    bash
    ./easyrsa init-pki

  3. 构建证书颁发机构 (CA):
    创建根CA证书和密钥。您将被要求输入一个通用名称 (Common Name),例如 “OpenVPN-CA”。为简化操作,这里使用 nopass,但生产环境中建议为CA密钥设置密码以增强安全性。

    bash
    ./easyrsa build-ca nopass

  4. 生成Diffie-Hellman参数:
    生成Diffie-Hellman参数用于密钥交换。此过程可能需要一些时间。

    bash
    ./easyrsa gen-dh

  5. 生成服务器证书和密钥:
    创建服务器证书和私钥。您将被要求输入通用名称 (例如 “server”)。

    bash
    ./easyrsa gen-req server nopass

    使用您的CA签署服务器证书请求,输入 yes 确认。

    bash
    ./easyrsa sign-req server server

  6. 生成TLS认证密钥 (HMAC):
    此密钥增加了额外的安全层,可以防御DDoS攻击和UDP端口泛洪。

    bash
    openvpn --genkey --secret ta.key

  7. 生成客户端证书和密钥:
    为每个客户端生成唯一的证书和密钥对。将 client1 替换为您想要的客户端名称。

    bash
    ./easyrsa gen-req client1 nopass
    ./easyrsa sign-req client client1

    如果需要更多客户端,重复此步骤,将 client1 更改为 client2client3 等。

  8. 复制必要文件到OpenVPN服务器目录:
    将生成的证书和密钥移动到OpenVPN的配置目录。

    bash
    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 ta.key /etc/openvpn/

3. OpenVPN服务器配置

  1. 创建 server.conf 文件:
    OpenVPN提供了一个示例配置文件。复制它,然后编辑。

    bash
    sudo cp /usr/share/doc/openvpn/examples/sample-config-files/server.conf /etc/openvpn/
    sudo nano /etc/openvpn/server.conf

    编辑 server.conf 文件,取消注释或添加以下关键配置:

    port 1194
    proto udp
    dev tun
    ca ca.crt
    cert server.crt
    key server.key
    dh dh.pem
    tls-auth ta.key 0 # 这是给服务器用的
    server 10.8.0.0 255.255.255.0
    ifconfig-pool-persist ipp.txt
    push "redirect-gateway def1 bypass-dhcp"
    push "dhcp-option DNS 208.67.222.222" # OpenDNS
    push "dhcp-option DNS 208.67.220.220" # OpenDNS
    keepalive 10 120
    cipher AES-256-GCM # 推荐用于现代系统
    auth SHA256
    user nobody
    group nogroup
    persist-key
    persist-tun
    status openvpn-status.log
    verb 3
    explicit-exit-notify 1

    注意:关于 cipherauth,请参阅优化部分以获取最佳实践。AES-256-GCM 是一个强大而现代的选择。

  2. 启用IP转发:
    允许服务器转发流量。

    bash
    sudo nano /etc/sysctl.conf

    取消注释或添加以下行:

    net.ipv4.ip_forward=1

    应用更改:

    bash
    sudo sysctl -p

  3. 配置防火墙 (UFW):
    允许OpenVPN流量并启用NAT。

    bash
    sudo ufw allow 1194/udp
    sudo ufw allow OpenSSH

    编辑UFW的 before.rules 以启用NAT。

    bash
    sudo nano /etc/ufw/before.rules

    在文件顶部(在现有注释之后)添加以下行:

    “`

    START OPENVPN RULES

    NAT table rules

    *nat
    :POSTROUTING ACCEPT [0:0]

    允许从VPN客户端到eth0 (您的公共网络接口) 的流量

    -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE
    COMMIT

    END OPENVPN RULES

    “`

    eth0 替换为您的服务器实际的公共网络接口 (例如 ens3, enp0s3)。您可以使用 ip a 命令查看。

    此外,修改 /etc/default/ufw 以允许转发的数据包:

    bash
    sudo nano /etc/default/ufw

    DEFAULT_FORWARD_POLICY="DROP" 改为 DEFAULT_FORWARD_POLICY="ACCEPT"

    重新加载UFW:

    bash
    sudo ufw disable
    sudo ufw enable

  4. 启动并启用OpenVPN服务:

    bash
    sudo systemctl start openvpn@server
    sudo systemctl enable openvpn@server
    sudo systemctl status openvpn@server

第二部分:OpenVPN 客户端配置

为每个客户端,您需要一个 .ovpn 配置文件。

  1. 收集客户端文件:
    从您的 /etc/openvpn/easy-rsa 目录,为 client1 复制以下文件:

    • pki/ca.crt
    • pki/issued/client1.crt
    • pki/private/client1.key
    • /etc/openvpn/ta.key (服务器上生成的那个)

    您可以为每个客户端创建一个目录,并将这些文件复制到其中。

    bash
    mkdir -p ~/client-configs/client1
    cp /etc/openvpn/easy-rsa/pki/ca.crt ~/client-configs/client1/
    cp /etc/openvpn/easy-rsa/pki/issued/client1.crt ~/client-configs/client1/
    cp /etc/openvpn/easy-rsa/pki/private/client1.key ~/client-configs/client1/
    cp /etc/openvpn/ta.key ~/client-configs/client1/

  2. 创建客户端 .ovpn 文件:
    ~/client-configs/client1 目录中创建一个名为 client1.ovpn 的文件。

    bash
    nano ~/client-configs/client1/client1.ovpn

    添加以下内容,将 YOUR_SERVER_IP 替换为您的OpenVPN服务器的公共IP地址或域名:

    “`
    client
    dev tun
    proto udp
    remote YOUR_SERVER_IP 1194
    resolv-retry infinite
    nobind
    persist-key
    persist-tun
    remote-cert-tls server
    tls-auth ta.key 1 # 这是给客户端用的
    cipher AES-256-GCM
    auth SHA256
    verb 3

    ca.crt 的内容


    client1.crt 的内容


    client1.key 的内容


    ta.key 的内容


    “`

    现在,打开 ~/client-configs/client1 目录中的 ca.crtclient1.crtclient1.keyta.key 文件,并将其内容粘贴到 client1.ovpn 文件中相应的 <ca><cert><key><tls-auth> 块内。

    client1.ovpn 文件现在已准备好分发给您的客户端设备。

第三部分:OpenVPN 服务器优化

优化您的OpenVPN服务器可以显著提高性能和安全性。

  1. 使用 UDP 协议:
    OpenVPN over UDP通常比TCP更快、更高效,因为它避免了”TCP-over-TCP”的开销,即TCP的重传机制冲突导致性能下降。

    • 配置:server.conf 和客户端 .ovpn 文件中设置 proto udp
  2. 禁用数据压缩:
    虽然看起来反直觉,但禁用压缩 (comp-lzocompress) 通常能提高性能。今天传输的大多数数据 (例如图片、视频、加密流量) 都已经压缩过,再次压缩只会增加CPU开销而没有显著的好处。它还可能引入安全漏洞 (CRIME/BREACH攻击)。

    • 配置:server.conf 和客户端 .ovpn 文件中删除或注释掉 comp-lzocompress 指令。如果必须对特定未压缩数据使用压缩,请考虑使用 compress lz4 (OpenVPN 2.4+) 或不带参数的 compress,这允许OpenVPN动态启用/禁用它。
  3. 选择强大的加密算法和认证方式:
    现代加密算法提供更好的安全性,并且可以利用硬件加速,从而带来更好的性能。

    • 推荐: cipher AES-256-GCMauth SHA256 (或 SHA512)。AES-GCM是一种经过认证的加密模式,提供机密性和完整性,由于硬件加速,通常比CBC模式具有更好的性能。
    • 配置:
      cipher AES-256-GCM
      auth SHA256

      确保服务器和客户端配置一致。
  4. 调整 MTU (Maximum Transmission Unit):
    不正确的MTU设置可能导致数据包碎片化和性能下降。OpenVPN UDP数据包理想情况下不应被分片。

    • 配置: 尝试 tun-mtumssfix。一个常见的起始点是 tun-mtu 1400mssfix 1360 ( tun-mtu 减去IP/TCP头部的40字节)。
      tun-mtu 1400
      mssfix 1360

      您可能需要测试不同的值以找到适合您网络路径的最佳设置。
  5. 调整缓冲区 (sndbuf, rcvbuf):
    调整发送和接收缓冲区可以帮助提高吞吐量,尤其是在高延迟链路上。

    • 配置:
      sndbuf 393216
      rcvbuf 393216

      这些值是示例;最佳值取决于您的网络条件。
  6. 启用 fast-io
    此指令可以通过绕过一些内核处理来提高I/O性能。

    • 配置:server.conf 和客户端 .ovpn 文件中添加 fast-io
  7. 持久化隧道 (keepalive):
    keepalive 指令有助于保持隧道连接并检测死对等体。

    • 配置: keepalive 10 120 (每10秒发送一次ping,120秒后认为对等体已死亡)。
  8. 服务器位置:
    虽然这不是一个配置设置,但您的OpenVPN服务器与客户端的物理距离会显著影响延迟和速度。选择一个距离主要用户地理位置较近的服务器位置。

结论

通过遵循本指南,您已经成功安装并优化了您的OpenVPN服务器,并为您的客户端配置了连接。现在,您可以享受一个安全、私密且高性能的专属VPN服务。记住,定期更新您的系统和OpenVPN软件,并关注最新的安全最佳实践,以确保您的VPN始终保持在最佳状态。

滚动至顶部