💡
原文中文,约15800字,阅读约需38分钟。
📝
内容提要
TProxy是一种透明代理方式,通过替换数据包的socket实现伪装发送和接收数据。利用netfilter hook和iptables socket规则可以优化性能。
🎯
关键要点
- TProxy是一种透明代理方式,通过替换数据包的socket实现伪装发送和接收数据。
- TProxy于Linux 2.6.28引入,不同于NAT,TProxy不修改数据包标头。
- IP_TRANSPARENT选项允许socket将非本机地址视为本机地址,伪装发送和接收数据。
- 内核网络栈根据数据包四元组找到匹配的socket,将数据包放入接收队列。
- 利用netfilter hook可以在协议接收方法之前修改数据包的socket。
- TPROXY模块的实现主要在net/netfilter/xt_TPROXY.c中,处理数据包的socket替换。
- 通过nf_tproxy_get_sock_v4()函数查找合适的socket进行替换。
- UDP和TCP的socket匹配方法不同,TCP需要处理监听状态和已建立连接状态。
- 使用iptables TPROXY扩展进行重定向时,需要策略路由引导数据包进入INPUT链。
- 使用-m socket优化性能,避免重复的socket替换,提高处理效率。
- 通过setsockopt设置IP_RECVORIGDSTADDR选项,可以获取原始目标地址。
- 提供了完整的示例代码,展示如何使用TProxy进行透明代理。
➡️