Android KitKat'ta mobil bağlantıların DNS'i nasıl değiştirilir?


24

Yerel mobil ISS'mden sansürden kaçınmak istiyorum (örneğin, bilinmeyen bir nedenden dolayı imguru engelliyor).

Ekran görüntüsü
Ekran görüntüsü (daha büyük değişken için resme tıklayın)

DNS'imi Google DNS veya OpenDNS olarak değiştirerek bunu çözebileceğime oldukça eminim, ancak bunu KitKat'ta nasıl başaracağımı tam olarak bilemiyorum.

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

Yanıtlar:


18

Tamam, ilk önce tüm açıklama : Ben şu anda Google Play Store'da olan ve Android 4.4'teki herhangi bir mobil bağlantı için DNS'yi değiştirmenizi sağlayan bir uygulamanın yazarıyım. App root gerektirir , birkaç dolara mal olur ve DNS geçersiz kıl olarak adlandırılır . Şimdi silinmiş bir cevapta, açık bir şekilde ortaya koyduğum sürece uygulamamla bağlantı kurmamın adil olduğu söylendi.

Ben Android'in bu sürümü ile buldu sorunu (4.4) görünüşe göre nedenleri önbelleğe için, yani sistem davranışı denilen bir sistem daemona tüm DNS sorgularını yönlendirmek için değiştirildi netdburada var ( bağlantı ağı Android'e ilişkin bir sunum 4.4 önce hangi Ancak, bu konuların bir kısmını kapsar).

getprop/ setpropYöntem artık çalışmıyor. Bu değerler değiştiğinde, netdarka plan programı tarafından göz ardı edilir .

/dev/socket/netdSoket üzerinden doğrudan arka planla iletişim kurmak gerekir . Android'de şimdi ndctam olarak bu işi yapan bir araç var .

DNS ile ilgili şeyler için sözdizimi şudur:

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

Uygulamanın otomatik olarak ağ cihazı adını tahmin ve bunlar bir mobil ağ aktive olur her zaman komutları uygular.


Setifdns doğru sözdizimi şöyledir: ndc resolver setifdns <iface> <domains> <dns1> <dns2> .... Örnek:ndc resolver setifdns eth0 "" 8.8.8.8 8.8.4.4
Christian d'Heureuse

@ Christiand'Evet, haklısın, cevabı güncelledim, teşekkür ederim.
MaxChinni

13

Tüm bağlantı noktası 53 bağlantılarını amaçlanan bir DNS sunucusuna iletmek için iptables kuralı kullanarak bu sorunu "çözdüm"; 3G'ye bağlıyken DNS ayarlarını değiştirmeye çalışırken Android 4.4.2'deki deneyimim tam olarak Leo'nun tanımladığı gibi; getprop | grep dns [0-9] \] içindeki değerlerin cehaleti: ve dhcpd.conf.

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

Bunun nedeni burada açıklandığı gibidir: http://forum.xda-developers.com/showpost.php?p=44722857&postcount=6 Tüm uygulamalar / dev / socket / dnsproxyd unix soketi üzerinden ağ üzerinden DNS araması yapar. Bu iş parçacığı ayrıca sistem özelliklerinin neden göz ardı edildiğini de açıklar.

Bunu geri almak için

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

udp dpt: 53 -: xxx.xxx.xxx.xxx: 53'e karşılık gelen satır numarasını bulun ve yapın.

iptables -t nat -D OUTPUT *linenumber*

2
Teşekkürler! ayrıca, nedenin özeti: Google, reklam engelleyicilerle silah yarışı oynuyor. mevcut reklam engelleyicilerin çalıştığı ve reklam engelleyicilerin diğerine taşındığı anlamına gelirken, tüm kullanıcılar (reklam engelleyici kullanıp kullanmadığına bakılmaksızın) o google hamlesi tarafından sonsuza dek rahatsız edilecektir. ... herkesin reklam engelleyicilere karşı savaşmanın şu ana kadar aptalca bir hareket olduğunu bildiğini düşündüm. aptal google. (ayrıca, opensource app AFWALL bu özel kuralı kolayca eklemenin kolay bir yoludur)
gcb

Bu şekilde özel iptables kuralının nasıl uygulanacağı hakkında AfWall + wiki
betatester07

1

Ne yazık ki, şu andan itibaren yapmak mümkün olmayabilir, ancak DNS Değiştirici'yi denemek mümkündür . Eğer köklü iseniz, bu işe yarayabilir, ancak hiçbir garanti yoktur.

Kullanmak için iyi bir DNS servisi Google’ın genel DNS servisi olacaktır. Bu tür sorunlar için burada çok iyi sonuçlanma eğilimindedir.

Bunların hiçbiri işe yaramazsa, cevap aramaya devam edin. Bu gibi şeyler için iyi bir site XDA Developers . Android için bir çok soruya cevap verme eğilimindedirler.


1

