当前位置:首页>Linux>Linux WireGuard VPN——快速搭一个私有网络

Linux WireGuard VPN——快速搭一个私有网络

  • 2026-08-19 08:37:24
Linux WireGuard VPN——快速搭一个私有网络

大家好,我是冯哥的缓存。前面我们搞定了 Nginx 的全部安全链路——从安装、反代、HTTPS、负载均衡到性能优化和安全加固。现在服务器在公网上已经比较安全了。

但有一种场景 Nginx 解决不了:想在家里安全地访问公司内网的服务器,或者在外面用手机连家里的 NAS。总不能把所有端口都暴露在公网上吧?这时候就需要 VPN。

提到 VPN,很多人第一反应是 OpenVPN,配置文件几百行,证书体系复杂,速度还不快。今天要聊的 WireGuard,是 VPN 领域的"降维打击":配置短到几十行,性能比 OpenVPN 快好几倍,连手机都能装。

💡 提示: WireGuard 的设计哲学是"少即是多"——代码量只有 OpenVPN 的 1%,意味着漏洞数量天然更少,攻击面更小,更安全。但它不追求功能大而全,而是把核心功能做到极致。

一、为什么选 WireGuard

1.1 WireGuard vs 传统 VPN

对比项
OpenVPN
IPsec
WireGuard
代码量
约 10 万行
trongSwan 实现约 40 万行代码
约 4000 行
配置复杂度
高(证书/CA/多条配置段)
极高(两阶段协商/SA/SPD)
低(一个配置文件十几行)
性能
中等
较快
快(内核级)
加密协议
可选(AES-256/ChaCha20)
可选
固定(ChaCha20+Poly1305)
UDP/TCP
都支持
UDP
仅 UDP
手机客户端
有,但不好用
官方 App,体验好
内核集成
否(用户态)
是(Linux 5.6+)
状态管理
有状态
有状态
无状态
漫游
不支持
不支持
支持(IP 漫游)

💡 提示: "无状态"是 WireGuard 最大的设计亮点。传统 VPN 维护连接状态,连接断了要重新协商。WireGuard 不维护连接状态机,而是通过密钥和计数器维护会话。网络切换时无需重新协商。这意味着网络切换(WiFi→4G)不会断开 VPN。

1.2 WireGuard 的核心特点

特点
说明
密钥认证
每个节点一对公私钥,类似 SSH,没有证书体系
固定加密套件
ChaCha20(对称加密)+ Poly1305(认证)+ Curve25519(密钥交换)+ BLAKE2s(哈希)
UDP only
只走 UDP,不支持 TCP(UDP 在丢包网络下性能更好)
1.1.1.1 内置
不分配真实 IP,用内部虚拟 IP 通信
漫游
客户端 IP 变了不影响连接(手机从 WiFi 切到 4G,VPN 不断)
静默模式
没收到合法数据包时完全不响应,扫描器看不出这是个 VPN 服务
内核级
Linux 5.6+ 直接内置,性能接近网卡原生

1.3 适用场景

场景
说明
远程办公
在家访问公司内网
家庭 VPN
在外面用手机连家里的 NAS/路由器
多机组网
几台分散在各地的服务器组成内网
绕过公网限制
通过中转服务器访问特定资源
Site-to-Site
两个局域网通过 VPN 互联

⚠️ 注意: WireGuard 本身只是一个 VPN 隧道工具。它不做流量混淆,在防火墙严格的网络环境中可能被识别和阻断。如果需要混淆,可以用 WireGuard + UDP2RAW 等工具组合,或选择 Shadowsocks/V2Ray。

二、安装 WireGuard

2.1 服务端安装(Linux)

Ubuntu/Debian(Linux 5.6+ 内核自带):

# Ubuntu 20.04+ / Debian 11+ 内核已内置 WireGuard 模块# 只需要安装用户态工具sudo apt updatesudo apt install wireguard wireguard-tools

CentOS/RHEL/Rocky:

# CentOS 8+ / Rocky 9sudo dnf install epel-releasesudo dnf install wireguard-tools

内核版本检查:

# 确认内核版本 >= 5.6uname -r# 输出示例:5.15.0-76-generic(OK)# Ubuntu 20.04 的 HWE 内核也内置 WireGuard,可升级sudo apt install linux-generic-hwe-20.04 # 如果内核 < 5.6,需要安装 DKMS 模块sudo apt install wireguard-dkms# 或者升级内核
内核版本
WireGuard 支持
需要额外安装
< 5.6
不内置
wireguard-dkms
>= 5.6
内置
仅 wireguard-tools
>= 5.15
内置且优化
仅 wireguard-tools

2.2 验证安装

# 检查内核模块是否加载sudo modprobe wireguardlsmod | grep wireguard# 输出:wireguard  110592  0# 检查工具是否可用wg --version# 输出:wireguard-tools v1.0.20210914 - runtime: go# 如果 modprobe 报错 "Module not found"# 说明内核太低,需要安装 DKMS 或升级内核

三、密钥生成——WireGuard 的身份证

3.1 密钥体系

WireGuard 用公钥加密体系认证身份,和 SSH 类似:

概念
类比
说明
私钥(Private Key)
SSH 的 id_rsa
绝对不能泄露,只在自己机器上
公钥(Public Key)
SSH 的 authorized_keys
分享给对端,用于验证身份
Pre-shared Key
额外的对称密钥
可选,在公钥认证基础上再加一层对称加密

3.2 生成密钥对

