凌峰创科服务平台

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

WireGuard 是现代、快速且极其简单的新一代 VPN 协议,强烈推荐新手使用,OpenVPN 则非常成熟、功能丰富,兼容性极好,适合需要连接各种设备(特别是旧设备)的场景。

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

使用 WireGuard(推荐,现代、快速、简单)

WireGuard 内核级实现,性能极高,配置文件简洁,是当前的首选。

第 1 步:更新系统并安装 WireGuard

登录到你的 Ubuntu 服务器(推荐使用 Ubuntu 20.04 或 22.04 LTS)。

# 更新软件包列表
sudo apt update
# 升级已安装的包
sudo apt upgrade -y
# 安装 WireGuard 和必要的工具
sudo apt install wireguard -y

第 2 步:生成服务器的密钥对

在服务器上,为 WireGuard 生成一对公钥和私钥。

# 进入 wireguard 工具目录
cd /etc/wireguard/
# 生成服务器的私钥和公钥
# wg genkey | tee privatekey | wg pubkey > publickey

执行后,你会看到 privatekeypublickey 两个文件。

Ubuntu如何快速搭建VPN服务器?-图2
(图片来源网络,侵删)
  • privatekey必须保密! 这是服务器的私钥。
  • publickey:可以公开,将用于客户端配置。

查看并记录下服务器的公钥:

cat publickey

第 3 步:创建服务器配置文件

创建一个配置文件,wg0.conf

sudo nano /etc/wireguard/wg0.conf

粘贴进去,并根据你的实际情况进行修改:

[Interface]
# 服务器监听的 IP 和端口 (IPv4)
Address = 10.0.0.1/24
ListenPort = 51820
# 服务器私钥,将上面生成的 privatekey 内容粘贴到这里
PrivateKey = <YOUR_SERVER_PRIVATE_KEY>
# 设置 NAT 转发,让客户端可以通过服务器访问外网
PostUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
# 恢复 NAT 规则
PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE
# 注意:如果你的服务器有多块网卡,请将 'eth0' 替换为你的公网网卡名称。
# 你可以使用 'ip a' 命令查看网卡。

重要:

Ubuntu如何快速搭建VPN服务器?-图3
(图片来源网络,侵删)
  • <YOUR_SERVER_PRIVATE_KEY> 替换为你在 cat privatekey 中看到的内容。
  • Address 是 VPN 网段的网关地址,客户端将使用 0.0.x 这个网段。
  • ListenPort 是 VPN 服务器监听的端口,默认 51820,可以自定义,但需要在防火墙中开放。

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

第 4 步:启用 IP 转发

为了让服务器能将客户端的流量转发到互联网,需要启用内核的 IP 转发功能。

编辑 /etc/sysctl.conf 文件:

sudo nano /etc/sysctl.conf

找到下面这行,并确保它没有被注释(去掉 ):

# Uncomment the next line to enable packet forwarding for IPv4
net.ipv4.ip_forward=1

如果找不到,就直接添加这行,然后保存退出。

使配置立即生效:

sudo sysctl -p

第 5 步:配置防火墙(UFW)

如果你使用 UFW(Ubuntu 默认防火墙),需要开放 WireGuard 的端口并允许转发。

# 允许 WireGuard 端口 (51820)
sudo ufw allow 51820/udp
# 允许 SSH 连接,防止你把自己锁在外面
sudo ufw allow OpenSSH
# 启用防火墙
sudo ufw enable

在启用时,输入 y 确认。

第 6 步:启动并启用 WireGuard 服务

# 启动 wg0 接口
sudo wg-quick up wg0
# 设置为开机自启
sudo systemctl enable wg0

检查 WireGuard 状态:

sudo wg

你应该能看到类似下面的输出,表示服务器正在运行:

interface: wg0
  public key: <YOUR_SERVER_PUBLIC_KEY>
  private key: (hidden)
  listening port: 51820

第 7 步:为客户端创建配置

