Iptables android как включить

/4te.me

Столкнулся с проблемой раздачи интернета с Android-телефона на другие устройства, через мобильную точку доступа, у некоторых операторов. Оператор или вообще запрещает раздавать интернет, или берет за это деньги. Однако есть способы обойти этот запрет. Здесь расскажу, что у меня получилось.

Как оператор узнает, что интернет раздается

Оператор на своей стороне смотрит на значение TTL в заголовках IP-пакетов, приходящих от клиента. Схематично выглядит так:

Если на телефоне открывать в браузере какую-нибудь страничку, то провайдеру от телефона будут приходить пакеты с TTL 64. Такие пакеты он пропускает.

Но если включить мобильную точку доступа, подключиться к ней, например, с планшета, и на планшете открыть страницу, то, проходя через мобильную точку доступа на телефоне TTL будет уменьшаться на 1 и провайдеру будут уходить пакеты с TTL 63, которые он будет отбрасывать. Уменьшение TTL при прохождении через роутер — это стандартизированное поведение роутера, такое поведение предусмотрено стандартом RFC791.

В этой ситуации выхода два — либо на планшете выставлять TTL 65, чтобы, проходя через телефон, провайдеру приходили пакеты с TTL 64, либо на самом телефоне делать так, чтобы он не уменьшал TTL.

Если wi-fi клиент — дектоп-машина с Windows или MacOS, то выставить TTL 65 можно одной командой.

Windows

Создать в реестре ключ

типа REG_DWORD со значением 65 (в десятичной системе)

MacOS

Команда в консоле:

Но если клиент планшет на iOS или другое устройство, где нельзя просто так выставить TTL, то придется воспользоваться вторым способом — заставить телефон не уменьшать TTL для проходящих через него пакетов. Это может быть не совсем просто.

Учим телефон не уменьшать TTL

Этот способ потребует root-права (инструкция) на android-телефоне или jailbreak на iOS. Т.к. я делал это на Android, то опишу как делать для него. Про iOS здесь инструкции не будет.

Для разных устройств, процедура будет отличаться, я постараюсь рассказать в чем будут заключаться эти отличия. В данном примере я использую OnePlus 3 и Android 8.0 Oreo

Итак, у нас есть Android телефон с root-правами. Узнаем, умеет ли ядро системы работать с TTL. Для этого смотрим содержимое двух файлов на телефоне (например с помощью приложения ES Проводник, оно умеет смотреть системные файлы):

В обеих должно быть упоминание TTL. В моем случае в ip_tables_targets упоминания ttl не было. Это значит, что ядро не умеет изменять TTL. Чтобы его научить этому, нам понадобится из исходников собрать модуль ядра и загрузить его в телефон.

Как собрать модуль ядра

  • ОС — Linux или MacOS (можно собрать и на Windows — см.ниже)
  • исходники ядра для конкретного устройства
  • toolchain определенной версии и опредленной архитектуры

Я собирал модуль на Windows, но используя, Ubuntu-подсистему в Windows 10. Как ее включить я писал здесь. Если у вас не Win10, то придется ставить Ubuntu на VirtualBox-машину.

Для своего OnePlus 3 я брал исходники ядра здесь — https://github.com/OnePlusOSS/android_kernel_oneplus_msm8996 (msm8996 — это модель процессора Qualcomm Snapdragon 820 MSM8996). Исходники для Android 8.0 Oreo в ветке QC8996_O_8.0.0

Для других Oneplus-ов можно взять их рядом — https://github.com/OnePlusOSS. Для других моделей телефонов надо искать исходики где-то в интернете или на сайте производителя.

Toolchain — это утилиты для сборки кода под опредленную платформу. Узнать какая именно нужна для вашего телефона можно так:

В моем случае это aarch64 . Из этого вывода также понадобится версия gcc: 4.9 и версия ядра: 3.18.66-perf+

