1.
准备与前提说明
环境要求:本地或监控主机(Linux 推荐,如 Ubuntu/CentOS)有 root 或 sudo 权限。
目标说明:测试日本方向 CN2 Jia 链路,通常需要在日本侧或能到达日本出口的服务器作为测试对端(若无,使用公开 speedtest/iperf3 服务,或购买日本 VPS)。
软件安装:本文示例使用 iperf3、mtr、traceroute、curl、jq、python3、ss 或 proxychains 进行 SOCKS/HTTP 代理测试。
2.
安装必要工具(一步步)
Ubuntu/Debian:sudo apt update && sudo apt install -y iperf3 mtr traceroute curl jq python3 python3-pip git;
CentOS:sudo yum install -y epel-release && sudo yum install -y iperf3 mtr traceroute curl jq python3 git;
额外:若要通过 SOCKS5 走指定出口(比如通过日本 VPS),安装 proxychains 或 tsocks,或用 ssh -D 建立本地动态转发。
3.
单次手工测试流程(最小化)
步骤A:ping 测延迟:ping -c 10 <目标IP或域名>,记录平均延迟和丢包率。
步骤B:路径排查:mtr -r -c 100 <目标IP>(保存文本结果 mtr -r -c 100 host > mtr.txt)。
步骤C:带宽测试(TCP):iperf3 -c <对端IP> -p <端口> -t 30 -J > iperf.json(对端需运行 iperf3 -s)。
4.
如何在没有日本对端时测试
方案1:使用公共 Speedtest 或者 Speedtest CLI(安装 speedtest-cli 或者 Ookla 接口)。
方案2:购买小型日本 VPS(例如东京),在 VPS 上运行 iperf3 服务:ssh root@jp_vps 'iperf3 -s -p 5201'。
方案3:使用 HTTP 测试:curl -w "@curl-format.txt" -o /dev/null -s "http://<日本测试站>/bigfile" 记录下载速度。
5.
推荐的自动化检测脚本(Bash 示例)
脚本功能:自动运行 ping/mtr/iperf3,生成 JSON/文本日志并按日期归档,失败时发送告警(邮件或 Telegram)。
示例(主要命令片段):
- 创建目录:mkdir -p /opt/cn2test/logs
- 脚本 core(/opt/cn2test/run_test.sh):
cat > /opt/cn2test/run_test.sh <<'EOF'
#!/bin/bash
TARGET="jp.example.com"
OUTDIR="/opt/cn2test/logs/$(date +%F)"
mkdir -p "$OUTDIR"
ping -c 10 $TARGET > "$OUTDIR/ping.txt"
mtr -r -c 100 $TARGET > "$OUTDIR/mtr.txt"
iperf3 -c $TARGET -J -t 20 > "$OUTDIR/iperf.json" || echo "iperf failed" >> "$OUTDIR/error.log"
EOF
chmod +x /opt/cn2test/run_test.sh
6.
自动化脚本扩展:解析与告警(Bash+curl)
解析 iperf JSON:使用 jq 提取 throughput/RTT。
示例告警(Telegram):
- 在 BotFather 申请 BOT,获取 TOKEN,获取 Chat ID。
- 在脚本末尾增加:
RATE=$(jq '.end.sum_received.bits_per_second' $OUTDIR/iperf.json 2>/dev/null)
if [ -z "$RATE" ] || [ "$RATE" -lt 10000000 ]; then
curl -s -X POST "https://api.telegram.org/bot$TOKEN/sendMessage" -d chat_id=$CHATID -d text="CN2-JP 测试异常 $(date): $RATE bps" >/dev/null
fi
7.
Python 自动化脚本(更灵活)
优势:并行、多目标、结果入库(SQLite/InfluxDB)。
示例结构:requirements: pip3 install requests python-telegram-bot pyjq
核心思路:使用 subprocess 调用 iperf3/mtr,解析 JSON 并写入 SQLite,设置阈值触发告警并通过 HTTP POST 或 Telegram 通知。
8.
示例 Python 片段(iperf 调用与解析)
核心代码(伪码):
import subprocess, json
r = subprocess.run(['iperf3','-c','jp.example.com','-J','-t','10'], capture_output=True, text=True)
data = json.loads(r.stdout)
bits = data['end']['sum_received']['bits_per_second']
# 写入 DB 或比较阈值并告警
9.
定时执行:Cron / systemd-timer
Cron 示例(每小时执行):sudo crontab -e 添加:0 * * * * /opt/cn2test/run_test.sh >> /opt/cn2test/cron.log 2>&1
systemd timer(更可靠):创建 /etc/systemd/system/cn2test.service 与 .timer,启用并启动:systemctl enable --now cn2test.timer。
10.
数据保存与可视化建议
简单:将日志按日期归档到 /opt/cn2test/logs,并用 daily-check 聚合;
进阶:将结果写入 InfluxDB,然后用 Grafana 建仪表盘,展示带宽、丢包、跳数与 RTT 趋势(利于长期比较 CN2 与非 CN2 路径差异)。
11.
常见故障排查与注意事项
- iperf3 可能被防火墙阻断,请开放端口或使用 -R 反向测试。
- mtr 在目标处被 ICMP 限制时只能参考跳点延迟与丢包趋势。
- 测试时间段要覆盖高峰与空闲,避免单次结论。
12.
安全与合规提示
不要对第三方主机频繁跑高负载测试(遵守对端规则)。
若使用 SSH 隧道或代理,确保密钥管理与访问控制,避免在公网上泄露测试脚本中的凭证。
13.
推荐开源脚本仓库与资源
- github 搜索关键词:cn2 test iperf3 mtr monitor network-check
- 推荐学习项目:iperf3 自动化 runner、Grafana+InfluxDB 监控模板、telegram-notify 脚本。
14.
后续优化建议
增加 UDP 测试(iperf3 -u)以评估抖动;
加入 BGP/AS 路径查询(使用 bgp.he.net 或 whois)对比是否走 CN2 Jia;
对比不同出口(多线 VPS)得出路由优选建议。
15.
问:如何判断测试到的路径是 CN2 Jia 线路?
答:通过多点验证:使用 mtr/traceroute 查看中间跃点的 AS 号与运营商标识(可用 whois 或 bgp.tools 查询),若经过中国电信 CN2 的 AS(例如 AS45102/AS4812 等历史或运营商标识中含 "ChinaTelecom"、"CN2" 等字样),并且端到端延迟与丢包特性符合 CN2 低时延、高稳定性的表现,即可判断;也可联系带宽提供商确认。
16.
问:没有日本对端的情况下,最可靠的替代方案是什么?
答:最可靠的是租用一台廉价日本 VPS(例如东京或大阪),在该 VPS 上部署 iperf3 服务并做常驻监控;若暂时无法购买,可使用公开 speedtest/iperf 服务器并结合多个节点的结果来交叉验证,但精度不如自有日本 VPS。
17.
问:如何把测试结果长期留存并触发 SLA 报表?
答:把每次测试结果写入时序数据库(InfluxDB)或关系型数据库(SQLite/MySQL),并用 Grafana 配置长期仪表盘与告警策略;设置阈值(例如 95% 下载速率低于基线、丢包>1% 等)生成每日/每周 SLA 报表,并通过邮件或 Telegram 自动发送。