排解網路連線問題:裝置探索

網路介面設定完成後,即可開始探查 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.251fe02::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 目標裝置。