自觉上网技术已经很好了,于是买来一台 Chromecast with Google TV 玩,结果激活的时候死活连不上 WiFi。

要解决 Google 的问题还得用 Google,果然查到事有蹊跷。

Google 的设备在初次连接 WiFi 的时候会去访问 ntp 服务器较对时区,如果访问失败则会判定该 WiFi 无法访问 internet 并拒绝连接这个 WiFi。

在我朝,显然没法轻易访问到time.android.com这个地址,所以我在初始化设备在激活的时候,就直接连不上 WiFi 了。

如果设备已经初始化,并开启 adb 调试,则可通过 adb 命令来修改设备的 ntp 服务器地址配置:

1
adb shell settings put global ntp_server <new-ntp-server>

但我这台设备还未完成初始化,更没法开启 adb 调试,于是我只能借助外部力量。

我决定去路由器上用 dnsmasq 干一把 DNS劫持,这样 Chromecast 要访问time.android.com这个地址时,能被 dnsmasq 指向203.107.6.88这个 IP 地址。

我用的是华硕 RT-AC86U 路由器,要干 dnsmasq 需要刷梅林固件

使用 SSH 登录路由器后,可通过创建/jffs/configs/dnsmasq.conf.add这个文件来启用 dnsmasq,文件里要写入:

1
addn-hosts=/jffs/configs/hosts

然后创建一个自己的 host 规则文件/jffs/configs/hosts,写好要劫持的域名:

1
2
192.168.50.1 router.asus.com    # 路由器控制台地址
203.107.6.88 time.android.com # Android ntp Server mirror

最后重启路由器已让 dnsmasq 规则生效。