现在我们需要为你的设备(手机、电脑)创建一个客户端配置。

  1. 生成客户端密钥对服务器上执行,为每个客户端生成一对密钥。

    # 客户端1
    wg genkey | tee client1_privatekey | wg pubkey > client1_publickey

    记录下 client1_publickey 的内容。

  2. 添加客户端到服务器配置 编辑服务器的 wg0.conf 文件,添加一个客户端段落。

    sudo nano /etc/wireguard/wg0.conf

    在文件末尾添加以下内容:

    [Peer]
    # 客户端的公钥
    PublicKey = <CLIENT1_PUBLIC_KEY>
    # 为客户端分配的 VPN 内网 IP
    PresharedKey = (可选,增强安全性)
    AllowedIPs = 10.0.0.2/32
    • <CLIENT1_PUBLIC_KEY> 替换为上一步生成的客户端公钥。
    • AllowedIPs = 10.0.0.2/32 表示这个客户端只能使用 0.0.2 这个 IP,如果你希望客户端通过服务器访问整个互联网,可以设置为 AllowedIPs = 10.0.0.2/32, 0.0.0.0/00.0.0/0 代表所有流量。
  3. 重启 WireGuard 服务 让新的配置生效。

    sudo wg-quick down wg0
    sudo wg-quick up wg0
    # 或者使用
    sudo systemctl restart wg0

第 8 步:配置客户端设备

保存为一个 .conf 文件(client1.conf),然后导入到你的 WireGuard 客户端应用中。

[Interface]
# 客户端私钥,将上面生成的 client1_privatekey 内容粘贴到这里
PrivateKey = <CLIENT1_PRIVATE_KEY>
# 客户端要使用的 VPN 内网 IP
Address = 10.0.0.2/32
# 设置 DNS,防止 DNS 泄漏
DNS = 8.8.8.8, 1.1.1.1
[Peer]
# 服务器的公钥
PublicKey = <YOUR_SERVER_PUBLIC_KEY>
# 服务器的公网 IP 和端口
Endpoint = <YOUR_SERVER_IP>:51820
# 客户端通过 VPN 发送哪些流量 (0.0.0.0/0 代表所有流量)
AllowedIPs = 0.0.0.0/0
# 保持连接,避免断线
PersistentKeepalive = 25

重要:

  • <CLIENT1_PRIVATE_KEY> 替换为客户端的私钥。
  • <YOUR_SERVER_PUBLIC_KEY> 替换为服务器的公钥。
  • <YOUR_SERVER_IP> 替换为你的服务器公网 IP 地址。

使用 OpenVPN(经典、兼容性好)

如果你的设备不支持 WireGuard,或者你需要更细粒度的访问控制,可以选择 OpenVPN。

第 1 步:安装 OpenVPN 和 Easy-RSA

Easy-RSA 是一个用于管理 PKI (Public Key Infrastructure) 的工具集,用于生成证书和密钥。

sudo apt update
sudo apt install openvpn easy-rsa -y