Далее идем сюда — https://android.googlesource.com/platform/prebuilts/gcc/linux-x86/ и скачиваем нужный тулчейн. Версии для MacOS можно найти также по этой ссылке. В моем случае я скачал aarch64-linux-android-4.9 , здесь aarch64 и 4.9 совпадает с теми версиями которые мы узнали выше.

Теперь идем в консоль и готовимся к компиляции. Установим необходимые тулзы и склонируем репы с тулчейном и исходниками ядра в домашнюю папку:

В исходниках ядра смотрим в папку arch и подбираем нужную архитектуру. В моем случае в этой папке, нет aarch64 , но есть arm64 . Это то же самое, просто называется по другому. Буду использовать эту архитектуру. Указываем ее и путь до бинарей тулчейна в переменных окружения:

Теперь надо создать конфиг для будущей сборки. Возможные варианты конфигов в моем случае лежат в папке с исходниками ядра в arch/arm64/configs (вместо arm64 может быть ваша архитектура). Вспоминая версию ядра, которая установлена в телефоне, выбираю конфиг msm-perf_defconfig :

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

После того как конфиг создан, нам надо внести в него изменения, чтобы нужный нам модуль для фиксации TTL скомпилировался. Для этого выполняем:

Появится интерактиваная утилита, в которой нужно найти нужный модуль.

Переходя по дереву внутрь, и, найдя TTL Target support , нажать M, чтобы указать, что нужно скомпилировать этот модуль.

Сохраняем конфиг, выходим и собираем ядро с модулями:

Если ошибок не было, то в папке с исходниками должен появится файл net/netfilter/xt_HL.ko

Вот мой скомпилированный файл для OnePlus 3, Android 8.0.0 — xt_HL.ko. Можно сразу взять его, если совпадает модель телефона и версия системы.

Копируем его на телефон, и через adb shell пытаемся включить его (чтобы в adb shell работал su, надо в /system/build.prop добавить строку ro.debuggable=1 , например с помощью ES Проводника):

Если модуль загрузился, можно пробовать зафиксировать TTL:

И наконец, добавляем в автозагрузку телефона скрипт, который будет включать фиксацию TTL:

Такой скрипт я положил в /sdcard/fixttl.sh , и с помощью приложения ScriptManager, добавил в автозагрузку.

Всё! Теперь с этого телефона можно раздавать интернет!

Источник

iptables TTL mangle на андроидфоне

Почему так? Не хватает модуля в ядре? Может есть какое нибудь другое решение?

Да, не хватает модуля iptables_mangle. Другое решение — не трогать ttl на телефоне.

как тогда сделать, чтобы ОпСоС не мог понять, что я пользуюсь тетерингом?

А как ОпСоС поймет, если ты не через его сети в инет ходишь?

а, там в чем-то другом дело

Это я видел, но на ttl это никак не влияет.

А какая разница, понимает он это, или нет? Если он блокирует трафик с неправильным TTL, смени опсоса. Голосуй рублём.

Я бы с удовольствием, если бы мог. Многим наверно сложно это представить, но в России до сих пор есть места, где опсос всего один.

Ну, можешь им позвонить и поинтересоваться, почему не работает услуга, за которую ты заплатил денег. Будут качать права — скажи, что пойдёшь в роспотребнадзор.

Мде. Задал вопрос в техническом разделе, получил совет пригрозить опсосу роспотребнадзором. Похоже, в этом весь ЛОР.

А что, нельзя собрать модуль из исходников?

А с чего ты решил, что тебя детектят по ттл?

Можно. Если производитель не зажал исходники ядра. Можно вообще Cyanogenmod поставить. Вот только ТС не указал модель телефона. И потом, поход в роспотребнадзор в данном случае, IMHO, более правильный. А если ТС захочет воткнуть симку в модем, который воткнут в роутер? Да, многие роутеры, наверно, способны править TTL. А вдруг не все?

Ваще мне тут среди дня пришла по поводу этого треда мысль — манглить можно на другой машине, а телефон только как внешний роутер использовать.

все клиенты используют в качестве шлюза x86-роутер. Кстати, он может быть виртуальный, если все правильно сделать.

А если клиент всего один, можно манглить прямо на нем?

