我家里有 2 个局域网:
- 在我的 ISP 调制解调器后面运行的主 LAN(充当路由器,IP 地址为 192.168.0.1,我将其称为路由器 A)。连接到此路由器的是 192.168.0.4 的 Raspberry Pi。
- 在无线 TP-LINK 路由器后面运行的辅助 LAN,连接到我的调制解调器(我的主 LAN),地址为 192.168.0.10(因此此路由器的默认网关为 192.168.0.10),我将其称为路由器 B。路由器在其 LAN 上的 IP 地址为 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 地址来测试连接。