我对计算机网络知之甚少。事实上,我从未正式接受过任何与网络相关的教育,但通过自学学到了一些知识。我正面临一个与网络相关的问题,如果您能帮助我,我将不胜感激。
这是我当前的网络设置。所有网络设备都启用了 DHCP 服务器,并且所有 IP 地址都是静态 IP 地址。
问题:如果我连接到 DIR 600L,我就能连接到任何设备。例如,我可以从 192.168.2.2 ssh/ping 到 192.168.0.3,或者我可以从 192.168.2.5 ssh 到 192.168.1.3,这就是我想要的 - 能够从任何设备连接到任何设备。
如果我连接到 DIR 505,我可以连接到那些连接到 DWR 720 或 DIR 505 的设备,但不能连接到那些连接到 DIR 600L 的设备。例如,我可以从 192.168.1.4 ssh/ping 到 192.168.0.3 或 192.168.1.3,但不能 ssh/ping 到 192.168.2.4
如果我连接到 DWR 720,我只能连接到那些连接到 DWR 720 的设备,但不能连接到任何连接到 DIR 505 或 DIR 600L 的设备。例如,我无法通过 ssh/ping 连接到 192.168.0.3 到 192.168.1.4 或 192.168.2.2
我不明白为什么我可以以一种方式连接而不能以另一种方式连接。在防火墙(ufw)设置中,我添加了规则以允许所有设备上来自 IP 范围 192.168.0.1/24、192.168.1.1/24 和 192.168.2.1/24 的所有连接。我在设置中的设备上使用以下操作系统 - RPi B+ 上的 LibreElec Kodi(IP 地址:192.168.0.3)。RPi zero 上的 Raspbian stretch 服务器(IP 地址:192.168.1.3)。RPi 3B+ 上的 Raspbian Stretch Desktop(IP 地址 192.168.2.4)。两台笔记本电脑上的 Kde Neon(IP 地址 192.168.1.4 和 192.168.2.2)。
我如何配置网络,以便能够从任何其他设备访问任何设备?出于某种原因,我无法将所有设备连接到运行良好的 DIR 600L。当我从一个房间漫游到另一个房间时,我必须更改连接的接入点。
答案1
你必须理解子网和路由表。网络是基于数据包的。当您的主机连接到路由器时,它们的路由表、IP 地址等将通过 DHCP 协议进行配置(在您的情况下,您可以手动设置这些)。大多数端点只有一个“默认路由”,即,如果您想发送带有地址/子网的包,请将其转发到 IP 地址为某某的路由器。
彼此直接连接的节点(主机的另一个术语)可以使用以太网层 ARP 协议来找出哪个以太网级主机(通过其 MAC 地址唯一标识)与默认路由的 IP 地址相关。
您的所有计算机都可以这样做,因此它们始终能够将 IP 包转发到“它们的”路由器,并利用路由器基于 IP 的“服务”,例如 http 配置界面。
现在,当您连接到 600L 时,您要做的就是将数据包转发到该路由器。此路由器本身充当下一个路由器 505 的“客户端”。因此,它还有一个默认路由条目允许它转发其子网外 IP 地址的数据包。下一个路由器也是如此。
例如:如果您从 192.168.2.5 发送一个包到 google 的 8.8.8.8 DNS 服务器,它将正确到达目的地,因为所有涉及的路由器都知道如何通过其默认路由条目转发该包。
问题是,当响应包进入你的第一个路由器时,这台机器不知道第二个和第三个路由器!你必须通过手动添加来告知它这两个路由器和子网二路由表条目(通常通过 Web 配置界面)。
505 的情况也一样,但你只需要添加一路由表条目,因为它已经知道如何通过默认路由将数据包转发到 720。因此,您只需添加一个附加条目,告诉它将 192.168.2/24 的数据包转发到 192.168.1.2。
答案2
您可能不需要弄乱防火墙设置或静态路由。您所要做的就是将 DIR 505 切换到中继器模式,如手动的在第 97 页。然后将 505 连接到 600L 的一个 LAN 端口,而不是互联网端口。这样,所有路由器都应属于同一网络,而不是形成 3 个独立的网络。600L 现在将仅充当交换机和 wifi 接入点,所有附加路由和防火墙功能均未使用。
您还应该在 3 个路由器中的两个中停用 dhcp 服务器,因为网络应该只有一个。并且您需要确保所有 3 个路由器都有不同的 IP 地址,但都位于同一子网中,例如 192.168.0.1/24
答案3
有两个问题,源于所有这些路由器都盲目地假设特定的网络布局(它们都期望上行链路端有互联网等)。
最重要的是,每个路由器都对其他子网一无所知。例如,DIR 505 不知道 192.168.2.0/24 的存在,而 DWR 720 不知道 192.168.1.0/24 的存在。
它们都默认采用简单的路由配置,告诉它们
- 192.168.x.0/24 直接位于我的 LAN 接口上,
- 0.0.0.0/0(其他所有内容)都通过 WAN 网关。
第二条路由(将其他所有东西都推过 WAN 端口)使它们可以盲目地到达“左侧”的网络(按照您的图片)。但是当您尝试到达“右侧”的网络时……嗯,没有已知的正确路由,因此数据包再次通过 WAN 端口遵循默认路由,最终到达互联网。
您可以通过添加来解决这个问题静态路由到每个路由器。在 DWR-720 上,为两个网络添加路由:
- 通过 192.168.0.2 (DIR-505) 到 192.168.1.0/24 (掩码 255.255.255.0)
- 通过 192.168.0.2 到 192.168.2.0/24
请注意,网关地址始终是从您正在配置的路由器的角度来看的。(此外,单个更宽的路由也可以工作,但我们保持简单。)
在 DIR-505 上,只添加一条路由(默认路由负责其余部分):
- 通过 192.168.1.2 到 192.168.2.0/24
显而易见的问题是,你如何能够连接出去来自“内部”网络并仍能收到回复早在答案是所有这些路由器都执行 NAT;它们重写传出数据包的源 IP。
例如,当笔记本电脑 192.168.2.2 连接到打印机 192.168.1.5 时,打印机实际上认为其客户端是 192.168.1.2(DIR-600L)。因此它将回复发送回 192.168.1.2,后者识别已建立的连接并重写地址后退至 192.168.2.2。
配置静态路由后,您可以(实际上应该)禁用 DIR-505 和 DIR-600L 上的 NAT。这仅在网络的最外层边缘(DWR-720 直接连接到互联网)上才有必要。
第二个问题是所有这些路由器都很可能启用了防火墙。它们认为 WAN 端就是广阔的互联网,因此即使数据包正确地路由到 LAN,它们也会被阻止。
尝试找到 DIR-505 和 DIR-600L 上的防火墙设置,并将其完全禁用。