Можно, конечно, а телефон все равно тоже используется? Только есть вероятность, что с телефона ttl будет уходить не таким, каким с компа, так что надо точно знать, как именно манглить.

А ещё если с телефона и компа вдруг пойдут одновременно пакеты на разные адреса, но с одного исходящего порта, то теоретически провайдер это тоже может отследить :3

получил совет пригрозить опсосу роспотребнадзором

Это хороший совет на попытку найти техническое решение нетехнической проблемы.

Пусть лучше ТС расскажет, кто у него на аватарке :3

Источник

Iptables android как включить

Для функционирования программы необходимы права root пользователя.

Краткое описание:
Брандмауэр на Android.

Описание:
Является последователем Droidwall изначально созданный разработчиком Родриго Zechin Rosauro. Приложение было закрыто, и не правильно функционировать на Android версии 4.x.
Использует iptables для ограничения работы приложений в интернете и добавяет безопасности для Android устройств. Android Firewall имеет все возможности Droidwal.

Русский интерфейс: Да

Сообщение отредактировал CyberBob — 24.10.15, 10:32

Не согласен насчет неработоспособности Droidwall на 4.Х Сейчас использую и работает как часы

Сообщение отредактировал frostbird — 02.02.13, 17:50

Android Firewall Donate 2.1.0

What’s in this version:
[size=16] [/size] Invert option added for Data/Wifi for users who swap between Whitelist/Blacklist.
[size=16] [/size] Profiles functionality added.
[size=16] [/size] Notifications no longer appear for updated apps.
[size=16] [/size] Menu overhaul. Menu now more user friendly.
[size=16] [/size] Translations updated. Thanks to all who helped with those. Joffrey, Alex, iptux, and Hiroki.

Читайте также:  Hard reset android для чего

This app has NO advertisements.

Android Firewall Donate 2.1.0.apk ( 352.64 КБ )

Не забыли включить брандмауэр (верхняя строчка всплывающего меню, галка должна стоять)?

Действительно гораздо лучше дроидвола. На некоторых прошивках 4.х дроидвол работает некорректно (у меня жутко тормозил интернет).
С этим проблем вообще никаких. Плюс опции для роуминга и поддержка профилей. :i-m_so_happy: Вощим, я доволен как слон.

Ещё раз проверил:
1. Выбран режим белый список.
2. Ни одна галочка на приложениях не стоит.
3. Брендмауэр включен и правила применины.

В результате:
По wi-fi всё блокирует нормально, а вот 3g или EDGE не блокирует совсем.

У меня телефон с двумя сим, может дело в этом?

з.ы.
У меня работает только Mobiwol. Но там принцип блокировки другой.

Сообщение отредактировал SPRITE_ASUS — 07.02.13, 06:12

Пресешёл недавно с Droidwall.
Сразу плюс — сохраняются настройки.

Не могу разобраться с профилями. Они на запоминают галки.
Выбираю другой профиль — он пустой. Настраиваю, переключаю профиль — на первый — теперь там пусто. Соответственно, если снова перейти на второй= там будет пусто.

Changes in version 2.1.3
Widget issues seen by some users should now be corrected.
Issue where firewall rules don’t do anything when Mobile Data Limit is enabled has been corrected.
Searching by app name has been added.

Изменения в версии 2.1.3
Виджет вопросов, рассматриваемых некоторые пользователи теперь должны быть исправлены.
Вопрос, где правила брандмауэра ничего не делать, когда Мобильные Данные Ограничения включена была Исправлена.
Поиск по app именем был добавлен.
(Первод яндекса)

Android Firewall_2.1.3.apk ( 362.41 КБ )

Сообщение отредактировал ars1995 — 23.02.13, 17:20

Объясните, как пользоваться правилами. При переключения между ними все галки оказываются сброшенными.
Также не радует, что прога часто вылетает.
Из-за отстуствия преимуществ (точнее, их неработоспособности) данной проги, вероятно, снова вернусь на Droidwall.

Сообщение отредактировал ShuriC — 04.03.13, 11:16

