Як змінити DNS мобільних з'єднань на Android KitKat?


24

Я хочу уникати цензури свого місцевого мобільного провайдера (він блокує imgur, наприклад, з незрозумілих причин.

Знімок екрана
Знімок екрана (натисніть на зображення для збільшення варіанта)

Я впевнений, що я можу це обійти, змінивши мій DNS на Google DNS або OpenDNS, але я не дуже впевнений, як це досягти на KitKat.

Info:
Device: Nexus 5
Android version: 4.4.2
Device status: rooted

Відповіді:


18

Гаразд, насамперед повне розкриття інформації : я є автором програми, яка зараз знаходиться в Google Play Store, і яка дозволяє змінювати DNS для будь-якого мобільного з'єднання на Android 4.4. Додаток вимагає root , коштує пару доларів і називається Override DNS . Мені сказали, що вже видалена відповідь - це справедливо посилання на мою програму до тих пір, поки я це чітко виставляю.

Проблема, яку я виявив у цьому випуску Android (4.4), полягає в тому, що, мабуть, з причин кешування, поведінку системи було змінено, щоб перенаправити всі запити DNS на системний демон, який називається netd(ось посилання на презентацію, пов’язану з мережею Android перед 4.4, проте охоплює частину цих тем).

getprop/ setpropМетод більше не працює. Ці значення при зміні netdдемоном просто ігноруються .

Потрібно спілкуватися безпосередньо з демоном через /dev/socket/netdрозетку. В Android зараз присутній інструмент під назвою, ndcякий виконує саме цю роботу.

Синтаксис матеріалів, пов’язаних з DNS, такий:

# ndc resolver flushif <iface>
# ndc resolver flushdefaultif
# ndc resolver setifdns <iface> <domains> <dns1> <dns2>
# ndc resolver setdefaultif <iface>

Додаток автоматично вгадує ім'я мережевого пристрою і застосовує ці команди кожного разу , коли мобільна мережа активується.


Правильний синтаксис setifdns є: ndc resolver setifdns <iface> <domains> <dns1> <dns2> .... Приклад:ndc resolver setifdns eth0 "" 8.8.8.8 8.8.4.4
Крістіан d'Heureuse

@ Christiand'Heureuse ти маєш рацію, я оновив відповідь, дякую.
MaxChinni

13

Я "вирішив" цю проблему за допомогою правила iptables для пересилання всіх з'єднань порту 53 на призначений DNS-сервер; мій досвід роботи на Android 4.4.2 зі спробою змінити настройки DNS під час підключення до 3G був точно таким, як описав Лео; незнання значень у getprop | grep dns [0-9] \]: та dhcpd.conf.

iptables -t nat -A OUTPUT -p udp --dport 53 -j DNAT --to-destination 8.8.8.8:53

Причина описана тут: http://forum.xda-developers.com/showpost.php?p=44722857&postcount=6 Усі додатки здійснюють перегляд DNS через netd через сокет / dev / socket / dnsproxyd unix. Цей потік також описує, чому властивості системи ігноруються.

Щоб скасувати це, зробіть

iptables -t nat -L OUTPUT -n -v --line-numbers

, знайдіть номер рядка, який відповідає udp dpt: 53 to: xxx.xxx.xxx.xxx: 53, і виконайте

iptables -t nat -D OUTPUT *linenumber*

2
Спасибі! також короткий підсумок причини: Google грає у гонку озброєнь із блокаторами оголошень. вони намагалися вимкнути діючі засоби блокування реклами, а блокатори оголошень перейшли до іншого, тоді як усі користувачі (незалежно від того, використовували блокатор реклами чи ні) будуть назавжди роздратовані цим ходом google. ... Я вважав, що на сьогоднішній день всі знають, що боротьба з блокаторами реклами - це німий крок. дурний гугл. (також додаток з відкритим кодом AFWALL - це зручний спосіб легко додати це користувацьке правило)
gcb

AfWall + wiki про те, як застосувати власні правила iptables, як це
betatester07

1

На жаль, наразі це неможливо зробити, однак, можна спробувати DNS Changer . Це може спрацювати, якщо ви вкорінені, але гарантій немає.

Хорошим DNS-сервісом буде загальнодоступна служба DNS Google. Тут, як правило, дуже добре виправляються такі питання.

Якщо нічого з цього не працює, продовжуйте шукати відповіді. Хороший сайт для таких речей - це розробники XDA . Вони, як правило, мають багато відповідей на речі для Android.


1

Я на KitKat Cyanogenmod 11, це означає, що я за замовчуванням укорінений. Незважаючи на це, я можу повідомити лише про збій:

1-й метод:

Коли я пробую adb shellс

setprop net.rmnet0.dns1 208.67.222.222
setprop net.rmnet0.dns2 208.67.222.222
setprop net.rmnet1.dns1 208.67.222.222
setprop net.rmnet1.dns2 208.67.222.222
setprop net.rmnet2.dns1 208.67.222.222
setprop net.rmnet2.dns2 208.67.222.222
setprop net.dns1 208.67.222.222
setprop net.dns1 208.67.222.222

а потім перевірити, до якого вирішується IP hjfdkhfjkyuiwnwetbyebvtwgqwdi.tk ... Я отримую відповідь NXDOMAIN, це означає, що вона не надходила від встановленого мною сервера OpenDNS (який би повертав відповідь з альтернативним IP-адресою, щоб слугувати вам додає).

Коли робиш

getprop | grep dns

Я бачив би лише те, що налаштував. Однак при переході з WiFi на мобільний (3G або 4G / LTE) я бачу IP-адреси, які я визнаю призначеними для свого мобільного оператора. Такі програми, як "DNSwitch" або "DNS Changer", можуть автоматично встановити ці роздільники при зміні мережі. Однак те, що getpropповідомляє про мене, все ще не є тим, що справді робить рішення.

2-й спосіб [a]:

Ще один спосіб, який я спробував, - це модифікувати /system/etc/dhcpcd/dhcpcd-hooks/20-dns.confнабір речей, зафіксованих там (але будьте відомі мережеві назви та кількість розділювачів можуть відрізнятися). Без успіху.

2-й метод [b]:

І /system/etc/dhcpcd/dhcpcd.confя видалив параметр, щоб прийняти резолюції на DHCP-домовленості. Успіху також немає.

3-й метод:

Поки що єдине, що мало би попрацювало - це використання «бідолашної VPN», використання програми «SSH Tunnel», використання SOCKS4, але використовуючи це, я точно не отримав хорошого результату.

Резюме:

Здається, що або DNS встановлений в іншому місці, або всі передаються (викрадені), як тільки мережа стає мобільною.

Отже, як же? Це ще один брудний спосіб надати операторам інструмент для знесення нейтральності мережі?

У вашому випадку ваше питання було через це. Чи маєте ви SSH спробувати, чи SSHTunnel є альтернативним рішенням, щоб обійти цензуру ваших операторів?


Я знайшов спосіб обійти блок, але це громіздко і в кожному конкретному випадку. Я вкоренився, тому у мене є доступ до файлу хостів. Далі я шукав прямі IP-адреси imgur, потім вручну вводив ці значення у файл хостів. Наразі проблема вирішена.
користувач51893

1

Я зіткнувся з тією ж проблемою і сьогодні, завдяки Трансфузії. Я спробував розробити додаток " DNS forwarde r", щоб розробити його. Він не змінює dns-сервер у системі, але пересилає dns-запити на інший сервер. Це вирішення для мене добре працює на Kitkat (Nexus 5 / 4.4.3 та Moto Razr / CM11). Сподіваюся, це може допомогти і іншим.


Це насправді спрацьовує, не знаю, чому ти проголосував
воєнний початок

0

В даний час я не думаю, що існує спосіб змінити свій DNS на мобільних даних. Але якщо ваш телефон укорінений, ви можете використовувати такі програми, як Set DNS .


На жаль, цей додаток, здається, не підтримує Android 4.3 і вище :( Згідно з описом програми: "ВИМОГАЙТЕ НЕ ВСТАВЛЯЙТЬСЯ НА АНДРОІД 4.3 ДЛЯ МОМЕНТА. В КЕРНЕЛІ ЗМІНУВАННЯ ПРОБЛЕМИ, ЩО РОБОТИ ДНС. Я МАЄТЬСЯ З РИНКУ ЗА 4,3
ПРИСТРІЙ

У вашому запитанні сказано, що він вам потрібен для Android KitKat, який є Android 4.4. * Тоді як Android 4.3 є Jellybean.
Каран Радж Баруа

Я вже відкрив сторінку додатка в магазині Play на своєму пристрої, і в самому верху написано: "Ваш пристрій не сумісний з цією версією". Тож я впевнений, що проблема зберігається від версії 4.3 до KitKat.
користувач51893

Рекомендовані додатки насправді не є частиною цього сайту відповідно до FAQ. Я відповів на питання, чи може Android це зробити оригінально. Рекомендую самостійно шукати в Play Store.
Каран Радж Баруа

Підказка: Відвідавши сторінку додатків у AppBrain, перелічено декілька варіантів (справа вгорі 4). Зауважте, що для більшості рішень у цьому секторі потрібен кореневий доступ.
Іззі
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.