Skip to content

节点写着 BGP / 专线,怎么自己验一遍

节点名里的「BGP」「IEPL」「专线」是销售文案,不是路由表。广州到香港直线大约 130 公里,物理延迟该在 5–15ms;我测过名叫「香港 BGP」的节点,解析到香港 AWS,路由却先绕新加坡,ICMP 已经 115ms。标签和包走的路可以完全不是一回事。

2026-02 我在广州用电信、联通、移动出口,按同一套步骤核过一批节点。这篇把当时用的方法和判据收成清单。商家名、域名、入口 IP 不写。文里的数字只说明「这类路径大概长什么样」,不是现在还能买到的成绩。

从 VPS 看出网回程(CN2 / 163 那些)是另一件事,清单在 新 VPS 验收 第 3 节。这篇是反过来:从你这边看客户端配置里的 server,它到底是海外机器本身,还是国内入口。


1. 先分清三种东西

客户端配置里的 server(域名或 IP)是你 TCP/UDP 真正连上的那一台。三种常见情况:

类型server 解析到哪路由看起来怎样标签常怎么写
直连海外 VPS / 云主机出运营商国际口,可能绕路也有人标 BGP、专线
BGP 中转中转机房(常见香港)先到中转,再到落地BGP、中转
国内入口(IEPL / IPLC / 同类专线)国内 IP到入口全程在境内闭合IEPL、IPLC、专线

专线的跨境段走运营商私网,公网 traceroute 看不到香港以后的跳。所以:

  • 解析到国内、到入口不跨境:只能核实「入口在国内」
  • 核实不了私网那一段到底是 IEPL、IPLC,还是别的专线
  • 入口对了,落地质量仍要靠走代理之后的延迟和速度,ICMP 到不了落地

「BGP」本身只表示中转机房有多线接入,不保证你走 CN2,更不保证入口在国内。解析到香港 AWS、路由出 163,那就只是直连。


2. 测之前先把 Fake-IP 拿掉

Clash / Mihomo 一类客户端开了 Fake-IP 或 TUN 时,本机 digpingtraceroute 看到的经常是 198.18.x.x 这种假地址。那是客户端的劫持,不是节点。

测 DNS 和路由时:

  1. 关掉系统代理、TUN、Fake-IP
  2. DNS 不要走本机 stub,改用 DNS-over-HTTPS(下面用 Cloudflare)
  3. traceroute 要对 解析出来的真实 IP 打,不要对 198.18.0.1

配置里直接写了公网 IP、没有域名,跳过解析,仍要关 TUN 再 traceroute,否则第一跳就进虚拟网卡,后面全废。


3. 四步

配置里抠出 server → DoH 拿真实 IP 和 CNAME → 查归属 → nexttrace

速度测试是第五步,可选,见第 6 节。前四步已经够判断标签有没有在撒谎。

3.1 从配置拿出 server

YAML 里找 server / servername(后者常是 TLS SNI,不是入口)。要解析、要 trace 的是 server 这一列。同一批节点去重之后,名字可以有几十个,真实入口往往只有几个 IP。

3.2 DNS-over-HTTPS

dig 会吃 Fake-IP,DoH 不会。Cloudflare 的 JSON 接口:

bash
# 把 NODE_HOST 换成配置里的 server 域名
curl -s "https://1.1.1.1/dns-query?name=NODE_HOST&type=A" \
  -H "accept: application/dns-json" | python3 -c "
