Làm cách nào để thay đổi DNS của kết nối di động trên Android KitKat?


24

Tôi muốn tránh kiểm duyệt từ ISP di động địa phương của tôi (ví dụ, nó chặn imgur vì một số lý do không xác định.

Ảnh chụp màn hình
Ảnh chụp màn hình (nhấp vào hình ảnh cho biến thể lớn hơn)

Tôi khá chắc chắn rằng tôi có thể phá vỡ điều này bằng cách thay đổi DNS của tôi thành Google DNS hoặc OpenDNS, nhưng tôi không thực sự chắc chắn làm thế nào để thực hiện điều này trên KitKat.

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

Câu trả lời:


18

Ok, trước hết là tiết lộ đầy đủ : Tôi là tác giả của một ứng dụng hiện có trên Google Play Store và giúp bạn có thể thay đổi DNS cho mọi kết nối di động trên Android 4.4. Ứng dụng yêu cầu root , tốn một vài đô la và được gọi là Ghi đè DNS . Tôi được cho biết, trên một câu trả lời hiện đã bị xóa, đó là công bằng để liên kết với ứng dụng của tôi miễn là tôi phơi bày nó rõ ràng.

Vấn đề tôi gặp phải với bản phát hành Android (4.4) này là, rõ ràng vì lý do bộ nhớ đệm, hành vi hệ thống đã bị thay đổi để chuyển hướng tất cả các truy vấn DNS sang trình nền hệ thống được gọi netd(đây là liên kết đến bản trình bày liên quan đến mạng Android trước 4.4. , tuy nhiên, bao gồm một phần của các chủ đề này).

Các getprop/ setpropphương pháp không làm việc nữa. Những giá trị đó, khi được thay đổi, chỉ đơn giản là bị bỏ qua bởi netddaemon.

Cần phải liên lạc trực tiếp với daemon thông qua /dev/socket/netdổ cắm. Trong Android, giờ đây nó có một công cụ gọi là ndcchính xác công việc này.

Cú pháp cho các công cụ liên quan đến DNS là:

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

Các ứng dụng sẽ tự động đoán tên thiết bị mạng và áp dụng những lệnh mỗi lần một mạng di động được kích hoạt.


Cú pháp đúng của setifdns là : ndc resolver setifdns <iface> <domains> <dns1> <dns2> .... Ví dụ:ndc resolver setifdns eth0 "" 8.8.8.8 8.8.4.4
Christian d'Heureuse

@ Christiand'Heureuse bạn nói đúng, tôi đã cập nhật câu trả lời, cảm ơn bạn.
MaxChinni

13

Tôi đã "giải quyết" vấn đề này bằng cách sử dụng quy tắc iptables để chuyển tiếp tất cả các kết nối cổng 53 đến một máy chủ DNS dự định; trải nghiệm của tôi trên Android 4.4.2 với việc cố gắng sửa đổi cài đặt DNS trong khi kết nối với 3G đã chính xác như Leo mô tả; thiếu hiểu biết về các giá trị trong getprop | grep dns [0-9] \]: và dhcpd.conf.

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

Lý do được mô tả ở đây: http://forum.xda-developers.com/showpost.php?p=44722857&postcount=6 Tất cả các ứng dụng thực hiện tra cứu DNS thông qua netd thông qua ổ cắm unix / dev / socket / dnsproxyd. Chủ đề này cũng mô tả lý do tại sao các thuộc tính hệ thống đang bị bỏ qua.

Để hoàn tác điều này, hãy làm

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

, tìm số dòng tương ứng với udp dpt: 53 đến: xxx.xxx.xxx.xxx: 53 và làm

iptables -t nat -D OUTPUT *linenumber*

2
Cảm ơn! đồng thời, tóm tắt lý do: Google đang chơi chạy đua vũ trang với các công cụ chặn quảng cáo. họ đã cố gắng vô hiệu hóa các phương tiện hiện tại có nghĩa là các trình chặn quảng cáo đã hoạt động và các trình chặn quảng cáo đã chuyển sang một trình chặn khác, trong khi tất cả người dùng (bất kể có sử dụng trình chặn quảng cáo hay không) sẽ luôn cảm thấy khó chịu vì động thái đó của google. ... Tôi nghĩ rằng mọi người đều biết rằng chiến đấu chống lại những kẻ chặn quảng cáo là một động thái ngu ngốc. ngớ ngẩn google. (đồng thời, ứng dụng mã nguồn mở AFWALL là một cách thuận tiện để dễ dàng thêm quy tắc tùy chỉnh này)
gcb

AfWall + wiki về cách áp dụng quy tắc iptables tùy chỉnh như thế này
betatester07

1

Đáng buồn thay, có thể không thể làm như bây giờ, tuy nhiên, có thể thử DNS Changer . Điều này có thể hoạt động nếu bạn đã root, nhưng không có gì đảm bảo.

Một dịch vụ DNS tốt để sử dụng sẽ là dịch vụ DNS công cộng của Google. Nó có xu hướng giải quyết rất tốt cho các loại vấn đề này ngay tại đây.

Nếu không có cái này hoạt động, hãy tiếp tục tìm kiếm câu trả lời. Một trang web tốt cho những thứ như thế này là XDA Developers . Họ có xu hướng có nhiều câu trả lời về mọi thứ cho Android.


1

Tôi đang dùng KitKat Cyanogenmod 11, nghĩa là tôi được root theo mặc định. Mặc dù tôi chỉ có thể báo cáo thất bại:

Phương pháp 1

