題 配置Android 7.1設備以使用本地DNS服務器


我正在嘗試讓Android設備使用LAN上的DNS服務器將服務器主機名解析為本地地址,但它無法正常工作。

我以某種方式欺騙(*)路由器在分發DHCP地址時傳遞DNS服務器(192.168.1.99)的本地IP地址。從運行Windows 10的設備我看到的情況是這樣的,因為當我查看網絡屬性時,我看到它正在使用我想要的主DNS和輔助DNS IP地址,並且它正確地將本地服務器從世界可見主機名解析為本地地址。

(*)基本上,路由器不允許我設置DNS服務器,無線電盒不會選擇。檢查javascript允許我設置一個斷點,這樣我就可以繞過邏輯,如果你有一個我沒有的靜態IP地址,那麼顯然只允許設置DNS服務器(和設置靜態IP的無線電盒可以'甚至無論如何都要選擇!)。當我提交表單時,似乎沒有採取更改,但現在有些設備獲得了正確的DNS服務器!更新:我找到了一個不同的路由器,在分配DHCP地址時不需要任何技巧讓它通過DNS服務器,但Android 仍然 不使用它返回的DNS服務器!

但是在Android上它不起作用,它將主機名解析為世界可見的IP地址,表明它沒有使用DHCP正在分發的DNS服務器。 (莫名其妙地,通過外部IP地址訪問服務器 停止工作,這是需要將主機名解析為內部地址的全部原因!)

我正在使用 Termux 嘗試解決問題,並發現 getprop net.dns1 和 getprop net.dns2 返回的IPv6地址,進一步挖掘顯示路由器中的這些地址為ISP提供的DNS地址。所以我想可能由於某種原因我在路由器上使用的技巧不適用於Android。

所以我嘗試手動為設備配置DNS服務器。運用 Settings -> WiFi -> (long press network name) -> Modify network -> IP settings: Static 我輸入了與設備通過DHCP獲得的相同的網絡配置,例如

IP address: 192.168.1.2
Gateway: 192.16.8.1.1
Network prefix length: 24
DNS 1: 192.168.1.99
DNS 2: 8.8.8.8

但是通過這種手動配置,我無法訪問LAN上的任何內容!例如,我無法訪問192.168.1.1的本地路由器網頁,瀏覽器說它無法訪問。我無法在Termux中ping同一個IP地址,它說“網絡無法訪問”。如果我跑 ifconfig wlan0 和 route 在termux中,當我設置要通過DHCP配置的IP設置時,輸出看起來與輸出相同。然而, getprop net.dns1 仍然返回IPv6地址,所以現在我不確定我是否相信該命令是返回有效數據。更新:好的,實際上有四個DNS地址:前兩個是來自我的ISP的IPv6地址,它們以某種方式洩漏,最後兩個是我設置的兩個IPv4地址。

這似乎是針對較新的Android版本,較舊的Android 4.3設備沒有問題(它甚至不需要靜態IP配置來正確解析主機名)。

我還可以嘗試解決此問題,並使DNS正常工作?

更新:我找到了 這個帖子 這是指以下情況:

  • 有兩個DNS服務器,一個本地IPv4服務器(192.168.1.230)和一個ISP IPv6服務器(2a01:e00 :: 1)
  • IPv4 DNS服務器知道本地域,而IPv6則不知道。
  • Android碰巧使用IPv6 DNS服務器,因此無法解析本地網絡中的主機。

這符合我在配置中看到的內容。但後來海報聲稱“這是按設計工作的”,我有問題。然後列出了四種可能的解決方法:

  • 如果可能,將IPv6地址添加到本地DNS服務器並配置路由器以將該地址通告為IPv6 DNS服務器。 這不起作用,因為路由器不允許我為DNS指定IPv6地址。
  • 如果可能,在路由器上配置本地名稱。 我不確定這意味著什麼。路由器本身不提供任何DNS功能
  • 使用公共域,以便ISP路由器能夠解析內部名稱。 我不確定這意味著什麼 - 公共領域如何能夠引用內部IP地址?
  • 在路由器上禁用IPv6 DNS(或禁用IPv6)。 路由器不提供任何禁用或以其他方式配置IPv6的方法

所以我仍然堅持使用有效DOA的系統,因為網絡上的某些設備無法看到他們運行所需的資源。

更新:我設置了一個單獨的DHCP服務器並禁用了路由器上的那個,但是Android設備仍然在其列表中獲得兩個IPv6 DNS服務器 - 看起來DHCP服務器報告DNS後會有一兩秒的延遲服務器出現在IPv6出現之前,以及它們 總是 插入 在...前面 服務器報告地址。我試圖增加報告的DNS服務器數量,試圖填補Android可能擁有的任何表格,但即使有32個其他DNS服務器,它仍然會在開始時再插入兩個,共計34個! Android如何獲取這些地址,我怎樣才能強迫它取消它?!這真讓我抓狂!

更新:我發現了一個名為“DNS Changer”的應用程序似乎可以解決這個問題,雖然我有一些疑問,在找到真正的修復程序之前,它是否可以不僅僅是一種解決方法。它似乎創建了某種VPN,但我想知道它是如何工作的。它是否在我的防火牆之外路由流量?去哪裡?我想知道它是否將所有內容都路由出去,因為對我自己的服務器進行速度測試會產生大約20%的平均傳輸速率,相比之下,如果我使用IP地址而不是主機名運行相同的測試。我使用了另一個應用程序,該應用程序報告了7個不同的外部主機名,並聲稱整個傳輸都通過了每個主機。此外,如果網絡出現故障,此解決方法將失敗!

更新:我也在運行Android 5.1的root設備中看到了這個問題...我已經設置了一個靜態IP地址和指向內部服務器的DNS,甚至還沒有使用 setprop 設置 一切 DNS服務器到我的內部DNS服務器的IP地址...但是當我使用nslookup時,它仍然堅持使用8.8.8.8來查找名稱。如何讓Android實際使用我指定的DNS服務器?


5
2017-12-26 19:49


起源


我有同樣的問題。超級沮喪。 - g33kz0r
您可以通過在Android設備上禁用IPV6來解決問題(我假設這需要它的根,並在啟動時發出命令,如echo 1> / proc / sys / net / ipv6 / conf / wlan / disable_ipv6)(或等價的東西) - davidgo


答案:


阻止路由器中除了你要使用的DNS之外的所有其他出站端口53(DNS)流量,並且android設備將使用你在dhcp中分配它的東西,似乎將它們添加到列表的底部,所以這將使其他人失敗並使用你想要的,不知道谷歌為什麼這樣做


1
2017-07-26 17:19





從Android 6.1.x開始,您只能更改系留設備的DNS,而不能更改其他任何內容。無論你設置什麼,或者你使用哪個應用程序,其他所有內容都會被忽略

DNS問題

(我認為Android 6.1.x是Android 6.0.x)


0
2018-06-18 09:15





這是我發現在Android 5.1上運行的解決方案。有關詳細信息,請參閱此文章 [https://developer.mozilla.org/en-US/docs/Archive/B2G_OS/Developing_Firefox_OS/Customizing_DNS][1]

adb pull /system/etc/dhcpcd/dhcpcd-hooks/20-dns.conf 20-dns.conf

將第22-26行更改為您需要的。在我的設備上,我刪除了第22-26行並將第17-20行更改為:

count=1
    for i in 1 2 3 4; do
        setprop dhcp.${intf}.dns${i} ""
    done

count=1
    for i in 1 2 3 4; do
        setprop dhcp.${intf}.dns${i} "192.168.7.8"
    done

將IP更改為您需要的任何內容

更改文件後,卸載系統並使用剛剛更改的文件覆蓋默認文件:

adb shell shell mount -o rw,remount /system
adb push /yourpath/20_dns.conf /system/etc/dhcpcd/dhcpcd-hooks/20-dns.conf
adb shell chmod 644 /system/etc/dhcpcd/dhcpcd-hooks/20-dns.conf
adb shell mount -o ro,remount /system

我發現重新安裝可能不像它在這裡那樣運行 adb shell mount 查看所有掛載點並在您的設備上找到正確的掛載點

重新安裝後重新啟動。 通過adb進入設備的shell並檢查它是否有效 tcpdump udp port 53 看到了


0
2018-04-20 18:21





我有相同的問題。很難相信Android中存在這樣的錯誤並且無法修復。

您可以通過從命令行手動設置DNS解析器來解決此問題。問題是這需要root。

例如

ncd resolve setifdns wlan0 8.8.8.8 4.4.4.4

我發現 DNSman 支持此方法,因此您不必在每次重新引導或修改分區時都鍵入它。它是一個開源應用程序,可在F-Droid中使用,需要root。

我希望它有所幫助。


0
2017-07-16 00:09



命令是 nds - Sourav Ghosh
實際上是 ndc... - Sam Protsenko


我找到了一個有效的解決方這個程序 https://play.google.com/store/apps/details?id=com.frostnerd.dnschanger 那是“開源”(僅引用) https://git.frostnerd.com/PublicAndroidApps/DnsChanger 創建與設備的VPN連接以重定向所有DNS請求。

我不喜歡它,因為它託管在一個內部的Gitlab上,一切都可以完成和撤消。

看看如何創建adhoc openvpn隧道來實現同樣的目標。


0
2017-11-07 07:22





  1. 輸入打開無線調製解調器設置 192.168.1.1 在瀏覽器地址欄上,或其他IP(如果您已修改它)。
  2. 禁用IPv6 DHCP設置並將設置更改為eui 64

-2
2017-07-21 11:58



歡迎來到超級用戶。請解釋如何解決OP的問題。 - Twisty Impersonator