Varsayılan olarak rootlanmış olduğum anlamına gelen KitKat Cyanogenmod 11'deyim. Buna rağmen sadece başarısızlığı bildirebilirim:

1. yöntem:

Ben çalıştığınızda adb shellile

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

ve sonra hangi IP hjfdkhfjkyuiwnwetbyebvtwgqwdi.tk çözdüğünü test edin ... Ben belirttiğim OpenDNS ad sunucusundan gelmediği anlamına gelen bir NXDOMAIN yanıtı alıyorum (bu, size ek olarak size hizmet etmek için alternatif bir IP ile cevap verecek).

Ne zaman yapıyorsun

getprop | grep dns

Sadece neyi yapılandırdığımı görecektim. Ancak WiFi'den mobil cihazına (3G veya 4G / LTE) geçerken mobil operatörüme atandığını belirlediğim IP'leri görüyorum. "DNSwitch" veya "DNS Changer" gibi uygulamalar bu çözücüleri ağ değişiminde otomatik olarak yeniden ayarlayabilir. Ancak getpropbeni rapor eden, hala çözümü yapan şey değil.

2. yöntem [a]:

Denedim başka bir yolu /system/etc/dhcpcd/dhcpcd-hooks/20-dns.conf, orada sabit bir dizi şeyler modifiye (ama ağ adları ve çözücüler sayısı farklı olabilir farkında olun). Başarısız.

2. yöntem [b]:

Ve /system/etc/dhcpcd/dhcpcd.confben de DHCP görüşmesinde çözücüleri kabul etmek için parametreyi kaldırdım. Başarı da yok.

3. yöntem:

Şimdiye kadar biraz işe yarayacak tek şey "fakir bir adam VPN" kullanmak, "SSH Tünel" uygulamasını kullanmak, SOCKS4 kullanmak, ama bunu kullanmak tam olarak iyi bir sonuç alamadı.

Devam et:

Başka bir yerde ayarlanmış olan DNS gibi görünüyor veya ağ mobil olduğu sürece hepsi iletiliyor (kaçırılıyor).

Peki nasılsın? Taşıyıcılara ağ tarafsızlığını yıkacak bir araç sağlamak için başka bir kirli yol mu?

Senin durumunda senin sorunun bu yüzden oldu. SSHTunnel’in taşıyıcıları sansürlemenizi engellemek için alternatif bir çözüm olup olmadığını denemek için SSH’niz var mı?


Bloğu aşmanın bir yolunu buldum, ancak bu durum zahmetli ve durum bazında. Kökündeyim, bu yüzden hosts dosyasına erişebiliyorum. Daha sonra imgur'un doğrudan IP adreslerini aradım, sonra bu değerleri hosts dosyasına manuel olarak girdim. Şimdilik sorun çözüldü.
user51893

1

Bugün aynı sorunla karşılaştım ve Transfusion sayesinde. Çalışması için " DNS forwarde r" adlı bir uygulama geliştirmeye çalıştım . Sistemdeki dns sunucusunu değiştirmez, ancak dns sorgularını başka bir sunucuya iletir. Bu geçici çözüm benim için Kitkat'te çalışıyor (Nexus 5 / 4.4.3 ve Moto Razr / CM11). Umarım diğerlerine de yardımcı olabilir.


Bu gerçekten işe yarıyor, neden oy kullandığınızdan emin değilsiniz
warsong

0

Şu anda, DNS’inizi mobil verilerinizde değiştirmenin bir yolu olduğunu sanmıyorum. Telefonunuz rootluysa, Set DNS gibi uygulamaları kullanabilirsiniz .


Ne yazık ki, bu uygulama Android 4.3 ve üstü desteklemiyor gibi görünüyor :( Uygulamanın açıklamasından alınmıştır: "ANADA İÇİN ANDROID 4.3 KURULMAYIN LÜTFEN, YOL DNS KOLEKSİYLE DEĞİŞTİRİLEN SORUNLAR VARDIR. 4.3 CİHAZLAR İÇİN PAZARINDAN
ÇIKTIĞIM

Sorunuz Android 4.4 olan Android KitKat için ihtiyacınız olduğunu söylüyor. * Oysa Android 4.3 Jellybean.
Karan Raj Baruah,

Cihazımdaki oyun mağazasında uygulamanın sayfasını zaten açtım ve en üstte yazıyor: "Cihazınız bu sürümle uyumlu değil." Bu yüzden sorunun 4.3 sürümünden KitKat'a kadar sürdüğünden eminim.
user51893,

SSS'ye göre uygulama önermek bu sitenin bir parçası değil. Android'in yerel olarak yapıp yapamayacağı sorusunu cevapladım. Google Play Store'da kendiniz arama yapmanızı öneririm.
Karan Raj Baruah,

İpucu: AppBrain'deki uygulamalar sayfasını ziyaret etmek , çeşitli alternatifler listeler (sağ üst 4). Ancak, o sektördeki çoğu çözümün kök erişimi gerektirdiğini unutmayın.
Izzy
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.