Khi tôi thử adb shellvới

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

và sau đó kiểm tra IP hjfdkhfjkyuiwnwetbyebvtwgqwdi.tk giải quyết ... Tôi nhận được phản hồi NXDOMAIN, nghĩa là nó không đến từ máy chủ tên OpenDNS mà tôi đã đặt (sẽ trả lời câu trả lời với IP thay thế, để phục vụ bạn thêm).

Khi làm

getprop | grep dns

Tôi sẽ chỉ nhìn thấy những gì tôi đã cấu hình. Tuy nhiên, khi chuyển từ WiFi sang di động (3G hoặc 4G / LTE), tôi thấy IP mà tôi nhận ra là được gán cho nhà cung cấp dịch vụ di động của mình. Các ứng dụng như "DNSwitch" hoặc "DNS Changer" có thể tự động đặt lại các bộ phân giải đó khi thay đổi mạng. Tuy nhiên, những gì getpropbáo cáo cho tôi, vẫn không phải là những gì thực sự giải quyết.

Phương pháp thứ 2 [a]:

Một cách khác tôi đã thử, là sửa đổi /system/etc/dhcpcd/dhcpcd-hooks/20-dns.confmột tập hợp các thứ được cố định trong đó (nhưng lưu ý rằng tên mạng và số lượng bộ giải quyết có thể khác nhau). Không thành công.

Phương pháp thứ 2 [b]:

Và trong /system/etc/dhcpcd/dhcpcd.conftôi đã loại bỏ tham số để chấp nhận bộ giải quyết tại DHCP negociation. Cũng không thành công.

Phương pháp thứ 3:

Cho đến nay, điều duy nhất có thể hoạt động được một chút là sử dụng "VPN người nghèo", sử dụng ứng dụng "SSH Tunnel", sử dụng SOCKS4, nhưng sử dụng mà tôi không có kết quả tốt.

Tiếp tục:

Có vẻ như DNS được đặt ở nơi khác hoặc tất cả được chuyển tiếp (bị tấn công) ngay khi mạng di động.

Vì vậy, làm thế nào đến? Có phải đó là một cách bẩn thỉu khác để cung cấp cho các nhà mạng một công cụ để phá hủy tính trung lập của mạng?

Trong trường hợp của bạn câu hỏi của bạn là vì điều đó. Bạn có dùng thử SSH nếu SSHTunnel là một giải pháp thay thế để kiểm duyệt các nhà mạng của bạn không?


Tôi đã tìm ra cách để phá vỡ khối, nhưng nó cồng kềnh và tùy từng trường hợp cụ thể. Tôi đã root nên tôi có quyền truy cập vào tập tin máy chủ. Tiếp theo, tôi tìm địa chỉ IP trực tiếp của imgur, sau đó tôi nhập thủ công các giá trị đó vào tệp máy chủ. Vấn đề được giải quyết cho bây giờ.
dùng51893

1

Tôi đã gặp vấn đề tương tự ngày hôm nay, và nhờ vào Transfusion. Tôi đã cố gắng phát triển một ứng dụng " DNS Forwarde r" để giải quyết nó. Nó không thay đổi máy chủ dns trên hệ thống, nhưng chuyển tiếp truy vấn dns sang máy chủ khác. Cách giải quyết này hoạt động tốt với tôi trên Kitkat (Nexus 5 / 4.4.3 và Moto Razr / CM11). Hy vọng nó có thể giúp đỡ khác là tốt.


Điều này thực sự hoạt động, không chắc chắn lý do tại sao bạn đã bỏ phiếu
Warsong

0

Hiện tại tôi không nghĩ có cách nào để thay đổi DNS trên dữ liệu di động của bạn. Nhưng nếu điện thoại của bạn đã được root, bạn có thể sử dụng các ứng dụng như Đặt DNS .


Đáng buồn thay, ứng dụng đó dường như không hỗ trợ Android 4.3 trở lên :( Lấy từ mô tả của ứng dụng: "VUI LÒNG KHÔNG CÀI ĐẶT ANDROID 4.3 CHO MOM, CÓ VẤN ĐỀ VỚI CÁCH XỬ LÝ DNS ĐÃ ĐƯỢC THAY ĐỔI TRONG CÁCH MẠNG. TÔI ĐÃ KIẾM ĐƯỢC TỪ THỊ TRƯỜNG CHO 4.3 THIẾT BỊ. "
user51893

Câu hỏi của bạn nói rằng bạn cần nó cho Android KitKat, đó là Android 4.4. * Trong khi Android 4.3 là Jellybean.
Karan Raj Baruah

Tôi đã mở trang của ứng dụng trên cửa hàng play trên thiết bị của mình và nó nói ngay trên đầu trang: "Thiết bị của bạn không tương thích với phiên bản này." Vì vậy, tôi chắc chắn rằng vấn đề vẫn tồn tại từ phiên bản 4.3 đến KitKat.
dùng51893

Các ứng dụng đề xuất không thực sự là một phần của trang web này theo Câu hỏi thường gặp. Tôi đã trả lời câu hỏi liệu Android có thể làm điều đó một cách tự nhiên không. Tôi khuyên bạn nên tự tìm kiếm Cửa hàng Play.
Karan Raj Baruah

Gợi ý: Truy cập trang ứng dụng trên AppBrain liệt kê một số lựa chọn thay thế (top 4 bên phải). Tuy nhiên, lưu ý rằng hầu hết các giải pháp trong lĩnh vực đó đều yêu cầu quyền truy cập root.
Izzy
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.