Anycast 是否允许任何低级目的地控制?

网络工程 IP地址 任播
2022-02-26 04:48:19

作为一个实验,我想从几个不同的 8.8.8.8 服务器获得响应(每个 选播,多台物理机被分组为一个 IP 地址,我相信仅检查请求/响应数据包位不能告诉我哪个实际使用了物理机)。

(为什么要做这个实验?我想由于网络更新而导致响应不同的短暂时刻。我想响应通常只是故意不同的;例如,8.8.8.8 是 DNS 服务器,所以如果我向它询问 CNN 的 IP地址,响应可能取决于我是在欧洲还是在美国。此外,我可以使用美国 CNN 的 151.101.1.67 而不是 8.8.8.8 进行此实验,以查看当我获取“直接”时,任播是否仍会更改响应机器-151.101.1.67-labelled" 数据包在欧洲......我可能误解了很多,所以只想做一些实验。)

那么,有没有办法让我修改数据包头/正文以强制异常 8.8.8.8 服务器?

如果没有,我似乎需要多个全球互联网源注入点来发出请求(使用代理或 VPN 很容易完成,尽管我希望我可以从一个点注入所有数据包)。然后我可以使用 tracert 推断哪个 8.8.8.8 服务器响应。或者,是否有一种通用的直接/支持的任播方法来区分哪个物理服务器响应?

3个回答

简短的回答:不。一旦数据包离开您的网络,您就无法控制它的路径。

正如罗恩所说:不。但是使用https://atlas.ripe.net/可能是进行实验的好方法。您还应该查看 EDNS,尤其是https://en.wikipedia.org/wiki/EDNS_Client_Subnet

简而言之:一旦数据包离开您的网络,您将无法真正控制数据包所采用的路径。虽然这可能通过 IP 源路由或分段路由实现,但实际上 Internet 上的任何网络都不允许此功能。

但是,对于您关于能够识别处理您的请求的 DNS 服务器的最后一个问题:这可以通过 EDNS0 扩展“NSID”来实现。当在查询中请求并得到服务器的支持时,它允许服务器嵌入一些用于识别它的任意字节。

但是,不幸的是,8.8.8.8 服务似乎不支持 NSID。但是,您可以在其他服务中看到它,例如 9.9.9.9(“Quad9”)。

例如(注意从“res210.ams.rrdns.pch.net”标记的响应):

jof@oak ~ % dig +nsid @9.9.9.9 jof.io

; <<>> DiG 9.11.5-P4-5.1+deb10u1-Debian <<>> +nsid @9.9.9.9 jof.io
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 43627
;; flags: qr rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 512
; NSID: 72 65 73 32 31 30 2e 61 6d 73 2e 72 72 64 6e 73 2e 70 63 68 2e 6e 65 74 ("res210.ams.rrdns.pch.net")
;; QUESTION SECTION:
;jof.io.                IN  A

;; ANSWER SECTION:
jof.io.         300 IN  A   104.31.81.242
jof.io.         300 IN  A   104.31.80.242
jof.io.         300 IN  A   172.67.161.78

;; Query time: 13 msec
;; SERVER: 9.9.9.9#53(9.9.9.9)
;; WHEN: Mon Aug 10 20:13:45 UTC 2020
;; MSG SIZE  rcvd: 111