剪藏#剪藏#键上江湖

实战系列二:WireGuard 配置优化、密钥管理与客户端接入全攻略

2025 年 8 月 28 日1 分钟
分享Twitter / XTelegram微博

大家好,我是一名从一线打拼出来的老运维,十多年折腾在系统维护、故障抢修、上线发布、运维管理一线,踩过不少坑,也总结了不少实战经验。如果你喜欢这类技术文章,欢迎关注 + 转发支持!

大家如果有问题,也可以问问我的智能助手,有可能在以往的文章找到答案哦:有问必答助手

实战系列一:用 Podman + WireGuard 打造你的下一代轻量级 VPN(UI 可视化管理) 中,我们已经利用 Podman + Podman-Compose 成功部署了 WireGuard VPN,并通过 Web UI 实现了基本管理,当然你也可以用Docker + Docker-Compose直接部署。 但如果只是“能跑”,还远远不够。要在生产环境里真正稳定使用,还需要关注:

  • 配置参数优化(带宽、MTU、性能调优)

  • 密钥安全与生命周期管理

  • 客户端接入(PC、移动端、自动化配置)

今天我们就来深入探讨这些实战内容。

1️⃣ 配置优化:让 WireGuard 更快更稳

WireGuard 的核心配置文件位于 config/wg0.conf。

说明:

因为在实战系列一中使用的是容器安装,我们将config配置目录挂载到了容器内部的config目录,在容器内部的/etc/wireguard目录自动软链接到了/config/wg_confs目录,所以容器应用是读取的外部挂载配置wg0.conf文件。

1.1 常用优化参数

JAVASCRIPT
[Interface]
PrivateKey = <ServerPrivateKey>
Address = 10.13.13.1/24
ListenPort = 51820
MTU = 1420
PostUp   = iptables -A FORWARD -i %i -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE

[Peer]
PublicKey = <ClientPrivateKey>
AllowedIPs = 10.13.13.2/32

关键点:

  • PrivateKey =

  • 表示 本节点的私钥(必须保密)。WireGuard 每个节点(无论是服务端还是客户端)都有一对 公钥/私钥。服务端用这个 PrivateKey 来识别自己,同时配合对端的 PublicKey 建立加密通道

  • Address = 10.13.13.1/24(网段自定义,不要和现有网段冲突)

  • 表示 分配给 WireGuard 接口的虚拟内网地址。10.13.13.1 就是服务端的虚拟网卡 IP,客户端通常是 10.13.13.x。/24 代表子网掩码 255.255.255.0,即客户端和服务端在同一子网内,能够互相通信。

  • MTU=1420

  • 建议手动设置,否则可能因为隧道封装导致丢包。如果遇到某些网站打不开,尝试调小到 1380。

  • NAT 转发 (PostUp/PostDown)

  • 确保客户端访问外网时能正确 SNAT 出去。eth0 改成你宿主机的外网网卡名。PostUp → 在接口启动时执行,开启转发 + 出口 NATPostDown → 在接口关闭时执行,撤销对应规则

  • 端口与防火墙

  • 确保 51820/udp 已经放行。在 AWS EC2 / 阿里云等环境,需要额外开安全组规则。

每个节点(服务端 / 客户端)都需要一对 密钥对(PublicKey / PrivateKey),在配置文件中双方都需要配置对端的公钥,这样服务端才能识别哪个客户端是谁,以及给它分配什么内网 IP,或者客户端应该连接那个服务端。

2️⃣ 密钥管理:安全才是第一要务

WireGuard 使用 公私钥对 来进行身份验证。

2.1 生成密钥对(命令行方式)

JAVASCRIPT
wg genkey | tee privatekey | wg pubkey > publickey
  • privatekey:服务端或客户端的私钥(必须保密)

  • publickey:分发给对端

2.2 在 UI 界面管理

WireGuard-UI 已经集成了自动生成密钥的功能,并且支持直接扫码连接,非常方便。 建议做法:

  • 生产环境下,定期(比如 3-6 个月)更新一次密钥

  • 使用 UI 自动生成 → 下载客户端配置 → 分发到用户

3️⃣ 服务端配置

如果你是按照【实战系列一】容器方式安装的wireguard,那么请继续阅读。

想使用software-only安装方式,我会再单独写一篇文章。

在之前的docker-compose.yml文件中,我们配置了环境变量,以便自动生成相应的配置文件,另外不用管wireguard-ui界面,先掌握用命令行的方式进行配置。

核心配置:

JAVASCRIPT
      # 配置你的服务器公网IP
      - SERVERURL=43.192.99.228
      # 暴露的UDP端口,若使用云服务器,在安全组中放开51820/UDP
      - SERVERPORT=51820
      # 表示要创建的客户端数量,这里5会自生成5个客户端配置。也可以配置名称如myPC,myPhone,myTablet
      - PEERS=5
      # DNS设置在peer中,这里auto表示使用docker主机的DNS解析,为了能顺利上网,配置阿里DNS
      - PEERDNS=223.5.5.5
      # 配置vpn要使用网络地址
      - INTERNAL_SUBNET=10.13.13.0

配置完成后,执行命令生效:

JAVASCRIPT
[root@ip-172-31-6-116 wireguard-vpn]# docker-compose up -d
WARN[0000] /root/wireguard-vpn/docker-compose.yml: the attribute `version` is obsolete, it will be ignored, please remove it to avoid potential confusion 
[+] Running 2/2
 ✔ Container wireguard     Started                                                                                                         4.3s 
 ✔ Container wireguard-ui  Running 

