目前在 VPN 模式下,设置好「远程 DNS」地址后,将「DNS 转发」设置为关闭,可以做到:访问大陆地址解析到大陆的 IP、访问 GFWList 里的地址不会受到 DNS 污染的影响。
我现在还在使用其它 VPN 软件(Adguard),将 DNS 请求转发给透明代理模式下的 Shadowsocks,但是如果不把 SS 的「DNS转发」打开的话,访问被 DNS 污染的地址会无法访问。打开「DNS转发」的话,会把所有的 DNS 请求转发过去而不是分路由转发,这样会导致访问大陆的地址非常缓慢。
DNS requests are handled the same way in transproxy mode as in VPN mode. Please check if you’re using the DNS port configured in shadowsocks-android as your DNS.
It’s probably better if you set up ad-blocking at server side.
手机没有 root 没有找到可以 query 本地 DNS server 的工具。查看的是 VPN 模式 Adguard 的 filter log。应该确定已经把 DNS 设定为本地 ss 的端口,因为两次测试都是用的透明代理模式下的 ss,唯一的差别只有开关了 ss 的 dns forward 选项。
SS:透明代理模式,DNS 端口 5450,DNS forward 打开。
Adguard:VPN 模式,代理关闭(不使用 ss 的代理功能),DNS 指向 127.0.0.1:5450。
访问状态:DNS 均使用远端 DNS 服务器解析,可以正常访问 BBC News 应用(BBC 只被 DNS 污染,ip 没有别墙),不能访问 Google(Google ip 被墙),符合预期。
关闭 DNS forward 后:BBC News 无法访问, Log 中 DNS query 被误导到错误的 ip。
打开 DNS forward,将 Adguard 的 DNS 指向错误的地址(127.0.0.1:5460):BBC News 无法访问,查看 Log 中的 DNS query 返回为空。
以上几种设置方式均不影响大陆地址访问(除了打开 DNS forward 会导致使用海外 CDN 导致访问略微缓慢),即使是使用了错误的 DNS 地址。不清楚是 Adguard 或 Android 系统的 DNS 有 fallback 机制。
I was not able to reproduce your issue with transproxy mode, DNS forwarding off, bypass LAN and China routes and Adguard. Please double check your route settings in shadowsocks-android.