traceroute -A - 查找如何工作?

网络工程 跟踪路由 对等
2021-07-29 02:31:17

traceroute -A命令是如何工作的?程序如何查找ASN?查询依赖于哪些协议或数据库?我可以重新创建-A选项吗?

我正在使用这个版本:Modern traceroute for Linux, version 2.0.18, Jun 30 2012.

2个回答

对每个 IP 返回值都进行 whois 查询。

这是一个手动示例。获取 networkengineering.stackexchange.com 的 IP 之一

> host networkengineering.stackexchange.com
networkengineering.stackexchange.com has address 104.16.12.128
networkengineering.stackexchange.com has address 104.16.14.128
networkengineering.stackexchange.com has address 104.16.15.128
networkengineering.stackexchange.com has address 104.16.13.128
networkengineering.stackexchange.com has address 104.16.16.128

并检查IP属于哪个AS:

 > whois 104.16.12.128  | grep -i origin
 OriginAS:       AS13335

Whois 输出更多信息。该协议在RFC3912 中指定

请注意,区域注册管理机构的 whois 输出有所不同,并非所有注册机构都会提供来源。所以traceroute -A 不会提供所有地址的AS 信息。

--as-path-lookups 基于 RADB IRR 数据,这些数据很可能不正确/缺失。

traceroute/as_lookups.c in traceroute-2.1.0 Dmitry Butskoy

/*
    Copyright (c)  2006, 2007           Dmitry Butskoy
                                        <buc@citadel.stu.neva.ru>
    License:  GPL v2 or any later

    See COPYING for the status of this software.
*/

#define DEF_RADB_SERVER         "whois.radb.net"
#define DEF_RADB_SERVICE        "nicname"
...
if (!ra_addr.sa.sa_family) {
    const char *server, *service;
    struct addrinfo *res;
    int ret;

    server = getenv ("RA_SERVER");
    if (!server)  server = DEF_RADB_SERVER;

    service = getenv ("RA_SERVICE");
    if (!service)  service = DEF_RADB_SERVICE;


    ret = getaddrinfo (server, service, NULL, &res);
    if (ret) {
        fprintf (stderr, "%s/%s: %s\n", server, service,
                                            gai_strerror(ret));
        exit (2);
    }   

    memcpy (&ra_addr, res->ai_addr, res->ai_addrlen);

    freeaddrinfo (res);
}
...

错误信息示例

  * 203.208.171.202 (203.208.171.202) [AS19905]  180.570 ms 203.208.153.254 (203.208.153.254) [AS19905]  187.246 ms

基于 RADB IRR

$ whois -h whois.radb.net 203.208.171.202
route:      203.208.171.0/24
descr:      AC_SINGTEL
origin:     AS19905
mnt-by:     MAINT-AS7786
changed:    wan.engineering@neustar.biz 20150730  #02:53:10Z
source:     RADB

IRR Explorer 上的 IRR/BGP 比较

  • 203.208.128.0/17 来自 AS7473、RADB AS7473 的 BGP
  • 203.208.171.0/24 未见于 BGP、Level3 AS19905、RADB AS7473
  • traceroute hop 203.208.171.202 实际上在 AS7473

这个故事的寓意是,没有办法在任何静态数据库(IRR、注册表等)中可靠地获取路由的源 AS。根据您在 DFZ 中的有利位置,原点很可能会有所不同。