Andrey Stolyarov

Андрей Викторович Столяров: сайт автора

UPD: Вопрос прояснён, всем спасибо!

Созрел вопрос, от ответа на который зависят далеко идущие архитектурные решения, разбираться самому сейчас некогда, есть более насущные проблемы. Наверняка кто-то из тех, кто сюда на сайт часто заходит, знает ответ.

В Linux'е есть такой модуль tuntap. Андроид — это вроде Linux, но не совсем. Вот насколько сложно написать такое мобильное, чтоб его, приложение, которое поднимет прямо на телефоне tun-интерфейс и весь трафик, кроме явно указанных адресов (количеством в общем случае более одного) зароутит в него? И сразу же туда же второй юзкейс: IPv4й роутинг не трогаем, а интерфейс делаем дефолтным для IPv6, ну или роутим туда (на интерфейс, без next-hop'а) некую IPv6'ю подсетку.

В норме для всего этого нужен root, на андроиде у нас обычно рута нет, но это не фатально, есть какая-то CAP'а для этого, хотя не все, конечно, знают, что такое эти CAPы. Но то, что это вроде бы технически осуществимо, не означает, что в реально существующем андроиде что-то такое предусмотрено.

Кто-нибудь знает, как там ситуация с этим?


From milkman (unverified) Mon Aug 26 12:21:25 2024 pencil

вроде Linux, но не совсем

>> вроде Linux, но не совсем

я использовал приложение termux на мобильнике, которая дает возможность программировать прямо на телефоне и запускать софт там же. При запуске открываеться консолька и вперед. Это позволяет писать софт под мобильник на удобном для программиста языке(по крайней мере доступны много популярных яп - си,питон,джава,баш(конечно же) и другие. через apt можно установить нужные компиляторы\интерпретаторы ), не создавая никаких apk файлов. Я так написал приложения, которые имеют вебморду и смог через браузер использовать его, зайдя на "127.0.0.1:8000" в браузере, плюс если есть второй телефон, то можна с него по вайфаю зайти на этот "сайт" и управлять (тут нужно будет уже на 192.168.X.Y открывать серв, а не на 127.0.0.1, это понятно). редактор текста и прочие тулы тоже устанавливаются. Возможно не полностью, но на gnulinux очень похож. Если нужны окна(не знаю захотите ли вы или нет), то есть гайд(вроде ничего особого) как vnc поднять в termux и присоединиться с настольного компа. Также есть плагины. Они, например, позволяют вывести на "рабочий стол" кнопки, кликая на которые будут запускаться скрипты. Также можно войти по ssh в мобилу. Поднимается демон sshd в termux, и через прогу adb подрубиться можно. в телефоне нужно usb debug мод сделать в настройках. Дальше на компе прокинуть порты командой "adb forward tcp:8022 tcp:8022" да заssh-чить в localhost:8022.

parent From Andrey V. Stolyarov profile Mon Aug 26 15:04:19 2024 pencil

userpic

Re: вроде Linux, но не совсем

Спасибо, конечно, за заботу, но вот я задал вполне конкретный вопрос, что из этой вашей простыни к нему имеет отношение? На обычном линуксе для доступа к /dev/net/tun требуется root, и никакие консольки, естественно, не помогут. На смартфоне root'а в норме нет.

Но вообще, похоже, как-то этот вопрос решается.

parent From milkman (unverified) Tue Aug 27 10:25:32 2024 pencil

Re: Re: вроде Linux, но не совсем

>> что из этой вашей простыни к нему имеет отношение

Да, это не сказать чтобы прямо связано, но рядом стоит. Я хотел донести инфу, что не объязательно писать все на java или котлин или %другой язык, который компилиться в запаковывается в apk% чтобы иметь рабочий софт на телефоне. У меня была нужда в написании софта под телефон и использование этого софта на телефоне, и termux решил это для меня. Вы написали такой пост и я решил вам сообщить, что есть еще другие способы написания софта под мобильник.

Вы писали "Но вообще, похоже, как-то этот вопрос решается".

Один из путей такой:

Если у вас получиться зарутить телефоне(если вы захотите), то возможно выйдет в termux поработать с /dev/net/tun ПРИ условии что у него(android) он существует в /dev, может в termux он по-другому называется( по крайней мере /dev/null там точно есть, я проверил:), но /dev/net я не нашел) или его там нет. (интереса ради) я termux команду "su" выдала ошибку и ссылку на сайт "androidcentral точка ком /root", где есть гайд как зарутить некоторые разные телефоны (это уже зависит от того какой у вас телефон/модель.)

А возможно такое на джаве и нужно писать, там же и права для приложения можно настроить (я хз, прав на "доступ в сеть" я еще не видел, может и не нужно никакий прав, а просто стандартные API юзать и все), и ей-пи-ай javaвский тонкий есть.

parent From Andrey V. Stolyarov profile Tue Aug 27 10:48:06 2024 pencil

userpic