AFWall+ работает у меня на двух симочнике

Changes in version 2.1.5
Fix for UI issue with VPN checkboxes
Изменения в версии 2.1.5
Исправлена проблема с UI флажки VPN

Источник

Универсальный метод обхода запрета Yota раздавать интернет с телефона или собираем модуль ядра Android

Старые методы и их недостатки

Я думаю, никому уже не интересно читать во второй раз (а может быть и в третий), о том, как Yota определяет, пользуется ли человек телефоном в режиме модема или точки доступа. «Зачем нам ещё одна статья?» — спросите вы.

Дело в том, что методы обхода, приведённые по ссылкам, не позволяют настроить телефон таким образом, чтобы позже при подключении любых устройств не потребовалось ничего настраивать заново. Кроме того, пользователь будет испытывать серьёзные неудобства, если он подключает несколько устройств с разными TTL. Придётся как минимум менять TTL на одном из них.

Именно эти причины мотивировали меня копать дальше в поисках ответа на вечный вопрос «Как же всё-таки нахаляву раздать интернет всему офису?». И найти такой ответ удалось (только для android, у меня нет яблока).

Готовая программа

Когда я узнал, что Yota следит за TTL, то предположил, что наверняка где-то в других странах есть провайдеры, которые поступают так же. Пробуем ввести TTL в поиске Play Market’а.

Я был прав: тут же нашлась программа TTLEditor. Очень приятно, что она мало того, что бесплатная, так ещё и с открытым исходным кодом.
Пользоваться очень просто: выбрать интерфейс (лучше всего выбирать интерфейс через который телефон связан с провайдером, у меня это rmnet0) и нажать кнопку OK. Можно также поставить программу срабатывать при загрузке телефона.

Только одна проблема возникла: программа выдала ошибку «TTL update failed». Прежде чем ругать автора в комментариях и минусовать на Play Market’е, я решил почитать исходный код.

Примечание. Возможно, на вашей модели телефона программа заработает сразу. Значит вам сильно повезло, закрывайте эту статью и радуйтесь жизни.

Причина ошибки

Основное действие программы — запуск от имени root следующей команды:
iptables -t mangle -A POSTROUTING -o -j TTL —ttl-set
Много мозгов не нужно, чтобы понять, что делает эта команда (к тому же в программе написано об этом): она устанавливает заданное значение TTL всем пакетам, проходящим через определённый интерфейс (то есть как раз то, что нам требуется).

Я попробовал выполнить команду вручную и увидел вот такую ошибку: iptables: No chain/target/match by that name. Пара минут гугления показала, что эту ошибку iptables готов выдать почти на любые неверные параметры. Гуглим применительно к TTL и что-то всё же находим. Смотрим, насколько подходящую информацию мы нашли.

Читайте также:  Впс офис для андроид что это такое

Команда cat /proc/net/ip_tables_matches выдаёт список, в котором есть ttl, то есть проверять TTL наше ядро умеет. А вот в списке, который выдаёт команда cat /proc/net/ip_tables_targets , нет TTL, поэтому модифицировать TTL наше ядро не умеет. Сдаваться перед таким наглым сговором мобильных провайдеров и производителей мы не станем, поэтому идём собирать модуль ядра, которого не хватает.

Я думаю, на этом этапе пользователи CyanogenMod уже злобно похихикивают, но мне не хотелось так просто отказываться от штатной системы, а хотелось добавить именно в неё новые возможности (даже не заменяя ядро).

Отступление

Далее я предполагаю, что читатель умеет пользоваться Linux, понимает, что такое ядро и модули ядра, а также знает, как с помощью adb перекидывать файлы (adb push/pull) и как открыть на компьютере терминал телефона (adb shell). Если нет — срочно в гугл! Если да — не забудьте включить отладку по USB.

Из чего собирать и чем

Это самый сложный шаг: нужно найти подходящий кросс-компилятор и исходники ядра. Старайтесь искать именно для своего телефона, так как иначе, скорее всего, ничего не заработает (а об этом станет известно только на последнем шаге). Я сделал несколько неудачных попыток, допустив ошибку именно на этом этапе.

