diff --git a/docs/how_it_works_zh.md b/docs/how_it_works_zh.md index ac1bf75..1adfcbe 100644 --- a/docs/how_it_works_zh.md +++ b/docs/how_it_works_zh.md @@ -12,14 +12,14 @@ dae 支持以域名、源 IP、目的 IP、源端口、目的端口、TCP/UDP、 其中,源 IP、目的 IP、源端口、目的端口、TCP/UDP、IPv4/IPv6、MAC 地址均可解析 MACv2 帧而得到。 -**进程名**通过在 cgroupv2 挂载点侦听本地进程的 socket、connect、sendmsg 系统调用,并读取和解析进程控制块中的命令行来得到的。这种方式会比 clash 等用户态程序对传入的 socket 扫描整个 procfs 来得到进程信息要快得多。 +**进程名**通过在 cgroupv2 挂载点侦听本地进程的 socket、connect、sendmsg 系统调用,并读取和解析进程控制块中的命令行来得到的。这种方式会比 clash 等用户态程序对传入的 socket 扫描整个 procfs 来得到进程信息要快得多(后者甚至是 10ms 级的)。 **域名**通过劫持 DNS 请求,将 DNS 请求的域名与所查 IP 进行关联来得到。尽管这种方式有一些问题: 1. 可能会出现误判。例如需要分流到国内和国外的两个网站拥有同一个 IP,且在短时间内同时被访问,或浏览器有 DNS 缓存。 2. 用户的 DNS 请求必须通过 dae。例如将 dae 设为 DNS,或在 dae 作为网关的情况下使用公共 DNS。 -但相比其他方案,这种方案已经是较优解了。例如 Fake IP 方案存在无法通过 IP 分流且存在严重的缓存污染问题,而域名嗅探方案存在只能嗅探 TLS/HTTP 等流量的问题。实际上,通过 SNI 嗅探来进行分流是更优选择,但由于 eBPF 对程序复杂度的限制,以及对循环的支持不友好,我们无法在内核空间实现域名嗅探。 +但相比其他方案,这种方案已经是较优解了。例如 Fake IP 方案存在无法通过 IP 分流且存在严重的缓存污染问题,而域名嗅探方案存在只能嗅探 TLS/HTTP 等流量的问题。实际上,通过 SNI 嗅探来进行分流确实是更优选择,但由于 eBPF 对程序复杂度的限制,以及对循环的支持不友好,我们无法在内核空间实现域名嗅探。 因此,当 DNS 请求无法通过 dae 时,基于 domain 的分流将会失效。 @@ -43,11 +43,15 @@ dae 在内核的较早路径上就对流量进行了分流,直连流量将直 因此,对于直连流量,dae 不会进行 SNAT,对于“旁路由”用户,这将形成非对称路由,即客户端设备发包时流量通过 dae 设备发送到网关,收包时由网关直接发给客户端设备,绕过 dae 设备。 -> 这里的旁路由定义为代理程序的设备和上层路由器属同一个网段和链路。例如笔记本电脑在 192.168.0.3,旁路由在 192.168.0.2,路由器在 192.168.0.1。三层逻辑拓扑为:笔记本电脑 -> 旁路由 -> 路由器。 +> 这里的旁路由定义为:1,被设为网关。2,对 TCP/UDP 进行 SNAT。3,与上层路由器属于同一个网段和链路。 +> +> 例如笔记本电脑在 192.168.0.3,旁路由在 192.168.0.2,路由器在 192.168.0.1。三层逻辑拓扑为:笔记本电脑 -> 旁路由 -> 路由器,且在路由器一侧只能看到源 IP 是 192.168.0.2 的 TCP/UDP 流量,而没有 192.168.0.3 的 TCP/UDP 流量。 +> +> 据目前所知,我们是第一个对旁路由进行定义的(笑)。 这一情况将带来一个优点和一个可能的问题: 1. 会带来性能提升。由于回包不经过 dae,减少了路径,直连性能将变得和没有旁路由一样快。 2. 会导致高级防火墙的状态维护失效从而丢包(例如 Sophos Firewall)。这一问题在家用网络中一般不会出现。 -以 benchmark 来看,dae 的直连性能和其他代理程序相比就像个怪物。 \ No newline at end of file +以 benchmark 来看,dae 的直连性能和其他代理程序相比就像个怪物。