OSX mDNSResponder 開啟 Billion 上的所有連接埠

OSX mDNSResponder 開啟 Billion 上的所有連接埠

我最近將路由器換成了 Billion 7800VDOX,並注意到有人嘗試從外部位址連接到我的 iMac。經過調查,我發現路由器上打開了一個 uPnP 端口,端口範圍為 0-0(內部和外部)。 。我刪除了映射並運行 Wireshark 並在恢復映射的同時捕獲了外部地址請求。

Frame 496: 102 bytes on wire (816 bits), 102 bytes captured (816 bits) on interface 0
Ethernet II, Src: Apple_d0:7e:eb (d4:9a:20:d0:7e:eb), Dst: BillionE_cb:49:27 (00:04:ed:cb:49:27)
Internet Protocol Version 4, Src: 192.168.1.131, Dst: 192.168.1.254
User Datagram Protocol, Src Port: 5353 (5353), Dst Port: 5351 (5351)
Source Port: 5353
Destination Port: 5351
Length: 68
Checksum: 0x8527 [validation disabled]
[Stream index: 0]
Port Control Protocol, Map Request
Version: 2
0... .... = R: Request
.000 0001 = Opcode: Map (1)
Reserved: 0
Requested Lifetime: 7200
Client IP Address: ::ffff:192.168.1.131
Map Request
    Mapping Nonce: f88237920f8cd6c0a3765f39
    Protocol: 6
    Reserved: 0
    Internal Port: 9
    Suggested External Port: 0
    Suggested External IP Address: ::ffff:xxx.181.81.112

在此之前有一個 SOAP 請求來取得路由器的外部 IP 位址。使用 lsof 檢查來源連接埠(5353),我發現它屬於 mDNSResponder。

我對正在發生的情況的假設是 mDNSResponder 使用它只是為了獲取路由器的外部 IP 位址,並使用據稱無害的請求來映射連接埠 0,這應該是一個無效連接埠。然而,Billion 路由器將此視為設計或程式錯誤,作為開啟所有連接埠的請求。關閉路由器上的 uPnP 可以解決問題(儘管正如所指出的,這實際上不是 uPnP。)

有人還有其他建議嗎?

答案1

您擷取的封包顯示連接埠控制協定(PCP:IETF 標準追蹤 NAT-PMP 的後繼者)連接埠對映請求。請求映射的客戶端連接埠是 9/TCP。客戶端沒有關於外部連接埠應該是什麼的任何建議,因此它將建議的外部連接埠欄位設為零。定義 PCP 的 IETF RFC 6887 明確指出,零表示該領域「無建議」。

我認為為這個十億路由器實施 PCP 的人誤解了 RFC。您會看到,在某些非常有限且定義明確的情況下,「其他連接埠」欄位中的零可能意味著「所有連接埠」。就像當此對應請求的請求生命週期為零時一樣,零客戶端連接埠意味著「刪除此客戶端 IP 位址上所有連接埠的所有對應」。

但同樣,在建議的外部連接埠欄位中,零始終意味著「無建議」。在此欄位中,它絕不應該表示“所有連接埠”。

因此,很明顯您在這台 Billion 路由器中發現了 PCP 錯誤。

這裡的另一件奇怪的事情是客戶端連接埠。傳統上,9/TCP 是該discard服務的端口,但該discard服務已被棄用,因此我不確定誰會再運行它,或者為什麼任何東西都會請求它的端口映射。

至於 mDNSResponder 發送這些請求的原因很簡單,因為 mDNSResponder 除了通常的 mDNS、DNS-SD 和 DNS 解析器職責之外,還充當 macOS 上的 PCP/NAT-PMP/UPnP 守護程序。當 macOS 上的任何進程觸發系統向路由器請求連接埠對應時,mDNSResponder 的工作始終是建立並傳送實際的連接埠對映請求封包。

相關內容