双向MTR排查网络问题

双向 MTR 排查网络问题

本教程将详细讲解本地设备(Windows / MacBook)与 Linux 服务器(Debian / CentOS 系列)之间双向 MTR 测试的完整流程,包括工具安装、命令执行及结果解读,步骤可直接操作。


一、MTR 工具简介

MTR(My Traceroute)是结合了 pingtraceroute 功能的网络诊断工具,能持续发送数据包并显示每一跳节点的延迟、丢包率等信息,可精准定位网络链路中的故障点。

  • 正向测试:本地设备(Windows / Mac) → Linux 服务器
  • 反向测试:Linux 服务器 → 本地设备(Windows / Mac)

二、正向测试:本地 → Linux 服务器

需先在本地设备安装 MTR 工具,再向 Linux 服务器发起测试(服务器无需额外安装 MTR,仅需开放 ICMP 协议,默认通常已开放)。

2.1 本地设备:Windows 系统(使用 WinMTR)

WinMTR 是 Windows 下的图形化 MTR 工具,操作更直观。

  1. 下载工具
    下载 WinMTR.exe 最新版本(选择 32 位或 64 位适配系统),解压后直接运行 WinMTR.exe(无需安装)。

  2. 配置测试

    • 在「Host」输入框中,填写 Linux 服务器的公网 IP 地址(或域名)。
    • 点击「Start」按钮开始测试,默认每秒发送 1 个数据包,建议持续测试 1~3 分钟(确保数据具有参考性)。
  3. 停止与保存
    点击「Stop」结束测试,可通过「Export TEXT」将结果保存为文本文件,便于后续分析。

2.2 本地设备:MacBook 系统(使用命令行 MTR)

Mac 系统默认未安装 MTR,需通过 Homebrew 安装。

  1. 安装 Homebrew(若已安装则跳过)
    打开「终端」,执行命令:

    /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
  2. 安装 MTR
    在终端执行命令:

    brew install mtr
  3. 执行正向测试
    终端中输入命令(将 [服务器公网IP] 替换为实际地址):

    sudo mtr --report --report-cycles 100 [服务器公网IP]
    • --report:以报告形式输出结果(非实时刷新)。
    • --report-cycles 100:发送 100 个数据包(测试时长约 100 秒,可根据需求调整)。
  4. 结果保存
    执行命令后,终端会直接输出结果,可通过 > 将结果保存到文件:

    sudo mtr --report --report-cycles 100 [服务器公网IP] > mtr_local_to_server.txt

三、反向测试:Linux 服务器 → 本地设备

需先在 Linux 服务器安装 MTR,再向本地设备(Windows / Mac)发起测试。注意:本地设备需获取公网 IP(可通过 IP 查询网站 获取),且需关闭本地防火墙(或允许 ICMP 协议入站),否则可能测试失败。

3.1 Linux 服务器:安装 MTR(分 Debian / CentOS 系列)

根据服务器系统版本,使用对应的包管理器安装 MTR:

  • Debian 或 Ubuntu 系统(使用 apt):

    sudo apt update && sudo apt install mtr -y
  • CentOS 7 系统(使用 yum):

    sudo yum install mtr -y
  • CentOS 8+ 或 Rocky Linux 系统(使用 dnf):

    sudo dnf install mtr -y

3.2 执行反向测试(服务器端命令行)

  1. 获取本地公网 IP
    本地设备访问 IP 查询网站,记录显示的公网 IP(如 123.123.123.123)。

  2. 服务器端执行 MTR 命令
    终端中输入命令(将 [本地公网IP] 替换为实际地址):

    sudo mtr --report --report-cycles 100 [本地公网IP]

    参数含义与本地测试一致:--report 输出报告,--report-cycles 100 发送 100 个数据包。

  3. 结果保存
    将结果保存到文件,便于后续分析:

    sudo mtr --report --report-cycles 100 [本地公网IP] > mtr_server_to_local.txt

四、MTR 结果解读

MTR 输出结果中,关键列的含义如下,需重点关注丢包率和延迟:

列名 含义
Host 网络链路中的每一跳节点(IP 或域名)。若某一跳显示 *,表示该节点无响应。
Loss% 该节点的数据包丢包率(百分比)。
Snt 发送的数据包总数,与 --report-cycles 设置一致。
Avg 平均延迟(毫秒,ms),延迟过高可能是链路拥堵。
Best/Worst 最小 / 最大延迟(ms),波动过大可能是网络不稳定。

特别说明:中间节点丢包无需过度担心

在 MTR 结果中,若中间节点(非目标节点)出现丢包,大概率是运营商的 “保护性丢包” —— 运营商为了避免节点负载过高,会对非关键的 ICMP 探测包进行有限制的丢弃,这种丢包通常不会影响实际业务(如网页访问、文件传输等)。

只有当最终目标节点(本地设备或服务器)出现持续丢包时,才需要重点排查(如防火墙拦截、服务器负载过高、链路故障等)。


五、注意事项

  • ICMP 协议放行:MTR 基于 ICMP 协议工作,需确保本地设备和服务器均未拦截 ICMP 数据包(Windows 关闭防火墙、Linux 清空 ICMP 相关 iptables 规则)。
  • 公网 IP 准确性:反向测试时,本地设备需使用公网 IP,而非局域网 IP(如 192.168.x.x),否则服务器无法访问。
  • 测试时长:建议每次测试发送 100~300 个数据包(--report-cycles 100),避免测试时间过短导致数据不准确。