Linux SOCKS5 隧道不适用于 UDP 流量

Linux SOCKS5 隧道不适用于 UDP 流量

我正在使用的命令ssh -N -D 0.0.0.0:1080 localhost在我的网络浏览器上运行得很好,但是当我尝试隧道传输 UDP 流量应用程序时它却不起作用。

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

答案1

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;
    }

(来自 2013 年 11 月 8 日发布的 OpenSSH-6.4p1channel_decode_socks5()中的功能。channels.c更新这种情况一直持续到2017 年 10 月的 OpenSSH-7.6p1 和2020 年 2 月的 OpenSSH-8.2p1。)

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

有商业的也有免费的(例如但丁) 支持 UDP 的 SOCKS5 代理可用。

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

相关内容