Linux SOCKS5 隧道不适用于 udp 流量

use*_*323 5 linux ssh tunnel udp socks

我使用的命令ssh -N -D 0.0.0.0:1080 localhost对我的 Web 浏览器非常有效,但是当我尝试对 UDP 流量应用程序进行隧道传输时,它不起作用。

我认为socks5应该能够处理UDP流量,还是我需要设置其他东西?

mr.*_*tic 10

SOCKS 5 支持 UDP。OpenSSH声称实现了 SOCKS4 和 SOCKS5,但它只实现了SOCKS5 协议的一个子集

您不会找到文档中支持或不支持的内容的详细信息,请查看源代码:

    if (s5_req.version != 0x05 ||
        s5_req.command != SSH_SOCKS5_CONNECT ||
        s5_req.reserved != 0x00) {
            debug2("channel %d: only socks5 connect supported", c->self);
            return -1;
    }
Run Code Online (Sandbox Code Playgroud)

(从函数channel_decode_socks5()channels.c,OpenSSH的-6.4p1从11月8日,2013年更新这仍然是案件最多的OpenSSH-7.6p1,2017年10月的OpenSSH-8.2p1,2020年二月)

SSH_SOCKS5_CONNECT命令操作码 1,它隐含地是一个 TCP 连接。命令操作码 3UDP ASSOCIATE用于 UDP 代理(这是添加到SOCKS5 的内容,SOCKS4 或 4a 不支持 UDP)。

有支持 UDP 的商业和免费(例如Dante)SOCKS5 代理可用。

如果您不需要动态UDP 端口转发,您可以使用以下方法之一通过 SSH 连接设置一些(提前选择目的地)UDP 转发:通过 SSH 隧道的 UDP 流量 (我推荐这种socat方法,我发现它努力工作。)