Когда я выполняю «busybox route» на CM12, я получаю следующее:
localhost / # busybox route
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
192.168.100.0 * 255.255.255.0 U 0 0 0 wlan0
Шлюз по умолчанию не определен. Практически он должен быть один, т.к. подключение к интернету работает исправно (это тоже задается в настройках Android WiFi). У других пользователей такое же поведение таблицы маршрутизации (как здесь ). Похоже, такое поведение началось с Android5, поскольку я вижу стандартные таблицы маршрутизации в стиле Linux (с шлюзом по умолчанию) в предыдущих версиях Android (например, KitKat) в нескольких местах в сети.
Кто-нибудь знает, как запросить/установить/изменить шлюз по умолчанию на CM12/Android 5 через оболочку/bash (не просто добавить еще один маршрут с помощью «добавления маршрута» — это больше о конкретном, который уже установлен)?
Мне потребовалось некоторое время, чтобы найти этот ответ, поэтому поделитесь здесь... Lollipop использует разные таблицы маршрутизации с правилами для каждого пользователя и/или интерфейса. Вот пример, когда я подключен к Wi-Fi:
root@hammerhead:/ # ip rule show
0: from all lookup local
10000: from all fwmark 0xc0000/0xd0000 lookup legacy_system
13000: from all fwmark 0x10063/0x1ffff lookup local_network
13000: from all fwmark 0x10064/0x1ffff lookup wlan0
14000: from all oif wlan0 lookup wlan0
15000: from all fwmark 0x0/0x10000 lookup legacy_system
16000: from all fwmark 0x0/0x10000 lookup legacy_network
17000: from all fwmark 0x0/0x10000 lookup local_network
19000: from all fwmark 0x64/0x1ffff lookup wlan0
22000: from all fwmark 0x0/0xffff lookup wlan0
23000: from all fwmark 0x0/0xffff uidrange 0-0 lookup main
32000: from all unreachable
root@hammerhead:/ # ip route show
# As in your example, there's no default route here
192.168.0.0/24 dev wlan0 proto kernel scope link src 192.168.0.42
root@hammerhead:/ # ip route show table wlan0
#But here you find it in the wlan0 table
default via 192.168.0.253 dev wlan0 proto static
192.168.0.0/24 dev wlan0 proto static scope link
Таблицы маршрутизации считываются по приоритету (первый столбец в отображении правила ip), используя первое совпадение.
Вы можете изменить данную таблицу маршрутизации, добавив 'table table_name' в конце команды ip route....
Таким образом, чтобы получить первый доступный шлюз по умолчанию:
for a in $(ip rule show | grep lookup | sed -r 's/.* lookup ([^ ]+).*/\1/'); do ip route show table $a | grep ^default | cut -d ' ' -f 2-5; done | head -1