Article

我的 Linux/VPS Docker 森林工具箱

整理 Linux/VPS 运维中常用的 Docker 检测工具,涵盖网络与 IP 质量、硬件性能、流媒体解锁、DNS、带宽、路由、TCP 连通性和出口路径,并结合典型场景说明使用方法、结果解读与安全注意事项。

折腾 VPS 或排查服务器网络时,我更喜欢把检测工具放进临时 Docker 容器:不用给宿主机安装一堆依赖,测试结束后容器直接删除,也方便在不同机器上复用同一套命令。

不过,这些工具解决的问题并不一样。综合体检适合快速建立全局印象,iperf3、DNS 查询和 TCPing 才适合定位具体故障,流媒体检测则是在验证“这个出口 IP 对某个平台是否可用”。如果只把命令挨个跑一遍,很容易得到一堆漂亮结果,却不知道它们各自说明了什么。

下面按测试目标整理我平时记录的这组工具。

流媒体与地区限制:测的是出口,不是机器性能

这一类工具解决的问题很具体:当前 IPv4/IPv6 出口在各个平台眼中属于哪个地区,是否能通过地区限制。它们不能证明线路快,也不能保证结果长期不变。

MediaUnlockTest

docker run --rm -ti --net=host ghcr.io/hsukqilee/unlock-test

上游还把它与持续监控用的镜像区分开来,当前命令使用的是单次检测 CLI。项目的 Docker 用法见 MediaUnlockTest

RegionRestrictionCheck 与其他入口

docker run --rm -ti --net=host lmc999/regioncheck

这几条命令都放在笔记的“流媒体检测”分类下,适合快速查看多个地区限制服务的可用情况。RegionRestrictionCheck 的项目定位就是检查 IP 在不同地理限制服务上的状态,可参考 项目页面

实际判断时,我会特别注意三件事:

  1. IPv4 和 IPv6 可能得到完全不同的地区与解锁结果;双栈机器不能只看其中一个。
  2. “网站能打开”不等于“内容能播放”,测试结果也可能区分完整解锁、仅自制内容或不可用。
  3. 平台策略、IP 数据库和出口路由都会变化。同一台机器过一段时间复测,结果不一致并不罕见。

综合 VPS 评测:融合怪适合验收,不适合天天跑

docker run --rm -ti --net=host spiritlhl/goecs

“融合怪”把系统信息、CPU、内存、磁盘、网络、路由、IP 质量和流媒体等多类测试集中在一次流程里,适合新机器验收、不同套餐横向比较,或者快速生成一份相对完整的体检结果。项目说明见 oneclickvirt/ecs

这里要区分“方便”和“精确”。Docker 运行方式足够省事,但上游也提示:容器内硬件测试可能产生偏差,虚拟化架构判断也可能失效。如果目标是严肃比较 CPU、磁盘或虚拟化能力,应再用原生方式复核;如果只是判断一台 VPS 大致处于什么水平,容器版已经很实用。

综合测试通常会产生明显的 CPU、磁盘和网络负载。我只在新机验收或故障复现时跑,不会在生产高峰期反复执行。

DNS:用 q 把“解析问题”单独拎出来

docker run --rm -it --net=host ghcr.io/natesales/q

q 是一个 DNS 查询工具,作用类似现代化的 dig:可以检查 A、AAAA、MX、TXT 等记录,也支持 UDP/TCP、DoT、DoH、DoQ 等多种传输方式。项目说明和参数见 natesales/q

笔记里的命令只启动工具;实际使用时要在镜像名后追加查询目标。例如:

docker run --rm -it --net=host ghcr.io/natesales/q example.com A

DNS 排查的关键不是只看“有没有结果”,而是比较不同解析器、不同记录类型和宿主机默认配置。例如,系统默认 DNS 超时而指定公共解析器正常,问题通常在本地解析链路;A 记录正常而 AAAA 记录异常,则应继续检查 IPv6。

因为使用了 host 网络,容器默认会更接近宿主机当前的网络环境。不过容器内的 /etc/resolv.conf 仍值得核对,不能想当然地认为它与宿主机文件完全一致。

带宽测试:iperf3 测链路,Speedtest 测公网体验

iperf3:两个可控端点之间的吞吐

docker run --rm -it --net=host networkstatic/iperf3 -s

-s 会启动 iperf3 服务端并等待客户端连接。它适合测两台服务器、两个机房或内外网端点之间的 TCP/UDP 吞吐,而不是自动替你选择公共测速节点。该镜像的说明见 networkstatic/iperf3

这条命令只是服务端,完整测试还需要另一端以客户端模式连接。默认服务端口是 5201,因此要提前确认安全组和防火墙只向测试来源放行。公网暴露测试端口后应及时关闭;测试结果还会受到客户端能力、并发流数量、方向、协议和两端 CPU 性能影响。

Ookla Speedtest:快速观察公网下载、上传与时延

docker run --rm --network host lferrarotti74/speedtest-ookla:latest speedtest

这条命令适合快速测当前服务器到 Ookla 所选节点的公网表现。它省去了自建对端,适合“这台 VPS 对外大致能跑多快”的问题。

Speedtest 的结果高度依赖所选节点、测试时间和运营商互联。一次跑满不能代表所有方向都好,一次跑不满也不能直接证明服务器限速。需要定位特定线路时,还是应回到 iperf3、路由和 TCP 延迟测试。

路由与逐跳质量:Trippy

docker run -it --rm --net=host fujiapple/trippy

Trippy 把 traceroute 和 ping 结合在一个交互式 TUI 中,用于观察每一跳的延迟、丢包和路径变化。项目说明见 fujiapple852/trippy

笔记记录的是镜像入口,实际使用需要在后面带上目标:

docker run -it --rm --net=host fujiapple/trippy example.com

它适合解释“为什么某个地区慢”“高延迟从哪一跳开始”“路径是否频繁抖动”。但中间路由器可能限制或忽略探测报文,所以某一跳显示高丢包,而后续和最终目标正常,并不能直接判定该节点真的在转发业务流量时丢包。判断时应更关注异常是否一直延续到终点。

ICMP 不可靠时,用 TCPing 贴近真实服务

笔记里留了两个 TCPing 镜像:

docker run -it --rm --net=host ghcr.io/pouriyajamshidi/tcping
docker run --net=host --rm docker.io/lvillis/tcping:latest

普通 ping 使用 ICMP,很多主机或防火墙会直接屏蔽它;TCPing 则尝试连接指定 TCP 端口,更适合回答“443 端口能不能连、握手延迟是多少”。两个项目都支持容器运行,分别可参考 pouriyajamshidi/tcpinglvillis/tcping-rs

典型用法是把目标和端口放在镜像后面:

docker run -it --rm --net=host ghcr.io/pouriyajamshidi/tcping example.com 443
docker run --net=host --rm docker.io/lvillis/tcping:latest example.com:443

TCPing 成功只说明 TCP 握手能建立,不代表 TLS、HTTP 或上层业务一定正常;失败也要区分 DNS 解析失败、超时、拒绝连接和防火墙丢弃。它最适合与真实服务端口绑定使用,而不是随便找一个未开放端口做结论。

出口路径与延迟:不要把几个概念混在一起

笔记的“延迟”部分保留了两条脚本命令:

bash <(wget -qO- https://ba.sh/gZnH)
curl -fsSL https://raw.githubusercontent.com/d93389894-cell/egress-check/main/egress-check.sh | bash

第一条是短链接形式,仅从笔记本身无法判断其当前脚本内容。正因为目标不透明,更应该先展开或下载检查,再决定是否执行。

第二条 egress-check 的名字容易让人以为只是测延迟,实际项目说明是检测不同类别网站的出口 ISP/ASN。脚本会对目标进行路由探测,取第一个公网跳点并查询 ISP、ASN 和国家信息,用来观察访问不同站点时是否走了不同出口。项目说明见 d93389894-cell/egress-check

因此,它更适合排查策略路由、多出口、代理分流或不同目的站点走不同上游的问题。它展示的第一公网跳点不是完整端到端路径,也不能替代 Trippy 的逐跳分析或 TCPing 的业务端口延迟。

GOST:它不是检测器,而是构造测试路径的工具

docker run -it --rm --net=host gogost/gost

GOST 是代理和隧道工具,支持 HTTP/SOCKS 代理、代理链以及 TCP/UDP 端口转发等能力。项目说明见 go-gost/gost

笔记中的命令只启动镜像入口;没有监听或转发参数时,它不会自动完成网络检测。它在这套工具箱里的价值,是临时搭建一条可控路径:例如让流媒体检测经过指定代理,或者比较直连与转发后的 TCP 延迟、路由和出口差异。

GOST 一旦监听在公网地址,就可能变成开放代理或暴露内部服务。测试时应明确绑定地址、设置认证、限制防火墙来源,并在结束后删除容器。它适合“搭实验条件”,不适合当成无脑运行的一键检测命令。