# 生成服务端密钥对# 私钥:保存在服务端配置里# 公钥:分发给客户端cd /etc/wireguard# 方法一:分步生成sudo bash -c 'umask 077; wg genkey > server_private.key'sudo bash -c 'wg pubkey < server_private.key > server_public.key'# 方法二:一行搞定sudo bash -c 'wg genkey | tee server_private.key | wg pubkey > server_public.key'# 查看密钥sudo cat server_private.key# 输出:yAnz5TF+lXXJte14tji3zlMNqzhd2rYUIgJBgB3fBmk=sudo cat server_public.key# 输出:GtL7fZc/bLnqZldpVofMCD6hDjrKbioS1A82lSDwXWQ=

⚠️ 注意:umask 077 非常重要!WireGuard 的私钥文件权限必须是 600(只有 owner 可读)。如果不加 umask,密钥文件默认权限是 644,WireGuard 会拒绝加载并报错。

3.3 生成客户端密钥

# 每个客户端都需要独立的密钥对# 生成手机/笔记本的密钥cd /etc/wireguard# 客户端1sudo bash -c 'wg genkey | tee client1_private.key | wg pubkey > client1_public.key'# 客户端2sudo bash -c 'wg genkey | tee client2_private.key | wg pubkey > client2_public.key'# 可选:生成 Pre-shared Key(额外的安全层)sudo bash -c 'wg genpsk > psk.key'# Pre-shared Key 是可选的,加上后即使公钥被破解也无法解密

3.4 密钥文件清单

文件
存放位置
用途
server_private.key
服务端
服务端配置文件引用
server_public.key
客户端
客户端配置里写服务端公钥
client1_private.key
客户端1
客户端配置文件引用
client1_public.key
服务端
服务端配置里写客户端公钥
psk.key
两端都有
可选的预共享密钥

💡 提示: 私钥永远不出本机。交换的只有公钥。服务端要知道所有客户端的公钥,客户端要知道服务端的公钥。

四、服务端配置

4.1 网络规划

在写配置之前,先规划好 VPN 内部使用的 IP 段:

VPN 网段
说明
适用场景
10.0.0.0/24
最多 253 个客户端
小型网络
10.13.0.0/24
最多 253 个客户端
个人常用
192.168.100.0/24
最多 253 个客户端
避免和现有网段冲突
10.66.66.0/24
最多 253 个客户端
常见 VPN 网段

⚠️ 注意: VPN 网段不能和现有局域网冲突。如果家庭网络是 192.168.1.0/24,公司网络也是 192.168.1.0/24,VPN 就不能用这个段,否则路由冲突。选一个不常用的段,如 10.13.0.0/24

4.2 编写服务端配置

# /etc/wireguard/wg0.conf[Interface]# 服务端的 VPN 内部 IPAddress = 10.13.0.1/24# 监听端口(UDP)# 51820 是 WireGuard 的官方默认端口,可以自定义ListenPort = 51820# 服务端私钥PrivateKey = yAnz5TF+lXXJte14tji3zlMNqzhd2rYUIgJBgB3fBmk=# MTU(一般不用改,除非有特殊网络环境)MTU = 1420# 开启 IP 转发(让 VPN 客户端可以访问服务端所在的局域网)# 这些命令在 WireGuard 启动/停止时自动执行PostUp = sysctl -w net.ipv4.ip_forward=1PostUp = iptables -A FORWARD -i wg0 -j ACCEPTPostUp = iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADEPostDown = iptables -D FORWARD -i wg0 -j ACCEPTPostDown = iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE# ===== 客户端1:手机 =====[Peer]# 客户端1的公钥PublicKey = xTIBA5rboUvnH4htodjb6e697QjLERt1NQ434kLdPEE=# 客户端1的 VPN IP(注意 /32 表示单个 IP)AllowedIPs = 10.13.0.2/32# 可选:Pre-shared KeyPresharedKey = /Nq5T9XqGwq3Dn3A5pPvVq2bN5bG5L5pVq2bN5bG5E=# 保持连接:每 25 秒发一个心跳包# 如果客户端在 NAT 后面,这个很重要PersistentKeepalive = 25# ===== 客户端2:笔记本 =====[Peer]PublicKey = TrMv5P+wkZEW1iZFd6VGegrN5n3k3l1q7kxXn6mQXxw=AllowedIPs = 10.13.0.3/32PersistentKeepalive = 25

4.3 配置项详解

[Interface] 段(本机配置):

参数
作用
示例
Address
本机的 VPN IP
10.13.0.1/24
ListenPort
监听的 UDP 端口
51820
PrivateKey
本机私钥
server_private.key 的内容
MTU
最大传输单元
1420(默认值,一般不改)
PostUp
启动时执行的命令
配置 iptables 转发规则
PostDown
停止时执行的命令
清除 iptables 转发规则
DNS
VPN 连接后使用的 DNS(可选)
1.1.1.1 或 223.5.5.5
SaveConfig
是否允许运行时修改自动保存(可选)
true / false

[Peer] 段(对端配置):

