我家裡有 2 個 LAN:
- 在我的 ISP 數據機後面運行的主 LAN(充當 IP 位址為 192.168.0.1 的路由器,我稱之為路由器 A)。連接到此路由器的是 Raspberry Pi,位址為 192.168.0.4。
- 在無線TP-LINK 路由器後面運行的輔助LAN,連接到我的數據機(我的主LAN),位址為192.168.0.10(因此該路由器的預設閘道是192.168.0.10),我稱之為路由器B。路由器的IP其 LAN 上的位址是 192.168.1.1。連接到該路由器的是一個硬碟驅動器,我可以透過位址 192.168.1.1 上的 samba 共用存取該硬碟。以下是此設定的概述:
Router A 192.168.0.1 | | - Raspberry Pi | Router B 192.168.0.10 to router A, | 192.168.1.1 to clients within | Samba server - 192.168.1.1
我正在嘗試從 Raspberry Pi 存取我的 samba 共享,但由於它們位於不同的 LAN 中,因此 Pi 無法看到我的 samba 共用。我嘗試轉發路由器 B 上的 samba 連接埠(連接埠 137 到 139 和連接埠 445),並使用 IP 192.168.0.10(路由器 B 在 Pi 的 LAN 上的 IP 位址)存取 Pi 的共享,但它不起作用。當我將 Pi 連接到路由器 B 的 LAN(使用 WiFi 適配器)時,我可以在 IP 192.168.1.1 上正常存取 samba 共享,但由於它們距離很遠,我一直失去連線。您建議我如何在不將 Pi 實體連接到路由器 B 的情況下執行此操作?
答案1
你有一個路由問題。
想想看:您的 RPI (192.168.0.x) 對另一個 LAN (192.168.1.x) 的存在一無所知。您如何告知它旁邊存在另一個 LAN?答:透過使用路線,這是一個非常具體的訊息,說明如何到達特定子網路/主機。
在您的範例中,您的 LAN 192.168.1.x 在「路由器 B」主機 (192.168.0.10) 後面。為了到達 LAN 192.168.1.x,連接到另一個 LAN (192.168.0.x) 的主機必須知道這一點。換句話說,您必須告訴 192.168.0.x LAN,可以透過路由器 192.168.0.10 看到另一個 LAN (192.168.1.x)。
您可以使用下列 Linux 路由命令來完成此操作:route add -net 192.168.1.0/24 gw 192.168.0.10
。理論上,駐留在 192.168.0.x LAN 上的每台主機都需要此命令 - 當您有多個(可能是幾十個)主機時,完成這件事有點煩人。然而,還有另一個解決方案:讓各個 192.168.0.x 主機對另一個 LAN 不知情,但通知主路由器(路由器 A - 192.168.0.1)存在這樣一個網路。然而,根據我的閱讀,你不能在任何模式下改變路由器A的路由表,所以你只能使用上面解釋的第一種方法。
最後一個不鼓勵的不涉及路由修改的解決方案是連接埠轉送方法。在這種情況下,您基本上告訴路由器 B (192.168.0.10) 設定一個「假」Samba 偵聽器,並將每個 samba 請求重新導向到內部 samba 伺服器 192.168.1.1。為什麼這會令人沮喪?因為 NAT 會無用地增加網路複雜性,並且因為它需要路由器 B 進行大量處理 - 從而減慢連接速度。
最後一件事:進行測試/設置,始終使用 samba 的 IP 位址而不是其伺服器名稱。這是因為 NETBEUI(後來演變為 NETBIOS)並非設計用於在不同 LAN 之間運行,這會影響其名稱解析功能。因此,讓我們保持簡單:使用 samba 伺服器的 IP 位址來測試連線。