fake-ip 不是用来解决 DNS 泄露问题的
它的实际作用是让 tun 模式的代理也能像传统 HTTP/SOCKS5 代理一样支持域名连接,减少不必要的 DNS 解析,并且充分利用代理软件的路由规则(分流)功能。
传统的 HTTP 或者 SOCKS5 代理都是可以直接用域名建立连接的(有的地方也称为“远程 DNS 解析”),应用发起请求的时候不需要先通过系统进行 dns 解析得到 ip ,直接用域名向代理发起连接请求,这样的话就可以充分利用代理软件的域名分流规则的功能。
但是 tun 模式不一样,因为 tun 是虚拟网卡的原理,其它程序并不知道自己使用了代理,是像平常一样需要先进行 dns 解析得到 IP ,再用 IP 建立 tcp 或者 udp 连接,这样相比传统代理会带来一些麻烦”
1. 代理软件就得分两步处理其它程序的请求,先是接管 dns 解析,再接管后续的真正的连接建立,比较耗时
2. 第二步建立连接的时候代理软件拿到的是 ip ,域名信息没有了,要实现域名分流规则的功能就很麻烦,现在的 fshexray 等代理内核解决这个问题的方法是“协议嗅探”,就是尝试通过应用层的 http/tls 里面的信息来获取域名,这种方法实现域名分流的准确性和普适性有限
而 fake-ip 就是用来解决这个问题的,fake-ip 模式下 tun 模式的代理软件接管了 dns 解析之后,对于被代理的程序的 dns 请求不会实际进行解析,而是给相应的域名关联一个假 ip ,后续程序拿到假 ip 建立实际连接的时候,代理软件就可以知晓这个请求对应的域名,从而像传统代理一样可以直接用域名建立连接(远程解析),或者进行更准确的域名分流等操作。
好处就是提高 tun 模式代理的效率,并且补全了原本 tun 模式相比传统代理反而不支持的一些功能。
缺点是假 ip 会进入系统 dns 缓存,如果关掉代理之后可能会上不了网,这时候需要清除一下系统的 dns 缓存。 |