SukkaW / Koolshare-Clash

:cat: Run Clash Tunnel on Koolshare OpenWrt
https://koolclash.js.org
GNU General Public License v3.0
1.33k stars 241 forks source link

Clash DNS 运行机制为什么不适合用于透明代理? #6

Open ShadowLyin opened 5 years ago

ShadowLyin commented 5 years ago

Clash 的透明代理存在问题——客户端获得的 IP 地址和代理服务器实际连接的地址可能完全不同,并且客户端获得的 IP 可能也完全不会被用到。这意味着 KoolClash 可能并不是最好的透明代理方案,需要取舍。

能大致说明一下么?看这个不是很清楚。。

SukkaW commented 5 years ago

image

如图,浏览器显示连接的 IP 是 47.246.5.233 台湾省台北市阿里云,但是实际上流量是发往日本东京阿里云的。 这对正常上网实际上是毫无影响的。一般人打开浏览器去用 Google、去看 YouTube、看 Netflix 是毫无影响的。但是在一些特殊设计(比如内部实现了自己的 DNS 解析机制)的应用程序时不能保证不会存在问题。

SukkaW commented 5 years ago

相对来说,理想的解决方法是由 Clash 解析 DNS 记录同时得到 IP,将 IP 而不是 Host 发往代理服务器,确保客户端拿到的 IP 和流量的目的地 IP 是一样的。但是单纯使用 Clash 的 DNS 进行解析就可能会存在 DNS 污染的问题、和海外 CDN 优化问题。 我一直倾向于 KoolSS 的解决方案——KoolSS 有一套独立的 DNS 解析防污染。但是能不能实现还是得看 Clash 的变动。

ShadowLyin commented 5 years ago

相对来说,理想的解决方法是由 Clash 解析 DNS 记录同时得到 IP,将 IP 而不是 Host 发往代理服务器,确保客户端拿到的 IP 和流量的目的地 IP 是一样的。但是单纯使用 Clash 的 DNS 进行解析就会存在 DNS 污染的问题。 我一直倾向于 KoolSS 的解决方案——由 KoolSS 实现一套独立的 DNS 解析防污染。但是能不能实现还是得看 Clash 的变动。

我大致了解了,谢谢解答,不过如果使用将IP发往代理服务器的这一解决方案,除了DNS污染这个问题以外还会导致最终连接的IP不是离代理服务器最近的吧。

SukkaW commented 5 years ago

不过如果使用将IP发往代理服务器的这一解决方案,除了DNS污染这个问题以外还会导致最终连接的IP不是离代理服务器最近的吧。

KoolSS 内置的 DNS 解析方案包括 dns2socks 和 ss-tunnel 都可以实现远端解析,所以优化海外 CDN 不是没有可能的。

ShadowLyin commented 5 years ago

感谢解答,我已经没有问题了,只能等 clash 对于 DNS机制的改变了

BirkhoffLee commented 5 years ago

相对来说,理想的解决方法是由 Clash 解析 DNS 记录同时得到 IP,将 IP 而不是 Host 发往代理服务器,确保客户端拿到的 IP 和流量的目的地 IP 是一样的。但是单纯使用 Clash 的 DNS 进行解析就可能会存在 DNS 污染的问题、和海外 CDN 优化问题。 我一直倾向于 KoolSS 的解决方案——KoolSS 有一套独立的 DNS 解析防污染。但是能不能实现还是得看 Clash 的变动。

KoolSS 的防污染是什么样的?

SukkaW commented 5 years ago

@BirkhoffLee KoolSS 引入了 ss-tunnel、dns2socks、pdns、ChinaDNS 之类的外部 DNS 组件和 OpenWrt 中内置的 dnsmasq 进行分流。因为是基于域名分流,所以和 Clash DNS 有 fallback 不同,KoolSS 分流后的 DNS 要快一些。 同时,dns2socks、ss-tunnel 等依赖的外部 DNS 组件拿到的 IP 至少是可用的(指没有污染、不一定直连能通),所以 KoolSS 的 DNS 的解析结果是可以给其它流量不经过 Clash 的设备使用的。

Clash 的话只有引入 fallback 以后才能确保 DNS 解析结果是一定没有污染的,但是在 DNS 配置文件中哄加入 fallback 又会拖慢解析速度。