参数
作用
示例
PublicKey
对端的公钥
client1_public.key 的内容
AllowedIPs
允许该对端使用的 IP 段
10.13.0.2/32
PresharedKey
预共享密钥(可选)
psk.key 的内容
PersistentKeepalive
心跳间隔(秒),0 表示不发
25(NAT 后必设)
Endpoint
对端的公网地址和端口(服务端不需要写客户端的
1.2.3.4:51820

💡 提示: 服务端配置里 不需要 写客户端的 Endpoint。客户端是动态 IP,连上来时服务端会自动学习它的地址。只有客户端配置里需要写服务端的 Endpoint。

4.4 PostUp/PostDown 说明

PostUp 和 PostDown 是 WireGuard 启动和停止时自动执行的 shell 命令。上面的配置做了三件事:

命令
作用
sysctl -w net.ipv4.ip_forward=1
开启内核 IP 转发
iptables -A FORWARD -i wg0 -j ACCEPT
允许 wg0 接口的流量转发
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
SNAT:把 VPN 流量伪装成服务端 IP

这三条命令实现了"让 VPN 客户端通过服务端访问外网"的功能。如果只做点对点 VPN(客户端之间互访),不需要后两条。

⚠️ 注意:eth0 要改成服务器的实际网卡名。用 ip addr 查看网卡名,云服务器通常是 eth0 或 ens3 或 ens5

五、客户端配置

5.1 Linux 客户端

# /etc/wireguard/wg0.conf(客户端)[Interface]# 客户端的 VPN IPAddress = 10.13.0.2/24# 客户端私钥PrivateKey = cPEt6T7gN3xL5pVq2bN5bG5L5pVq2bN5bG5L5pVq0=# DNS(可选,通过 VPN 时使用的 DNS 服务器)DNS = 223.5.5.5[Peer]# 服务端的公钥PublicKey = GtL7fZc/bLnqZldpVofMCD6hDjrKbioS1A82lSDwXWQ=# 服务端的公网地址和端口Endpoint = your-server.com:51820# 允许通过 VPN 隧道的流量# 0.0.0.0/0 表示所有流量都走 VPN(全局代理)# 10.13.0.0/24 表示只有 VPN 内网流量走 VPN(分流模式)AllowedIPs = 0.0.0.0/0# 心跳保活(客户端在 NAT 后面时必须设)PersistentKeepalive = 25

5.2 AllowedIPs 详解——最重要的参数

AllowedIPs 是 WireGuard 最核心也最容易搞混的参数,它同时控制两件事:

功能
说明
入站过滤
只接受来自该 Peer、源 IP 在 AllowedIPs 范围内的数据包
路由表
把 AllowedIPs 里的网段加入路由表,指向 wg0 接口
AllowedIPs 值
行为
适用场景
0.0.0.0/0
所有流量走 VPN(全局代理)
翻墙 / 全部流量加密
0.0.0.0/0, ::/0
所有 IPv4 + IPv6 流量走 VPN
全局代理(含 IPv6)
10.13.0.0/24
只有 VPN 内网流量走 VPN
只访问 VPN 内部设备
10.13.0.0/24, 192.168.1.0/24
VPN 内网 + 服务端局域网走 VPN
访问 VPN 内部 + 服务端局域网
10.13.0.1/32
只能访问 VPN 服务端
只想连服务端
# 图解:AllowedIPs 的路由效果## AllowedIPs = 0.0.0.0/0(全局代理)# 所有流量 → wg0 → 服务端 → 互联网# 客户端 IP 显示为服务端公网 IP## AllowedIPs = 10.13.0.0/24(分流模式)# 访问 10.13.0.x → wg0 → 服务端 → VPN 内网# 访问其他 IP → 本地网卡 → 互联网(不走 VPN)

⚠️ 注意: 全局模式 0.0.0.0/0 会让所有流量走 VPN,包括 DNS。如果 VPN 服务端的网络不通外网,客户端会完全断网。先用 10.13.0.0/24 测试连通性,再切全局模式。

5.3 Windows 客户端

  1. 下载官方客户端:从 wireguard.com 下载 Windows 安装包
  2. 打开 WireGuard → 点击"添加隧道" → "添加空隧道"
  3. 会自动生成密钥对,把公钥复制到服务端的 [Peer] 段
  4. 编辑客户端配置:
[Interface]Address = 10.13.0.3/24PrivateKey = <Windows客户端自动生成的私钥>DNS = 223.5.5.5[Peer]PublicKey = GtL7fZc/bLnqZldpVofMCD6hDjrKbioS1A82lSDwXWQ=Endpoint = your-server.com:51820AllowedIPs = 0.0.0.0/0PersistentKeepalive = 25
  1. 点击"连接"

💡 提示: Windows 客户端创建空隧道时会自动生成密钥对并显示公钥。把这个公钥复制到服务端配置的 [Peer] 段,设置好 AllowedIPs,然后在服务端 sudo systemctl reload wg-quick@wg0 即可。

5.4 Android 客户端

  1. 从 Google Play 或 F-Droid 安装 WireGuard
  2. 打开 App → 点击 "+" → "Create from scratch"
  3. 填写:
    • Name:MyVPN
    • Private key:点击生成按钮自动创建
    • Addresses:10.13.0.4/24
    • DNS servers:223.5.5.5
  4. 添加 Peer:
    • Public key:服务端的公钥
    • Endpoint:your-server.com:51820
    • Allowed IPs:0.0.0.0/0
    • Persistent keepalive:25
  5. 保存,点击切换开关连接

5.5 iOS 客户端

  1. 从 App Store 安装 WireGuard
  2. 流程和 Android 几乎一样
  3. 也可以用服务端生成配置二维码,手机扫码导入(见后文)

iOS 客户端对 DNS 字段更敏感,如果 DNS 不生效,可以在 iOS 设置中手动配置 DNS。

六、启动与连接

6.1 服务端启动

# 启动 WireGuard(wg0 是配置文件名去掉 .conf)sudo wg-quick up wg0# 输出示例:# [#] sysctl -w net.ipv4.ip_forward=1# [#] iptables -A FORWARD -i wg0 -j ACCEPT# [#] iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE# [#] ip link add wg0 type wireguard# [#] wg setconf wg0 /dev/fd/63# [#] ip -4 address add 10.13.0.1/24 dev wg0# [#] ip link set mtu 1420 up dev wg0# 停止sudo wg-quick down wg0# 查看状态sudo wg show# 输出示例:# interface: wg0#   public key: GtL7fZc/bLnqZldpVofMCD6hDjrKbioS1A82lSDwXWQ=#   private key: (hidden)#   listening port: 51820## peer: xTIBA5rboUvnH4htodjb6e697QjLERt1NQ434kLdPEE=#   endpoint: 123.45.67.89:43210#   allowed ips: 10.13.0.2/32#   latest handshake: 1 minute ago#   transfer: 1.50 MiB received, 2.30 MiB sent

6.2 开机自启

# 设置开机自启sudo systemctl enable wg-quick@wg0# 启动sudo systemctl start wg-quick@wg0# 停止sudo systemctl stop wg-quick@wg0# 重启(修改配置后)sudo systemctl restart wg-quick@wg0# 或者用 reload(不断开现有连接)sudo systemctl reload wg-quick@wg0

💡 提示:wg-quick@wg0 中的 wg0 对应配置文件 /etc/wireguard/wg0.conf。如果有多个 VPN 接口,可以创建 wg1.confwg2.conf,分别用 wg-quick@wg1wg-quick@wg2 管理。

6.3 客户端连接测试

# Linux 客户端启动sudo wg-quick up wg0# 测试 VPN 连通性# 1. ping VPN 服务端ping -c 3 10.13.0.1# 2. 查看自己的 VPN IPip addr show wg0# 3. 查看出口 IP(全局模式时应该显示服务端公网 IP)curl ifconfig.me# 4. 访问服务端局域网内的其他设备ping -c 3 192.168.1.100# 5. 查看连接状态sudo wg show# 看到 "latest handshake: x seconds ago" 说明连接正常

6.4 wg show 输出解读

interface: wg0  public key: GtL7fZc/bLnqZldpVofMCD6hDjrKbioS1A82lSDwXWQ=    # 本机公钥  private key: (hidden)                                        # 私钥隐藏显示  listening port: 51820                                        # 监听端口peer: xTIBA5rboUvnH4htodjb6e697QjLERt1NQ434kLdPEE=           # 对端公钥  endpoint: 123.45.67.89:43210                                # 对端地址  allowed ips: 10.13.0.2/32                                    # 允许的 IP  latest handshake: 1 minute ago                               # 最后一次握手  transfer: 1.50 MiB received, 2.30 MiB sent                   # 流量统计
输出项
含义
异常判断
latest handshake
最后握手时间
超过 5 分钟没握手 = 连接可能断了
transfer
收发流量
只有 sent 没有 received = 对端没收到
endpoint
对端地址
空 = 对端还没连上来
allowed ips
允许的对端 IP
确认和客户端 Address 一致

如果 latest handshake 显示 never,说明从未握手成功,检查公钥和端口。

七、多客户端管理

7.1 添加新客户端

# 1. 生成新客户端密钥cd /etc/wireguardsudo bash -c 'wg genkey | tee client3_private.key | wg pubkey > client3_public.key'# 2. 编辑服务端配置,添加新的 [Peer]sudo nano /etc/wireguard/wg0.conf# 在文件末尾添加:[Peer]PublicKey = <client3_public.key 的内容>AllowedIPs = 10.13.0.4/32PersistentKeepalive = 25# 3. 重载配置(不断开现有连接)sudo systemctl reload wg-quick@wg0# 或者用 wg 命令热加载(更优雅)sudo wg set wg0 peer <client3_public_key> allowed-ips 10.13.0.4/32

7.2 客户端 IP 分配表

建议维护一张 IP 分配表,避免冲突:

客户端
VPN IP
公钥(前8位)
备注
服务端
10.13.0.1
GtL7fZc/
手机
10.13.0.2
xTIBA5rb
Android
笔记本
10.13.0.3
TrMv5P+w
Windows
iPad
10.13.0.4
7N7K5L5p
iOS
家里 NAS
10.13.0.5
9XqGwq3D
Linux

7.3 删除客户端

# 方法一:编辑配置文件删除对应 [Peer] 段sudo nano /etc/wireguard/wg0.conf# 删除该客户端的 [Peer] 段sudo systemctl restart wg-quick@wg0# 方法二:用 wg 命令热删除sudo wg set wg0 peer <客户端公钥> remove# 删除后该客户端的密钥对作废,需要重新生成才能连接

7.4 生成客户端配置二维码

对于手机客户端,可以生成二维码直接扫码导入:

# 安装二维码工具sudo apt install qrencode# 生成客户端配置文件# 把客户端的完整配置写入一个文件cat > /tmp/client1.conf << 'EOF'[Interface]Address = 10.13.0.2/24PrivateKey = cPEt6T7gN3xL5pVq2bN5bG5L5pVq2bN5bG5L5pVq0=DNS = 223.5.5.5[Peer]PublicKey = GtL7fZc/bLnqZldpVofMCD6hDjrKbioS1A82lSDwXWQ=Endpoint = your-server.com:51820AllowedIPs = 0.0.0.0/0PersistentKeepalive = 25EOF# 在终端显示二维码qrencode -t ansiutf8 < /tmp/client1.conf# 如果显示乱码,可以用 qrencode -t UTF8 或转成图片格式 -o client.png。# 手机 WireGuard App → 扫码导入

💡 提示: 生成二维码后立即删除临时文件,避免私钥泄露:rm /tmp/client1.conf

八、防火墙配置

8.1 服务端防火墙

WireGuard 使用 UDP 端口,必须在防火墙放行:

# UFW 防火墙sudo ufw allow 51820/udpsudo ufw reload# iptablessudo iptables -A INPUT -p udp --dport 51820 -j ACCEPT# firewalldsudo firewall-cmd --permanent --add-port=51820/udpsudo firewall-cmd --reload
规则
作用
放行 51820/udp
允许 WireGuard 入站连接
放行 wg0 接口
允许 VPN 内网通信
MASQUERADE(PostUp 里配了)
让 VPN 客户端可以上外网

8.2 UFW 与 WireGuard

如果服务端开了 UFW,还需要允许 wg0 接口的转发:

# 允许 wg0 接口的流量sudo ufw allow in on wg0sudo ufw route allow in on wg0 out on eth0# 或者更宽松sudo ufw allow in on wg0sudo ufw default allow routed

8.3 云服务商安全组

如果服务器在云上(阿里云/腾讯云/AWS),除了系统防火墙,还要在云控制台的安全组里放行 UDP 51820 端口:

云服务商
操作位置
阿里云
ECS → 安全组 → 入方向
腾讯云
CVM → 安全组 → 入站规则
AWS
EC2 → Security Groups → Inbound
华为云
ECS → 安全组 → 入方向规则

⚠️ 注意: 安全组规则只认 UDP/TCP,WireGuard 只走 UDP。如果只开了 TCP 51820,WireGuard 连不上。一定要选 UDP 协议。

九、进阶配置

9.1 访问服务端局域网

VPN 客户端不仅想访问服务端本身,还想访问服务端所在局域网的其他设备(如公司内网的其他服务器)。

服务端配置改动:

# /etc/wireguard/wg0.conf[Interface]Address = 10.13.0.1/24ListenPort = 51820PrivateKey = <server_private_key># 开启转发PostUp = sysctl -w net.ipv4.ip_forward=1PostUp = iptables -A FORWARD -i wg0 -j ACCEPTPostUp = iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADEPostDown = iptables -D FORWARD -i wg0 -j ACCEPTPostDown = iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE

客户端配置改动:

[Interface]Address = 10.13.0.2/24PrivateKey = <client_private_key>[Peer]PublicKey = <server_public_key>Endpoint = your-server.com:51820# 把服务端局域网段也加进来AllowedIPs = 10.13.0.0/24, 192.168.1.0/24PersistentKeepalive = 25

这样客户端就能同时访问 VPN 内网(10.13.0.x)和服务端局域网(192.168.1.x)。

9.2 Site-to-Site VPN(两个局域网互联)

节点
公网 IP
局域网段
VPN IP
节点 A
1.2.3.4
192.168.1.0/24
10.13.0.1
节点 B
5.6.7.8
192.168.2.0/24
10.13.0.2

节点 A 配置:

[Interface]Address = 10.13.0.1/24ListenPort = 51820PrivateKey = <A_private_key># 开启转发PostUp = sysctl -w net.ipv4.ip_forward=1PostUp = iptables -A FORWARD -i wg0 -j ACCEPTPostDown = iptables -D FORWARD -i wg0 -j ACCEPT[Peer]PublicKey = <B_public_key>Endpoint = 5.6.7.8:51820# 允许 B 的 VPN IP + B 的局域网AllowedIPs = 10.13.0.2/32, 192.168.2.0/24PersistentKeepalive = 25

节点 B 配置:

[Interface]Address = 10.13.0.2/24ListenPort = 51820PrivateKey = <B_private_key>PostUp = sysctl -w net.ipv4.ip_forward=1PostUp = iptables -A FORWARD -i wg0 -j ACCEPTPostDown = iptables -D FORWARD -i wg0 -j ACCEPT[Peer]PublicKey = <A_public_key>Endpoint = 1.2.3.4:51820AllowedIPs = 10.13.0.1/32, 192.168.1.0/24PersistentKeepalive = 25

💡 提示: Site-to-Site 的关键是 AllowedIPs 互写对方的局域网段。节点 A 的配置里写 B 的局域网 192.168.2.0/24,节点 B 的配置里写 A 的局域网 192.168.1.0/24。这样 A 局域网的设备就能直接访问 B 局域网的设备。

9.3 动态 IP 的 Endpoint

如果服务端有动态公网 IP,可以用域名 + DDNS:

# 客户端配置[Peer]PublicKey = <server_public_key># 用域名代替 IPEndpoint = myddns.example.com:51820AllowedIPs = 0.0.0.0/0PersistentKeepalive = 25

WireGuard 在发起握手时会解析域名,因此如果域名 IP 变化,下次握手时会自动更新。

9.4 多 VPN 接口

一台服务器可以同时运行多个 WireGuard 接口,用不同的端口和网段:

# /etc/wireguard/wg0.conf → 端口 51820,网段 10.13.0.0/24(工作 VPN)# /etc/wireguard/wg1.conf → 端口 51821,网段 10.14.0.0/24(个人 VPN)# 分别启动sudo wg-quick up wg0sudo wg-quick up wg1# 分别设置开机自启sudo systemctl enable wg-quick@wg0sudo systemctl enable wg-quick@wg1

十、一键脚本部署

如果觉得手动配置太麻烦,可以用开源的一键脚本:

# 下载并运行一键安装脚本(社区维护)# 该脚本会自动完成:安装、生成密钥、配置服务端、生成客户端配置curl -O https://raw.githubusercontent.com/angristan/wireguard-install/master/wireguard-install.shchmod +x wireguard-install.shsudo ./wireguard-install.sh

脚本交互过程:

步骤
提示
示例输入
1
服务端公网 IP
1.2.3.4
2
服务端网卡名
eth0
3
WireGuard 端口
51820
4
VPN 网段
10.13.0.0/24
5
第一个客户端名称
phone
6
第一个客户端 DNS
223.5.5.5

⚠️ 注意: 一键脚本方便但不要盲目信任。建议先手动配置一遍理解原理,再用脚本提高效率。脚本生成的配置和手动写的完全一样,只是省去了重复操作。

十一、常见问题排查

11.1 连不上 VPN

如果连接失败,按这个顺序排查——1、端口通不通;2、公钥对不对;3、AllowedIPs 对不对。

症状
可能原因
排查方法
握手失败(无 latest handshake)
端口没放行
服务端 sudo tcpdump -i eth0 udp port 51820 看有没有收到包
握手失败
Endpoint 地址错误
确认客户端配置的 Endpoint IP/域名正确
握手失败
公钥配错了
检查客户端的 PublicKey 是服务端的,服务端的 PublicKey 是客户端的
握手失败
内核模块没加载
sudo modprobe wireguard
能握手但 ping 不通
AllowedIPs 配错
确认客户端 AllowedIPs 包含 VPN 网段
能握手但 ping 不通
服务端 IP 转发没开
sysctl net.ipv4.ip_forward
 应该是 1
全局模式断网
AllowedIPs 0.0.0.0/0 但服务端 NAT 没配
检查 PostUp 的 MASQUERADE 规则

11.2 连接频繁断开

可能原因
解决方法
没设 PersistentKeepalive
客户端加 PersistentKeepalive = 25
NAT 超时
Keepalive 设更短(15 秒)
UDP 被 QoS 限速
换端口(如 53/443),或用 UDP2RAW 伪装成 TCP
MTU 不匹配
尝试 MTU = 1280

11.3 速度慢

可能原因
解决方法
服务端带宽瓶颈
升级服务器带宽
MTU 太大导致分片
设 MTU = 1280
跨地区延迟
就近选择服务器位置
内核版本太低
升级到 5.10+ 获得更好的 WireGuard 性能
CPU 加密性能不足
确认使用内核模块而非用户态实现

11.4 用 tcpdump 抓包排查

# 在服务端抓 WireGuard 端口的 UDP 包sudo tcpdump -i eth0 udp port 51820 -n# 看到客户端的包到达 → 说明客户端发出正常,问题在服务端# 没看到任何包 → 说明包被防火墙/安全组拦了# 抓 wg0 接口的包(解密后的内网流量)sudo tcpdump -i wg0 -n# 看到 ICMP echo request 但没有 reply → 说明目标设备没响应或路由不对

11.5 查看详细日志

# WireGuard 没有传统日志,用 wg show 查看状态sudo wg show all# 开启内核动态调试sudo modprobe wireguardecho 1 | sudo tee /sys/module/wireguard/parameters/debug# 用 dmesg 查看调试信息sudo dmesg | grep wireguard

💡 提示: WireGuard 的设计理念是"静默"——不输出日志,不响应非法请求。这让排查变得困难,但也让攻击者无法通过日志探测 VPN。排查连接问题时,tcpdump + wg show 是最重要的两个工具。

十二、安全最佳实践

实践
说明
私钥权限 600
chmod 600 /etc/wireguard/*.conf
定期更换密钥
每 6-12 个月重新生成密钥对
离职/换设备时删除客户端
从服务端配置中移除该 Peer
使用 Pre-shared Key
在公钥认证基础上加一层对称加密
不要用默认端口
改掉 51820,减少被扫描的概率
限制 ListenPort 的来源
如果只有固定 IP 客户端,用防火墙限制来源 IP
不要在公网 Git 仓库放配置文件
配置文件包含私钥
监控异常连接
定期 wg show 检查有没有未知的 Peer 连接

十三、速查表

常用命令速查

命令
作用
sudo wg-quick up wg0
启动 VPN
sudo wg-quick down wg0
停止 VPN
sudo wg show
查看连接状态
sudo wg show wg0 latest-handshakes
查看各 Peer 最后握手时间
sudo wg show wg0 transfer
查看各 Peer 流量统计
sudo systemctl enable wg-quick@wg0
开机自启
sudo systemctl restart wg-quick@wg0
重启(修改配置后)
sudo wg set wg0 peer  allowed-ips 
热添加 Peer
sudo wg set wg0 peer  remove
热删除 Peer

配置文件速查

参数
服务端
客户端
[Interface]
Address
10.13.0.1/24
10.13.0.2/24
[Interface]
ListenPort
51820
不需要
[Interface]
PrivateKey
服务端私钥
客户端私钥
[Interface]
DNS
不需要
223.5.5.5
[Interface]
PostUp/PostDown
需要(转发规则)
不需要
[Peer]
PublicKey
客户端公钥
服务端公钥
[Peer]
Endpoint
不需要
服务端地址:端口
[Peer]
AllowedIPs
客户端 VPN IP/32
0.0.0.0/0 或 VPN网段
[Peer]
PersistentKeepalive
可选
25(NAT 后必设)

排查速查

问题
第一步检查
第二步检查
握手失败
tcpdump udp port 51820wg show
 看 endpoint
能握手但 ping 不通
AllowedIPs 是否包含目标网段
sysctl ip_forward
全局模式断网
PostUp MASQUERADE 是否配置
网卡名是否正确(eth0/ens3)
频繁断开
PersistentKeepalive 是否设置
MTU 是否太大
速度慢
服务器带宽
MTU 调到 1280

小结

WireGuard 的核心配置流程:

  1. 安装
     — apt install wireguard-tools,一行搞定
  2. 生成密钥
     — wg genkey | tee private | wg pubkey > public,每台机器一对
  3. 写服务端配置
     — Interface 段写自己的 IP/端口/私钥,Peer 段写每个客户端的公钥和 IP
  4. 写客户端配置
     — Interface 段写自己的 IP/私钥,Peer 段写服务端公钥/地址/AllowedIPs
  5. 开防火墙
     — 放行 UDP 端口 + 云安全组
  6. 启动
     — wg-quick up wg0 + systemctl enable
  7. 验证
     — wg show 看握手,ping 测连通性

记住三个容易踩的坑:

  • 公钥和私钥配反了
     — 客户端 [Peer] 里写的是服务端的公钥,不是私钥
  • AllowedIPs 搞混了
     — 服务端每个 Peer 的 AllowedIPs 是该客户端的 IP(/32),客户端的 AllowedIPs 是要路由的网段(/0 或 /24)
  • 防火墙没开 UDP
     — WireGuard 只走 UDP,安全组只开了 TCP 的话连不上

💡 提示: 如果觉得手动配置繁琐,推荐先用一键脚本体验,理解原理后再手动配置多客户端和进阶场景。WireGuard 的配置文件非常简洁,一个 20 行的配置就能完成 OpenVPN 200 行配置的工作。

下篇预告:《Linux 网络进阶——从零搭一个对外服务》——把 Nginx + HTTPS + 负载均衡 + 安全加固 + WireGuard VPN 串起来,从零开始搭一个完整的对外服务架构。

最新文章

随机文章

基本 文件 流程 错误 SQL 调试
  1. 请求信息 : 2026-08-22 01:19:37 HTTP/2.0 GET : https://f.mffb.com.cn/a/504338.html
  2. 运行时间 : 0.229004s [ 吞吐率:4.37req/s ] 内存消耗:4,852.88kb 文件加载:140
  3. 缓存信息 : 0 reads,0 writes
  4. 会话信息 : SESSION_ID=b7617dc75580c17fe2a8daf019ebde76
  1. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/public/index.php ( 0.79 KB )
  2. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/autoload.php ( 0.17 KB )
  3. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/autoload_real.php ( 2.49 KB )
  4. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/platform_check.php ( 0.90 KB )
  5. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/ClassLoader.php ( 14.03 KB )
  6. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/autoload_static.php ( 4.90 KB )
  7. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/helper.php ( 8.34 KB )
  8. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-validate/src/helper.php ( 2.19 KB )
  9. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/helper.php ( 1.47 KB )
  10. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/stubs/load_stubs.php ( 0.16 KB )
  11. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Exception.php ( 1.69 KB )
  12. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-container/src/Facade.php ( 2.71 KB )
  13. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/deprecation-contracts/function.php ( 0.99 KB )
  14. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/polyfill-mbstring/bootstrap.php ( 8.26 KB )
  15. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/polyfill-mbstring/bootstrap80.php ( 9.78 KB )
  16. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/var-dumper/Resources/functions/dump.php ( 1.49 KB )
  17. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-dumper/src/helper.php ( 0.18 KB )
  18. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/var-dumper/VarDumper.php ( 4.30 KB )
  19. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/App.php ( 15.30 KB )
  20. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-container/src/Container.php ( 15.76 KB )
  21. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/container/src/ContainerInterface.php ( 1.02 KB )
  22. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/provider.php ( 0.19 KB )
  23. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Http.php ( 6.04 KB )
  24. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/helper/Str.php ( 7.29 KB )
  25. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Env.php ( 4.68 KB )
  26. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/common.php ( 0.03 KB )
  27. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/helper.php ( 18.78 KB )
  28. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Config.php ( 5.54 KB )
  29. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/app.php ( 0.95 KB )
  30. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/cache.php ( 0.78 KB )
  31. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/console.php ( 0.23 KB )
  32. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/cookie.php ( 0.56 KB )
  33. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/database.php ( 2.48 KB )
  34. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/facade/Env.php ( 1.67 KB )
  35. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/filesystem.php ( 0.61 KB )
  36. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/lang.php ( 0.91 KB )
  37. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/log.php ( 1.35 KB )
  38. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/middleware.php ( 0.19 KB )
  39. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/route.php ( 1.89 KB )
  40. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/session.php ( 0.57 KB )
  41. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/trace.php ( 0.34 KB )
  42. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/view.php ( 0.82 KB )
  43. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/event.php ( 0.25 KB )
  44. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Event.php ( 7.67 KB )
  45. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/service.php ( 0.13 KB )
  46. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/AppService.php ( 0.26 KB )
  47. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Service.php ( 1.64 KB )
  48. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Lang.php ( 7.35 KB )
  49. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/lang/zh-cn.php ( 13.70 KB )
  50. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/initializer/Error.php ( 3.31 KB )
  51. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/initializer/RegisterService.php ( 1.33 KB )
  52. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/services.php ( 0.14 KB )
  53. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/service/PaginatorService.php ( 1.52 KB )
  54. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/service/ValidateService.php ( 0.99 KB )
  55. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/service/ModelService.php ( 2.04 KB )
  56. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-trace/src/Service.php ( 0.77 KB )
  57. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Middleware.php ( 6.72 KB )
  58. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/initializer/BootService.php ( 0.77 KB )
  59. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/Paginator.php ( 11.86 KB )
  60. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-validate/src/Validate.php ( 63.20 KB )
  61. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/Model.php ( 23.55 KB )
  62. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/Attribute.php ( 21.05 KB )
  63. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/AutoWriteData.php ( 4.21 KB )
  64. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/Conversion.php ( 6.44 KB )
  65. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/DbConnect.php ( 5.16 KB )
  66. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/ModelEvent.php ( 2.33 KB )
  67. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/RelationShip.php ( 28.29 KB )
  68. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/contract/Arrayable.php ( 0.09 KB )
  69. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/contract/Jsonable.php ( 0.13 KB )
  70. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/contract/Modelable.php ( 0.09 KB )
  71. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Db.php ( 2.88 KB )
  72. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/DbManager.php ( 8.52 KB )
  73. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Log.php ( 6.28 KB )
  74. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Manager.php ( 3.92 KB )
  75. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/log/src/LoggerTrait.php ( 2.69 KB )
  76. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/log/src/LoggerInterface.php ( 2.71 KB )
  77. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Cache.php ( 4.92 KB )
  78. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/simple-cache/src/CacheInterface.php ( 4.71 KB )
  79. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/helper/Arr.php ( 16.63 KB )
  80. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/cache/driver/File.php ( 7.84 KB )
  81. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/cache/Driver.php ( 9.03 KB )
  82. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/CacheHandlerInterface.php ( 1.99 KB )
  83. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/Request.php ( 0.09 KB )
  84. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Request.php ( 55.78 KB )
  85. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/middleware.php ( 0.25 KB )
  86. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Pipeline.php ( 2.61 KB )
  87. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-trace/src/TraceDebug.php ( 3.40 KB )
  88. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/middleware/SessionInit.php ( 1.94 KB )
  89. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Session.php ( 1.80 KB )
  90. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/session/driver/File.php ( 6.27 KB )
  91. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/SessionHandlerInterface.php ( 0.87 KB )
  92. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/session/Store.php ( 7.12 KB )
  93. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Route.php ( 23.73 KB )
  94. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/RuleName.php ( 5.75 KB )
  95. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/Domain.php ( 2.53 KB )
  96. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/RuleGroup.php ( 22.43 KB )
  97. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/Rule.php ( 26.95 KB )
  98. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/RuleItem.php ( 9.78 KB )
  99. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/route/app.php ( 1.72 KB )
  100. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/facade/Route.php ( 4.70 KB )
  101. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/dispatch/Controller.php ( 4.74 KB )
  102. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/Dispatch.php ( 10.44 KB )
  103. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/controller/Index.php ( 4.81 KB )
  104. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/BaseController.php ( 2.05 KB )
  105. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/facade/Db.php ( 0.93 KB )
  106. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/connector/Mysql.php ( 5.44 KB )
  107. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/PDOConnection.php ( 52.47 KB )
  108. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/Connection.php ( 8.39 KB )
  109. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/ConnectionInterface.php ( 4.57 KB )
  110. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/builder/Mysql.php ( 16.58 KB )
  111. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/Builder.php ( 24.06 KB )
  112. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/BaseBuilder.php ( 27.50 KB )
  113. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/Query.php ( 15.71 KB )
  114. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/BaseQuery.php ( 45.13 KB )
  115. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/TimeFieldQuery.php ( 7.43 KB )
  116. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/AggregateQuery.php ( 3.26 KB )
  117. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/ModelRelationQuery.php ( 20.07 KB )
  118. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/ParamsBind.php ( 3.66 KB )
  119. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/ResultOperation.php ( 7.01 KB )
  120. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/WhereQuery.php ( 19.37 KB )
  121. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/JoinAndViewQuery.php ( 7.11 KB )
  122. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/TableFieldInfo.php ( 2.63 KB )
  123. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/Transaction.php ( 2.77 KB )
  124. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/log/driver/File.php ( 5.96 KB )
  125. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/LogHandlerInterface.php ( 0.86 KB )
  126. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/log/Channel.php ( 3.89 KB )
  127. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/event/LogRecord.php ( 1.02 KB )
  128. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/Collection.php ( 16.47 KB )
  129. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/facade/View.php ( 1.70 KB )
  130. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/View.php ( 4.39 KB )
  131. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Response.php ( 8.81 KB )
  132. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/response/View.php ( 3.29 KB )
  133. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Cookie.php ( 6.06 KB )
  134. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-view/src/Think.php ( 8.38 KB )
  135. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/TemplateHandlerInterface.php ( 1.60 KB )
  136. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-template/src/Template.php ( 46.61 KB )
  137. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-template/src/template/driver/File.php ( 2.41 KB )
  138. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-template/src/template/contract/DriverInterface.php ( 0.86 KB )
  139. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/runtime/temp/067d451b9a0c665040f3f1bdd3293d68.php ( 11.98 KB )
  140. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-trace/src/Html.php ( 4.42 KB )
  1. CONNECT:[ UseTime:0.001045s ] mysql:host=127.0.0.1;port=3306;dbname=f_mffb;charset=utf8mb4
  2. SHOW FULL COLUMNS FROM `fenlei` [ RunTime:0.001885s ]
  3. SELECT * FROM `fenlei` WHERE `fid` = 0 [ RunTime:0.001367s ]
  4. SELECT * FROM `fenlei` WHERE `fid` = 63 [ RunTime:0.002656s ]
  5. SHOW FULL COLUMNS FROM `set` [ RunTime:0.001619s ]
  6. SELECT * FROM `set` [ RunTime:0.000644s ]
  7. SHOW FULL COLUMNS FROM `article` [ RunTime:0.001922s ]
  8. SELECT * FROM `article` WHERE `id` = 504338 LIMIT 1 [ RunTime:0.001454s ]
  9. UPDATE `article` SET `lasttime` = 1787332778 WHERE `id` = 504338 [ RunTime:0.013248s ]
  10. SELECT * FROM `fenlei` WHERE `id` = 67 LIMIT 1 [ RunTime:0.000750s ]
  11. SELECT * FROM `article` WHERE `id` < 504338 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.001324s ]
  12. SELECT * FROM `article` WHERE `id` > 504338 ORDER BY `id` ASC LIMIT 1 [ RunTime:0.001063s ]
  13. SELECT * FROM `article` WHERE `id` < 504338 ORDER BY `id` DESC LIMIT 10 [ RunTime:0.001863s ]
  14. SELECT * FROM `article` WHERE `id` < 504338 ORDER BY `id` DESC LIMIT 10,10 [ RunTime:0.001948s ]
  15. SELECT * FROM `article` WHERE `id` < 504338 ORDER BY `id` DESC LIMIT 20,10 [ RunTime:0.023518s ]
0.232615s