启动成功后,会自动生成server和client端的配置,在config目录下自动生成了5个client端的配置,直接拷贝出来使用即可。

Client配置包含以下文件:

JAVASCRIPT
[root@ip-172-31-6-116 config]# ls peer1/ -l
total 20
# 客户端配置文件 
-rw-------. 1 ec2-user ec2-user  311 Aug 26 05:37 peer1.conf
# QR码
-rw-------. 1 ec2-user ec2-user 1142 Aug 26 05:37 peer1.png
# 共享密钥
-rw-------. 1 ec2-user ec2-user   45 Aug 26 02:11 presharedkey-peer1
# 客户端私钥
-rw-------. 1 ec2-user ec2-user   45 Aug 26 02:11 privatekey-peer1
# 客户端公钥
-rw-------. 1 ec2-user ec2-user   45 Aug 26 02:11 publickey-peer1

Server配置文件包含以下内容:

JAVASCRIPT
[Interface]
Address = 10.13.13.1
ListenPort = 51820
PrivateKey = 4Ea7IV7RO2gP4TnID9x5bge/eSs+I0yEEGM3l0=
PostUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -A FORWARD -o %i -j ACCEPT; iptables -t nat -A POSTROUTING -o eth+ -j MASQUERADE
PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -D FORWARD -o %i -j ACCEPT; iptables -t nat -D POSTROUTING -o eth+ -j MASQUERADE

[Peer]
# peer1
PublicKey = ZK2Ldt9ZKScaV9GpXQFLU4nQxPiY2wF68PgMozFyM=
PresharedKey = 3jtw87TjE9VgzZ4y6+j95/gUrvkhkx7pLUe9k+8=
AllowedIPs = 10.13.13.2/32

这样服务端配置就完成了,若想修改配置,直接修改环境变量,然后执行docker-compose up -d生效。

4️⃣ 客户端接入实战

WireGuard 的跨平台支持非常好,从 PC 到手机都能轻松接入。

🖥️ Linux 客户端

安装:

JAVASCRIPT
sudo apt install wireguard -y

配置 /etc/wireguard/wg0.conf:

这里可以直接使用从服务端生成的客户端配置文件。

JAVASCRIPT
[Interface]
PrivateKey = <ClientPrivateKey>
Address = 10.13.13.2/32
DNS = 1.1.1.1

[Peer]
PublicKey = <ServerPublicKey>
Endpoint = <ServerIP>:51820
AllowedIPs = 0.0.0.0/0

启动:

JAVASCRIPT
sudo wg-quick up wg0

💻 Windows 客户端

  • 从 官方 WireGuard 官网 下载 Windows 客户端

  • 直接导入 peer1.conf 文件(或者用 UI 扫描二维码)

Notion image

  • 一键连接 VPN

Notion image

点击连接,非常顺滑的连上了。

Notion image

我们再来验证Ping下服务器的IP地址,可以Ping通:

Notion image

📱 移动端(iOS / Android)

  • App Store / Google Play 搜索 WireGuard

  • 选择 “Add Tunnel” → “Scan QR Code”

  • 扫描 WireGuard-UI 上生成的二维码即可

Notion image

4️⃣ 高效管理技巧

  • 多客户端分配:PEERS=5 只是初始数量,可以随时添加更多。

  • 限制客户端流量:可以在 AllowedIPs 精细化配置,比如只允许访问内网段。

  • 日志与监控:

JAVASCRIPT
docker logs -f wireguard
docker exec -it wireguard wg show
  • 用来排查连接状态、流量统计。

5️⃣ 总结

在这一篇 实战系列二 中,我们掌握了:

  • 配置文件优化(MTU、转发、端口)

  • 密钥管理与安全更新

  • 各类客户端接入方式(Linux、Windows、手机)

  • 常见管理技巧与排错命令

到这里,你的 WireGuard VPN 不仅能跑,还能 稳定、安全、易用。

👉 在下一篇,我们将继续深入: 如何让 WireGuard 实现UI管理、命令配置以及多用户隔离的进阶玩法。

往期推荐:

实战系列一:用 Podman + WireGuard 打造你的下一代轻量级 VPN(UI 可视化管理)

END

重点提醒

因为有你们的关注和反馈,分享才更有意义 ❤️。

👉 有需要的朋友可以加我 微信:jack_2013L,记得备注暗号【007】,就能入群和更多小伙伴一起交流~

💬 你是否其它问题和想法呢?欢迎在评论区留言,我会挑选一些有意思的留言在下篇文章里展开。

✨ 如果觉得内容对你有帮助,别忘了 关注 + 转发,这样你就不会错过后续的实战分享啦!

原文地址: https://mp.weixin.qq.com/s?__biz=MzA5MTcwOTEyNw==&mid=2247484491&idx=1&sn=67ea2103738cd4bc1af4bf88bf40bb63&chksm=916da63cd6571cf48f8a441d09e698fc9f1c3897bab85069caaef1fe7db3440dec16988b6050&mpshare=1&scene=1&srcid=0828pQHmOH8RuZVWuFE550X2&sharer_shareinfo=3466cc2e163d5ca7d1ec0c79ab529342&sharer_shareinfo_first=3466cc2e163d5ca7d1ec0c79ab529342#rd

相关文章