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

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

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

    腾讯云最新优惠活动来了:云产品限时1折,云服务器低至88元/年 ,点击这里立即抢购:9i0i.cn/qcloud,更有2860元代金券免费领取,付款直接抵现金用,点击这里立即领取:9i0i.cn/qcloudquan

    (福利推荐:你还在原价购买阿里云服务器?现在阿里云0.8折限时抢购活动来啦!4核8G企业云服务器仅2998元/3年,立即抢购>>>:9i0i.cn/aliyun

    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  
       135 天前
    tproxy 是支持 udp 的。

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

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


    http://www.vxiaotou.com