如何在Android Kitkat上更改移动连接的DNS? -- 4.4-kitkat 领域 和 dns 领域 android 相关 的问题

How to change mobile connections's DNS on Android KitKat?


24
vote

问题

中文

我想避免我当地的移动ISP中的审查(例如,因为一些未知原因,它阻止了Imgur。

screenshot
屏幕截图(单击图像的较大变体)

我很确定我可以通过将我的DNS更改为Google DNS或Opendns来规避这一点,但我并不肯定如何在Kitkat上完成这一点。

  Info: Device: Nexus 5 Android version: 4.4.2 Device status: rooted   
英文原文

I want to avoid censorship from my local mobile ISP (it blocks imgur, for example, for some unknown reason.

Screenshot
Screenshot (click image for larger variant)

I'm pretty certain that I can circumvent this by changing my DNS to Google DNS or OpenDNS, but I'm not really sure how to accomplish this on KitKat.

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

回答列表

18
 
vote

确定,首先完整披露:我是一个应用程序的作者,现在在Google Play商店上,它使您能够在Android 4.4上更改任何移动连接的DNS。 app 需要root ,花费了几个降压,称为覆盖DNS 。 我被告知,在一个现在删除的答案,这是为了链接到我的应用程序的公平,只要我清楚地暴露它。

在这个版本中找到的问题是Android(4.4)是,显然是为了缓存的原因,系统行为已更改为将所有DNS查询重定向到称为 netd (这是一个链接

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>   

app 自动猜测网络设备名称每次移动网络激活时都会应用这些命令。

 

Ok, first of all full disclosure: I'm the author of an app which is now on the Google Play Store and which makes you able to change DNS for any mobile connection on Android 4.4. The app requires root, costs a couple of bucks and is called Override DNS. I was told, on a now deleted answer, that is fair to link to my app as long as I expose it clearly.

The problem I found with this release of Android (4.4) is that, apparently for caching reasons, the system behaviour has been changed to redirect all DNS queries to a system daemon called netd (here's a link to a presentation related to Android networking before 4.4 which, however, covers part of these topics).

The getprop/setprop method does not work anymore. Those values, when changed, get simply ignored by the netd daemon.

It's necessary to communicate directly to the daemon via the /dev/socket/netd socket. In Android it's now present a tool called ndc which does exactly this job.

The syntax for the DNS related stuff is this:

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

The app automatically guesses the network device name and applies these commands each time a mobile network gets activated.

 
 
   
   
13
 
vote

我通过使用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&amp; postcount = 6 所有应用通过/ dev / socket / dnsproxyd unix套接字执行DNS查找。此线程还介绍为什么系统属性正在忽略。

要撤消这一点,请执行此操作,请执行
  iptables -t nat -L OUTPUT -n -v --line-numbers   

,找到与UDP DPT:53对应的行号:xxx.xxx.xxx.xxx:53 并做

  iptables -t nat -D OUTPUT *linenumber*   
 

I "solved" this problem by using an iptables rule to forward all port 53 connections to an intended DNS server; my experience on Android 4.4.2 with attempting to modify DNS settings while connected to 3G has been exactly as Leo described; ignorance of values in getprop |grep dns[0-9]\]: and dhcpd.conf.

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

The reason is as described here: http://forum.xda-developers.com/showpost.php?p=44722857&postcount=6 All apps do DNS lookups through netd via a /dev/socket/dnsproxyd unix socket. This thread also describes why system properties are being ignored.

To undo this, do

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

, find the line number that corresponds to udp dpt:53 to:xxx.xxx.xxx.xxx:53 and do

iptables -t nat -D OUTPUT *linenumber* 
 
 
 
 
1
 
vote
遗憾的是,从现在开始,可能是不可能的,但是,可以尝试 DNS换更换器。如果您扎根,这可能会有效,但没有保证。

使用的良好DNS服务将是Google的公共DNS服务。它倾向于在这里的这些类型的问题效果很好。

如果没有这项工作,请继续寻找答案。一个很好的网站,就像这样的事情是 xda开发人员。他们倾向于对Android的事情有很多答案。

 

Sadly, it may be impossible to do as of right now, however, it is possible to try DNS Changer. This may work if you are rooted, but there are no guarantees.

A good DNS service to use would be Google's public DNS service. It tends to work out very well for these type of issues right here.

If none of this works, keep looking for answers. A good site for things like this is XDA Developers. They tend to have many answers on things for Android.

 
 
1
 
vote

我在Kitkat cyanogenmod 11,这意味着我默认扎根了。尽管我只能报告失败:

1st方法:

当我尝试 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更换器" 这样的应用程序可以在网络变更时自动重新设置这些解析器。但是 getprop 报告我,仍然不是真正正在做的解决方案。

2nd方法[a]:

另一种我尝试的方式,是modifieng /system/etc/dhcpcd/dhcpcd-hooks/20-dns.conf 一个固定在那里的设置东西(但是要注意的网络名称和resclvers的数量可能有所不同)。没有成功。

2nd方法[b]:

/system/etc/dhcpcd/dhcpcd.conf 我删除了在DHCP否定的参数接受解析器。没有成功。

第3方法:

到目前为止,唯一可以使用的是使用"糟糕的人VPN" ,使用App"SSH隧道" ,使用Socks4,但使用我没有完全得到一个好的结果。

resume:

似乎是在其他地方设置的DNS,或者所有都会转发(劫持),只需立即移动到移动。

所以,怎么来?是否另一种肮脏的方法来提供具有拆除网络中立的工具的载体?

在你的情况下,你的问题是因为它。 如果sshtiunnel是替代解决方案,你是否有ssh尝试绕过载体审查?

 

I'm on KitKat Cyanogenmod 11, meaning I'm rooted by default. Despite that I can only report failure:

1st method:

When I try the adb shell with

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 

and then test to which IP hjfdkhfjkyuiwnwetbyebvtwgqwdi.tk resolve's... I get an NXDOMAIN response, meaning it didn't came from the OpenDNS nameserver I've set (which would return an answer with an alternative IP, to serve you adds).

When doing

getprop | grep dns 

I would only see what I've configured. However when switching from WiFi to mobile (3G or 4G/LTE) I see IP's that I recognize as being assigned to my mobile carrier. Apps like "DNSwitch" or "DNS Changer" can re-set those resolvers automaticly at network change. However what getprop reports me, is still not what's truly doing the resolving.

2nd method [a]:

Another way I tried, is modifieng /system/etc/dhcpcd/dhcpcd-hooks/20-dns.conf an set things fixed in there (but be aware network names and number of resolvers can differ). Without success.

2nd method [b]:

And in /system/etc/dhcpcd/dhcpcd.conf I removed the parameter to accept resolvers at DHCP negociation. No success either.

3th method:

So far the only thing that would work a little is using a "poor man VPN", using the app "SSH Tunnel", using SOCKS4, but using that I did not exactly got a good result.

Resume:

It seems like either DNS set elsewhere, or all are forwarded (hijacked) as soon the network is mobile.

So, how come? Is it another dirty way to provide carriers with a tool to demolish network neutrality?

In your case your question was because of that. Do you have SSH to try if SSHTunnel is a alternative solution to get around your carriers censoring?

 
 
 
 
1
 
vote

我今天遇到了同样的问题,并且感冒了输血。我试图开发一个应用程序"转发 r" 解决它。它不会在系统上更改DNS服务器,但是将DNS查询转发到另一台服务器。这种解决方法在Kitkat(Nexus 5/4.3和Moto Razr / CM11)上适合我。希望它可以帮助其他人。

 

I encountered the same problem today, and thanks to Transfusion. I tried to develop an app "DNS forwarder" to work it out. It does not change dns server on system, but forward dns queries to another server. This workaround works fine for me on Kitkat (Nexus 5/4.4.3 and Moto Razr/CM11). Hope it can help other as well.

 
 
 
 
0
 
vote

目前,我认为没有任何方法可以在移动数据上更改DNS。但是,如果您的手机植被植被,您可以使用

 

Currently I don't think there's any way to change your DNS on your mobile data. But if your phone is rooted you can use apps like Set DNS.

 
 
         
         

相关问题

0  XPOSED框架是否需要专门为设备或只是Android版本进行Buillt?  ( Does xposed framework require to be buillt specifically for the device or just t ) 
在安装Xposed Framework时,我需要特定于特定的二进制文件(如自定义恢复或ROM),或者只是适用于Android(在我的情况下的4.4.4)的应用程序。该设备是Galaxy Tab E T560。 更新12/7/2018 我试图将框架安装在自定义ROM上以及库存固件上,但没有运气。似乎xposed是...

1  如何使用Google照片/ DRIVE同步删除的照片?  ( How to sync deleted photos with google photos drive ) 
记住,当我拍照时,我可能需要2个相同的实例。我到家,开始Wi-Fi。所有照片都与照片同步。 现在 - 看着画廊我删除了一些 - 他们是坏照片。 如何确保当我删除图像时,它也会从照片应用程序中删除? ...

0  应用程序设置不起作用  ( Application setting not work ) 
我有micromax canvas gold a300及其应用程序设置在尝试打开它时不起作用,不幸停止了。 所以我无法在我的手机上打开应用程序设置。请帮助我 ...

1  播放商店在更新Nexus 5上的应用时继续崩溃  ( Play store keep crashing while updating apps on nexus 5 ) 
好的,我有一个nexus 5,库存,更新到最后一个android版本。 当我更新应用程序时,其中一些,在下载更新时,使Google Play商店崩溃到家。 我再次开始播放商店,我开始再次更新:这一次,没问题。 这不是一个大问题,但随机性有点恼人。 任何人都知道为什么会发生这种情况? ...

1  电池过夜?  ( Battery down over night ) 
我只发现了这个问题的原因是交换服务的问题。 但在我的情况下,电池在夜间跌至80%至9%,55%由 Android OS 消耗。 在该名称下运行的服务是什么可能导致3:30h的CPU时间? ...

1  启用大容量存储而不是MTP / PTP  ( Enabling mass storage instead of mtp ptp ) 
是否有任何方法可以在Android 4.4.2中启用旧 大众存储模式 现在我只能看到MTP或PTP模式,而不是旧版本的大众存储模式(2.3,我猜)。 旧的大众存储模式允许我在通过USB连接时在我的汽车中播放音频,但是从MTP开始时,我的音乐播放器无法识别我的设备。同时连接到PC时,它使我能够直接修改分区。 任何rom...

1  在摩托罗拉Moto G上删除主屏幕  ( Delete a homescreen on motorola moto g ) 
我想知道如何用Android 4.4(Kitkat)在摩托罗拉Moto G上删除空屏幕。 我试图放大,就像我曾经与我的较旧的Android手机(Galaxy S3)一样,但它不起作用。 ;( cheers ...

0  为什么拨号器有时无法拨打?  ( Why does dialler sometimes fail to dial ) 
我最近买了一个moto g2,带Android 4.4.4。我对它很满意,除了有时我拨打号码时,手机会立即拨打电话,甚至没有在最近拨打的列表中保存它。我尝试安装第三方拨号器,并找到完全相同的行为。那是怎么回事?如何解决它? 此外,除了通过制作和结束呼叫之外,似乎没有任何方法可以到达您的快速拨号/喜欢的联系人。我错过了...

1  如何强迫我的设备从充电器拉出更多瓦特?  ( How can i force my device to pull more watts from charger ) 
我有三个设备,Nobis NB7022 S,Droid Mini,华硕备忘录7(ME170CX)。我正在使用一个额定电流为2000mA的充电器。 Nobis从墙上出口绘制8到10瓦。机器人迷你和华硕只能从同一充电器和线上拉3瓦。华硕只是几周大的,而Droid和Nobis是大约一岁的岁月。 权力抽取差异的原因是什么? ...

0  如何在Xiaomi Redmi 1s上启用软键?  ( How to enable soft keys on xiaomi redmi 1s ) 
如何在Android设备上启用Nexus 5(如触摸屏上的导航键)?我的设备是Xiaomi Redmi 1s运行Kitkat OS。而且,可以在没有扎根手机的情况下完成? ...

1  SMS问题 - Moto G更新4.4.4  ( Sms problem moto g update 4 4 4 ) 
在更新到4.4.4之后我的moto g出现了问题。 Hoogout App停止使用短信。除此之外,我无法激活工厂SMS应用程序。 我试图在我尝试发送一些消息时安装一些替代的SMS应用程序和所有这些崩溃。 如果我发送正常的HOCKOUT一切完美的工作,但如果我选择APP崩溃的SMS功能。 我检查logcat并提出...

50  adb backup创建0字节文件;即使我从未设置为一个,也会提示当前备份密码; “无法设置密码”桌面备份密码  ( Adb backup creates 0 byte file prompts for current backup password even though ) 
问题: 每次运行adb备份时,我会在主屏幕底部附近的消息说 Backup starting... ,后跟一条消息,然后是一条消息,然后是一条消息 Backup finished 几秒钟后来尽管我正在使用17 GB的设备内存,并且使用0个字节的大小创建生成的备份文件。我没有收到错误消息,没有反馈,无论是什么都是错误的...

11  如何(取消隐藏WhatsApp联系/删除WhatsApp帐户)在三星Galaxy S5中?  ( How to unhide whatsapp contact remove whatsapp account in samsung galaxy s5 ) 
请耐心等待我解释这种情况。这似乎是我的奇怪情况,但它可能发生在每个人都使用Android。 我使这个特定于三星Galaxy S5,因为这个问题不会发生在我的较旧的androids 2.x.x上,因为它们在联系人中具有不同的结构。但它确实发生在我妈妈的星系中。所以它可能发生在三星手机和/或Android 4.x上。 重...

2  WiFi连接有时然后断开连接,然后从未连接  ( Wifi connects for sometimes then disconnects and then never connects ) 
当我第一次买它时,他们是我手机中的WiFi的一个大问题... 我的手机是一个 spice stellar mi-439,Android Kitkat V4.4.2,1Ghz处理器,512RAM,4GB内部,目前16GB可扩展。 问题是WiFi连接在我打开WiFi并输入WiFi网络但在浏览的某个时间后断开连接,即使也...

5  “不幸的是,Google Play服务已停止。”在Android L开发人员预览  ( Unfortunately google play services has stopped on android l developer previe ) 
我正在在我的nexus 5上运行android l开发人员预览。我正在尝试安装Google收件箱Beta,但我只能到达注册屏幕。一旦我按下注册按钮,我总是得到"遗憾的是,谷歌播放服务已经停止了" 消息。我想知道除了恢复Kitkat 4.4外还有方法是否有解决这个问题。任何想法? ...




© 2021 it.wenda123.org All Rights Reserved. 问答之家 版权所有


Licensed under cc by-sa 3.0 with attribution required.