Moto Edge 国行系统强行追加 114 DNS 的探究

11 天前
 susandownes

最近折腾 Moto Edge 60 Pro (XT2507-5 ,国行) 时,发现连接任意 WiFi 系统都会强制追加 114 DNS (不管 DHCP 下发了一个还是两个 DNS ,亦或使用静态 IP 手填 DNS 都免不了),这直接破坏了我在 OpenWrt 上的 ADG 和 Mosdns 策略。

经过一番排查和实验,总结出这些应对方法。

路由器有控制权

iptables -t nat -A prerouting_lan_rule -m mac --mac-source <手机 MAC> -p udp -d 114.114.114.114 --dport 53 -j DNAT --to-destination 192.168.X.1
iptables -t nat -A prerouting_lan_rule -m mac --mac-source <手机 MAC> -p tcp -d 114.114.114.114 --dport 53 -j DNAT --to-destination 192.168.X.1

(最无感

手机无 root

(不喜欢 VPN 通道被占用

手机已 root

一开始以为是 overlay 配置,结果 cmd overlay 验证并不涉及 DNS 。 抓 dumpsys connectivity ,确认是 ClientModeImpl 里往 LinkProperties 里强加的。 最终在 /apex/com.android.wifi/javalib/service-wifi.jar 找到关键方法:addBackupDnsServerIfNeeded()。

(治标

iptables -I OUTPUT -d 114.114.114.114 -p udp --dport 53 -j REJECT
iptables -I OUTPUT -d 114.114.114.114 -p tcp --dport 53 -j REJECT

(治本

罪魁祸首↓

private void addBackupDnsServerIfNeeded() {
    Iterator<InetAddress> it = this.mLinkProperties.getDnsServers().iterator();
    int i = 0;
    while (it.hasNext()) {
        if (it.next() instanceof Inet4Address) {
            i++;
        }
    }
    if (i == 1) {
        try {
            this.mLinkProperties.addDnsServer(InetAddress.getByName("114.114.114.114"));
        } catch (UnknownHostException unused) {
            if (this.mVerboseLoggingEnabled) {
                log("Adding 114 DNS Server Fails");
            }
        }
    }
}

吐槽

AOSP 已经有 Fallback 机制了,在无任何可用 DNS 时才会追加 8.8.8.8 。 小米一加、Moto 搞这种骚操作,看似提升了小白的网络体验,实际上剥夺了用户选择权,都是傻*

3768 次点击
所在节点    DNS
29 条回复
mscsky
10 天前
这个可以手动关掉
RobinHuuu
10 天前
多说一句,手机都有隐私保护功能,Mac 地址可能是动态的
Hephaistos
10 天前
因为都不相信运营商的 dns 了……被投诉多了就想办法解决呗
johnjiang85
10 天前
原因很多,这里有冰山一角,https://lovelyping.com/?p=338
yanxu4780
10 天前
安卓 10 还是 11 就已经开始这样做了。不过首选还是自己的 DNS ,备选会加上 114
yanxu4780
10 天前
我自己用的时候,基本都是在路由器端进行 DNS 劫持,除非微信这种把加密 DNS 直接写进程序的,其他基本都会进行劫持处理。
BanShe
10 天前
网关直接劫持+1
jackOff
10 天前
这不是 openwrt 里默认的 dnsmasq 就能拦截的吗?现在拦截不了的是手机软件自带 doh 查询
jackOff
10 天前
而且退一万步,当厂商把 dns 查询,广告业务,反炸查询,正常业务查询,全部使用一个 api ,你也没办法,最好还是手机物理隔离

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1154563

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX