จะเปลี่ยน DNS ของการเชื่อมต่อมือถือบน Android KitKat ได้อย่างไร?


24

ฉันต้องการหลีกเลี่ยงการเซ็นเซอร์จาก ISP มือถือในพื้นที่ของฉัน (มันบล็อก imgur ตัวอย่างเช่นด้วยเหตุผลที่ไม่ทราบสาเหตุ

ภาพหน้าจอ
สกรีนช็อต (คลิกที่ภาพเพื่อชุดตัวเลือกที่ใหญ่กว่า)

ฉันค่อนข้างแน่ใจว่าฉันสามารถหลีกเลี่ยงสิ่งนี้ได้โดยเปลี่ยน DNS เป็น Google DNS หรือ OpenDNS แต่ฉันไม่แน่ใจว่าจะทำสิ่งนี้ได้อย่างไรใน KitKat

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

คำตอบ:


18

ตกลงก่อนอื่นจากการเปิดเผยแบบเต็มทั้งหมด: ฉันเป็นผู้สร้างแอปที่ตอนนี้อยู่ใน Google Play Store และทำให้คุณสามารถเปลี่ยน DNS สำหรับการเชื่อมต่อมือถือใด ๆ บน Android 4.4 แอปพลิเคต้องใช้ราก , ค่าใช้จ่ายสอง bucks และถูกเรียกว่าแทนที่ DNS ฉันได้รับคำตอบจากคำตอบที่ถูกลบไปแล้วในตอนนี้ว่ามีความเหมาะสมที่จะเชื่อมโยงแอปของฉันตราบใดที่ฉันเปิดเผยอย่างชัดเจน

ปัญหาที่ฉันพบกับ Android รุ่นนี้ (4.4) คือเห็นได้ชัดว่าด้วยเหตุผลการแคชพฤติกรรมของระบบมีการเปลี่ยนแปลงเพื่อเปลี่ยนเส้นทางการสืบค้น DNS ทั้งหมดไปยังระบบภูตที่เรียกว่าnetd(นี่คือลิงค์ไปยังงานนำเสนอที่เกี่ยวข้องกับเครือข่าย Android ก่อน 4.4 อย่างไรก็ตามครอบคลุมบางส่วนของหัวข้อเหล่านี้)

กระบวนการgetprop/ setpropวิธีการไม่ทำงานอีกต่อไป เมื่อมีการเปลี่ยนแปลงค่าเหล่านั้นจะถูกละเว้นโดยnetddaemon

จำเป็นต้องสื่อสารโดยตรงกับ daemon ผ่าน/dev/socket/netdซ็อกเก็ต ใน Android ตอนนี้เป็นเครื่องมือที่เรียกndcว่าทำงานนี้

ไวยากรณ์สำหรับสิ่งที่เกี่ยวข้องกับ DNS คือ:

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

แอปเดาชื่ออุปกรณ์เครือข่ายโดยอัตโนมัติและนำไปใช้คำสั่งเหล่านี้ทุกครั้งที่มีเครือข่ายมือถือได้รับการเปิดใช้งาน


ไวยากรณ์ที่ถูกต้องของ setifdns ndc resolver setifdns <iface> <domains> <dns1> <dns2> ...คือ: ตัวอย่าง:ndc resolver setifdns eth0 "" 8.8.8.8 8.8.4.4
Christian d'Heureuse

@ Christiand'Heureuse คุณพูดถูกฉันได้อัปเดตคำตอบแล้วขอบคุณ
MaxChinni

13

ฉัน "แก้ไข" ปัญหานี้โดยใช้กฎ iptables เพื่อส่งต่อการเชื่อมต่อพอร์ต 53 ทั้งหมดไปยังเซิร์ฟเวอร์ DNS ที่ตั้งใจไว้ ประสบการณ์ของฉันบน Android 4.4.2 เมื่อพยายามแก้ไขการตั้งค่า DNS ในขณะที่เชื่อมต่อกับ 3G นั้นเป็นไปตามที่ Leo อธิบายไว้ ความไม่รู้ของค่าใน getprop | grep dns [0-9] \]: และ dhcpd.conf

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

เหตุผลดังอธิบายไว้ที่นี่: http://forum.xda-developers.com/showpost.php?p=44722857&postcount=6แอปทั้งหมดทำการค้นหา DNS ผ่าน netd ผ่านซ็อกเก็ต / dev / socket / dnsproxyd unix เธรดนี้ยังอธิบายถึงสาเหตุที่คุณสมบัติของระบบถูกละเว้น

