Как посмотреть таблицу маршрутизации на андроид
OpenVPN на Android: прозрачное переключение между WiFi и «Мобильными данными» без разрыва соединений
Здравствуйте, разрешите поделиться своим опытом.
Есть приложения критичные к разрывам связи, переподключение происходит мучительно и вообще не всегда. Поставил перед собой цель, сделать прыжки маршрутов и физических подключений прозрачными, что бы связь была постоянной и TCP коннект не рвался.
И поможет в этом старый, добрый и ламповый «openvpn». Но установка и настройка — тема давно избитая, трогать её, здесь не планируется.
Что нам нужно:
- Сервер Linux с постоянным IP (vps, vds, dedic или просто домашний)
- Openvpn на сервере и клиенте, настроенные на работу по UDP.
- iproute2 — собственно для фокуса нужна работающая утилита ip на Android.
- Так же потребуется внести изменения в исходный код openvpn-settings c последующий сборкой apk.
Приступим
Начнем с правки «openvpn-settings». Суть в том, что при любом изменении в сетевой конфигурации нативному демону openvpn посылается команда SIGUSR1, что заставляет его отключаться и подключаться по новой. Для наших целей это вред, но нам все равно желательно иметь возможность выполнять некоторые действия при изменении сетевой конфигурации.
Кто-то скажет, но ведь есть persist-tun. Отвечаю, работает не так, как хочется, openvpn дергает скрипты «лежать-вставать» каждый раз, когда приходит SIGUSR1. И в принципе отличить по имеющимся переменным перезапуск от старта, без выкрутасов почти не возможно. Это подрывает всю затею, а хочется просто и надежно.
Поэтому мы заменим отправку SIGUSR1 на вызов shell скрипта.
Скачиваем исходники командой
hg clone code.google.com/p/android-openvpn-settings
Открываем файл
\src\de\schaeuffelhut\android\openvpn\service\ManagementThread.java
Находим функцию public void sendSignal(int s) её мы и будем редактировать.
Комментируем отправку SIGUSR1 и вставляем вызов нашего скрипта с правами рут.
Файл скрипта у нас будет называться точно так же как и файл подключения, но дополненный расширением sh.
Должно получится так:
Всё, можно собирать, подписывать, устанавливать. Перед установкой обязательно деинсталлируйте старый «openvpn-setting» из системы.
Далее проверим конфигурации подключения openvpn.
Сервер
На сервере требуется внести директиву float, поскольку мы будем менять физическое соединение, а с ним и IP. Так же сервер должен транслировать внутренний адрес нашего клиента во внешнюю сеть. Для настройки этого мне удобней использовать директивы up и down.
up «/bin/sh /etc/openvpn/androidupdown»
down «/bin/sh /etc/openvpn/androidupdown»
Скрипт должен быть примерно таким:
Клиент
Во первых надо убрать директиву redirect-gateway, если она есть. Но задать up и down с указанием скрипта, который выполнит настройку маршрутов. Если вы помните, мы условились, что имя файла будет повторять имя конфигурации с добавление sh. Да, мы будем вызывать один и тот же скрипт и из демона, и из монитора.
Если конфигурация называется «testconfig.ovpn», то пусть будет так:
up «/system/bin/sh /sdcard/openvpn/testconfig.ovpn.sh»
down «/system/bin/sh /sdcard/openvpn/testconfig.ovpn.sh»
Здесь стоит немного пояснить.
Мы создаем альтернативную таблицу маршрутизации под номером 100 в которой указываем шлюзом по умолчанию vpn туннель. И добавляем правило маршрутизации, которое заворачивает весь трафик в нашу таблицу под номером 100, раньше чем он попадет в основную таблицу под именем main.
В альтернативной таблице есть маршрут, который выталкивает пакеты предназначенные для сервера, обратно в цепочку правил. Далее они попадут в основную таблицу маршрутизации. Там они смогут найти основной маршрут физического соединения. Но, а если не найдут, такое случатся во время реконнектов, то это не страшно. Openvpn может потерпеть некоторое время, но разумеется не вечно. Только сообщения в логах, напомнят об отсутствии связи непродолжительное время.
Не забывайте скрипты должны заканчиваться переводом строки.
Для разрешения запуска скриптов на Android, необходимо установить «Built-in + script» в «Preferences» которые вызываются по долгому тапу на подключении. Теперь можно пробовать.
В результате тестирования оказалось, что некоторые программы сами проверяют состояние сети и пытаются переподключаться во время любых изменений. Тут либо просить авторов исправить ситуацию. Либо самостоятельно де компилировать и исправлять. В любом случае закрытие TCP сессии происходит, не по таймауту, а так как положено.
Буду рад любой критике и замечаниям. Желаю стабильного коннекта!
Русские Блоги
Просмотр таблицы маршрутизации Android
linux может просматривать таблицу маршрутизации с помощью команды route,
Android не распознает команду маршрута, вы можете использовать ip route для просмотра таблицы маршрутизации Android
список IP-ссылок // Показать ссылку
ip address show // Отображаемый адрес
ip route show // Отображение маршрута
ip neigh show // Отображение таблицы сопоставления ARP
ip neigh delete [IP] dev [dev] // Удаляем кеш ARP
ip rule list // Показать приоритет правила таблицы маршрутизации
ip route list table [table] // Отображаем таблицу маршрутизации
ip rule add from [IP] table [table name] // Добавить новую таблицу маршрутизации
ip route add [IP / defaulte] via [src IP] dev [dev] table [table name] // Добавляем записи в таблицу маршрутизации
ip route flush cache // Обновить кеш маршрута
ip route add [IP / default] scope [scope / global] nexthop via [gateway] dev [dev] weight [weight] nexthop . // Балансировка нагрузки
Интеллектуальная рекомендация
FFMPEG и VS2010
Скомпилируйте ffmpeg — это болезненная вещь, которая обычно используется напрямуюZeranoe FFmpeg Builds。 Если вы используете эту версию, вам нужно обратить внимание на абзац о помощи FFMPEG: То есть фа.
Встроенная идея + Maven + Sprilboot Project Project Prience Integration MVC
Используйте идею + Maven + Springboot Создание новых проектов (1) Интегрированный MVC 1. Создайте новый файл проекта -> Новый -> Проект maven —> next 2. Заполните идентификатор организации и.
Redis Обзор и общие инструкции
Redis использует два — инструкции Окружающая среда: Redis-5.0.3, Centos605 Обзор Redis — это высокоскоростная база данных памяти NoSQL, которая является системой хранения структуры данных в памяти, а .
Режим цепочки режима дизайна режима
основная концепция Что такое цепь Цепь представляет собой коллекцию узлов. Каждый узел цепи может быть разделен и реорганизован. Режим цепочки обязанностей Сделайте несколько объектов иметь возможност.
Проникновение в сеть/динамическое сетевые сети/видео Shangyun Gateway Easynts Network Platform Номер учетной записи и пароль нельзя войти в систему, как решить
Easynts, как Gateway Video Cloud, имеет такие функции, как сети видеопотоков, удаленная работа и техническое обслуживание. До запуска он будет протестирован отделом департамента исследований и разрабо.
Могу ли я получить запись таблицы маршрутизации в Android?
Есть ли способ получить запись в таблице маршрутизации в Android?
Пожалуйста, поделитесь информацией ..
Это можно получить через АБР . Вы можете получить таблицу маршрутизации с помощью
Вы также можете выполнять эти команды из своей программы. Я нашел этот пост, который обсуждает этот вариант. Однако ответа нет. Если бы вы могли подробно рассказать о том, что именно вы хотите, я могу отредактировать свой ответ, чтобы попытаться помочь больше.
Возможно сложная, но, возможно, полезная ссылка 🙂
Использование моста Android-устройств (ADB)
Откройте командную строку (окна) или терминал (mac & linux)
Сделайте каталог cd (change directory) в каталог инструментов платформы, который находится в каталоге android sdk
adb shell cat /proc/net/route
./adb shell cat /proc/net/route
Я нашел для себя более полезным и более легким в обработке разбора.
Android не использует только одну таблицу маршрутизации, поэтому просмотр стандартной или основной таблицы не всегда поможет вам!
Если вы запустите команду «список правил ip», вы увидите, сколько там таблиц маршрутизации; «Lookup nnnn» – это таблица. Затем вы можете посмотреть конкретную таблицу с «ip show table 1006», например.
Боюсь, я не могу сказать, какая таблица маршрутизации обязательно та, на которую вы хотите посмотреть, извините.
Могу ли я получить запись в таблице маршрутизации в Android?
Есть ли способ получить запись в таблице маршрутизации в Android?
Поделитесь пожалуйста информацией ..
6 ответов
Его можно получить через ADB. Вы можете получить таблицу маршрутизации с помощью
Вы также можете выполнять эти команды из своей программы. Я нашел это сообщение, в котором обсуждается этот вариант. Однако ответа нет. Если бы вы могли уточнить, что именно вы хотите, в конце я могу отредактировать свой ответ, чтобы попытаться помочь больше.
Просто установите Termux или любой другой эмулятор терминала для Android и наслаждайтесь с оболочкой.
Android не использует только одну таблицу маршрутизации, поэтому просмотр таблицы по умолчанию или основной таблицы не всегда поможет вам!
Если вы запустите команду «ip rule list», вы увидите, сколько существует таблиц маршрутизации; «поиск nnnn» — это таблица. Затем вы можете посмотреть конкретную таблицу, например, «ip route show table 1006».
Боюсь, я не могу сказать вам, какая таблица маршрутизации обязательно та, на которую вы хотите посмотреть, извините.
Использование Android Device Bridge (ADB)
Откройте командную строку (windows) или терминал (mac и linux)
Сделайте cd (изменить каталог) в каталог platform-tools , который находится внутри android sdk каталог
adb shell cat /proc/net/route
./adb shell cat /proc/net/route
Я нашел для себя более полезным и легким в обработке парсинг.
Спасибо Paul M за подсказку !.
На моем Android 6.0.1 (LineageOS)
Показывает маршруты всех таблиц
Показывает таблицу маршрутов, которая используется, когда rmnet0 является активным интерфейсом (мобильные данные).
Показывает таблицу маршрутов, которая используется, когда wlan0 активен.
В «Параметры разработчика» можно оставить активным rmnet0, даже если активен wlan0. Но одновременно будет использоваться только один интерфейс (и одна таблица маршрутов).
Когда Wi-Fi подключен к сети, но не имеет интернет-соединения, интерфейс rmnet0 будет выбран в качестве основного, а таблица маршрутов будет использоваться из таблицы rmnet0.
Когда Wi-Fi имеет подключение к Интернету, wlan0 будет использоваться в качестве основного интерфейса, а «ip route show table wlan0» — как текущая таблица маршрутов.
Вы можете добавить или удалить маршрут из / в любую таблицу маршрутов, как обычно, с помощью команды ip, добавив «table xxx» в строку маршрута.
Все таблицы маршрутов будут перезаписываться каждый раз при включении / выключении интерфейса, продлении аренды и т. Д.
Могу ли я получить запись в таблице маршрутизации в Android?
Есть ли способ получить запись в таблице маршрутизации в Android?
Поделитесь пожалуйста информацией ..
Есть возможность получить через ADB . Вы можете получить таблицу маршрутизации с помощью
Вы также можете выполнять эти команды из своей программы. Я нашел этот пост, в котором обсуждается этот вариант. Однако ответа нет. Если бы вы могли уточнить, что именно вы хотите, в конце я могу отредактировать свой ответ, чтобы попытаться помочь больше.
Спасибо Paul M за подсказку !.
На моем Android 6.0.1 (LineageOS)
показывает маршруты всех таблиц
показывает таблицу маршрутов, которая используется, когда rmnet0 является активным интерфейсом (мобильные данные).
показывает таблицу маршрутов, которая используется, когда wlan0 активен.
в «Параметры разработчика» можно оставить активным rmnet0, даже если активен wlan0. Но одновременно будет использоваться только один интерфейс (и одна таблица маршрутов).
Когда Wi-Fi подключен к сети, но не имеет интернет-соединения, интерфейс rmnet0 будет выбран в качестве основного, а таблица маршрутов будет использоваться из таблицы rmnet0.
Когда Wi-Fi имеет подключение к Интернету, wlan0 будет использоваться в качестве основного интерфейса, а «ip route show table wlan0» — как текущая таблица маршрутов.
вы можете добавить или удалить маршрут из / в любую таблицу маршрутов, как обычно, с помощью команды ip, добавив «table xxx» в строку маршрута.
Все таблицы маршрутов будут перезаписываться каждый раз при включении / выключении интерфейса, продлении аренды и т. Д.