Answers:
好的,首先要完全公开:我是一个应用程序的作者,该应用程序现在在Google Play商店中,可让您更改Android 4.4上任何移动连接的DNS。该应用程序需要root用户,花费几美元,并且被称为Override DNS。有人告诉我,在一个现已删除的答案上,只要我明确公开它,就可以链接到我的应用程序。
我发现此版本的Android(4.4)存在的问题是,显然是出于缓存原因,系统行为已更改为将所有DNS查询重定向到一个称为“系统守护程序” netd
的链接(这是与4.4之前的Android网络相关的演示文稿的链接,但是,涵盖了这些主题的一部分)。
该getprop
/ setprop
方法行不通了。更改后,这些值将被netd
守护程序简单地忽略。
必须通过/dev/socket/netd
套接字与守护程序直接通信。在Android中,现在提供了一个名为的工具ndc
,可以完成这项工作。
与DNS相关的东西的语法是这样的:
# ndc resolver flushif <iface>
# ndc resolver flushdefaultif
# ndc resolver setifdns <iface> <domains> <dns1> <dns2>
# ndc resolver setdefaultif <iface>
该应用程序会自动猜测网络设备名称,并在每次激活移动网络时应用这些命令。
我通过使用iptables规则将所有端口53连接转发到目标DNS服务器来“解决”了该问题;我在Android 4.4.2上尝试在连接3G时尝试修改DNS设置的经验与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所有应用程序都通过/ dev / socket / dnsproxyd UNIX套接字通过netd进行DNS查找。此线程还描述了为什么忽略系统属性。
要撤消此操作,请执行
iptables -t nat -L OUTPUT -n -v --line-numbers
,找到与udp dpt:53对应的行号:: xxx.xxx.xxx.xxx:53并执行
iptables -t nat -D OUTPUT *linenumber*
遗憾的是,目前可能无法执行此操作,但是可以尝试使用DNS Changer。如果您已扎根,这可能会起作用,但不能保证。
可以使用的一种不错的DNS服务是Google的公共DNS服务。在这里,对于这些类型的问题,它的效果往往很好。
如果这些都不起作用,请继续寻找答案。XDA Developers是一个很好的解决这类问题的网站。他们倾向于在Android方面有很多答案。
我在KitKat Cyanogenmod 11上,这意味着我默认是扎根的。尽管如此,我只能报告失败:
第一种方法:
当我尝试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名称服务器(它将返回一个替代IP的答案,以为您服务)。
做的时候
getprop | grep dns
我只会看到自己配置的内容。但是,从WiFi切换到移动设备(3G或4G / LTE)时,我看到了我认为已分配给我的移动运营商的IP。诸如“ DNSwitch”或“ DNS Changer”之类的应用程序可以在网络更改时自动重置这些解析器。但是,getprop
报告给我的仍然不是真正解决问题的方法。
第二种方法[a]:
我尝试的另一种方法是在其中修改/system/etc/dhcpcd/dhcpcd-hooks/20-dns.conf
一组固定的东西(但要注意网络名称和解析器的数量可以不同)。没有成功。
第二种方法[b]:
然后/system/etc/dhcpcd/dhcpcd.conf
我删除了在DHCP协商中接受解析器的参数。也没有成功。
第三种方法:
到目前为止,唯一可行的方法是使用“穷人VPN”,使用应用程序“ SSH隧道”,使用SOCKS4,但使用该工具并没有取得很好的效果。
恢复:
似乎是在其他地方设置了DNS,或者在网络移动后立即转发(劫持)了所有DNS。
那么,怎么会呢?为运营商提供消除网络中立性的工具是另一种肮脏的方式吗?
在您的情况下,您的问题就是因为这一点。您是否拥有SSH来尝试SSHTunnel是否是解决运营商审查问题的替代解决方案?
今天,由于输血,我遇到了同样的问题。我试图开发一个应用程序“ DNS转发器 r”来解决它。它不会更改系统上的dns服务器,但会将dns查询转发到另一台服务器。这种解决方法对我在Kitkat(Nexus 5 / 4.4.3和Moto Razr / CM11)上正常工作。希望它也能帮助其他人。
目前,我不认为有任何方法可以更改移动数据上的DNS。但是,如果您的手机已扎根,则可以使用Set DNS之类的应用程序。
ndc resolver setifdns <iface> <domains> <dns1> <dns2> ...
。示例:ndc resolver setifdns eth0 "" 8.8.8.8 8.8.4.4