import sys, json
d = json.load(sys.stdin)
for a in d.get('Answer', []):
    print(f\"Type:{a.get('type')} -> {a['data']}\")"

Type:5 是 CNAME,Type:1 是 A 记录。CNAME 链留着,第 3.5 节用。

一批域名可以套个循环:

bash
DOMAINS=("node-a.example.com" "node-b.example.com")
for domain in "${DOMAINS[@]}"; do
  IP=$(curl -s "https://1.1.1.1/dns-query?name=$domain&type=A" \
    -H "accept: application/dns-json" | python3 -c "
import sys, json
d = json.load(sys.stdin)
ans = d.get('Answer', [])
parts = [a['data'] for a in ans if a.get('type') in (1, 5)]
print(' | '.join(parts) if parts else 'NXDOMAIN')")
  echo "$domain -> $IP"
done

3.3 IP 归属

bash
curl -s "https://ipinfo.io/IP_ADDRESS"

countryorgasn。这一步只回答:这是不是国内入口。

  • 中国大陆 ASN(电信 AS4134、移动 AS9808 这类)→ 国内入口候选
  • 香港 / 海外云(AWS、GCP、Oracle、常见香港机房 ASN)→ 不是国内入口
  • Cloudflare 104.18.x.x / 104.19.x.x → Anycast CDN,既不是专线入口,也不是它名字里写的那个国家

归属是国内,还没完,得看路由是不是真在境内闭合。归属是海外,基本就可以排除 IEPL/IPLC。

3.4 nexttrace

工具和 VPS 验收那篇一样,nexttrace(开源,github.com/nxtrace/NTrace-core)。需要 root。ICMP 被滤再改 TCP:

bash
# 安装见官方脚本: curl -sL https://nxtrace.org/nt | bash
# 必须关掉 TUN / 系统代理

sudo nexttrace TARGET_IP          # ICMP,先试这个
sudo nexttrace -T TARGET_IP       # ICMP 被滤再用 TCP
sudo nexttrace -q 1 -n TARGET_IP  # 少探针、不反解,输出干净一点

盯三件事:有没有出到国外、中间有没有明显绕路、最后一跳可见延迟。

国内入口:全程省内或境内,广州打广东入口常见个位数到十几毫秒。 直连香港却先出现新加坡、东京,再回到香港:绕路。物理上不该那么走。

中间跳 * 很常见,尤其专线入口之后。以最后还能看见的那一跳为准,别被星星吓到。

3.5 CNAME 链

很多入口不会直接给 A 记录,而是一层或多层 CNAME。主机名里偶尔能看到运营自己的分类,比如带 iepliplcbgpgtmct(电信)、cm(移动)。

这只能当旁证。CNAME 写 iepl 不证明私网段真是 IEPL;但同一批域名如果收束到少数几条 CNAME,再落到少数几个 A 记录,说明「一百个节点」多半是同一批入口做端口映射。去重看 IP,别数名字。

换 DNS 再解析一次同一个名字(国内 114、海外 8.8.8.8、以及你当前运营商的本地 DNS)。结果不一样,就是 GeoDNS / GTM,第 5.3 节。


4. 骨干网怎么认

去程里这些前缀出现得多。和 VPS 验收里的回程 是同一套东西,只是方向反了:

IP 段运营商骨干质量
202.97.x.x电信163普通国际口,晚高峰容易堵
59.43.x.x电信CN2 (AS4809)相对好
219.158.x.x联通169 (AS4837)普通
223.120.x.x移动CMI 国际 (AS58453)出国常见,质量看具体落地

路径里长时间停在 202.97 再出国,按普通直连对待,不管节点名叫什么。出现 59.43 只说明这一段走了 CN2,不自动等于「BGP 中转」或「专线」。


5. 三个对照(2026-02,广州)

数字来自当时一次测试,用来认形状。换一天、换接入、换对端,绝对值会变。

5.1 名叫 BGP,其实是直连

节点名带「香港 BGP」。DoH 解析到香港 AWS,不是国内地址。

广州电信 → 202.97(163)→ 新加坡 → 香港 AWS
约 4ms → 4ms → 94ms → 115ms

广州到香港不该是 115ms,也不该途经新加坡。同批「日本 BGP」走 163 出国,代理握手 RTT 已经 150–200ms;真有一条靠谱中转到日本,用户侧常见大概 50–80ms 这个量级(经验范围,不是承诺)。

同名系列里还有解析到 Cloudflare Anycast 的:到香港 CF POP 可以只有十几毫秒,但那是 CDN 边缘,不是落地机房。Workers / 回源还要再跳一次,体感延迟另算。

判据:海外云 ASN + 公网国际口 + 绕路 → 直连。前面加「BGP」两个字没有对应基础设施。

5.2 名叫 IEPL,入口确实在省内

节点名带 IEPL。解析到广东电信 / 移动,不是香港。

广州电信 → 省网 → 广东某市电信入口
约 4ms → 8ms → 9–13ms
全程省内,没有国际跳

到入口 9–13ms,和广州到香港该有的物理延迟同量级,但这是到省内机房,不是到香港。入口之后公网 traceroute 结束,跨境段在私网上,从用户侧看不见。

所以能写进结论的是:「国内入口是真的,到入口不跨境」。不能写:「我用 traceroute 证明了这是 IEPL」。IEPL / IPLC 的差别在运营商产品和合约,不在这几跳 ICMP 上。

同批里没有 IEPL 标签的节点,解析到另一组省内移动地址,延迟也是十几毫秒。那是普通国内中转入口,不是专线。标签有无,要靠解析和路由对,不能只看名字。

再有一组直接解析到海外 AWS,延迟和速度按直连算。同一份配置里三种入口并存很常见:专线、普通中转、下载用直连。

5.3 同一个域名,电信和移动不是同一个入口

有的名字会按 ISP 做 GeoDNS。当时同一批域名:

你的出口解析到的入口到入口 ICMP走代理后香港方向下载(量级)
电信省内电信~8ms~68 MB/s
移动家宽省内移动或香港中转~14–50ms~27 MB/s

CNAME 主机名里能看到 ct 这类电信标记,换 8.8.8.8 又落到另一组电信地址。三条接入测下来是三组 IP。

所以单线测一次不够。家宽移动测得差,可能是分到了差入口,不代表电信用户也差;反过来也成立。换接入、换 DNS 再解析一遍,比多测几个节点名有用。

基础设施也会整批换。同一套方法,隔天入口 ASN 全换了的情况我碰到过。结论要写测试日期和出口类型,别当永久标签。


6. 两套延迟,别混

你看的数字测到哪典型工具
ICMP / TCP traceroute RTTserver 这台入口nexttracepingmtr
代理握手 / 应用 RTT进隧道之后整条链路客户端延迟、走代理的测速

后者一定更大,因为它含协议握手、落地、再访问测速源。用 Clash 测速看到日本 180ms、nexttrace 到入口只有 12ms,两者可以同时成立:入口在国内,落地在日本。

「专线」节点未必更快。同区域里,Hysteria2 标专线、VLESS 标高速,速度完全可以倒过来。那只是换了协议,路可能是同一条。比速度之前先比第 3 节的解析和路由,确认是不是同一入口。

走代理测吞吐,得让测速工具自己建连,别套在已经开着的系统代理外面。节点在本地 Clash / Mihomo YAML 里的话,可以用 clash-speedtest(开源,github.com/faceair/clash-speedtest):

bash
# 关 TUN、关系统代理
clash-speedtest -c ./config.yaml

测的是代理链路,不是入口 ICMP。单次 50MB、超时几秒,只能当抽样。晚高峰和午后可以差一截,要下结论就换时段再来。

看入口稳不稳,直接 ping server 的真实 IP 即可(国内入口才有意义;海外直连 ping 的是 VPS 本身):

bash
ping -c 20 TARGET_IP

要覆盖晚高峰,把间隔拉长、挂几小时,看超时比例和延迟分位。一次性测速看不出超售。


7. 一页速查

步骤命令看什么
关劫持关 TUN / 系统代理 / Fake-IPdig 不再返回 198.18.x.x
DoHcurl https://1.1.1.1/dns-query?name=...A 记录 + CNAME
归属curl https://ipinfo.io/IP国内 ASN vs 海外云 vs Cloudflare
路由sudo nexttrace IP是否出境、是否绕路、到入口延迟
换 DNS114 / 8.8.8.8 / 当前 ISP是不是 GeoDNS
去重按 IP 不按节点名多少个入口,不是多少个名字
代理 RTT / 速度客户端或 clash-speedtest -c config.yaml和 ICMP 分开记录

红线(经验,不是合同):

  • 名叫香港、解析到海外云、广州 ICMP 已经 >80ms 还绕第三地 → 当直连,别信 BGP
  • 名叫专线 / IEPL,解析却在海外 → 标签当没写
  • 解析在国内、路由出境 → 归属和路由打架,重测;仍打架就不要当专线入口
  • 解析在国内、路由省内闭合、到入口 <20ms(同省)→ 国内入口成立;跨境段类型另说
  • Cloudflare Anycast → 按 CDN 中继,不按名字里的国家

8. 这套方法做不到的

  • 证明私网跨境段是 IEPL 还是 IPLC。用户侧没有那张合约。
  • 代替落地机房的质量。入口好,落地可以是一台很差的 VPS。
  • 预测晚高峰。要自己挂采样。
  • 跨 ISP 通用。GeoDNS 会按出口给你不同入口。
  • 长期有效。入口 IP 和 CNAME 会换。

能做的只有一件事:在你当前的出口上,判断这个 server 是海外机器、境外中转,还是国内入口。标签跟这三条对不上,就当文案。