Встановіть DNS-сервер Android для мобільної мережі blog Блог Kuketz ІТ-безпеки
1. Параметри обрізані
З кожною версією Android Google додатково обмежує можливість адаптації DNS-сервера для мобільної мережі передачі даних. Однак я не хотів це прийняти, оскільки я мало довіряю DNS-серверам свого (стільникового) провайдера. Постачальники часто реєструють запити DNS, використовують/передають цю інформацію третім особам або цензурують виклики певних адрес. Досить причини для переходу на альтернативні DNS-сервери.

Якщо ви хочете слідувати цим інструкціям, ваш пристрій Android має бути вкоріненим, і ви вже повинні бути знайомі зі спеціальними сценаріями AFWall +. У цій статті я представляю вам два різні рішення, які "змушені" використовувати набори правил iptables.
2. Android та (мобільний) DNS-сервер
Ваш пристрій Android зазвичай має різні мережеві інтерфейси, так звані інтерфейси. Зв'язок у мережі WiFi відбувається, наприклад, через wlan0 Інтерфейс, дані для мобільної мережі передаються через інтерфейс rmnet0 (Позначення може змінюватися), а інтерфейс призначений для з'єднань VPN do0 зарезервований.
Для інтерфейсу wlan0 ви можете налаштувати DNS-сервер в налаштуваннях:
- Налаштування → WiFi → Довгим натисканням пальця на ваше активне з'єднання WiFi → Змінити мережу.
- Установіть прапорець "Показати розширені параметри", а потім виберіть "Статичні" для налаштувань IP.
- Прокрутіть вниз, поки не знайдете два налаштування "DNS 1" і "DNS 2".
- Введіть новий DNS-сервер для DNS 1 і DNS 2. Ось кілька пропозицій щодо безкоштовних і нецензурованих серверів DNS без реєстрації.
Однак для мобільного інтерфейсу (rmnet0) неможливо адаптувати DNS-сервер за допомогою графічного меню. Однак до Android 6.0.0 ви могли отримати доступ до термінал допомогти.
2.1 До Android 4.3
До Android 4.3 DNS-сервер для мобільного інтерфейсу (rmnet0) все ще можна було встановити командою:
Як тільки відбувається нове підключення (повторне підключення) до мобільної мережі передачі даних, ці команди повинні бути виконані знову. Вже тоді було сенсом працювати зі спеціальним сценарієм для AFWall +, який виконує команди знову щоразу, коли змінюється з'єднання даних або інтерфейс (LAN, WLAN, мобільні дані тощо) і передається разом із ним DNS-сервер постачальником мобільних телефонів перезаписує.
2.2 До Android 6.0.0 включно
Починаючи з Android 4.3 і до версії 6.0.0 включно, DNS-сервер для мобільного інтерфейсу (rmnet0) можна встановити за допомогою іншої команди (ndc). Однак команди різняться майже в кожній версії Android, і важко знайти правильний синтаксис. Наприклад, такий набір команд правильний для Android 6.0.0:
Щоразу, коли з’єднання змінюється (наприклад, WLAN -> мобільні дані), налаштування знову перезаписуються. Тому є сенс працювати з AFWall + і тут.
2.3 З Android 6.1.x
Пізніше з Android 6.1.x Google видалив усі команди, за допомогою яких можна впливати на мобільний DNS-сервер для інтерфейсу rmnet0. Тому DNS-сервери більше не можна змінювати за допомогою звичайних засобів; натомість потрібні спеціальні програми, такі як DNS Changer або Engelsiz. Однак у всіх згаданих інструментів є один головний недолік: вони ініціюють один місцеві VPN-тунелі впливають на DNS-сервери стільникового зв'язку - і вони також не є відкритими.
3. iptables та AFWall+
За допомогою спеціальних правил iptables та CustomScripts AFWall + вже можна було пересилати всі запити DNS на певний DNS-сервер - і "обходити" мобільний DNS-сервер:
Але фрагмент коду мав один недолік: сервер DNS був перезаписаний для всіх інтерфейсів, включаючи вашу домашню WLAN. Це особливо недоцільно, якщо ви фільтруєте рекламу та трекери у своїй мережі за допомогою пі-отвору або подібного рішення.
3.1 Рішення 1: Ваш власний DNS-сервер для інтерфейсу rmnet0
Рішення дуже просте: кожен раз, коли запит DNS (порт 53 TCP/UDP) надсилається на пристрій через rmnet0 Інтерфейс залишає (-o rmnet +), пакет відправляється на IP-адресу 85.214.20.141 - DNS-сервер цифрової відваги. Не має значення, який DNS-сервер встановлений вашим постачальником мобільних телефонів, наступні правила iptables "змушують" запит до обраного вами DNS-сервера для мобільного інтерфейсу:
3.2 Рішення 2: Ваш власний DNS-сервер для домашньої WLAN
Рішення 1 працює бездоганно, але, на мою думку, воно має невеликий недолік: якщо ви ввійдете в сторонні WLAN, вам, як правило, призначають DNS-сервер через DHCP. Однак особисто я також хотів би використовувати DNS-сервер на свій вибір в інших мережах WLAN. Я можу досягти цього за допомогою такого фрагмента коду:
Що тут відбувається? Усі запити DNS, які не надходять з домашньої мережі (192.168.150.0/24), пересилаються на DNS-сервер Digital Courage. Щоб це справді працювало, зовнішня мережа WLAN, звичайно, не повинна використовувати той самий діапазон IP-адрес (192.168.150.0/24), що і ваша домашня мережа. Однак якщо це так, тоді всі запити DNS просто передаються на DNS-сервер, переданий DHCP, - тому жодної перерви в повітрі.
З цим варіантом запити DNS у мобільній мережі завжди надходять на визначений вами DNS-сервер. Рішення 2 в основному гарантує лише те, що потрібний DNS-сервер також використовується в інших мережах WLAN.
Завдяки Марко із кімнати XMPP, який зробив вирішальний внесок у це друге рішення.
Примітка
3.3 Перевірка DNS-сервера
Потім потрібно перевірити набори правил iptables для власного сценарію AFWall +. Зрештою, існує лише один варіант, який завжди працює коректно: Підключіть свій смартфон Android до ПК за допомогою кабелю USB, а потім використовуйте adb:
На консолі ви побачите всі пакети, які надходять і виходять через порт 53. Це дозволяє чітко визначити DNS-сервер, який використовується в мобільній мережі - якщо rmnet0 активний, а wlan0 неактивний:
А також у WLAN - якщо wlan0 активний, а rmnet0 неактивний:
Іншим варіантом є онлайн-сервіси, які, однак, не завжди дають правильний результат:
4. Висновок
Рішення 1 має працювати на всіх пристроях, які мають доступ до iptables. Таким чином, вам не доведеться турбуватися командами терміналів у старих версіях Android, а ви можете просто використовувати iptables або AFWall + у поєднанні з CustomScripts.
Починаючи з Android 6.1.x, наскільки мені відомо на сьогоднішній день, у вас немає іншого вибору, як перезаписати мобільний DNS-сервер вашого оператора стільникового зв'язку, використовуючи представлені набори правил iptables. Особисто я використовую рішення 2, а також включив його у свій AFWall + CustomScript.
Джерела зображень:
Про автора
Мене звуть Майк Кукетц, і я пишу цей блог безпеки- і захист даних актуальний Спрощення тем для розуміння та доступності кожному.
У моїй фрілансі працює як Пентестер (Kuketz IT-Security) Я переходжу до ролі «хакера» і шукаю слабкі місця в ІТ-системах, веб-додатках та додатках. Крім того, я є Лектор з питань ІТ-безпеки в подвійному університеті в Карлсруе та, серед іншого, як автор для комп'ютерного журналу c't.
Блог Kuketz або моя особа регулярно представляються у ЗМІ (heise online, Süddeutsche Zeitung тощо).
Якщо ви хочете бути в курсі останніх публікацій, у вас є кілька варіантів підписатися на блог: