如何使用 DD-WRT 从与 WAN IP 地址相同的子网访问 IP 地址?

如何使用 DD-WRT 从与 WAN IP 地址相同的子网访问 IP 地址?

我有一个安装了 DD-WRT v24-sp2 的路由器,我无法访问与我的公共 IP 地址在同一子网内配置的另一个 IP 地址。我的 ISP 需要使用 DHCP 建立 WAN 连接,因此 IP 和网关都是自动分配的。分配给 WAN 接口的 IP 地址也是公共 IP 地址。

为了说明这个例子:

DD-WRT router -> [lan] ip: 192.168.1.1/24
                 [wan] ip: 12.34.56.78/24 (public IP)

现在让我们假设我的邻居使用相同的 ISP 和相同的配置,因此连接到相同的公共12.34.56.0/24网络(例如使用 WAN IP 地址12.34.56.10)并在该公共 IP 上公开一些服务。我遇到的问题是,我无法从我的 DD-WRT 路由器或连接到此路由器的任何设备访问该服务,甚至无法 ping 我邻居的公共 IP。

当我使用不同的互联网连接时,我可以毫无问题地访问此服务,所以我 100% 确定这个问题只存在于我的 DD-WRT 路由器后面。

我的路由表如下所示:

root@DD-WRT:~# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         12.34.56.1      0.0.0.0         UG    0      0        0 vlan2
12.34.56.0      0.0.0.0         255.255.255.0   U     0      0        0 vlan2
127.0.0.0       0.0.0.0         255.0.0.0       U     0      0        0 lo
169.254.0.0     0.0.0.0         255.255.0.0     U     0      0        0 br0
192.168.1.0     0.0.0.0         255.255.255.0   U     0      0        0 br0
192.168.66.0    192.168.66.2    255.255.255.0   UG    0      0        0 tun0
192.168.66.2    0.0.0.0         255.255.255.255 UH    0      0        0 tun0

有什么想法可以开始解决这个问题吗?

答案1

我也不是专家。我写这篇文章是因为我的 ISP 也有类似的设置(WAN 作为/24子网),路由表也类似。不同之处在于它可以工作。我甚至可以嗅探来自或发往我的一些“邻居”的数据包(但不是全部;我认为这些邻居与我共享一个集线器)。

traceroute正如我所料,我的“邻居”显示了单跳。

就你的情况而言,你和邻居之间似乎没有单跳连接,或者某些透明设备出于某种原因将你们分开。无论哪种情况,根据你获得的这些 DHCP 设置,你的 ISP 配置并不完全符合我的预期。ISP 方面存在一些特殊情况。ISP 应该做的正确事情可能是:

  • 允许您和您的邻居通过集线器、交换机等透明设备进行一跳通信,这将使其成为一个常规子网;或者
  • 允许您和您的邻居通过网关进行两跳通信。

您可以自行尝试

上述第二点并不意味着你完全不能通过网关与邻居通信现在。您可能会被允许,也可能不被允许,网关可以以任何方式配置。重点是:使用您当前的路由表,您不会尝试这样做。

路由表的第二行(12.34.56.0 …)告诉路由器,每当它需要向邻居发送数据包时,它都应该使用邻居的 IP 发送数据包硬件 (MAC) 地址作为目标。硬件地址最初是未知的,因此路由器会广播该地址。这永远不会到达邻居,您就陷入困境。

尝试暂时从路由表中删除第二行:

route del -net 12.34.56.0 netmask 255.255.255.0 dev vlan2

并让默认的那个起作用。您发送给邻居的每个数据包都将发送到他或她的 IP,但发送到网关的硬件地址(类似于您与外界通信时的情况)。现在网关的工作就是传递这个数据包。它可能会也可能不会这样做。

就我而言,如果我删除了正确的路由规则,我仍然可以联系到我的“邻居”;traceroute显示跳数,中间节点是我的 ISP 网关。问题在于响应:它们直接发往我的硬件地址,因为我的“邻居”未改变路由表。这对我来说有用,但对你却没用。所以你的邻居必须用同样的方法他们的路由表,然后可能工作。

我碰巧拥有我的一个“邻居”的管理员权限。我更改了它的路由表以及我的路由表。然后我确认wireshark数据包在两个方向上都通过网关(使用其硬件地址)跳跃。

如果这对你和你的邻居有用,那么就以某种方式使这个更改永久生效。当然,这是一种解决方法,如果你的 ISP 更改配置会更好。

相关内容