Ipv6

如何在 OSX 上通過 IPv6 製作反向 mDNS?

  • October 13, 2020

我正在尋找一種僅通過 IPv6 在 OSX 上進行反向 mDNS 查詢的方法。我對使用 IPv4 的解決方案不感興趣。

以下適用於dig 9.16.1 的 Linux:

dig +short @ff02::fb -p 5353 -x 2001:db8::1

我已經在 OSX 上安裝dig 了帶有 homebrew 的 9.16.7,該命令具有完全相同的參數會產生超時。並且在 Wireshark 上沒有傳出查詢的跡象。

以下在 Linux 和 OSX 上執行良好:

dig +short @224.0.0.251 -p 5353 -x 192.168.1.23

該二進製文件avahi-resolve-address在 OSX 上不可用,而且我沒有找到使反向 DNS 與dns-sd.

這是使用的作業系統版本:

  • OSX 版本:Catalina 10.15.7
  • Linux:Ubuntu 20.04

我找到了幾種方法來做到這一點,但它們都有點難看。首先,您可以使用dns-sd -q並指定ptr記錄類型…但是您需要自己將要查找的地址轉換為逐字節反向格式。例如,要查找fe80::4e6:97e7:d892:d977您將使用:

dns-sd -q 7.7.9.d.2.9.8.d.7.e.7.9.6.e.4.0.0.0.0.0.0.0.0.0.0.0.0.0.0.8.e.f.ip6.arpa ptr

不幸的是,這似乎只適用於連結本地地址,而不適用於公共地址。我不知道為什麼。另外,請注意dns-sd在進行查找後不會自動退出,但會繼續監視更改。你需要在一段時間後殺死它。

您也可以使用dig,有點像您的原始命令,但您需要告訴它通過哪個介面發送查詢,並且格式相當奇怪。要做的“標準”事情是為介面添加一個區域索引,例如將其發送到ff02::fben1使用@ff02::fb%en1的 . 但dig不喜歡這種格式,所以你必須偷偷摸摸。基於 BSD 的 unix,包括 macOS,允許您將數字區域索引放在某些地址的第二個 16 位字中,這在此處確實有效。這是一個(匿名的)範例,我netstat -rn -f inet6用來找出2001:db8:1234:5678::/64在 interface 上en1,該介面的連結號是5,然後使用它進行查找(我添加了 ^^^s 以強調相關部分):

% netstat -rn -f inet6
Routing tables

Internet6:
Destination                             Gateway                         Flags         Netif Expire
[...]
2001:db8:1234:5678::/64                 link#5                          UC              en1       
                                       ^^^^^^                                          ^^^
[...]
% dig +short @ff02:5::fb -p 5353 -x 2001:db8:1234:5678:109f:8688:b2d1:3f12
                  ^
Gordons-MacBook.local.

引用自:https://serverfault.com/questions/1037455