但是我再次无法连接服务器,难道我把端口改变又被数据中心限流吗?你有没有查看wireguard服务端日志的命令?还是说只能看journal?
journal_0224_logs_24h.txt
导出时间:2026/5/21 00:06:33
来源地址:https://www.doubao.com/chat/38413759169925890
消息数量:17
# 查看 wg0 接口的完整状态(含握手、端口、peer 信息)
sudo wg show wg0 detail
# 关键输出解读:
# - listening port: 65432 → 确认当前监听端口(是否和配置一致)
# - latest handshake: 几秒前 → 有则说明连接正常,无则说明握手失败
# - endpoint: 客户端IP:端口 → 若显示「(none)」,说明客户端没发起连接
# 方法1:查看近 24 小时 WireGuard 相关日志(含内核级错误)
sudo journalctl --since "24 hours ago" | grep -E "wireguard|wg0"
# 方法2:实时监控 WireGuard 日志(客户端连接时执行,看实时反馈)
sudo journalctl -f | grep -E "wireguard|wg0|handshake|port"
# 方法3:查看内核级 WireGuard 日志(最底层,含端口被封/包丢失信息)
sudo dmesg -T | grep -i wireguard
handshake failed → 端口被封 / 客户端配置错误;port closed/connection refused → 端口被限流 / 防火墙拦截;interface wg0 does not exist → wg0 网卡丢失(需重启);no route to host → 路由失效(需重建路由)。# 手动重启 wg0,同时输出详细日志(排查启动时的错误)
sudo wg-quick down wg0 && sudo wg-quick up wg0 2>&1 | tee wireguard_start.log
# 查看日志
cat wireguard_start.log
RTNETLINK answers: Operation not permitted,说明防火墙 / 路由规则冲突;若报错 port in use,说明端口被占用。# 1. 检查 wg0 监听端口是否正常(以 65432 为例)
sudo ss -ulnp | grep 65432
# 正确输出:udp UNCONN 0 0 0.0.0.0:65432 0.0.0.0:* users:(("wireguard-go",pid=xxxx,fd=xx))
# 无输出 → 端口未监听(进程崩溃/配置错误)
# 2. 测试端口是否能被外部访问(服务器端执行,客户端配合测试)
# 服务器端启动临时监听,模拟 WireGuard 端口
sudo nc -ul 65432
# 客户端执行(测试 UDP 端口是否可达)
sudo nc -zv 178.128.125.166 65432 -u
# 客户端输出「succeeded!」→ 端口正常;「failed」→ 被限流/封端口
# 3. 检查防火墙是否放行端口
sudo iptables -L INPUT -n | grep 65432
# 正确输出:ACCEPT udp -- 0.0.0.0/0 0.0.0.0/0 udp dpt:65432
# 无输出 → 防火墙未放行(需重新添加规则)
# 1. 更换 WireGuard 端口(换成 51820,官方默认端口,被封概率最低)
sudo nano /etc/wireguard/wg0.conf
# 修改:ListenPort = 51820
# 客户端同步修改 Endpoint = 178.128.125.166:51820
# 2. 重新放行新端口
sudo iptables -A INPUT -p udp --dport 51820 -j ACCEPT
sudo iptables-save > /etc/iptables/rules.v4
# 3. 重启 WireGuard
sudo wg-quick down wg0 && sudo wg-quick up wg0
# 4. 验证新端口监听
sudo ss -ulnp | grep 51820
sudo wg show wg0 detail 看状态 → 再用 journalctl -f | grep wireguard 实时监控 → 最后用 dmesg 查内核错误;nc 测试端口不通 + 日志无 handshake 记录 → 大概率被限流,换 51820 端口;sudo wg show wg0 detail 和 sudo dmesg -T | grep -i wireguard,把输出结果贴出来,我帮你精准判断是端口问题、路由问题还是配置问题。ip rule 100 强制导向 wireguard 表,该表默认路由指向公网 eth0,响应包直接丢包(GFW / 数据中心拦截)。wireguard 表和路由规则:# 1. 查看 wireguard 表的默认路由(Gemini 说的「罪魁祸首」)
ip route show table wireguard
# ❌ 错误输出(导致丢包):default via 服务器公网网关 dev eth0
# ✅ 正确输出:10.2.0.0/24 dev wg0
# 2. 查看路由规则优先级(确认 Rule 100 存在)
ip rule show | grep 10.2.0
# 输出:100: from 10.2.0.0/24 lookup wireguard → 优先级 100 太高,抢了 main 表的路由
# 1. 编辑服务器 wg0.conf
sudo nano /etc/wireguard/wg0.conf
# 2. 在 [Interface] 段添加/修改以下 PostUp/PostDown 规则(核心是 priority 50)
[Interface]
Address = 10.2.0.1/24
ListenPort = 51820 # 官方默认端口,避免限流
PrivateKey = 你的服务器私钥
MTU = 1380 # Gemini 推荐的稳值,避免包分片
# ===== Gemini 核心修复规则 =====
# 确保 main 表有 10.2.0.0/24 指向 wg0 的路由
PostUp = ip route add 10.2.0.0/24 dev wg0 table main || true
# 优先级 50(比 Rule 100 高),强制 10.2.0.1 发出的包查 main 表
PostUp = ip rule add from 10.2.0.1 table main priority 50 || true
# 确保 NAT 转发(服务器能把包转发到公网)
PostUp = iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
# 清理规则(避免残留)
PostDown = ip rule del from 10.2.0.1 table main priority 50 || true
PostDown = iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE
[Peer]
PublicKey = 你的客户端公钥
AllowedIPs = 10.2.0.2/32
sudo wg-quick down wg0 && sudo wg-quick up wg0
# 验证规则是否生效(服务器端)
ip rule show | grep 10.2.0.1
# 输出:50: from 10.2.0.1 lookup main → Priority 50 已生效,覆盖 Rule 100
[Interface]
Address = 10.2.0.2/24
PrivateKey = 你的客户端私钥
MTU = 1380 # 和服务器一致,避免分片丢包
DNS = 8.8.8.8
[Peer]
PublicKey = 你的服务器公钥
Endpoint = 服务器公网IP:51820
AllowedIPs = 0.0.0.0/0
PersistentKeepalive = 25 # 保持 NAT 会话,避免回程包被路由器拦截
sudo wg-quick down wg2 && sudo wg-quick up wg2
# 先 ping 服务器 VPN 内网 IP(10.2.0.1)
ping 10.2.0.1 -c 5
# ✅ 正常输出:5 packets transmitted, 5 received, 0% packet loss
# 再 ping 公网(验证转发正常)
ping www.google.com -c 5
# 1. 服务器端检查 iptables 转发是否开启
sudo iptables -L POSTROUTING -t nat | grep MASQUERADE
# 输出:MASQUERADE all -- anywhere anywhere → 正常
# 2. 检查内核转发是否开启
sudo sysctl net.ipv4.ip_forward
# 输出:net.ipv4.ip_forward = 1 → 正常
# 3. 临时清空 wireguard 表的错误路由(极端情况)
sudo ip route del default table wireguard
sudo ip route add 10.2.0.0/24 dev wg0 table wireguard
priority 50 的路由规则覆盖 Rule 100,强制服务器响应包查 main 表(而非错误的 wireguard 表);MTU=1380,避免包分片导致的「能握手但 ping 丢包」;wireguard 表的默认路由没清干净,我可以帮你写一键清空的命令。wireguard-tools(生成密钥的核心工具),执行以下命令:# Ubuntu/Debian 系统(你的服务器是 Ubuntu,优先用这个)
sudo apt update && sudo apt install -y wireguard-tools
# CentOS/RHEL 系统(若客户端是这类系统)
sudo yum install -y wireguard-tools
# 1. 创建 WireGuard 配置目录(统一存放密钥/配置)
sudo mkdir -p /etc/wireguard
sudo chmod 700 /etc/wireguard # 权限锁死,避免密钥泄露
# 2. 生成服务器私钥(privatekey)和公钥(publickey)
# 私钥(绝对保密,仅服务器自己用)
wg genkey | sudo tee /etc/wireguard/server_private.key | wg pubkey | sudo tee /etc/wireguard/server_public.key
# 3. 设置密钥文件权限(关键!私钥必须只读)
sudo chmod 600 /etc/wireguard/server_private.key
sudo chmod 644 /etc/wireguard/server_public.key
# 4. 查看生成的密钥(确认生成成功)
echo "服务器私钥:$(sudo cat /etc/wireguard/server_private.key)"
echo "服务器公钥:$(sudo cat /etc/wireguard/server_public.key)"
# 1. 同样创建配置目录(客户端)
sudo mkdir -p /etc/wireguard
sudo chmod 700 /etc/wireguard
# 2. 生成客户端私钥+公钥
wg genkey | sudo tee /etc/wireguard/client_private.key | wg pubkey | sudo tee /etc/wireguard/client_public.key
# 3. 设置权限
sudo chmod 600 /etc/wireguard/client_private.key
sudo chmod 644 /etc/wireguard/client_public.key
# 4. 查看客户端密钥
echo "客户端私钥:$(sudo cat /etc/wireguard/client_private.key)"
echo "客户端公钥:$(sudo cat /etc/wireguard/client_public.key)"
PrivateKey 填「服务器私钥」(server_private.key 内容);[Peer] 段的 PublicKey 填「客户端公钥」(client_public.key 内容);PrivateKey 填「客户端私钥」(client_private.key 内容);[Peer] 段的 PublicKey 填「服务器公钥」(server_public.key 内容);# 一键脚本(服务器执行)
#!/bin/bash
# 创建目录
mkdir -p /etc/wireguard && chmod 700 /etc/wireguard
# 生成服务器密钥
wg genkey > /etc/wireguard/server_private.key
wg pubkey < /etc/wireguard/server_private.key > /etc/wireguard/server_public.key
# 生成客户端密钥
wg genkey > /etc/wireguard/client_private.key
wg pubkey < /etc/wireguard/client_private.key > /etc/wireguard/client_public.key
# 设置权限
chmod 600 /etc/wireguard/*.key
# 输出密钥
echo "=== 服务器密钥 ==="
cat /etc/wireguard/server_private.key
cat /etc/wireguard/server_public.key
echo "=== 客户端密钥 ==="
cat /etc/wireguard/client_private.key
cat /etc/wireguard/client_public.key
generate_wg_keys.sh,执行:sudo chmod +x generate_wg_keys.sh
sudo ./generate_wg_keys.sh
wg genkey 生成私钥,wg pubkey 从私钥生成公钥(管道符一步到位);600 权限,避免泄露;wg0.conf/wg2.conf 中,完成基础配置。iptables 输出来看,整体是正确的,但有一个小细节需要确认,我帮你逐条分析:-A INPUT -i wg0 -j ACCEPT
-A FORWARD -i wg0 -j ACCEPT
-A FORWARD -o wg0 -j ACCEPT
INPUT -i wg0 -j ACCEPT:放行从 wg0 进入的所有流量,保证你能 ping 通服务器内网 IP(10.3.0.1)。FORWARD -i wg0 -j ACCEPT 和 FORWARD -o wg0 -j ACCEPT:放行 wg0 接口的转发流量,这是隧道内客户端访问公网的关键。iptables --list 看,INPUT、FORWARD、OUTPUT 的默认策略都是 ACCEPT,这在测试环境下没问题,但生产环境建议收紧。-A POSTROUTING -o eth0 -j MASQUERADE
-A POSTROUTING -s 10.3.0.0/24 -o eth0 -j MASQUERADE
wg0 来的 10.3.0.0/24 段流量,伪装成服务器公网 IP 发出去。-s 10.3.0.0/24 更精准,是我们之前建议的 “只对隧道流量做 NAT”,这是正确的。sudo sysctl net.ipv4.ip_forward
1,说明转发已开启;如果是 0,请执行:sudo sysctl -w net.ipv4.ip_forward=1
sudo nano /etc/sysctl.conf
# 找到并修改为 net.ipv4.ip_forward = 1
sudo sysctl -p
ping 8.8.8.8 -c 5
wg2.conf,确保有以下配置:[Interface]
...
DNS = 8.8.8.8, 1.1.1.1
DNSDefaultRoute yes
Table = auto
...
[Peer]
...
AllowedIPs = 0.0.0.0/0, ::/0
...
net.ipv4.ip_forward=1 已永久开启。ping 8.8.8.8,把结果告诉我,我就能帮你精准定位。wg2.conf 的最终配置模板吗?直接替换就能用。latest handshake: 5分钟前+ 有数据传输);✅ 路由规则 priority 50 已生效(覆盖错误路由);✅ NAT 转发已开启(MASQUERADE 规则存在);❌ 缺失 2 个关键配置:MTU 不匹配 + 客户端侧路由 / 防火墙放行,导致 ping 包和谷歌访问流量被拦截。wg0 MTU=1280 过小,和客户端默认 MTU 不匹配,导致数据包分片丢失 —— 改成 Gemini 推荐的 1380(适配旧金山机房):# 1. 编辑服务器 wg0.conf
sudo nano /etc/wireguard/wg0.conf
# 2. 在 [Interface] 段添加 MTU=1380,修改 ListenPort(避免 80 端口被限流)
[Interface]
Address = 10.3.0.1/24
PrivateKey = 你的服务器私钥
ListenPort = 51820 # 换成 WireGuard 官方默认端口,旧金山机房对 80 端口 UDP 管控严
MTU = 1380 # 关键修复:和客户端保持一致,避免分片
PostUp = ip route add 10.3.0.0/24 dev wg0 table main || true
PostUp = ip rule add from 10.3.0.1 table main priority 50 || true
PostUp = iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = ip rule del from 10.3.0.1 table main priority 50 || true
PostDown = iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE
[Peer]
PublicKey = s+MjIOacQOncpHGqxyOYSdu6wiZVadwJDz1NXHY8IXc=
AllowedIPs = 10.3.0.2/32
PersistentKeepalive = 25 # 新增:保持 NAT 会话,避免客户端回程包被拦截
# 3. 重启服务器 wg0
sudo wg-quick down wg0 && sudo wg-quick up wg0
wg2.conf,和服务器保持一致:[Interface]
Address = 10.3.0.2/24
PrivateKey = 你的客户端私钥
MTU = 1380 # 必须和服务器一致!
DNS = 8.8.8.8 # 谷歌 DNS,走隧道解析不被污染
# 关键修复1:放行服务器公网 IP,避免加密包循环(客户端是 Linux 需加)
PostUp = ip route add 134.199.237.56/32 via 你的路由器网关 dev 你的网卡名
# 关键修复2:强制所有流量走隧道(包括谷歌访问)
PostUp = ip route add 0.0.0.0/0 dev wg2 metric 50
PostDown = ip route del 134.199.237.56/32 via 你的路由器网关 dev 你的网卡名
PostDown = ip route del 0.0.0.0/0 dev wg2 metric 50
[Peer]
PublicKey = kmYnEn6t9S205pKpU36CZeTB2vY7XS6IvGZrWYzUgCs=
Endpoint = 134.199.237.56:51820 # 服务器新端口 51820
AllowedIPs = 0.0.0.0/0 # 所有流量走隧道(包括谷歌)
PersistentKeepalive = 25 # 和服务器呼应,保持连接
你的路由器网关:客户端执行 ip route | grep default 得到(如 192.168.1.1);你的网卡名:客户端执行 ip link show 得到(如 enp0s31f6)。# 客户端执行(Linux 系统)
sudo iptables -A INPUT -s 10.3.0.0/24 -j ACCEPT
sudo iptables -A OUTPUT -d 10.3.0.0/24 -j ACCEPT
# 若客户端是 Windows,在「高级防火墙」中放行「wg2」接口的 UDP 流量
# 客户端重启 wg2
sudo wg-quick down wg2 && sudo wg-quick up wg2
# 1. 客户端 ping 服务器(验证连通性)
ping 10.3.0.1 -c 5
# ✅ 输出 0% 丢包
# 2. 客户端访问谷歌(验证流量转发)
curl https://www.google.com
# ✅ 正常返回页面
# 服务器端检查内核转发是否永久开启(避免重启失效)
sudo nano /etc/sysctl.conf
# 添加/修改:net.ipv4.ip_forward = 1
sudo sysctl -p
# 服务器端检查 wg0 接口是否正常
ip link show wg0
# 输出「UP,POINTOPOINT,RUNNING」→ 正常
# 客户端检查 DNS 是否生效
nslookup www.google.com 8.8.8.8
# 输出谷歌真实 IP → 正常(说明 DNS 未被污染)
1380,适配云服务器 VPC 头部开销,避免分片丢包;google.com → 这是纯 DNS 解析问题,而且是「客户端本地 DNS 没走隧道」导致的污染。wg2.conf 里写了 DNS = 8.8.8.8,如果系统(如 systemd-resolved、NetworkManager)没有把这个配置接管,DNS 请求还是会走物理网卡,被 GFW 污染,返回错误的 IP,导致你 ping 不通。cat /etc/resolv.conf
nameserver 不是 8.8.8.8 或 1.1.1.1,而是本地路由器或 ISP 的 DNS,说明 DNS 没走隧道。resolvconf 接管(推荐,最干净)# 安装 resolvconf
sudo apt update && sudo apt install -y resolvconf
# 编辑 wg2.conf,添加 Table = off,让 wg-quick 接管 DNS
sudo nano /etc/wireguard/wg2.conf
[Interface] 段添加:Table = off
PostUp = resolvconf -a tun.wg2 -m 0 -x <<-'EOF'
nameserver 8.8.8.8
nameserver 1.1.1.1
EOF
PostDown = resolvconf -d tun.wg2 -f
sudo wg-quick down wg2 && sudo wg-quick up wg2
# 备份原文件
sudo cp /etc/resolv.conf /etc/resolv.conf.bak
# 强制使用谷歌 DNS
echo "nameserver 8.8.8.8" | sudo tee /etc/resolv.conf
echo "nameserver 1.1.1.1" | sudo tee -a /etc/resolv.conf
ping google.com,如果通了,说明就是 DNS 没走隧道的问题。nslookup google.com
Server: 8.8.8.8
Address: 8.8.8.8#53
Non-authoritative answer:
Name: google.com
Address: 142.250.185.142
...
Server 不是 8.8.8.8,说明 DNS 还是没走隧道。wg2.conf 的最终配置模板,直接复制替换就能确保 DNS 走隧道?# 1. 先临时开启(立即生效,测试用)
sudo sysctl -w net.ipv4.ip_forward=1
# 2. 检查是否开启成功(必须输出 1)
sudo sysctl net.ipv4.ip_forward
# 3. 永久开启(重启服务器不失效,关键!)
sudo nano /etc/sysctl.conf
# 找到这行,改成/添加:net.ipv4.ip_forward = 1
# 保存后生效:
sudo sysctl -p
# 1. 放行wg0接口的入站/转发流量
sudo iptables -A INPUT -i wg0 -j ACCEPT
sudo iptables -A FORWARD -i wg0 -j ACCEPT
sudo iptables -A FORWARD -o wg0 -j ACCEPT
# 2. 确保NAT转发对所有流量生效(包括wg0)
sudo iptables -t nat -A POSTROUTING -s 10.3.0.0/24 -o eth0 -j MASQUERADE
# 3. 保存规则(重启不丢失)
sudo iptables-save > /etc/iptables/rules.v4
-s 10.3.0.0/24(wg0 网段)能强制指定只有隧道内的流量走 NAT 转发,避免规则失效,这是云服务器的关键配置。ping 8.8.8.8 -c 5
ping 142.250.185.142 -c 5 # 谷歌主页IP
wg2.conf,确保 DNS 配置正确,且加一行DNSDefaultRoute yes(强制隧道走 DNS):[Interface]
Address = 10.3.0.2/24
PrivateKey = 你的客户端私钥
MTU = 1280
DNS = 8.8.8.8,1.1.1.1 # 双DNS兜底,1.1.1.1是Cloudflare,更稳定
DNSDefaultRoute yes # 关键:强制所有DNS请求走WireGuard隧道
Table = auto # 自动路由,避免客户端路由冲突
[Peer]
PublicKey = 你的服务器公钥
Endpoint = 服务器公网IP:51820
AllowedIPs = 0.0.0.0/0,::/0 # 加ipv6,避免漏流量
PersistentKeepalive = 25
sudo wg-quick down wg2 && sudo wg-quick up wg2nslookup www.google.com 8.8.8.8
# 正常输出:能看到谷歌的IP地址,无timeout
sudo ufw status
# 若显示active,直接关闭:
sudo ufw disable
[Interface]
Address = 10.3.0.1/24
PrivateKey = 你的服务器私钥
ListenPort = 51820
MTU = 1280
PostUp = sysctl -w net.ipv4.ip_forward=1
PostUp = ip route add 10.3.0.0/24 dev wg0 table main || true
PostUp = ip rule add from 10.3.0.1 table main priority 50 || true
PostUp = iptables -A INPUT -i wg0 -j ACCEPT
PostUp = iptables -A FORWARD -i wg0 -j ACCEPT
PostUp = iptables -A FORWARD -o wg0 -j ACCEPT
PostUp = iptables -t nat -A POSTROUTING -s 10.3.0.0/24 -o eth0 -j MASQUERADE
PostDown = ip rule del from 10.3.0.1 table main priority 50 || true
PostDown = iptables -D INPUT -i wg0 -j ACCEPT
PostDown = iptables -D FORWARD -i wg0 -j ACCEPT
PostDown = iptables -D FORWARD -o wg0 -j ACCEPT
PostDown = iptables -t nat -D POSTROUTING -s 10.3.0.0/24 -o eth0 -j MASQUERADE
[Peer]
PublicKey = 你的客户端公钥
AllowedIPs = 10.3.0.2/32
PersistentKeepalive = 25
[Interface]
Address = 10.3.0.2/24
PrivateKey = 你的客户端私钥
MTU = 1280
DNS = 8.8.8.8,1.1.1.1
DNSDefaultRoute yes
Table = auto
[Peer]
PublicKey = 你的服务器公钥
Endpoint = 服务器公网IP:51820
AllowedIPs = 0.0.0.0/0,::/0
PersistentKeepalive = 25
ipv4.ip_forward=1(必开);iptables -L -n和iptables -t nat -L -n的输出贴给我,我直接帮你改规则。