Модель моего телефона Sony Xperia Z1 Compact, операционная система моего компьютера Ubuntu 14.04. Ниже на их примере я покажу, как можно действовать.

  • Команда cat /proc/version может подсказать, какая версия gcc использовалась для сборки ядра на телефоне (у меня: 4.7).

  • Скачиваем подходящий кросс-компилятор (toolchain). Я нашёл его здесь. Выполняю на компьютере команду:
    и он у меня в папке arm-eabi-4.7 (для клонирования git-репозитория не забудьте установить git).

  • Номер сборки прошивки можно посмотреть в настройках телефона «О телефоне». У меня: 14.4.A.0.108.
    Найти нужные исходники ядра удалось в соответствующем архиве здесь и в репозитории здесь. Я взял из архива, потому что раньше отыскал.
    Если я хоть что-то понимаю в мире лицензий, то производитель обязан предоставлять исходные коды ядра, работающего на андроидофоне.

Настройка и сборка

Те, кто сталкивается с процессом сборки ядра впервые, не поддавайтесь панике, с гуглом мы богоподобны всегда.

  • Для начала, открываем консоль в папке с исходниками ядра и настраиваем среду окружения, чтобы ядро собиралось добытым кросс-компилятором:
    На конце переменной среды CROSS_COMPILE должен находиться общий префикс большинства (или всех) исполняемых файлов в папке bin.

  • Затем нужно создать для вашей модели телефона дефолтную конфигурацию ядра (файл .config ). Нужная для этого команда обычно написана в каком-нибудь README поблизости. В моём случае, в папке с исходниками ядра был файл README_Xperia .

  • А вот теперь нужно сделать шаг, который обычно не приводится в описаниях сборки ядра для Android.
    Откроется конфигуратор ядра.

    Жмём «/» и вводим в поиск «TARGET_TTL».

    Ага, теперь стало ясно, где находится нужная нам возможность ядра. Переходим к ней в конфигураторе и нажимаем кнопку «M». Это значит, что мы хотим скомпилировать эту возможность как модуль ядра.

    Выходим из конфигуратора, сохраняя изменения.

  • Собираем ядро и модули:
    Если произошли какие-то ошибки, то это значит, что вы, скорее всего, нашли неподходящие исходники ядра или кросс-компилятор.

  • Нужный нам собранный модуль находится здесь: net/netfilter/xt_HL.ko

Использование модуля на телефоне

Перекидываем модуль xt_HL.ko на телефон и пытаемся подключить его к ядру командой insmod .
Если эта команда выдаёт ошибку, то подробности можно узнать в выводе команды dmesg (скорее всего, это будет конфликт версий ядра и модуля или что-то похожее — это значит, что были взяты неподходящие исходники ядра или кросс-компилятор).

Если команда insmod выполнится успешно, то значит модуль удалось подключить к ядру (проверить можно командой lsmod ).
После этого попробуем запустить команду, которую безуспешно пытался использовать TTLEditor. Ошибку не выдаёт? Значит правило добавилось в список. Можно проверить командой iptables -t mangle -L :

Пробуем раздавать интернет любым устройствам и радуемся.

Настройка автозагрузки

Остался последний шаг: сделать так, чтобы иметь возможность раздавать интернет всегда, когда захочется.

Создадим файл setup_ttl_editing.sh со следующий содержимым:

Закидываем его на телефон, ставим программу Script Manager и в ней настраиваем, чтобы скрипт запускался при загрузке системы и от пользователя root.

Всё настроено, можно забыть о проблеме раздачи интернета с телефона!

Примечание. Программа TTLEditor нам не нужна. Всё необходимое уже написано в скрипте.

Заключение

Я не буду писать «йота, не будьте жадинами», потому что по сравнению со многими другими мобильными провайдерами они всё-таки достаточно щедрые. Я лучше скажу: йота, оставайтесь такими же как вы есть.

Источник

Оцените статью