Как изменить DNS мобильных подключений на Android KitKat?

24

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

Скриншот
Снимок экрана (щелкните изображение, чтобы увеличить его)

Я почти уверен, что смогу обойти это, изменив свой DNS на Google DNS или OpenDNS, но я не совсем уверен, как это сделать на KitKat.

Info:
Device: Nexus 5
Android version: 4.4.2
Device status: rooted
user51893
источник

Ответы:

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>

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

MaxChinni
источник
Правильный синтаксис setifdns является: ndc resolver setifdns <iface> <domains> <dns1> <dns2> .... Пример:ndc resolver setifdns eth0 "" 8.8.8.8 8.8.4.4
Кристиан д'Ореус
@ 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 через сокет unix / dev / socket / dnsproxyd. Этот поток также описывает, почему системные свойства игнорируются.

Чтобы отменить это, сделайте

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 + вики о том, как применить собственное правило iptables, как это
betatester07
1

К сожалению, это может быть невозможно сделать прямо сейчас, однако можно попробовать DNS Changer . Это может сработать, если вы root, но нет никаких гарантий.

Хорошей службой DNS будет общедоступная служба DNS Google. Это имеет тенденцию работать очень хорошо для подобных проблем прямо здесь.

Если ничего из этого не работает, продолжайте искать ответы. Хороший сайт для таких вещей - XDA Developers . У них, как правило, много ответов на вещи для Android.

pyrogoggles
источник
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-й способ [а]:

Другой способ, который я попробовал, - это модифицировать /system/etc/dhcpcd/dhcpcd-hooks/20-dns.confнабор фиксированных вещей (но помните, что сетевые имена и количество распознавателей могут отличаться). Безуспешно.

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

И в /system/etc/dhcpcd/dhcpcd.confя убрал параметр, чтобы принимать резольверы при DHCP-обсуждении. Также нет успеха.

3-й метод:

Пока единственное, что немного сработало бы, - это использовать VPN для бедных, использовать приложение «Туннель SSH», использовать SOCKS4, но при этом я точно не получил хороший результат.

Продолжить:

Похоже, либо DNS установлен в другом месте, либо все пересылаются (угоняются), как только сеть становится мобильной.

Итак, как получилось? Это еще один грязный способ предоставить операторам связи инструмент для разрушения сетевого нейтралитета?

В вашем случае ваш вопрос был из-за этого. Есть ли у вас SSH, чтобы попробовать, если SSHTunnel является альтернативным решением для обхода цензуры ваших операторов?

Лео
источник
Я нашел способ обойти блок, но это громоздко и в каждом конкретном случае. Я рутирован, поэтому у меня есть доступ к файлу hosts. Затем я искал прямые IP-адреса imgur, затем вручную ввел эти значения в файл hosts. Проблема решена на данный момент.
user51893
1

Я столкнулся с той же проблемой сегодня, и благодаря переливанию. Я пытался разработать приложение " DNS forwarde r", чтобы разобраться с этим. Он не изменяет DNS-сервер в системе, но пересылает DNS-запросы на другой сервер. Этот обходной путь отлично работает для меня на Kitkat (Nexus 5 / 4.4.3 и Moto Razr / CM11). Надеюсь, что это может помочь и другим.

user64656
источник
Это на самом деле работает, не уверен, почему вы проголосовали
Песня Войны
0

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

Каран Радж Баруа
источник
К сожалению, это приложение, похоже, не поддерживает Android 4.3 и выше :( Из описания приложения: «ПОЖАЛУЙСТА, НЕ УСТАНАВЛИВАЙТЕ НА ANDROID 4.3 ДЛЯ МОМЕНТА, ПРОБЛЕМЫ С ПУТИ ДИСТАНЦИОННОГО УПРАВЛЕНИЯ DNS ИЗМЕНЕНЫ В ЯДРЕ». Я вытащил его с рынка за 4,3 устройства. "
user51893
В вашем вопросе говорится, что он нужен для Android KitKat, который представляет собой Android 4.4. *, Тогда как Android 4.3 - это Jellybean.
Каран Радж Баруа
Я уже открыл страницу приложения в магазине Play на своем устройстве, и в самом верху написано: «Ваше устройство несовместимо с этой версией». Поэтому я уверен, что проблема сохраняется с версии 4.3 до KitKat.
user51893
Рекомендации часто не являются частью этого сайта в соответствии с часто задаваемыми вопросами. Я ответил на вопрос, может ли Android сделать это изначально. Я рекомендую поискать в Play Store самостоятельно.
Каран Радж Баруа
Подсказка: на странице приложений в AppBrain перечислены несколько альтернатив (правая верхняя часть 4). Однако обратите внимание, что большинство решений в этом секторе требуют корневого доступа.
Иззи