5月28日 06:10

VPN服务器怎么部署?WireGuard实操与OpenVPN选型指南

VPN 服务器是企业远程办公和分支互联的核心基础设施。选对协议、配好安全策略、做好日常监控,一台 VPN 服务器能稳定跑好几年不出事;反过来,协议选错或者安全没加固,轻则连接不稳定,重则内网被穿透。

这篇文章会从实际选型出发,带你用 WireGuard 搭建一台生产级 VPN 服务器,再补上 OpenVPN 的适用场景和日常运维要点。

先选协议:WireGuard 还是 OpenVPN?

2026 年,这两个协议怎么选基本一句话能说清——

新项目直接上 WireGuard,除非你有以下需求才考虑 OpenVPN:

  • 必须走 TCP 443 端口绕过企业防火墙(WireGuard 只支持 UDP)
  • 需要完整的 PKI 证书体系满足合规要求
  • 要兼容老系统(Windows 7、旧版 macOS)

实际数据对比:

指标WireGuardOpenVPN
吞吐量(1Gbps 链路)~940Mbps~480Mbps(UDP)
连接建立时间<100ms6-8秒
CPU 占用(500Mbps)~15%~65%
代码量~4,000行~600,000行
加密套件ChaCha20+Poly1305(固定)可配置(容易配错)

WireGuard 代码量只有 OpenVPN 的 1/150,审计起来轻松得多,而且加密套件是固定的,不存在降级攻击的风险。

如果你确实需要 OpenVPN,后文也有部署要点。下面先讲 WireGuard。

WireGuard 部署实操

以下步骤在 Ubuntu 22.04/24.04 上验证通过,其他 Debian 系发行版同理。

硬件底线

  • CPU:2 核即可,WireGuard 在内核层跑加密,开销极低
  • 内存:1GB 起步,50 人以内团队绑绰有余
  • 网络:公网 IP + 开放 UDP 端口,带宽按实际用量选
  • 存储:20GB SSD 够用,日志和配置占不了多少空间

安装和密钥生成

bash
# Ubuntu 22.04+ 已内置 WireGuard 内核模块,只需装工具 sudo apt update && sudo apt install -y wireguard wireguard-tools # 进入配置目录,设置严格权限 cd /etc/wireguard umask 077 # 生成服务器密钥对 wg genkey | tee server_private.key | wg pubkey > server_public.key # 生成客户端密钥对(每个客户端都要单独生成) wg genkey | tee client1_private.key | wg pubkey > client1_public.key

密钥文件权限必须是 600,私钥泄露等于 VPN 白建。

服务器配置文件

创建 /etc/wireguard/wg0.conf

ini
[Interface] Address = 10.10.0.1/24 ListenPort = 51820 PrivateKey = <服务器私钥,填 server_private.key 的内容> PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE # 客户端 1 [Peer] PublicKey = <客户端1公钥> AllowedIPs = 10.10.0.2/32 # 客户端 2 [Peer] PublicKey = <客户端2公钥> AllowedIPs = 10.10.0.3/32

PostUpPostDown 是关键——它们在 VPN 启停时自动配置 NAT 转发规则,没有这两行,客户端连上 VPN 也上不了网。eth0 要替换成你服务器的实际网卡名,用 ip addr 查看。

启用内核转发

bash
echo "net.ipv4.ip_forward = 1" | sudo tee -a /etc/sysctl.d/99-wireguard.conf sudo sysctl -p /etc/sysctl.d/99-wireguard.conf

不开启 IP 转发,VPN 只能访问服务器本身,无法代理其他流量。

防火墙放行

bash
# UFW 用户 sudo ufw allow 51820/udp sudo ufw reload # 或者直接用 iptables sudo iptables -A INPUT -p udp --dport 51820 -j ACCEPT

启动服务

bash
sudo systemctl enable wg-quick@wg0 sudo systemctl start wg-quick@wg0 # 验证运行状态 sudo wg show

wg show 会列出所有已连接的 Peer 及其流量统计,这是日常排查的第一条命令。

客户端配置

把以下内容发给客户端(手机、电脑都通用):

ini
[Interface] PrivateKey = <客户端私钥> Address = 10.10.0.2/24 DNS = 1.1.1.1 [Peer] PublicKey = <服务器公钥> AllowedIPs = 0.0.0.0/0 Endpoint = <服务器公网IP>:51820 PersistentKeepalive = 25

几个要点:

  • AllowedIPs = 0.0.0.0/0 表示所有流量走 VPN;如果只想访问内网,改成内网网段如 10.10.0.0/24, 192.168.1.0/24
  • PersistentKeepalive = 25 是 NAT 穿透必备,不加的话客户端在 NAT 后面会频繁掉线
  • 私钥不要通过聊天工具明文传输,用加密通道或者直接在客户端本地生成密钥对

