V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
xiaohusky
V2EX  ›  问与答

为什么透明代理中的 REDIRECT 方式仅支持 TCP,不支持 UDP?

  •  
  •   xiaohusky · 123 天前 · 1206 次点击
    这是一个创建于 123 天前的主题,其中的信息可能已经有所发展或是发生改变。

    REDIRECT 方式是通过 iptables 规则将流量重定向到代理服务器的本地端口。它是通过修改 IP 层的目标 IP 地址和端口号来实现的。当网络数据包经过 iptables 规则时,它们的目标 IP 地址和端口会被修改为代理服务器的 IP 地址和端口,从而将流量重定向到代理服务器。

    然而,这种修改目标 IP 地址和端口的方式只适用于 TCP 协议,因为 TCP 是面向连接的协议,可以通过修改目标 IP 地址和端口来建立连接。而对于 UDP 协议,它是无连接的,没有建立连接的过程,因此无法通过修改目标 IP 地址和端口来实现透明代理。

    我搜到的答案是这个,但是小弟理解能力比较差,有大佬解释一下吗?或者给一个例子

    4 条回复    2023-12-26 21:18:53 +08:00
    kyor0
        1
    kyor0  
       123 天前
    tproxy 是支持 udp 的。

    我个人更想知道 tproxy 和 REDIRECT 有啥区别,之前倒腾 passwall 的时候查过,但没啥收获
    ysc3839
        2
    ysc3839  
       123 天前 via Android
    印象中在哪看过分析,就是因为 Linux 没有实现。好像是因为 TCP 有连接状态,所以 Linux 记下了原始的目标,重定向到代理程序后,程序可以获取到目标。而 UDP 获取不到目标,就不支持。
    xiaohusky
        3
    xiaohusky  
    OP
       123 天前
    @ysc3839 我又去搜索了一下,好像就是因为这个原因,UDP 没有记录原始的目标,所以修改后就改不回去了,TCP 记录过原始目标,修改后该可以改回去
    tool2d
        4
    tool2d  
       123 天前
    我一般 UDP 都是写死地址的,linux 可以针对 uid 单独进程做 iptables 规则,只要能确保进程只请求一个 udp 服务器,并且是固定的,那么 REDIRECT 就可以修改 nat ip4 头部信息。

    TCP 转发是 iptables 记录下来源地址的。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   5388 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 05:53 · PVG 13:53 · LAX 22:53 · JFK 01:53
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.