分享技术 · 探索极限 · Code is Art
Linux 发布 2026-05-11 242阅读 约 10分钟阅读

OpenWrt 排障工具箱:家庭软路由必装插件和常用命令

OpenWrt 排障工具箱:家庭软路由必装插件和常用命令

搭建 OpenWrt 旁路由、OpenClash、WireGuard 后,最重要的不是装一堆插件,而是要有一套能快速定位问题的工具。

本文整理一些家庭软路由常用的监控、抓包、流量统计、DNS 测试和虚拟机增强工具。

本文基于 OpenWrt 25 之后的 apk 包管理器。如果你的系统仍使用 opkg,可将命令替换为对应的 opkg install

一、基础命令

更新软件源:

apk update

搜索软件包:

apk search tcpdump
apk search strongswan
apk search wireguard

安装软件包:

apk add tcpdump

删除软件包:

apk del tcpdump

查看已安装软件包:

apk list -I

查看某类已安装包:

apk list -I | grep wireguard
apk list -I | grep strongswan

二、tcpdump:最重要的抓包工具

安装:

apk add tcpdump

抓某个客户端:

tcpdump -i br-lan host 192.168.1.100

抓某个客户端访问某个目标:

tcpdump -i br-lan host 192.168.1.100 and host 183.2.172.177

抓 HTTPS:

tcpdump -i br-lan host 192.168.1.100 and tcp port 443

抓 WireGuard:

tcpdump -i br-lan udp port 51820

典型用途:

  • 判断客户端请求有没有到 OpenWrt。
  • 判断目标服务器有没有回包。
  • 判断 WireGuard UDP 51820 是否到达。
  • 判断 DNS 请求是否走到指定 DNS。

如果访问国内网站时只看到:

客户端 → 目标 IP:Flags [S]

但看不到:

目标 IP → 客户端:Flags [S.]

通常说明直连转发/NAT 路径有问题。

三、conntrack:查看连接跟踪

安装:

apk add conntrack-tools

查看当前连接数量:

conntrack -C

查看某个客户端连接:

conntrack -L | grep 192.168.1.100

只看 UDP:

conntrack -L -p udp

如果没有安装 conntrack,也可以看内核记录:

cat /proc/net/nf_conntrack | grep 192.168.1.100

典型用途:

  • 看某个设备当前连接数。
  • 判断 NAT 连接是否创建。
  • 排查连接跟踪表是否异常。

四、nlbwmon:按设备统计流量

安装:

apk add nlbwmon luci-app-nlbwmon
/etc/init.d/nlbwmon enable
/etc/init.d/nlbwmon start

LuCI 页面一般在:

状态 → 带宽监控

用途:

  • 查看每台设备用了多少流量。
  • 找出异常耗流量设备。
  • 看日流量、月流量。
  • 对家庭全屋代理环境很实用。

五、luci-app-statistics:系统状态趋势

安装:

apk add luci-app-statistics collectd collectd-mod-interface collectd-mod-cpu collectd-mod-memory
/etc/init.d/collectd enable
/etc/init.d/collectd start

用途:

  • 查看 CPU 使用率。
  • 查看内存趋势。
  • 查看接口流量。
  • 观察 OpenClash / TUN / WireGuard 是否让软路由性能吃紧。

如果你跑 TUN 模式或全屋 WireGuard,非常建议装。

六、curl、jq、drill:网络测试三件套

安装:

apk add curl jq drill

测试 HTTP:

curl -I https://www.baidu.com
curl -I https://www.google.com

测试 DNS:

drill baidu.com @192.168.1.3
drill google.com @192.168.1.3

查看 OpenClash API 连接信息:

curl -s http://127.0.0.1:9090/connections | jq '.connections[] | {source:.metadata.sourceIP, host:.metadata.host, rule:.rule, chains:.chains}'

用途:

  • 判断 DNS 是否正常。
  • 判断网站是否可达。
  • 格式化 OpenClash API 输出。
  • 排查规则命中和代理链路。

七、wg show:WireGuard 状态检查

WireGuard 安装后可以用:

wg show

成功连接时会看到:

interface: wg0
  listening port: 51820

peer: 客户端公钥
  endpoint: 客户端公网IP:随机端口
  allowed ips: 10.7.0.2/32
  latest handshake: 几秒前
  transfer: xxx received, xxx sent

常见判断:

  • 没有 peer:客户端 Peer 没有加载。
  • 有 peer 但 handshake never:密钥、PSK、Allowed IP 或防火墙问题。
  • 有 handshake 和 transfer:WireGuard 已经通。

八、ss / netstat:查看端口监听

查看 WireGuard 是否监听:

netstat -lunp | grep 51820

或:

ss -lunp | grep 51820

正常:

udp 0 0 0.0.0.0:51820 0.0.0.0:*
udp 0 0 :::51820      :::*

查看其他服务端口也可以类似操作。

九、nft:查看防火墙规则

OpenWrt 新版本使用 firewall4 / nftables。

查看完整规则:

nft list ruleset

查某个端口:

nft list ruleset | grep 51820

查防火墙规则配置:

uci show firewall

查 WireGuard 规则:

uci show firewall | grep -i wireguard

用途:

  • 确认 LuCI 规则是否真正下发。
  • 确认端口是否被 accept。
  • 排查防火墙区域转发问题。

十、ip route:查看路由

查看默认路由:

ip route

OpenWrt 旁路由自身通常应该有:

default via 192.168.1.1 dev br-lan
192.168.1.0/24 dev br-lan

WireGuard 客户端 Peer 正常加载后,可能会看到类似:

10.7.0.2 dev wg0
10.7.0.3 dev wg0

如果内网要访问 WireGuard 客户端,OpenWrt 必须知道对应 10.7.0.x 走 wg0。

十一、logread:查看系统日志

查看全部日志:

logread

实时查看:

logread -f

查看 WireGuard / 网络相关:

logread -f | grep -i wireguard

查看 OpenClash:

logread -f | grep -i openclash

查看 DHCP / DNS:

logread -f | grep -i dns

用途:

  • 看服务启动失败原因。
  • 看接口 up/down。
  • 看防火墙、DNS、OpenClash 异常。

十二、open-vm-tools:VMware / ESXi 虚拟机增强

如果 OpenWrt 跑在 ESXi / VMware 上,建议安装:

apk add open-vm-tools

启动:

/etc/init.d/vmtoolsd enable
/etc/init.d/vmtoolsd start

作用:

  • 更好地支持关机 / 重启。
  • 向宿主机报告 IP 和虚拟机状态。
  • 改善 VMware 管理体验。

还有一个包:

open-vm-tools-fuse

它主要用于 VMware 共享文件夹。OpenWrt 软路由一般不需要,除非你明确要在虚拟机里挂载宿主机共享目录。

十三、SQM:改善满速时延迟

如果上传或下载跑满时,游戏、视频会议、网页延迟明显上升,可以考虑 SQM。

安装:

apk add luci-app-sqm sqm-scripts

适合:

  • 上传文件时视频会议卡。
  • 下载时游戏延迟暴涨。
  • 家庭宽带上行较小。
  • Bufferbloat 明显。

注意:SQM 最好开在真正出口设备上。如果主路由拨号,优先在主路由出口做。如果只能在 OpenWrt 旁路由做,也可以测试,但效果可能不如主路由出口准确。

十四、推荐安装清单

基础排障:

apk add tcpdump conntrack-tools curl jq drill htop

流量统计:

apk add nlbwmon luci-app-nlbwmon

系统监控:

apk add luci-app-statistics collectd collectd-mod-interface collectd-mod-cpu collectd-mod-memory

WireGuard:

apk add wireguard-tools luci-proto-wireguard

VMware 虚拟机:

apk add open-vm-tools

可选网络优化:

apk add luci-app-sqm sqm-scripts

十五、常见排障思路

国内网站打不开,国外能访问

检查:

drill baidu.com @192.168.1.3
tcpdump -i br-lan host 192.168.1.100 and tcp port 443

如果只有 SYN 没有 SYN-ACK,检查 LAN NAT / MSS。

WireGuard 只有发送没有接收

检查:

tcpdump -i br-lan udp port 51820
wg show

UDP 到了但没有握手,检查密钥、PSK、Peer、Allowed IP。

OpenClash 是否代理了 WireGuard 流量

看 OpenClash Connections 是否有来源:

10.7.0.x

如果没有,检查 OpenClash 是否接管 wg0 / WireGuard 网段。

DNS 是否走到 AdGuardHome

在 AdGuardHome 查询日志里搜索域名,或用:

drill baidu.com @192.168.1.3

总结

OpenWrt 排障不要只靠猜。最有效的方法是:

  • tcpdump 看包有没有到。
  • wg show 看 WireGuard 有没有握手。
  • conntrack 看连接有没有被跟踪。
  • drill 看 DNS 是否正确。
  • nft 看防火墙规则是否生效。
  • nlbwmon 看设备流量。
  • luci-app-statistics 看性能趋势。

有了这些工具,旁路由、OpenClash、WireGuard、DNS 的大多数问题都能定位到具体层级。

发表回复