Bagaimana cara mengubah DNS koneksi seluler di Android KitKat?

24

Saya ingin menghindari sensor dari ISP seluler lokal saya (ini memblokir imgur, misalnya, untuk beberapa alasan yang tidak diketahui.

Tangkapan layar
Tangkapan layar (klik gambar untuk varian yang lebih besar)

Saya cukup yakin bahwa saya dapat mengelak dari ini dengan mengubah DNS saya ke Google DNS atau OpenDNS, tapi saya tidak begitu yakin bagaimana melakukannya di KitKat.

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

Jawaban:

18

Ok, pertama-tama pengungkapan penuh : Saya adalah pembuat aplikasi yang sekarang ada di Google Play Store dan yang membuat Anda dapat mengubah DNS untuk koneksi seluler apa pun di Android 4.4. Aplikasi ini membutuhkan root , biaya beberapa dolar dan disebut Override DNS . Saya diberitahu, pada jawaban yang sekarang dihapus, itu adil untuk menautkan ke aplikasi saya selama saya memaparkannya dengan jelas.

Masalah yang saya temukan dengan rilis Android ini (4.4) adalah bahwa, tampaknya untuk alasan caching, perilaku sistem telah diubah untuk mengalihkan semua permintaan DNS ke daemon sistem yang disebut netd(inilah tautan ke presentasi yang terkait dengan jaringan Android sebelum 4.4 yang Namun, mencakup sebagian dari topik ini).

The getprop/ setpropmetode tidak bekerja lagi. Nilai-nilai itu, ketika diubah, diabaikan begitu saja oleh netddaemon.

Penting untuk berkomunikasi langsung ke daemon melalui /dev/socket/netdsoket. Di Android sekarang hadir alat yang disebut ndcyang melakukan pekerjaan ini dengan tepat.

Sintaks untuk hal-hal terkait DNS adalah ini:

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

The app otomatis menebak jaringan nama perangkat dan berlaku ini perintah setiap kali jaringan seluler akan diaktifkan.

MaxChinni
sumber
Sintaks yang benar dari setifdns adalah: ndc resolver setifdns <iface> <domains> <dns1> <dns2> .... Contoh:ndc resolver setifdns eth0 "" 8.8.8.8 8.8.4.4
Christian d'Heureuse
@ Christiand'Heureuse kau benar, aku memperbarui jawabannya, terima kasih.
MaxChinni
13

Saya "memecahkan" masalah ini dengan menggunakan aturan iptables untuk meneruskan semua koneksi port 53 ke server DNS yang dimaksud; pengalaman saya di Android 4.4.2 dengan mencoba mengubah pengaturan DNS saat terhubung ke 3G persis seperti yang dijelaskan Leo; ketidaktahuan nilai dalam getprop | grep dns [0-9] \]: dan dhcpd.conf.

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

Alasannya adalah sebagaimana dijelaskan di sini: http://forum.xda-developers.com/showpost.php?p=44722857&postcount=6 Semua aplikasi melakukan pencarian DNS melalui netd melalui soket unix / dev / socket / dnsproxyd unix. Utas ini juga menjelaskan mengapa properti sistem diabaikan.

Untuk membatalkan ini, lakukan

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

, cari nomor baris yang sesuai dengan udp dpt: 53 ke: xxx.xxx.xxx.xxx: 53 dan lakukan

iptables -t nat -D OUTPUT *linenumber*
Transfusi
sumber
2
Terima kasih! juga, ringkasan alasannya: Google sedang berlomba dengan pemblokir iklan. mereka mencoba untuk menonaktifkan saat ini berarti pemblokir iklan berfungsi, dan pemblokir iklan pindah ke yang lain, sementara semua pengguna (terlepas dari menggunakan pemblokir iklan atau tidak) akan selamanya terganggu oleh perpindahan google itu. ... Saya pikir semua orang tahu bertarung melawan pemblokir iklan adalah langkah bodoh sekarang. google konyol (juga, aplikasi opensource AFWALL adalah cara mudah untuk menambahkan aturan khusus ini dengan mudah)
gcb
AfWall + wiki tentang cara menerapkan aturan iptables khusus seperti ini
betatester07
1

Sedihnya, hal itu mungkin tidak dapat dilakukan pada saat ini, bagaimanapun, adalah mungkin untuk mencoba DNS Changer . Ini bisa berfungsi jika Anda di-root, tetapi tidak ada jaminan.

Layanan DNS yang baik untuk digunakan adalah layanan DNS publik Google. Itu cenderung bekerja dengan sangat baik untuk masalah seperti ini di sini.

Jika tidak ada yang berhasil, terus cari jawaban. Situs yang bagus untuk hal-hal seperti ini adalah Pengembang XDA . Mereka cenderung memiliki banyak jawaban untuk Android.

pyrogoggles
sumber
1

Saya menggunakan KitKat Cyanogenmod 11, artinya saya telah di-root secara default. Meskipun demikian saya hanya dapat melaporkan kegagalan:

Metode 1:

Ketika saya mencoba adb shelldengan

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

dan kemudian mengujinya dengan tekad IP hjfdkhfjkyuiwnwetbyebvtwgqwdi.tk ... Saya mendapatkan respons NXDOMAIN, yang berarti bukan berasal dari server nama OpenDNS yang telah saya tetapkan (yang akan mengembalikan jawaban dengan IP alternatif, untuk melayani Anda menambahkan).

Ketika melakukan

getprop | grep dns

Saya hanya akan melihat apa yang telah saya konfigurasikan. Namun ketika beralih dari WiFi ke seluler (3G atau 4G / LTE) saya melihat IP yang saya kenali ditugaskan untuk operator seluler saya. Aplikasi seperti "DNSwitch" atau "DNS Changer" dapat mengatur ulang resolusi tersebut secara otomatis saat perubahan jaringan. Namun apa yang getpropmelaporkan saya, masih bukan apa yang benar-benar melakukan penyelesaian.

Metode 2 [a]:

Cara lain yang saya coba, adalah modifieng /system/etc/dhcpcd/dhcpcd-hooks/20-dns.conf satu set hal-hal yang diperbaiki di sana (tetapi perlu diketahui nama jaringan dan jumlah resolver dapat berbeda). Tanpa keberhasilan.

Metode 2 [b]:

Dan di /system/etc/dhcpcd/dhcpcd.confsaya menghapus parameter untuk menerima resolver pada negosiasi DHCP. Juga tidak berhasil.

Metode 3:

Sejauh ini satu-satunya hal yang akan bekerja sedikit adalah menggunakan "orang miskin VPN", menggunakan aplikasi "SSH Tunnel", menggunakan SOCKS4, tetapi menggunakan itu saya tidak mendapatkan hasil yang baik.

Lanjut:

Sepertinya DNS diatur di tempat lain, atau semua diteruskan (dibajak) segera setelah jaringan bergerak.

Jadi, bagaimana bisa? Apakah ini cara kotor lain untuk menyediakan alat bagi operator untuk menghancurkan netralitas jaringan?

Dalam kasus Anda, pertanyaan Anda adalah karena itu. Apakah Anda memiliki SSH untuk dicoba jika SSHTunnel adalah solusi alternatif untuk menyiasati sensor operator Anda?

Leo
sumber
Saya telah menemukan cara untuk menghindari blok, tetapi rumit dan berdasarkan kasus per kasus. Saya di-root jadi saya memiliki akses ke file host. Selanjutnya, saya mencari alamat IP langsung imgur, lalu saya memasukkan nilai-nilai itu secara manual ke file host. Masalah terpecahkan untuk saat ini.
user51893
1

Saya mengalami masalah yang sama hari ini, dan terima kasih kepada Transfusi. Saya mencoba mengembangkan aplikasi " DNS forwarde r" untuk menyelesaikannya. Itu tidak mengubah server dns pada sistem, tetapi meneruskan permintaan dns ke server lain. Solusi ini berfungsi dengan baik untuk saya di Kitkat (Nexus 5 / 4.4.3 dan Moto Razr / CM11). Semoga bisa membantu orang lain juga.

pengguna64656
sumber
Ini benar-benar berfungsi, tidak yakin mengapa Anda terpilih sebagai
warsong
0

Saat ini saya tidak berpikir ada cara untuk mengubah DNS Anda pada data seluler Anda. Tetapi jika ponsel Anda di-rooting, Anda dapat menggunakan aplikasi seperti Set DNS .

Karan Raj Baruah
sumber
Sayangnya, aplikasi itu tampaknya tidak mendukung Android 4.3 dan di atas :( Diambil dari deskripsi aplikasi: "TOLONG JANGAN INSTAL DI ANDROID 4.3 UNTUK SAAT INI, ADA MASALAH DENGAN CARA PENANGANAN DNS YANG TELAH BERUBAH DI KERNEL. AKU SUDAH MEMULAI DARI PASAR UNTUK 4.3 PERANGKAT. "
user51893
Pertanyaan Anda mengatakan Anda membutuhkannya untuk Android KitKat yang merupakan Android 4.4. * Sedangkan Android 4.3 adalah Jellybean.
Karan Raj Baruah
Saya sudah membuka halaman aplikasi di play store di perangkat saya, dan tertulis di bagian paling atas: "Perangkat Anda tidak kompatibel dengan versi ini." Jadi saya yakin masalahnya tetap ada dari versi 4.3 hingga KitKat.
user51893
Merekomendasikan aplikasi bukan bagian dari situs ini menurut FAQ. Saya menjawab pertanyaan apakah Android dapat melakukannya secara asli. Saya sarankan untuk mencari di Play Store sendiri.
Karan Raj Baruah
Petunjuk: Mengunjungi halaman aplikasi di AppBrain mencantumkan beberapa alternatif (top 4 di sebelah kanan). Perhatikan, bagaimanapun, bahwa sebagian besar solusi di sektor itu memerlukan akses root.
Izzy