我有一个外部服务器,我使用它从远程桌面使用动态端口转发连接到互联网。我将所有连接转发到本地端口 9150。因此,我在所有应用程序中都使用该 socks5 代理。但问题出现在某些应用程序使用 UDP 进行连接,并且该外部服务器中的所有 UDP 端口都被阻止时。
不使用 VPN 是否可以发送 UDP 流量?
答案1
这个答案看起来 SOCKS5 接受 UDP 的功能尚未在 SOCKS 的 SSH 版本中实现。
编辑:上述答案主要关注 2013 年 11 月 8 日 OpenSSH-6.4p1 的编程方面,尤其是channel_decode_socks5
来自源代码的功能channels.c
。
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;
}
查看当前的源代码(因为上面链接中的源代码版本较旧)还发现在当前源代码中,只实现了socks connect,没有实现UDP。
截至 2016 年 3 月的当前源代码:
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;
}
从那时起,负责“仅”允许 TCP 而不允许 UDP 的功能channel_decode_socks5
就没有改变过。这就是 UDP 流量不会通过 openSSH 打开的 socks 代理的原因。
如果你确实需要 UDP,那么有几种可能性:
- a) 使用 VPN 连接而不是 SSH,例如 openVPN。在我看来,这是最简单的可能性。
- b) 向 openSSH 的开发人员提交功能请求。如果要实现此功能,可能需要更长的时间。
- c) 自己编写该功能,并可能与社区共享。根据您的 C 编程技能,这可能比 openVPN 解决方案更快。