第 2 步:设置 PKI (证书颁发机构)

  1. 准备环境

    # 创建一个目录来存放我们的证书
    mkdir ~/openvpn-ca
    cp -r /usr/share/easy-rsa/* ~/openvpn-ca/
    cd ~/openvpn-ca/
    # 编辑 vars 文件,设置一些默认变量
    nano vars

    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 Name"
    set_var EASYRSA_REQ_EMAIL       "admin@mydomain.com"
    set_var EASYRSA_REQ_OU          "MyOrganizationalUnit"

    保存并退出。

  2. 初始化 PKI 并构建 CA

    # 初始化 PKI
    ./easyrsa init-pki
    # 构建一个 Certificate Authority (CA)
    # 这会提示你输入一个密码,请务必记住!
    ./easyrsa build-ca nopass

    这会在 ~/openvpn-ca/pki 目录下生成 ca.crtca.key

  3. 为服务器生成证书和密钥

    # 生成服务器的证书请求
    ./easyrsa gen-req server nopass
    # 用 CA 签名服务器的证书
    ./easyrsa sign-req server server
  4. 为客户端生成证书和密钥

    # 为第一个客户端生成证书
    ./easyrsa gen-req client1 nopass
    # 用 CA 签名客户端的证书
    ./easyrsa sign-req client client1
  5. 生成 Diffie-Hellman 参数 这个过程可能需要几分钟时间。

    ./easyrsa gen-dh
  6. 生成 HMAC 密钥以增强 TLS 完整性

    openvpn --genkey --secret ta.key

第 3 步:创建服务器配置文件

  1. 复制配置模板

    sudo cp /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz /etc/openvpn/
    sudo gunzip /etc/openvpn/server.conf.gz
  2. 编辑配置文件

    sudo nano /etc/openvpn/server.conf

    确保以下配置项是正确的,并根据你的需求修改:

    port 1194
    proto udp
    dev tun
    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
    server 10.8.0.0 255.255.255.0
    ifconfig-pool-persist /var/log/openvpn/ipp.txt
    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
    tls-crypt /root/openvpn-ca/ta.key
    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
    • ca, cert, key, dh, tls-crypt 的路径要正确。
    • server 10.8.0.0 255.255.255.0 定义了 VPN 的网段。
    • push 指令会将 DNS 服务器和默认网关推送给客户端。

第 4 步:配置防火墙和 IP 转发

这与 WireGuard 步骤基本相同。

  1. 启用 IP 转发 编辑 /etc/sysctl.conf,确保 net.ipv4.ip_forward=1 已启用并执行 sudo sysctl -p

  2. 配置 UFW

    # 允许 OpenVPN 端口 (默认 1194/udp)
    sudo ufw allow 1194/udp
    sudo ufw allow OpenSSH
    sudo ufw enable

第 5 步:启动并启用 OpenVPN 服务

# 启动服务
sudo systemctl start openvpn@server
# 设置开机自启
sudo systemctl enable openvpn@server

检查状态:

sudo systemctl status openvpn@server

第 6 步:创建客户端配置文件

  1. 创建基础配置文件

    sudo mkdir -p ~/client-configs/files
    sudo cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf ~/client-configs/base.conf
    sudo nano ~/client-configs/base.conf
    client
    dev tun
    proto udp
    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
    script-security 2
  2. 创建客户端生成脚本

    sudo nano ~/client-configs/make_config.sh
    #!/bin/bash
    # First argument: Client name
    KEY_DIR=/root/openvpn-ca/pki
    OUTPUT_DIR=~/client-configs/files
    BASE_CONFIG=~/client-configs/base.conf
    cat ${BASE_CONFIG} \
        <(echo -e '<ca>') \
        ${KEY_DIR}/ca.crt \
        <(echo -e '</ca>\n<cert>') \
        ${KEY_DIR}/issued/${1}.crt \
        <(echo -e '</cert>\n<key>') \
        ${KEY_DIR}/private/${1}.key \
        <(echo -e '</key>\n<tls-crypt>') \
        ${KEY_DIR}/ta.key \
        <(echo -e '</tls-crypt>') \
        > ${OUTPUT_DIR}/${1}.ovpn

    保存后,给脚本执行权限:

    sudo chmod 700 ~/client-configs/make_config.sh
  3. 生成客户端配置文件

    # 为 client1 生成配置
    sudo ~/client-configs/make_config.sh client1

    生成的配置文件会在 ~/client-configs/files/ 目录下,名为 client1.ovpn

第 7 步:配置客户端设备

将生成的 client1.ovpn 文件传输到你的设备上,然后使用 OpenVPN 客户端导入它即可连接。


总结与安全建议

特性 WireGuard OpenVPN
协议 内核级,现代 用户空间,经典
速度 非常快 较快
配置 极其简单(一个配置文件) 较复杂(需要证书和CA)
兼容性 较新系统支持良好 所有平台和设备都支持
推荐度 ⭐⭐⭐⭐⭐ (首选) ⭐⭐⭐⭐ (备选)

重要安全提示

  1. 使用强密码:为你的服务器设置一个强 SSH 密码。

  2. 禁用密码登录:强烈建议配置 SSH 密钥登录,并禁用密码登录,以提高安全性。

  3. 定期更新:保持你的 Ubuntu 系统和 VPN 软件包是最新版本。

  4. 使用强防火墙规则:只开放必要的端口(如 SSH 和 VPN 端口)。

  5. 保护密钥:服务器和客户端的私钥文件权限应设置为 600,确保只有 root 用户可读。

    sudo chmod 600 /etc/wireguard/privatekey
    sudo chmod 600 /root/openvpn-ca/pki/private/*
  6. 日志监控:定期检查 VPN 服务的日志,查看是否有异常连接。

    # WireGuard 日志
    journalctl -u wg0 -f
    # OpenVPN 日志
    tail -f /var/log/syslog | grep openvpn

按照以上步骤,你就可以成功搭建一个属于自己的 VPN 服务器了,祝你成功!

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