Jak zmienić DNS połączeń mobilnych na Androidzie KitKat?

24

Chcę uniknąć cenzury ze strony mojego lokalnego dostawcy usług telefonii komórkowej (blokuje na przykład imgur z jakiegoś nieznanego powodu.

Zrzut ekranu
Zrzut ekranu (kliknij obraz, aby zobaczyć większy wariant)

Jestem pewien, że mogę to obejść, zmieniając mój DNS na Google DNS lub OpenDNS, ale nie jestem pewien, jak to zrobić w KitKat.

Info:
Device: Nexus 5
Android version: 4.4.2
Device status: rooted
użytkownik51893
źródło

Odpowiedzi:

18

Ok, przede wszystkim pełne ujawnienie : jestem autorem aplikacji, która jest teraz w sklepie Google Play i która umożliwia zmianę DNS dla dowolnego połączenia mobilnego na Androidzie 4.4. Aplikacja wymaga rootowania , kosztuje kilka dolców i nazywa się Zastąp DNS . Po usuniętej odpowiedzi powiedziano mi, że link do mojej aplikacji jest sprawiedliwy, o ile wyraźnie ją ujawnię.

Problem, który znalazłem w tej wersji Androida (4.4), polega na tym, że najwyraźniej ze względów buforowania zachowanie systemu zostało zmienione, aby przekierować wszystkie zapytania DNS do demona systemowego o nazwie netd(tutaj link do prezentacji związanej z siecią Android przed 4.4 obejmuje jednak część tych tematów).

Metoda getprop/ setpropjuż nie działa. Wartości te, po zmianie, są po prostu ignorowane przez netddemona.

Konieczna jest komunikacja bezpośrednio do demona za pośrednictwem /dev/socket/netdgniazda. W Androidzie jest teraz obecne narzędzie o nazwie, ndcktóre wykonuje dokładnie to zadanie.

Składnia rzeczy związanych z DNS jest następująca:

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

Aplikacja automatycznie odgadnie nazwę urządzenia sieciowego, a zastosowanie tych poleceń za każdym razem, gdy sieć komórkowa zostaje aktywowany.

MaxChinni
źródło
Poprawna składnia setifdns jest: ndc resolver setifdns <iface> <domains> <dns1> <dns2> .... Przykład:ndc resolver setifdns eth0 "" 8.8.8.8 8.8.4.4
Christian d'Heureuse
@ Christiand'Heureuse masz rację, zaktualizowałem odpowiedź, dziękuję.
MaxChinni
13

„Rozwiązałem” ten problem za pomocą reguły iptables, aby przekazać wszystkie połączenia portu 53 do zamierzonego serwera DNS; moje doświadczenia z Androidem 4.4.2 z próbą modyfikacji ustawień DNS podczas połączenia z 3G były dokładnie takie, jak opisał Leo; nieznajomość wartości w getprop | grep dns [0-9] \]: i dhcpd.conf.

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

Powód jest taki, jak opisano tutaj: http://forum.xda-developers.com/showpost.php?p=44722857&postcount=6 Wszystkie aplikacje wykonują wyszukiwania DNS przez netd przez gniazdo unix / dev / socket / dnsproxyd. Wątek ten opisuje również, dlaczego właściwości systemowe są ignorowane.

Aby to cofnąć, zrób

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

, znajdź numer linii odpowiadający udp dpt: 53 to: xxx.xxx.xxx.xxx: 53 i wykonaj

iptables -t nat -D OUTPUT *linenumber*
Transfuzja
źródło
2
Dzięki! podsumowanie przyczyny: Google rozgrywa wyścig zbrojeń z blokadami reklam. starali się wyłączyć obecne środki blokowania reklam działały, a blokery reklam przeniosły się do innego, podczas gdy wszyscy użytkownicy (niezależnie od korzystania z blokera reklam lub nie) będą na zawsze zirytowani tym ruchem google. ... Myślałem, że wszyscy wiedzieli, że walka z blokerami reklam była już głupim ruchem. głupie google. (również AFWALL aplikacji opensource to wygodny sposób łatwego dodawania tej niestandardowej reguły)
gcb
AfWall + wiki o tym, jak zastosować niestandardową regułę iptables w ten sposób
betatester07
1

Niestety, może to być obecnie niemożliwe, jednak można wypróbować Zmieniacz DNS . Może to działać, jeśli jesteś zrootowany, ale nie ma żadnych gwarancji.

Dobrą usługą DNS do użycia byłaby publiczna usługa DNS Google. Tutaj bardzo dobrze sprawdza się w przypadku tego rodzaju problemów.

Jeśli to nie zadziała, szukaj odpowiedzi. Dobrą stroną dla takich rzeczy jest XDA Developers . Zwykle mają wiele odpowiedzi na różne pytania dotyczące Androida.

pirogogle
źródło
1

Jestem na KitKat Cyanogenmod 11, co oznacza, że ​​jestem zrootowany domyślnie. Mimo to mogę jedynie zgłosić awarię:

1. metoda:

Kiedy spróbuję adb shellz

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

a następnie przetestuj, do którego adresu IP hjfdkhfjkyuiwnwetbyebvtwgqwdi.tk rozwiązywane jest ... Otrzymuję odpowiedź NXDOMAIN, co oznacza, że ​​nie pochodzi ona od serwera nazw OpenDNS, który ustawiłem (który zwróciłby odpowiedź z alternatywnym adresem IP, aby ci pomóc).

Kiedy robisz

getprop | grep dns

Zobaczyłbym tylko to, co skonfigurowałem. Jednak podczas przełączania z Wi-Fi na telefon komórkowy (3G lub 4G / LTE) widzę adresy IP, które rozpoznaję jako przypisane do mojego operatora komórkowego. Aplikacje takie jak „DNSwitch” lub „DNS Changer” mogą automatycznie ustawiać te resolwery automatycznie przy zmianie sieci. Jednak to, co getpropdonosi, nadal nie jest tym, co naprawdę robi rozstrzyganie.

Druga metoda [a]:

Innym sposobem, który próbowałem, jest modyfikacja /system/etc/dhcpcd/dhcpcd-hooks/20-dns.confzestawu rzeczy tam naprawionych (ale pamiętaj, że nazwy sieci i liczba programów tłumaczących mogą się różnić). Bezskutecznie.

Druga metoda [b]:

I w /system/etc/dhcpcd/dhcpcd.confI usunąłem parametr, aby zaakceptować resolwery przy negocjowaniu DHCP. Bez powodzenia.

3. metoda:

Do tej pory jedyną rzeczą, która trochę by działała, było użycie „biednego człowieka VPN”, użycie aplikacji „SSH Tunnel”, użycie SOCKS4, ale używając tego nie do końca uzyskałem dobry wynik.

Wznawianie:

Wygląda na to, że albo DNS jest ustawiony gdzie indziej, albo wszystkie są przekazywane (przejmowane), gdy tylko sieć będzie mobilna.

Jak to możliwe? Czy to kolejny brudny sposób na zapewnienie przewoźnikom narzędzia do niszczenia neutralności sieci?

W twoim przypadku twoje pytanie było z tego powodu. Czy masz SSH, aby wypróbować, czy SSHTunnel jest alternatywnym sposobem obejścia cenzury twoich przewoźników?

Lew
źródło
Znalazłem sposób na obejście bloku, ale jest on uciążliwy i dla każdego przypadku z osobna. Jestem zrootowany, więc mam dostęp do pliku hosts. Następnie szukałem bezpośrednich adresów IP imgur, a następnie ręcznie wprowadzałem te wartości do pliku hosts. Na razie problem rozwiązany.
user51893,
1

Dzisiaj spotkałem ten sam problem i dzięki Transfusion. Próbowałem opracować aplikację „ DNS forwarde r”, aby to wypracować. Nie zmienia serwera DNS w systemie, ale przesyła zapytania DNS do innego serwera. To obejście działa dobrze dla mnie na Kitkat (Nexus 5 / 4.4.3 i Moto Razr / CM11). Mam nadzieję, że może to również pomóc innym.

użytkownik64656
źródło
To faktycznie działa, nie jestem pewien, dlaczego zostałeś przegłosowany
Warszawa
0

Obecnie nie sądzę, aby można było zmienić DNS w danych mobilnych. Ale jeśli Twój telefon jest zrootowany, możesz korzystać z aplikacji takich jak Ustaw DNS .

Karan Raj Baruah
źródło
Niestety, wydaje się, że ta aplikacja nie obsługuje Androida 4.3 i nowszych :( Z opisu aplikacji: „PROSZĘ NIE INSTALOWAĆ W SYSTEMIE ANDROID 4.3 W CHWILI, ZOSTAŁY PROBLEMY ZE SPOSOBEM, W JAKI SPOSÓB DZIAŁANIE DNS ZOSTAŁO ZMIENIONE W Jądrze. WYCIĄGAŁEM Z RYNKU DLA URZĄDZEŃ 4.3. ”
user51893,
Twoje pytanie mówi, że potrzebujesz go dla Androida KitKat, który jest Androidem 4.4. * Natomiast Android 4.3 to Jellybean.
Karan Raj Baruah
Już otworzyłem stronę aplikacji w sklepie Play na moim urządzeniu, a na samej górze jest napisane: „Twoje urządzenie nie jest kompatybilne z tą wersją”. Jestem więc pewien, że problem nie ustępuje od wersji 4.3 do KitKat.
user51893
Według często zadawanych pytań polecanie aplikacji nie jest tak naprawdę częścią tej witryny. Odpowiedziałem na pytanie, czy Android może to zrobić natywnie. Polecam samodzielnie przeszukać Sklep Play.
Karan Raj Baruah
Wskazówka: odwiedzając stronę aplikacji w AppBrain, znajdziesz kilka alternatyw (prawy górny róg 4). Należy jednak pamiętać, że większość rozwiązań w tym sektorze wymaga dostępu do konta root.
Izzy