OpenVPN 部署要点

如果你因为防火墙限制或合规需求必须用 OpenVPN,推荐用 openvpn-install 脚本快速部署:

bash
curl -O https://raw.githubusercontent.com/angristan/openvpn-install/master/openvpn-install.sh chmod +x openvpn-install.sh sudo ./openvpn-install.sh

脚本会交互式引导你选择协议(TCP/UDP)、端口、DNS 等,完成后自动生成客户端 .ovpn 配置文件。

OpenVPN 的核心配置项:

  • 协议选择:UDP 性能好,TCP 443 能穿防火墙——如果用户在严格管控网络下办公,选 TCP 443
  • 加密算法:默认 AES-256-GCM 即可,别用 BlowFish 和 3DES
  • 设备模式:用 TUN,TAP 模式 Android/iOS 不支持

安全加固清单

不管用哪种协议,部署完必须做这几件事:

1. 禁用密码登录,只用密钥认证

bash
sudo sed -i 's/^#*PasswordAuthentication.*/PasswordAuthentication no/' /etc/ssh/sshd_config sudo systemctl restart sshd

2. 限制 VPN 管理端口的访问来源

不要把 SSH 端口暴露给全网,用防火墙白名单办公网 IP:

bash
sudo ufw allow from <办公网IP> to any port 22 sudo ufw deny 22

3. 启用自动安全更新

bash
sudo apt install -y unattended-upgrades sudo dpkg-reconfigure -plow unattended-upgrades

4. WireGuard 定期轮换密钥

WireGuard 没有内置密钥过期机制,需要手动轮换。建议每 90 天更换一次 Peer 密钥,流程:生成新密钥 -> 更新配置文件 -> sudo systemctl restart wg-quick@wg0

5. 日志和审计

  • OpenVPN 默认记录连接日志,路径 /var/log/openvpn.log
  • WireGuard 不记录流量内容(设计如此),但可以通过 wg show 查看实时连接状态,配合 PostUp 脚本把连接事件写入日志

日常运维

用户管理

小团队(10 人以内)直接手动管理 Peer 配置文件就行。规模再大,强烈建议上管理平台:

  • Tailscale:基于 WireGuard 的零配置组网,免费额度支持 100 台设备,适合不想折腾的团队
  • Headscale:Tailscale 的开源替代,自托管,数据完全自主
  • Firezone:开源 WireGuard 网关,带 Web 管理界面和 SSO 集成

这几个方案都省去了手动管理密钥和配置文件的麻烦,新员工入职自助申请即可。

监控告警

核心监控项:

  • 连接数wg show wg0 | grep -c "latest handshake" 查看活跃连接
  • 带宽用量wg show wg0 transfer 显示每个 Peer 的累计流量
  • 服务状态systemctl is-active wg-quick@wg0 做健康检查

简单方案:写个 cron 脚本每 5 分钟跑一次 wg show,结果推到 Prometheus 或写入日志文件,配合 Grafana 看板。或者直接用 Tailscale/Headscale 自带的监控面板。

备份策略

必须备份的东西:

  • /etc/wireguard/ 整个目录(含密钥和配置)
  • /etc/sysctl.d/99-wireguard.conf
  • 防火墙规则(iptables-save > /etc/iptables/rules.v4

备份频率:配置变更后立即备份,日常每周一次自动备份即可。

故障排查速查

现象排查方向
客户端连不上检查服务器 UDP 端口是否开放、密钥是否匹配
连上了但上不了网检查 IP 转发是否开启、PostUp NAT 规则是否生效、eth0 网卡名是否正确
频繁掉线客户端加 PersistentKeepalive = 25
速度慢换更近的服务器节点、检查 MTU 设置(尝试降到 1280)
WireGuard 服务起不来journalctl -u wg-quick@wg0 查看详细报错,常见原因:私钥格式错误、端口被占用

高可用部署

单节点 VPN 挂了全公司断网,10 人以上团队建议做冗余:

  • 双节点热备:两台 VPN 服务器用相同配置,客户端配置两个 Endpoint,DNS 轮询切换
  • 负载均衡:前端挂 HAProxy 或 Nginx Stream 做 UDP 负载分发
  • 配置同步:用 rsync 或 Git 同步 /etc/wireguard/ 目录,新增 Peer 时两个节点同时更新

更省事的路线:直接用 Tailscale 的中继节点功能,或者 Headscale + DERP 服务器,自动处理节点切换。


VPN 服务器的难点不在装软件——一行命令就能装好——而在安全加固、日常运维和故障排查。部署完不是结束,定期检查密钥、监控连接状态、保持系统更新,才是让 VPN 稳定运行的关键。

标签:VPN