Sing-box 实现透明代理原理

1. 透明代理

透明代理(Transparent Proxy)是一种特殊类型的代理服务器,它可以在客户端不做任何配置的情况下,自动将流量转发到代理服务器进行处理。 相比普通代理需要在每个客户端进行配置,透明代理降低了管理和部署成本。

2. TUN/TAP

TUN/TAP 是一种虚拟网络内核设备,可以实现在用户空间和内核网络站之间传输 IP 数据包。 用户空间打开并注册 TUN/TAP 设备后,可以想 TUN/TAP 设备写入和读取数据报包。 TUN 数据包经内核协议栈处理并路由出主机, TAP 数据包直接在主机网桥进行处理转发。不良林的视频里用可视化方式将 TUN/TAP 代理1讲得更清楚。

3. 主路由表和策略路由表

默认情况下,所有的路由规则都存储在主路由表中,策略路由表是除主路由表之外的其他路由表。 数据包能否被策略路由表处理,取决于路由策略的设置: 内核在路由数据包时,首先检查是否存在路由策略 (routing policy) , 如果存在策略,内核会根据该策略规则,指定使用哪个策略路由表; 如果不存在路由策略,则使用主路由表254 。 在策略路由表中查找路由,如果找到匹配项就路由出去,如果策略路由表中没有匹配项,则回溯到主路由表254查找。

4. Wireguard

WireGuard 和 TUN/TAP 设备有着密切的关系,它在用户空间实现了 WireGuard 协议栈和加密算法,使用了操作系统提供的 TUN 设备。 WireGuard 通过 TUN 设备与内核网络栈交互,将需要加密的出站 IP 数据包从内核获取,并将加密后的入站 IP 包注入内核。 TUN 设备为 WireGuard 提供了一个便捷的接口,使得在用户空间运行的 WireGuard 进程能够方便地访问和操作内核网络协议栈, TUN 设备让 WireGuard 实现 VPN 成为可能。

5. Summary

sing-box 如何截获所有系统流量呢?实际上 sing-box 也创建了 TUN 设备,通过策略路由表截获用户空间的 IP 数据包。

Footnotes: