我有一台设备的 IP 地址为 192.168.1.110,而网络的其余部分为 192.168.0.x。路由器为 192.168.0.1。192.168.1.110 已连接到此路由器。其他设备通过 WiFi 连接到 192.168.0.5(Raspberry Pi 接入点),该接入点已连接到 192.168.0.1 上的同一路由器。
我正在尝试从 192.168.0.x 上的设备访问 192.168.1.110。我尝试添加一条可以在路由表中看到的路由,但没有成功。
使用sudo route -n -v add 192.168.1.110 192.168.0.1
ping 和 SSH 超时。
使用sudo route -n -v add 192.168.1.110 192.168.0.5
SSH 超时和 ping 显示以下内容
PING 192.168.1.110 (192.168.1.110): 56 data bytes
Request timeout for icmp_seq 0
92 bytes from pi.hole (192.168.0.5): Redirect Host(New addr: 192.168.0.1)
Vr HL TOS Len ID Flg off TTL Pro cks Src Dst
4 5 00 0054 1369 0 0000 3f 01 e4b7 192.168.0.202 192.168.1.110
我也尝试将路由器掩码更改为 .254.0,将 Raspberry Pi 接入点退出循环,但我仍然无法访问 .1.110 设备。
如果我将路由器 IP 更改为 .1.x 和其中一个 .0.x 设备,那么我可以访问 .1.110 设备,但无法访问任何 .0.x 设备。我确信这应该很简单,但我搞不懂 - 我遗漏了什么?
答案1
数据包必须双向传输,因此双方都需要进行多种配置更改。
例如,如果您将网络掩码更改为 /23 (255.255.254.0),在设备 A 上这样做是不够的 - 是的,它能够直接到达设备 B,但设备 B 会将回复发送到哪里?如果 B 仍然认为它在 /24 上,那么它将继续尝试通过网关发送回复。
类似地:即使您添加了通往设备 B 的正确路由,也无法告诉设备 B 应该将回复发送到设备 A 的位置。它仍然会使用它已经知道的信息。
假设你根本无法重新配置设备 B,但至少可以读它的配置,有 1½ 种方法可以使其工作。
如果您知道有问题的设备中配置了哪个“默认网关”IP 地址,请在路由器的 LAN 接口上将该地址添加到现有地址旁边。(在某些路由器中,这可能称为“别名”,而在其他路由器中,这可能称为“虚拟 IP”。)
例如,如果设备想要使用 192.168.1.254 作为其网关:
ifconfig en0 192.168.1.254 netmask 255.255.255.0 alias # for FreeBSD ip addr add 192.168.1.254/24 dev eth0 # for Linux
另一个常见地址是 192.168.1.1。发现正确地址的一种方法是查看设备发出的 ARP 请求。
如果设备没有配置网关根本,但您至少知道它的子网大小,您可以 1) 使用同一子网中的任意地址执行上述操作,2) 配置路由器,以便它伪装(SNAT)所有通信。
这样,设备就会认为它只与自己的子网进行通信。
我不知道该怎么做,但它会涉及到
pf
NATiptables
规则。