GameXG / TcpRoute2

TcpRoute , TCP 层的路由器。对于 TCP 连接自动从多个线路(电信、联通、移动)、多个域名解析结果中选择最优线路。

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

整理 config 样例文件

GameXG opened this issue · comments

目前的格式比较乱,并且没有标注各个参数的默认值。
需要整理一下。

<客户端dns解析纠正功能
.............................................
例子:
PreHttpPorts=[80,]
PreHttpsPorts=[443,]
这个是默认值,对 80 端口的 http 请求启用,对 443 端口的 tls 连接启用。
.............................................
PreHttpPorts=[0,]
PreHttpsPorts=[0,]
关闭这个功能>

DnsResolve=true 之间的关系没搞懂:

假如我开启 dns 解析纠正功能:

PreHttpPorts=[80,] PreHttpsPorts=[443,]

然后代理段的 DnsResolve=true,那么到底是直接用本地解析的结果还是会被 dns 解析“纠正”?这个纠正是否就是通过代理重新解析?

同理,当 dns 解析纠正功能关闭,而 DnsResolve=false 时又会怎么样?

其实主要问题就是: dns 解析纠正 是否就是舍弃本地 dns 解析结果而通过代理去解析?如果不是,它与 DnsResolve=flase 时有何区别?

一般情况下 “客户端dns解析纠正功能” 是不会用到。只有使用 redsocks、Proxifier 等软件强制全局代理时,redsocks 传递给 TcpRoute 的地址是已经解析后的 ip 地址,这时 TcpRoute 无法获得域名,上游代理更无法获得网站域名,TcpRoute 和上有代理都无法执行任何dns解析了;这时开启这个功能 TcpRoute 将会尝试通过读取http、https头来获得目标网站域名,然后将目标网站的ip地址替换成域名继续进行代理操作。

DnsResolve=true 指的是使用 TcpRoute 进行 DNS 解析,主要用到直连线路上面,代理线路建议设置为 false 。
DnsResolve 设置为 true 时目前将会同时使用本地系统的dns及 hosts 文件进行dns解析,如果解析获得多个 ip 地址,会同时连接多个 ip 地址,最终使用最快建立连接的ip。为false时TcpRoute不会处理dns解析,而会直接将域名传递给上游代理,直连一般是系统进行dns解析并连接一个ip地址;远程代理是直接将域名转发给远程代理,由远程代理进行dns解析。

和 PreHttpPorts 的关系是,如果前端是 redsocks 时 redsocks 传递给 TcpRoute 的地址是 ip 地址而不是域名,这时如果不使用“客户端dns解析纠正功能”那么 TcpRoute 无法获得实际域名,所有dns操作都无法生效, ip 地址无法执行 dns 解析。

不过一般的软件不会出现这种情况,chrome 默认会执行远端dns解析,即将域名传递给TcpRoute,firefox 可以开启远端dns解析(很早之前是默认关闭远端dns解析,现在什么情况就不清楚了)。当开启远端dns解析时 TcpRoute 获得的是域名,“客户端dns解析纠正功能” 没有效果。

@GameXG 非常感谢解答,现在清楚了!目前正是用 TcpRoute2 来做 Redsocks 的前置代理实现多代理的线路优化,效果不错!

对了,还有个小 bug 我开个 Issues 吧。

f0c9ecf 完成。