Этот ответ выглядит так, что способность SOCKS5 принимать UDP не реализована в SSH-версии SOCKS.
Изменить: вышеупомянутый ответ сфокусирован на программном аспекте OpenSSH-6.4p1 от 8 ноября 2013 года, особенно на функции 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, а UDP - нет.
Текущий исходный код на март 2016 года:
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;
}
Функция channel_decode_socks5
отвечающая за разрешение "только" TCP, а не UDP, с тех пор не изменилась. По этой причине трафик UDP не будет проходить через socks-прокси, открытый openSSH.
Если вам действительно нужен UDP, у вас есть несколько возможностей:
- а) использовать VPN-соединение вместо SSH, например, openVPN. Самая простая возможность в моих глазах.
- б) отправить запрос на добавление функций разработчикам openSSH. Это может занять гораздо больше времени, если оно вообще будет реализовано.
- в) запрограммируйте функцию самостоятельно и, возможно, поделитесь ею с сообществом. В зависимости от ваших навыков программирования на C, это может быть даже быстрее, чем решение openVPN.