在我的 Android 手机上,我有一个在用户空间中运行的 Debian 系统(apt、GNU 工具和其他软件在 chroot 中运行,可通过 ssh 访问),路由表似乎不完整。
输出ip route -all -details show
:
unicast 192.168.2.0/24 dev wlan0 proto kernel scope link src 192.168.2.108
unicast 192.168.43.0/24 dev p2p-p2p0-0 proto kernel scope link src 192.168.43.1
输出ip route get 1.1.1.1
:
1.1.1.1 via 192.168.2.1 via ??? ??? dev wlan0 src 192.168.2.108
cache
它从哪里来192.168.2.1
?这确实是正确的网关,但路由表输出没有显示它。我也可以到达外部地址。
质疑我的理智,我尝试了另一个工具,当它给我相同的输出时,我找到了一种直接询问内核的方法:
$ route -v
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
192.168.2.0 0.0.0.0 255.255.255.0 U 0 0 0 wlan0
192.168.43.0 0.0.0.0 255.255.255.0 U 0 0 0 p2p-p2p0-0
$ cat /proc/net/route
Iface Destination Gateway Flags RefCnt Use Metric Mask MTU Window IRTT
wlan0 0002A8C0 00000000 0001 0 0 0 00FFFFFF 0 0 0
p2p-p2p0-0 002BA8C0 00000000 0001 0 0 0 00FFFFFF 0 0 0
该设备正在“WiFi桥接”模式下运行,连接到WiFi网络并同时提供热点;因此有两个本地网络。内核是:
$ uname -a
Linux localhost 4.1.18-g0fcbc9f #1 SMP PREEMPT Thu Dec 28 10:57:06 CST 2017 armv7l GNU/Linux
这个神奇的默认路由来自哪里?
答案1
标准ip route
程序不知道选项-all
或-details
,因此您可能在这里有一个 Android 特定版本。
表中可能存在默认路由条目以外的路由条目。
假设您的ip
命令与标准兼容ip
,请运行
ip rule
您至少应该看到一个表格列表
0: from all lookup local
32766: from all lookup main
32767: from all lookup default
然后你可以检查它们中的每一个
ip route show table 32767
上面列表中的表编号依此类推。