Re: вроде Linux, но не совсем

Тут дело вот в чём. Я сам под андроид ничего делать не буду, если только мне за это не пообещают такую прорву денег, чтобы я при виде её офигел и согласился вообще на что угодно.

Меня интересовало буквально следующее. Я намерен сделать серверный софт под Linux, предполагающий, что с сервером (для доступа к нему) требуется установить VPN-соединение средствами самого этого софта, то есть буквально там одна софтина принимает VPN-соединение, а другая (или, возможно, несколько других, но я постараюсь их количество не раздувать; впрочем, возможно, что это будут уже готовые софты частично) предоставляет через этот VPN (и никак иначе) какие-то прикладные сервисы. Вот интересно мне стало, возможно ли будет кому-то другому (не мне, чур меня) для этого всего дела написать клиентское приложение для андроида. Обыкновенное приложение, не требующее никакого рутования.

Насколько я понимаю, ответ тут положительный. Реализация этого VPN как для сервера, так и для клиента будет доступна (видимо, на чистом Си), вроде бы такой код как-то там из всяких жабокотлинов подтянуть возможно, адаптировать под реалии андроида (например, с учётом того, что /dev/net/tun напрямую не открывается) вроде бы как-то тоже возможно. Это всё, что я хотел узнать :-)

From anon (unverified) Sun Aug 25 23:45:42 2024 pencil

Вопрос к публике про Android

> которое поднимет прямо на телефоне tun-интерфейс

Сам интерфейс в ядре Андроида есть, по крайней мере в его "оупенсорс" версии.

Напрямую читать/писать IP пакеты из него/в него программно можно, так делает, например, встроенный VPN сервис Андроида, дергая нативный (читай вендорский блоб) код для создания tun-интерфейса. По поводу второго юзкейса примеров навскидку не вспомнилось.

Ниже ссылка на пример использования tun-интерфейса непосредственно в коде Андроида.

https://android.googlesource.com/platform/frameworks/base/+/refs/tags/android-9.0.0_r47/services/core/jni/com_android_server_connectivity_Vpn.cpp#60

parent From anon (unverified) Mon Aug 26 19:01:41 2024 pencil

Re: Вопрос к публике про Android

Продолжим, так сказать, препарирование.

> Вот насколько сложно написать такое мобильное, чтоб его, приложение

Если рассматривать потенциально быстрый вариант "чисто потыкать как оно там" и без рута, то тогда "одобренный" вендором способ взаимодействия с этим интерфейсом — базовый класс VpnService и хелпер класс VpnService.Builder, оба Kotlin / Java.

Дальше разрешают: назначить адрес (IPv4/IPv4), DNS, роуты, ага, тут кажется касаемо вашего первого юзкейса, оба семейства доступны, можно целиком запретить/разрешить семейство, выставить блокирующий/неблокирующий режим, прокси, то есть в чистом виде обертка над tun.

> которое поднимет прямо на телефоне tun-интерфейс и весь трафик, кроме явно указанных адресов (количеством в общем случае более одного) зароутит в него?

Если я все правильно понимаю, то именно так.

> И сразу же туда же второй юзкейс: IPv4й роутинг не трогаем, а интерфейс делаем дефолтным для IPv6, ну или роутим туда (на интерфейс, без next-hop'а) некую IPv6'ю подсетку.

Выглядит возможным, если я ничего не упускаю в их доке. Ссылки прилагаю, осторожно, тонны скриптов.

https://developer.android.com/reference/android/net/VpnService

https://developer.android.com/reference/android/net/VpnService.Builder

parent From Andrey V. Stolyarov profile Mon Aug 26 21:04:38 2024 pencil

userpic

Re: Re: Вопрос к публике про Android

Спасибо.

На самом деле я-то это вряд ли сам буду делать, меня интересовало, сможет ли это сделать кто-то другой. Судя по всему, сможет.

И да, интересно именно без рута, для лопоухих юзеров, которые как максимум могут справиться поставить apk или как там его, в общем пакет в обход "магазина".

parent From anon (unverified) Thu Aug 29 12:35:51 2024 pencil

Re: Re: Re: Вопрос к публике про Android

www.wireguad.com (почти весь сайт работает без js)
- исходники: да
- интерфейс tun: да
- userspace без рута: да
- отдельный apk: да

Его вроде ркн пытался блочить одно время, но потом перестал.

parent From Andrey V. Stolyarov profile Thu Aug 29 12:52:09 2024 pencil

userpic

Re: Вопрос к публике про Android

Ну раз они смогли, то и другие смогут, ок.


pencil

пояснение


Вы находитесь на официальном сайте Андрея Викторовича Столярова, автора учебных пособий по программированию и информационным технологиям.

Если вы искали сайт замечательного писателя-фантаста Андрея Михайловича Столярова, то вам, к сожалению, не сюда.

Андрей Михайлович Столяров в библиотеке Мошкова

Авторские права © Андрей Викт. Столяров, 2009 — 2024