有办公室网络(带有单个 wifi 路由器)。我正在尝试将 android 设备(网络浏览器、telnet)连接到我的主机(均通过 wifi 连接到同一个路由器)。
路由器设置:
IP: 192.168.1.1
Mask: 255.255.255.0
在目标主机上
#ifconfig
eth2 inet addr:192.168.1.108 Bcast:192.168.1.255 Mask:255.255.255.0
# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.1.1 0.0.0.0 UG 0 0 0 eth2
169.254.0.0 0.0.0.0 255.255.0.0 U 1000 0 0 eth2
192.168.1.0 0.0.0.0 255.255.255.0 U 2 0 0 eth2
我的主机地址:192.168.1.108
Android设备地址:192.168.1.105
当我尝试从 android (2.x/4.x) (平板电脑/手机) ping 我的主机时,打印了以下消息:
From 192.168.1.105: icmp_seq=xx Destination Host Unreachable
我尝试在两台 Android 设备上使用“traceroute”工具跟踪到主机的路由。一台设备显示了自己的地址,但经过几次尝试后,它显示了目标地址和主机名。然后我尝试连接到目标主机上运行的 Web 服务,它已连接。
过了一段时间后,它无法再次连接,并且跟踪路由显示相同的“自己的”地址和主机名。
我无法强制其他 Android 设备使用“traceroute”显示目标主机名。
之前的 wifi 路由器也有同样的情况。
怎么了?为什么他们认为“192.168.1.108”属于不同的网络?
答案1
问题是 Android 没有将主路由表添加到其文件系统。
在这种情况下,从 Android ping 外部只能使用以下选项-I interface_number
,例如:
ping -I eth3 192.168.0.108
但是从外部 ping Android 不起作用。
为了解决这个问题,需要添加主路由表:
ip rule add from all lookup main pref 1
您可以找到添加的主路由表:
ip rule
0: from all lookup local
1: from all lookup main
10000: from all fwmark 0xc0000/0xd0000 lookup 99
13000: from all fwmark 0x10063/0x1ffff lookup 97
15000: from all fwmark 0x0/0x10000 lookup 99
16000: from all fwmark 0x0/0x10000 lookup 98
17000: from all fwmark 0x0/0x10000 lookup 97
以及路线条目:
ip route list table main
192.168.0.0/24 dev eth3 proto kernel scope link src 192.168.0.105
答案2
Linux 中有多个路由表。我的 Android 手机使用编号为 2 的“隐藏”路由表。
表 0 显示了每个条目:
ip route show table 0
您可以尝试将您的主机添加到表 2 中:
ip route add table 2 192.168.1.108 via 192.168.1.1
答案3
不确定这是否是您的问题,但有些 wifi 路由器和接入点具有“站点分离”或“无线隔离”功能,可限制连接的设备相互通信。启用此功能后,接入点将不会在不同的连接设备之间路由数据包:仅在设备和上行链路端口之间路由。
该功能适用于提供访客访问的商业网络,其中打印机、服务器和网络共享等服务都通过有线局域网连接,因此您实际上不需要无线-无线通信,它有助于将访客与敏感的商业网络分开。