Хорошо, прежде всего полное раскрытие : я являюсь автором приложения, которое теперь есть в 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>
Приложение автоматически угадывает имя сетевого устройства и применяет эти команды каждый раз , когда мобильная сеть активируется.
ndc resolver setifdns <iface> <domains> <dns1> <dns2> ...
. Пример:ndc resolver setifdns eth0 "" 8.8.8.8 8.8.4.4
Я «решил» эту проблему, используя правило iptables для переадресации всех подключений порта 53 на предполагаемый DNS-сервер; мой опыт работы с Android 4.4.2 при попытке изменить настройки DNS при подключении к 3G был в точности таким, как описал Лео; игнорирование значений в getprop | grep dns [0-9] \]: и dhcpd.conf.
Причина описана здесь: http://forum.xda-developers.com/showpost.php?p=44722857&postcount=6 Все приложения выполняют поиск DNS через netd через сокет unix / dev / socket / dnsproxyd. Этот поток также описывает, почему системные свойства игнорируются.
Чтобы отменить это, сделайте
найдите номер строки, соответствующий udp dpt: 53 to: xxx.xxx.xxx.xxx: 53 и выполните
источник
К сожалению, это может быть невозможно сделать прямо сейчас, однако можно попробовать DNS Changer . Это может сработать, если вы root, но нет никаких гарантий.
Хорошей службой DNS будет общедоступная служба DNS Google. Это имеет тенденцию работать очень хорошо для подобных проблем прямо здесь.
Если ничего из этого не работает, продолжайте искать ответы. Хороший сайт для таких вещей - XDA Developers . У них, как правило, много ответов на вещи для Android.
источник
Я на KitKat Cyanogenmod 11, то есть по умолчанию у меня рут. Несмотря на это, я могу только сообщить о неудаче:
1-й метод:
Когда я попробую
adb shell
си затем проверьте, какой IP-адрес разрешает hjfdkhfjkyuiwnwetbyebvtwgqwdi.tk ... Я получаю ответ NXDOMAIN, то есть он не пришел с установленного мной сервера имен OpenDNS (который будет возвращать ответ с альтернативным IP, чтобы добавить вас).
При выполнении
Я бы видел только то, что настроил. Однако при переключении с 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 является альтернативным решением для обхода цензуры ваших операторов?
источник
Я столкнулся с той же проблемой сегодня, и благодаря переливанию. Я пытался разработать приложение " DNS forwarde r", чтобы разобраться с этим. Он не изменяет DNS-сервер в системе, но пересылает DNS-запросы на другой сервер. Этот обходной путь отлично работает для меня на Kitkat (Nexus 5 / 4.4.3 и Moto Razr / CM11). Надеюсь, что это может помочь и другим.
источник
В настоящее время я не думаю, что есть какой-либо способ изменить ваш DNS на ваших мобильных данных. Но если ваш телефон рутирован, вы можете использовать такие приложения, как Set DNS .
источник