透明代理模式下的dns请求能否像vpn模式一样按路由转发

question

#1

目前在 VPN 模式下,设置好「远程 DNS」地址后,将「DNS 转发」设置为关闭,可以做到:访问大陆地址解析到大陆的 IP、访问 GFWList 里的地址不会受到 DNS 污染的影响。

我现在还在使用其它 VPN 软件(Adguard),将 DNS 请求转发给透明代理模式下的 Shadowsocks,但是如果不把 SS 的「DNS转发」打开的话,访问被 DNS 污染的地址会无法访问。打开「DNS转发」的话,会把所有的 DNS 请求转发过去而不是分路由转发,这样会导致访问大陆的地址非常缓慢。

能否将透明代理模式下的DNS请求像VPN模式一样按路由转发呢?


#2

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.


#3

查看了下 DNS 的 log,在 dns forward 打开的时候(左图),所有 DNS 请求都被转发,bbc 返回了未被污染的结果,xiaomi 返回的是 aws 美东的 ip(其它类似 weixin 的 CDN 等也都解析到了非大陆地址)。关闭 dns forward 后(右图),bbc 的 dns query 被污染,xiaomi 返回的是大陆的地址。

手机没有 root 没有找到可以 query 本地 DNS server 的工具。查看的是 VPN 模式 Adguard 的 filter log。应该确定已经把 DNS 设定为本地 ss 的端口,因为两次测试都是用的透明代理模式下的 ss,唯一的差别只有开关了 ss 的 dns forward 选项。


#4

I don’t think Adguard uses your DNS settings as you would think. Try specifying an invalid address.


#5

测试了以下几个状态

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 机制。


#6

用 Daedalus 测试也是同样的结果


#7

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.


#8

你好, 你能指导下 在 win10 上编译shadowsocks 吗,