LINUX.ORG.RU
ФорумMobile

Работа с сетью на поганом android 5+

 , , ,


0

1

Хотел сделать сетевой мост в android. Ядро всё что нужно поддерживает. Но обнаружил что даже если просто сменить адрес на rndis0, он перестаёт работать.
то есть после ifconfig rndis0 192.168.12.1 и ручной настройке адреса на другом конце пакеты не проходят
Знаю что там сделали какую-то наркоманию с сетевыми таблицами, но зачем это всё на мобильном устройстве?
В общем - вопрос: что надо сделать чтобы оно работало? dnsmasq сам смогу перенастроить как надо, с ним проблем пока вроде нет.
ip rule list выдаёт вот это:

1|root@XL140:/ # ip rule list
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
14000:  from all oif rndis0 lookup 1016
14000:  from all oif rndis0 lookup local_network
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
18000:  from all iif rndis0 lookup wlan0
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

как до смены адреса, так и после.
Смена адреса обратно тоже не помогает - то есть указание нового адреса что-то всё-таки стирает

★★★★★

Получилось сделать полурабочий мост. К сожалению, конечной цели я не добился, так как мост оказался неполноценным и ломает авторизацию.
Конфигурация такая:
В мосте rndis0 (usb интерфейс) и p2p0 (интерфейс от wifi direct)
В p2p-supplicant прописан ssid, psk, так что widi работает в режиме точки доступа
Вне моста wlan0, с которого принимается и раздаётся в мост интернет.
1. Добавить мост через btctl (в составе busybox), либо через ip link

busybox brctl addbr br-lan
ifconfig br-lan up

2. Через ndc организовать tethering на мосте:
ndc tether stop
ndc tether start 192.168.13.2 192.168.13.100
ndc tether interface add br-lan
ndc interface setcfg br-lan 192.168.13.1 24
ndc ipfwd enable

3. Добавить интерфейсы в мост
busybox brctl addif br-lan rndis0
ndc interface setcfg rndis0 0.0.0.0
busybox brctl addif br-lan p2p0
ndc interface setcfg rndis0 0.0.0.0

К сожалению с момента поднятия моста к точке доступа невозможно подключиться - не проходит авторизация.
Сам мост работает наполовину - я успешно могу пропинговать из rndis0 устройства, подключенные к p2p0, но пинг в обратном направлении не работает. ssh тоже работает только при подключении из rndis0 к p2p0. При этом wifi заметно тормозит - ssh подвисает полсекунды при наборе.

mittorn ★★★★★ ()
Ответ на: комментарий от darkenshvein

вряд ли. Тут именно что-то с маршрутизацией. Добавить маршрут на андройде банальным route add default gw 192.168.1.1 не выйдет, он просто проигнорирует

mittorn ★★★★★ ()
Ответ на: комментарий от mittorn

меняю через ifconfig, полёт нормальный. ты ядро пересобирать под это можешь или гемор? Просто разные вендоры разные опции могут поврубать. У андроида есть ряд опций в секурити, которые работают странно если криво сконфигурено ядро. Если можешь пересобирать, попробуй вырубить «android paranoid network». Но - оно рута зацеплять не должно, в дефолтном AOSP правила на сетку детектят по uid, прэтому там однозначно идентифицируют пакет с UID. Других нюансов там быть не должно. Никаких дополнительных изменений, если IP адрес не прописан в firewall нет. Таблица роутинга обычная. Так что это какая-то дополнительная security от вендора. Или есть какое-то особое отношение к rndis, но это не глядел, не знаю.

slapin ★★★★★ ()
Ответ на: комментарий от slapin

А другие интерфейсы есть?
У меня такое было на устройствах разных вендоров (nvidia, mediatek) - чтобы создать маршрут - его надо создать в другой таблице маршрутизации, а созданный через ifconfig маршрут не работает

mittorn ★★★★★ ()
Ответ на: комментарий от mittorn

wifi еще, оба работают одновременно, wifi через DHCP, USB ethernet - полностью вручную, обычный ethernet - сначала DHCP, потом руками. Всё в дефолтной таблице роутинга есть, дефолт идет через ethernet. Рутовые приложения пингуют все интерфейсы, юзерные - только wifi, но пакеты ходят через ethernet. Если убрать дефолт, появится дефолт на wifi и всё идет через него (он там очень плохо работает и это заметно сразу). Сразу скажу - AOSP дефолтный, не патченный (в процессе патчинга), девайс не эндюзерский, с консольками.

slapin ★★★★★ ()
Ответ на: комментарий от slapin

Стоп. У меня есть такая фигня на телефоне (правда только с сеткой от adb и когда включен «tethering» на wifi). У тебя ведь девайс класса «телефон»? Надо попробовать как телефон собрать...

slapin ★★★★★ ()
Ответ на: комментарий от slapin

Да, телефон. Правда, такое и на планшете было.
Ещё то, что всегда проявляется - если подключена только мобилбная сеть и подключить vpn вручную - то маршрут на него тоже надо особым способом создавать. На мобильной сети приоритет

mittorn ★★★★★ ()
Ответ на: комментарий от mittorn

Короче телефонная сборка не помогла.

# ip rule
0:	from all lookup local 
10000:	from all fwmark 0xc0000/0xd0000 lookup 99 
10500:	from all oif wlan0 lookup 1004 
13000:	from all fwmark 0x10063/0x1ffff lookup 97 
13000:	from all fwmark 0x100f0/0x1ffff lookup 1004 
14000:	from all oif wlan0 lookup 1004 
15000:	from all fwmark 0x0/0x10000 lookup 99 
16000:	from all fwmark 0x0/0x10000 lookup 98 
17000:	from all fwmark 0x0/0x10000 lookup 97 
19000:	from all fwmark 0xf0/0x1ffff lookup 1004 
22000:	from all fwmark 0x0/0xffff lookup 1004 
23000:	from all fwmark 0x0/0xffff lookup main 
32000:	from all unreachable
но таблицы 99, 1004, 97, 98 пустые. в дефолте -
default via 192.168.225.1 dev wlan0  proto static 
192.168.225.0/24 dev wlan0  proto static  scope link 
192.168.24.0/24 dev eth0  proto static  scope link 

Однако в телефоне с прошивкой от вендора (meizu) ситуация другая вывод ip rule такой же, однако расклад по табличкам другой (для чистоты эксперимента сброшено в дефолт без сим-карты): дефолт -

192.168.225.0/24 dev wlan0  proto kernel  scope link  src 192.168.225.209 

таблица 1004

default via 192.168.225.1 dev wlan0  proto static 
192.168.225.0/24 dev wlan0  proto static  scope link 

и если поменять IP адрес на wlan0 он уже не считается за wlan0, так как в дефолтной таблице прописан с src.

fwmark'и расставляет firewall и по ним идет маршрутизация, то есть нужно по идее или адрес менять везде, или выставлять андроидными костылями (ndc).

Нужно это я так понял для лучшего контроля ISP над тем, как используется девайс. Почему у меня это всё не так, я еще разбираюсь :)

slapin ★★★★★ ()
Ответ на: комментарий от slapin

Может там разница между userdebug/debug/eng/release сборками?

mittorn ★★★★★ ()

Сори за офтопик! У меня тоже пятая версия. Самая нехорошая из всех. Под неё больше заразы чем под все другие (и те что старше и те что новее). Она сама по себе неудачна. Если есть возможность - сделать то что нужно по сабжу, лучше с более новой версией. Будет меньше гемору, наверняка. Сочувствую, Бро, что попал как лох на эту пятёрку! У меня такое же попадалово (((

PahomUbuntu ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.