網路介面設定完成後,即可開始探查 Fuchsia 目標裝置是否存在。
本頁的範例使用 avahi
檢查 mDNS 記錄。avahi
工具鍊會與本機精靈通訊,該精靈可能正在執行,也可能未執行。如果精靈未執行,avahi
指令通常會失敗,並顯示 Daemon not running
訊息。
如有需要,您可以將精靈啟動為前景程序。在終端機中,執行下列指令:
sudo avahi-daemon
精靈會在遇到 mDNS 查詢時快取這些查詢,並在完成時安全終止。
多點傳送 DNS 解析
裝置探索功能會使用多點播送 DNS (mDNS) 判斷 Fuchsia 目標裝置的 IP 位址。Fuchsia 目標裝置會透過 mDNS 廣播 IP 資訊,服務類型為 _fuchsia._udp
。
如要使用 avahi
查詢這項資訊,請執行下列指令:
avahi-browse --resolve _fuchsia._udp
這項指令會顯示為停止運作。這個工具會先傾印快取中的所有記錄,然後等待並監聽 mDNS 廣播。avahi
如果您使用 --resolve
標記,avahi
會嘗試解析遇到的任何記錄。解析會產生 Fuchsia 目標裝置的 IPv6 位址。例如:
$ avahi-browse --resolve _fuchsia._udp
+ zx-c863147051da IPv6 fuchsia-c863-1470-51da _fuchsia._udp local
= zx-c863147051da IPv6 fuchsia-c863-1470-51da _fuchsia._udp local
hostname = [fuchsia-c863-1470-51da.local]
address = [fe80::ca63:14ff:fe70:51db]
port = [5353]
txt = []
在這個範例中,您可以看到系統找到包含 fuchsia-c863-1470-51da
主機名稱的主機記錄,然後解析為 fe80::ca63:14ff:fe70:51db
。這是所連線 Fuchsia 目標裝置的位址。
mDNS 封包檢查
如果找不到記錄,請檢查目標裝置是否回覆 mDNS 查詢。mDNS 在通訊埠 5353 上運作,可使用 tcpdump
檢查。執行這項指令時,請將指令限制在目標介面,並依據 IPv6 通訊協定和 mDNS 連接埠篩選結果。例如:
sudo tcpdump -n -i zx-c863147051da "ip6 && port 5353"
這個指令會輸出類似下列內容的結果,顯示 mDNS 查詢和回應週期:
$ sudo tcpdump -n -i zx-c863147051da "ip6 && port 5353"
13:32:41.725007 IP 169.254.31.167.58994 > 224.0.0.251.5353:
0 PTR (QU)? _fuchsia._udp.local. (37)
13:32:41.725057 IP 169.254.31.167.58994 > 224.0.0.251.5353:
0 PTR (QU)? _fastboot._tcp.local. (38)
13:32:43.724131 IP6 fe80::ca63:14ff:fe70:51da.34810 > ff02::fb.5353:
0 PTR (QU)? _fuchsia._udp.local. (37)
13:32:43.724183 IP6 fe80::ca63:14ff:fe70:51da.34810 > ff02::fb.5353:
0 PTR (QU)? _fastboot._tcp.local. (38)
13:32:43.725635 IP6 fe80::ca63:14ff:fe70:51db.5353 > fe80::ca63:14ff:fe70:51da.34810:
0*- [0q] 1/0/3 PTR fuchsia-c863-1470-51da._fuchsia._udp.local. (152)
mDNS 防火牆和 netfilter 規則
在某些情況下,您可能需要檢查核心的 netfilter
規則,才能透過 mDNS 探索裝置。
ufw 規則
ufw
是一種公用程式,可管理核心的 netfilter 規則。如果電腦上已安裝這項工具,可以執行下列指令,確認防火牆設定是否正確:
sudo ufw status
這時應會傳回類似下列內容:
Status: active
To Action From
-- ------ ----
Anywhere (v6) ALLOW fe80::/10 5353/udp # Fuchsia MDNS
33331:33340/udp ALLOW fe80::/10 # Fuchsia Netboot Protocol
8083/tcp ALLOW fe80::/10 # Fuchsia Package Server
Anywhere (v6) ALLOW fe80::/10 33340/udp # Fuchsia Netboot TFTP Source Port
33331:33340/udp ALLOW fc00::/7 # Fuchsia Netboot Prot
ocol
8083/tcp ALLOW fc00::/7 # Fuchsia Package Server
Anywhere (v6) ALLOW fc00::/7 33340/udp # Fuchsia Netboot TFTP Source Port
Anywhere (v6) ALLOW fc00::/7 5353/udp # Fuchsia MDNS
如果不是這種情況 (即輸出內容為空白),請執行下列指令:
fx setup-ufw
執行這項指令會為 netfilter 設定多項 UFW 規則。
網路篩選器規則
此外,可能還有其他 netfilter 限制。
firewalld
如要檢查電腦上執行的規則,請執行下列指令:
sudo nft list tables
如果輸出內容如下所示,您可能需要調整規則:
$ sudo nft list tables
table ip filter
table ip nat
table inet firewalld
大多數設定都會有前兩項規則:
table ip filter
table ip nat
如要移除 firewalld
規則,可以執行下列指令:
sudo systemctl stop firewalld
sudo systemctl disable firewalld
sudo nft delete table inet firewalld
mDNS 流量會透過 224.0.0.251
和 fe02::fb
多點傳播位址 (分別為 IPv4 和 IPv6) 在通訊埠 5353 上產生。建議檢查 filter
表格,看看是否有任何政策套用至 5353 連接埠或這些地址。例如:
$ sudo nft list table ip filter
table ip filter {
...
}
其他 netfilter 檢查
如果你已嘗試上述做法,但仍符合下列情況:
- 您的電腦未安裝
ufw
。請參閱 ufw 規則。 - 您的電腦未執行
firewalld
。請參閱 firewalld。 - 您無法使用
ffx target list
解析裝置的地址。 - 您可以使用
avahi
解析裝置的位址。請參閱「多點播送 DNS 解析」。
您可能仍有防火牆規則會封鎖單點播送 mDNS 訊息。您可能需要手動新增例外狀況 iptables
,才能允許 mDNS 傳送本機連結 IPv6 訊息:
sudo ip6tables -A INPUT -s fe80::/10 -d ::/0 -p udp --sport 5353 -j ACCEPT
sudo ip6tables -A INPUT -s fc00::/10 -d ::/0 -p udp --sport 5353 -j ACCEPT
如果無法解決問題,請觀察哪些防火牆規則可能會影響 IPv6 流量,並據此解決問題:
sudo iptables -L -n
多點傳播 ping
如要找出目標的 IPv6 位址,也可以 Ping 本機多點播送 ff02::1
裝置位址。例如:
ping6 ff02::1%zx-c863147051da
這是 IANA 指定的預先決定地址。詳情請參閱 RFC-4291 的 2.7.1 節。
請注意,本機網路介面是使用 IPv6 位址的 scope-id
元件指定,這是 Ping 多點傳播位址的必要條件。-I
旗標也可能達到類似效果。Ping 回應來自 Fuchsia 裝置,並包含 IP 位址資訊。例如:
$ ping6 ff02::1%zx-c863147051da
PING ff02::1%zx-c863147051da (ff02::1%zx-c863147051da) 56 data bytes
64 bytes from fe80::ca63:14ff:fe70:51da%zx-c863147051da: icmp_seq=1 ttl=64 time=0.088 ms
64 bytes from fe80::ca63:14ff:fe70:51db%zx-c863147051da: icmp_seq=1 ttl=64 time=0.958 ms
請注意,本機主機本身可能會回覆多點傳播連線偵測 (ping)。在本範例中,fe80::ca63:14ff:fe70:51da
是主機端介面的位址 (如上所述),fe80::ca63:14ff:fe70:51db
則是 Fuchsia 目標裝置的位址。
一般來說,如果裝置的回應時間遠小於一毫秒,通常是本機主機回應;如果回應時間接近或超過一毫秒,則可能是 Fuchsia 目標裝置。