Ich möchte eine Zensur durch meinen lokalen mobilen ISP vermeiden (er blockiert zum Beispiel imgur aus unbekannten Gründen.
Screenshot (Bild anklicken für größere Variante)
Ich bin mir ziemlich sicher, dass ich dies umgehen kann, indem ich mein DNS in Google DNS oder OpenDNS ändere, aber ich bin mir nicht sicher, wie ich das auf KitKat bewerkstelligen soll.
Info:
Device: Nexus 5
Android version: 4.4.2
Device status: rooted
Ok, zuerst einmal die vollständige Offenlegung : Ich bin der Autor einer App, die jetzt im Google Play Store erhältlich ist und die es Ihnen ermöglicht, DNS für jede mobile Verbindung auf Android 4.4 zu ändern. Die App benötigt Root , kostet ein paar Dollar und heißt Override DNS . Mir wurde in einer jetzt gelöschten Antwort gesagt, dass es fair ist, auf meine App zu verlinken, solange ich sie klar darlege.
Das Problem, das ich bei dieser Version von Android (4.4) gefunden habe, ist, dass anscheinend aus Caching-Gründen das Systemverhalten geändert wurde, um alle DNS-Anfragen an einen System-Daemon namens umzuleiten netd
(hier ist ein Link zu einer Präsentation im Zusammenhang mit Android-Netzwerken vor 4.4, die , deckt jedoch einen Teil dieser Themen ab).
Die getprop
/ setprop
Methode funktioniert nicht mehr. Wenn diese Werte geändert werden, werden sie vom netd
Daemon einfach ignoriert.
/dev/socket/netd
Es ist notwendig, über den Socket direkt mit dem Daemon zu kommunizieren . In Android ist jetzt ein Tool namens vorhanden ndc
, das genau diese Aufgabe übernimmt.
Die Syntax für das DNS-bezogene Zeug lautet wie folgt:
# ndc resolver flushif <iface>
# ndc resolver flushdefaultif
# ndc resolver setifdns <iface> <domains> <dns1> <dns2>
# ndc resolver setdefaultif <iface>
Die App errät automatisch den Namen des Netzwerkgeräts und wendet diese Befehle jedes Mal an, wenn ein Mobilfunknetz aktiviert wird.
ndc resolver setifdns <iface> <domains> <dns1> <dns2> ...
. Beispiel:ndc resolver setifdns eth0 "" 8.8.8.8 8.8.4.4
Ich habe dieses Problem "gelöst", indem ich eine iptables-Regel verwendet habe, um alle Port-53-Verbindungen an einen beabsichtigten DNS-Server weiterzuleiten; Meine Erfahrung mit Android 4.4.2 beim Versuch, DNS-Einstellungen zu ändern, während ich mit 3G verbunden war, war genau so, wie Leo es beschrieben hat; Unkenntnis der Werte in getprop |grep dns[0-9]\]: und dhcpd.conf.
iptables -t nat -A OUTPUT -p udp --dport 53 -j DNAT --to-destination 8.8.8.8:53
Der Grund ist wie hier beschrieben: http://forum.xda-developers.com/showpost.php?p=44722857&postcount=6 Alle Apps führen DNS-Lookups durch netd über einen /dev/socket/dnsproxyd-Unix-Socket durch. Dieser Thread beschreibt auch, warum Systemeigenschaften ignoriert werden.
Um dies rückgängig zu machen, tun Sie es
iptables -t nat -L OUTPUT -n -v --line-numbers
, suchen Sie die Zeilennummer, die udp dpt:53 to:xxx.xxx.xxx.xxx:53 entspricht, und führen Sie dies aus
iptables -t nat -D OUTPUT *linenumber*
Leider ist dies derzeit möglicherweise nicht möglich, es ist jedoch möglich, DNS Changer auszuprobieren . Dies kann funktionieren, wenn Sie gerootet sind, aber es gibt keine Garantien.
Ein guter DNS-Dienst wäre der öffentliche DNS-Dienst von Google. Es funktioniert hier in der Regel sehr gut für diese Art von Problemen.
Wenn nichts davon funktioniert, suchen Sie weiter nach Antworten. Eine gute Seite für solche Dinge ist XDA Developers . Sie neigen dazu, viele Antworten auf Dinge für Android zu haben.
Ich bin auf KitKat Cyanogenmod 11, was bedeutet, dass ich standardmäßig gerootet bin. Trotzdem kann ich nur Fehler melden:
1. Methode:
Wenn ich das adb shell
mit versuche
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
und teste dann, zu welcher IP hjfdkhfjkyuiwnwetbyebvtwgqwdi.tk auflöst ... Ich bekomme eine NXDOMAIN-Antwort, was bedeutet, dass sie nicht von dem von mir eingestellten OpenDNS-Nameserver stammt (der eine Antwort mit einer alternativen IP zurückgeben würde, um Ihnen zu dienen, fügt hinzu).
Beim machen
getprop | grep dns
Ich würde nur sehen, was ich konfiguriert habe. Wenn ich jedoch von WLAN auf Mobilfunk (3G oder 4G/LTE) umschalte, sehe ich IPs, die ich als meinem Mobilfunkanbieter zugewiesen erkenne. Apps wie "DNSwitch" oder "DNS Changer" können diese Resolver bei einem Netzwerkwechsel automatisch zurücksetzen. Was getprop
mich jedoch meldet, ist immer noch nicht das, was wirklich die Auflösung bewirkt.
2. Methode [a]:
Ein anderer Weg, den ich versucht habe, ist das Ändern und Festlegen /system/etc/dhcpcd/dhcpcd-hooks/20-dns.conf
von dort festgelegten Dingen (aber beachten Sie, dass Netzwerknamen und die Anzahl der Resolver unterschiedlich sein können). Ohne Erfolg.
2. Methode [b]:
Und in /system/etc/dhcpcd/dhcpcd.conf
habe ich den Parameter entfernt, um Resolver bei der DHCP-Aushandlung zu akzeptieren. Auch kein Erfolg.
3. Methode:
Bisher würde das einzige, was ein wenig funktionieren würde, die Verwendung eines "poor man VPN", die Verwendung der App "SSH Tunnel", die Verwendung von SOCKS4 sein, aber damit habe ich nicht gerade ein gutes Ergebnis erzielt.
Weitermachen:
Es scheint, als ob entweder DNS woanders gesetzt ist oder alle weitergeleitet (gekapert) werden, sobald das Netzwerk mobil ist.
Also, wie kommt es? Ist es ein weiterer schmutziger Weg, Netzbetreibern ein Werkzeug zur Verfügung zu stellen, um die Netzneutralität zu zerstören?
In Ihrem Fall war Ihre Frage deswegen. Haben Sie SSH zum Ausprobieren, ob SSHTunnel eine alternative Lösung ist, um die Zensur Ihrer Netzbetreiber zu umgehen?
Ich bin heute auf das gleiche Problem gestoßen, und dank Transfusion. Ich habe versucht, eine App " DNS-Forwarder " zu entwickeln, um es zu lösen. Es ändert den DNS-Server auf dem System nicht, sondern leitet DNS-Abfragen an einen anderen Server weiter. Diese Problemumgehung funktioniert gut für mich auf Kitkat (Nexus 5/4.4.3 und Moto Razr/CM11). Hoffe es kann auch anderen helfen.
Derzeit glaube ich nicht, dass es eine Möglichkeit gibt, Ihr DNS auf Ihren mobilen Daten zu ändern. Aber wenn Ihr Telefon gerootet ist, können Sie Apps wie Set DNS verwenden .
Irfan Latif