深入理解 Linux TProxy

深入理解 Linux TProxy

💡 原文中文,约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进行透明代理。
➡️

继续阅读