หากต้องการยกเลิกสิ่งนี้ให้ทำ

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

ค้นหาหมายเลขบรรทัดที่สอดคล้องกับ udp dpt: 53 ถึง: xxx.xxx.xxx.xxx: 53 และทำ

iptables -t nat -D OUTPUT *linenumber*

2
ขอบคุณ! อีกทั้งยังสรุปเหตุผล: Google กำลังเล่นแข่งอาวุธกับตัวบล็อคโฆษณา พวกเขาพยายามปิดการใช้งานหมายถึงตัวบล็อกโฆษณาในปัจจุบันทำงานและตัวบล็อคโฆษณาย้ายไปที่อีกอันหนึ่งในขณะที่ผู้ใช้ทั้งหมด (ไม่ว่าจะใช้ตัวบล็อกโฆษณาหรือไม่ก็ตาม) จะทำให้ Google move รำคาญ ... ฉันคิดว่าทุกคนรู้ว่าการต่อสู้กับตัวบล็อคโฆษณาเป็นการเคลื่อนไหวที่โง่เง่า โง่ google (เช่นเดียวกันกับแอป opensource AFWALL เป็นวิธีที่สะดวกในการเพิ่มกฎที่กำหนดเองนี้ได้อย่างง่ายดาย)
gcb

AfWall + wikiเกี่ยวกับวิธีใช้กฎ iptables แบบกำหนดเองเช่นนี้
betatester07

1

น่าเศร้าที่มันอาจจะเป็นไปไม่ได้ที่จะทำ ณ ตอนนี้ แต่ก็เป็นไปได้ที่จะลองDNS Changer สิ่งนี้อาจใช้งานได้หากคุณรูท แต่ไม่มีการรับประกัน

บริการ DNS ที่ดีในการใช้จะเป็นบริการ DNS สาธารณะของ Google มันมีแนวโน้มที่จะทำงานได้ดีมากสำหรับปัญหาประเภทนี้ที่นี่

หากวิธีนี้ใช้ไม่ได้ผลให้ค้นหาคำตอบต่อไป เว็บไซต์ที่ดีสำหรับสิ่งที่ต้องการนี้เป็นนักพัฒนา XDA พวกเขามักจะมีคำตอบมากมายสำหรับสิ่งต่าง ๆ สำหรับ Android


1

ฉันใช้ KitKat Cyanogenmod 11 ซึ่งหมายความว่าฉันรูทตามค่าเริ่มต้น แม้ว่าฉันจะสามารถรายงานความล้มเหลวได้เท่านั้น:

วิธีที่ 1:

เมื่อฉันลองadb shellด้วย

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

จากนั้นทดสอบว่า IP hjfdkhfjkyuiwnwetbyebvtwgqwdi.tk แก้ปัญหาใด ... ฉันได้รับการตอบกลับของ NXDOMAIN ซึ่งหมายความว่าไม่ได้มาจากเซิร์ฟเวอร์ชื่อ OpenDNS ที่ฉันตั้งไว้

เมื่อทำ

getprop | grep dns

ฉันจะเห็นสิ่งที่ฉันกำหนดค่า อย่างไรก็ตามเมื่อเปลี่ยนจาก WiFi เป็นมือถือ (3G หรือ 4G / LTE) ฉันเห็น IP ที่ฉันจำได้ว่าถูกกำหนดให้กับผู้ให้บริการมือถือของฉัน แอปเช่น "DNSwitch" หรือ "DNS Changer" สามารถตั้งค่าตัวแก้ไขเหล่านั้นใหม่โดยอัตโนมัติเมื่อมีการเปลี่ยนแปลงเครือข่าย อย่างไรก็ตามสิ่งที่getpropรายงานให้ฉันยังคงไม่ใช่สิ่งที่แก้ไขปัญหาได้อย่างแท้จริง

วิธีที่ 2 [a]:

อีกวิธีที่ฉันลองใช้คือ/system/etc/dhcpcd/dhcpcd-hooks/20-dns.confแก้ไขสิ่งที่ตั้งไว้ในนั้น (แต่ระวังชื่อเครือข่ายและจำนวนตัวแก้ไขอาจแตกต่างกัน) ปราศจากความสำเร็จ.

วิธีที่ 2 [b]:

และใน/system/etc/dhcpcd/dhcpcd.confฉันลบพารามิเตอร์เพื่อยอมรับตัวแก้ไขที่การเชื่อมโยง DHCP ไม่ประสบความสำเร็จเช่นกัน

วิธีที่ 3:

จนถึงตอนนี้สิ่งเดียวที่จะใช้งานได้เพียงเล็กน้อยคือใช้ "คนจน VPN" โดยใช้แอพ "SSH Tunnel" โดยใช้ SOCKS4 แต่การใช้ที่ฉันไม่ได้ผลลัพธ์ที่ดี

ผู้สมัครงาน:

ดูเหมือนว่า DNS จะถูกตั้งค่าไว้ที่อื่นหรือถูกส่งต่อ (ถูกแย่งชิง) ทันทีที่เครือข่ายมือถือ

แล้วจะเป็นอย่างไร เป็นอีกวิธีที่สกปรกหรือไม่ที่จะจัดหาเครื่องมือในการทำลายความเป็นกลางของเครือข่าย

ในกรณีของคุณคำถามของคุณเป็นเพราะสิ่งนั้น คุณมี SSH ลองหรือไม่ถ้า SSHTunnel เป็นทางเลือกอื่นในการเซ็นเซอร์ผู้ให้บริการของคุณ?


ฉันได้พบวิธีที่จะหลีกเลี่ยงการบล็อก แต่มันยุ่งยากและเป็นกรณี ๆ ไป ฉันรูทดังนั้นฉันจึงสามารถเข้าถึงไฟล์โฮสต์ได้ ต่อไปฉันค้นหาที่อยู่ IP ของ imgur จากนั้นฉันป้อนค่าเหล่านั้นไปยังไฟล์โฮสต์ด้วยตนเอง แก้ไขปัญหาได้แล้ว
user51893

1

ฉันพบปัญหาเดียวกันในวันนี้และต้องขอบคุณการถ่าย ฉันพยายามพัฒนาแอพ " DNS forwarde r" เพื่อใช้งาน มันไม่เปลี่ยนเซิร์ฟเวอร์ DNS ในระบบ แต่ส่งต่อแบบสอบถาม DNS ไปยังเซิร์ฟเวอร์อื่น วิธีแก้ปัญหานี้ใช้งานได้ดีสำหรับฉันใน Kitkat (Nexus 5 / 4.4.3 และ Moto Razr / CM11) หวังว่ามันจะช่วยคนอื่นได้เช่นกัน


ใช้งานได้จริงไม่แน่ใจว่าทำไมคุณถึงได้โหวตให้ลงคะแนน
Warsong

0

ขณะนี้ฉันไม่คิดว่าจะมีวิธีใดในการเปลี่ยน DNS ของคุณบนข้อมูลมือถือ แต่ถ้าโทรศัพท์ของคุณเป็นรากฐานที่คุณสามารถใช้แอปอย่างเช่นการตั้งค่า DNS


น่าเศร้าที่แอพนั้นดูเหมือนจะไม่รองรับ Android 4.3 และสูงกว่า :( นำมาจากคำอธิบายของแอพ: "โปรดอย่าติดตั้งบน Android 4.3 สำหรับช่วงเวลานี้มีปัญหากับการจัดการ DNS ทางที่มีการเปลี่ยนแปลงใน KERNEL ฉันดึงมันออกมาจากตลาดเป็นเวลา 4.3 อุปกรณ์ "
user51893

คำถามของคุณบอกว่าคุณต้องการสำหรับ Android KitKat ซึ่งเป็น Android 4.4 * ในขณะที่ Android 4.3 คือ Jellybean
Karan Raj Baruah

ฉันได้เปิดหน้าแอพใน play store บนอุปกรณ์ของฉันแล้วและมันก็บอกว่าอยู่ด้านบนสุด: "อุปกรณ์ของคุณไม่สามารถใช้งานได้กับเวอร์ชันนี้" ดังนั้นฉันแน่ใจว่าปัญหายังคงมีอยู่จากรุ่น 4.3 ถึง KitKat
user51893

แอพที่แนะนำไม่ได้เป็นส่วนหนึ่งของเว็บไซต์นี้ตามคำถามที่พบบ่อย ฉันตอบคำถามว่า Android สามารถทำได้หรือไม่ ฉันแนะนำให้ค้นหา Play Store ด้วยตัวเอง
Karan Raj Baruah

คำแนะนำ: การไปที่หน้าแอพใน AppBrainจะแสดงตัวเลือกหลายตัวเลือก (ด้านบนขวา 4) อย่างไรก็ตามโปรดทราบว่าโซลูชันส่วนใหญ่ในภาคนั้นต้องการการเข้าถึงรูท
Izzy
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.