Как заставить SOCKS прокси (Danted) открыть UDP порт

Вопрос или проблема

Я почти потратил 1 день на эту проблему.

У меня 2 ПК:
1. Windows как клиент, 10.20.30.20
2. Debian(последняя версия) как сервер, 10.20.30.10

Я установил Dante (SOCKS прокси) и настроил/перезапустил его.
Я могу использовать этот SOCKS прокси (10.20.30.10/1080TCP) с “1”. (Firefox, без аутентификации)

Поэтому я добавил этот прокси в настройки соединения uTorrent.
Прокси-сервер: Тип=SOCKS5, Прокси=10.20.30.10, Порт=1080, Без аутентификации

uTorrent начинает использовать мой SOCKS прокси, но не может подключиться к DHT/UDP.
uTorrent делает эти соединения (пример);

*65432 = Порт прослушивания uTorrent

TCP 10.20.30.20:(случайный)->10.20.30.10:1080 {Да, это то, что я ожидал!}
UDP 10.20.30.20:65432->10.20.30.10:(случайный) {Что?}

Поскольку uTorrent отправляет UDP пакет, а Dante не открывает UDP порт(ы)
UDP пакет был проигнорирован (отброшен) сервером.
Dante открывает только 1 порт (TCP 1080), и я не могу понять, почему uTorrent
не использует TCP протокол при пересылке UDP.

Мои вопросы:
1. Как я могу заставить Dante динамически открывать UDP порт по запросу?
2. Если “SOCKS5 поддерживает UDP” верно, почему uTorrent не может отправить UDP на TCP порт?


Настройки dante

logoutput: syslog
internal: 10.20.30.10 port = 1080
external: tun0
method: username none
clientmethod: none
user.privileged: root
user.notprivileged: nobody
user.libwrap: nobody
connecttimeout: 50

client pass {
from: 10.20.30.20/32 port 1024-65535 to: 0.0.0.0/0
}
client block {
from: 0.0.0.0/0 to: 0.0.0.0/0
log: connect error
}

block {
from: 0.0.0.0/0 to: 127.0.0.0/8
log: connect error
}
pass {
from: 10.20.30.20/32 to: 0.0.0.0/0
protocol: tcp udp
#command: bind connect udpassociate
##^ Я уже пробовал Включить/Выключить команду, изменить с 0.0.0.0/0 и так далее, но без успеха!
}
block {
from: 0.0.0.0/0 to: 0.0.0.0/0
log: connect error
}

На случай, если, в дополнение к @anonnecroguest‘s ответу:

Сервер SOCKS Dante поддерживает пять команд, которые могут быть использованы в условиях правил (bind, connect, udpassociate, bindrepy, udpreply). Концептуально, они делятся на две группы; первые три соответствуют запросам, сделанным внутренними клиентами. Адрес от будет адресом внутреннего клиента, а адрес к будет адресом внешнего компьютера, с которым клиент хочет связаться.

Оставшиеся две (bindreply и udpreply) соответствуют результату связи, осуществленной внешними хостами, либо TCP соединению, установленному к порту связывания, созданному с помощью bind, либо UDP пакету, отправленному на порт, связанный с помощью udpassociate. Для этих двух команд адрес от будет соответствовать внешнему хосту, а адрес к – внутреннему клиенту. По этой причине были созданы отдельные правила для двух наборов команд.

Источник

Для UDP операции bind не поддерживаются. Клиент SOCKS должен отправить первый UDP пакет. У клиента SOCKS также нет прямого способа узнать, какой адрес использует сервер SOCKS для пересылки UDP пакетов, которые он отправляет…
В-третьих, для операций BIND и UDPASSOCIATE, когда удаленный хост пытается подключиться или отправить UDP пакет клиенту SOCKS через ассоциацию, ранее созданную клиентом.

Источник

# Общее утверждение 'pass' - bind/исходящий трафик.
socks pass {  
    from: 0.0.0.0/0 to: 0.0.0.0/0
    command: bind connect udpassociate
    # log: error # connect disconnect iooperation
    socksmethod: authmethod2
}
# ...

# Общее утверждение 'pass' для входящих соединений/пакетов.
socks pass {
    from: 0.0.0.0/0 to: 0.0.0.0/0
    command: bindreply udpreply
    # log: error # connect disconnect iooperation
}

Источник


Связанные:
https://stackoverflow.com/a/49975561/5113030 (Конфигурация пересылки UDP с Dante…)
https://www.inet.no/dante/doc/1.4.x/config/session.html (Эта страница описывает, как настроить функциональность сессий…)

У меня были такие же проблемы с неработающим UDP, даже несмотря на то, что я использовал protocol: tcp udp. После экспериментов, изменения следующего на команды socks pass ниже помогли мне.

client pass...
client block...

socks pass {
    from: 0.0.0.0/0 to: 0.0.0.0/0
    command: bind connect udpassociate
}
socks pass {
    from: 0.0.0.0/0 to: 0.0.0.0/0
    command: bindreply udpreply
}

Ответ или решение

Как заставить SOCKS прокси (Dante) открывать UDP порты

Ваша проблема связана с тем, что uTorrent не может использовать DHT по UDP через SOCKS прокси-сервер на базе Dante, установленный на Debian. Вы упомянули, что UDP пакеты игнорируются сервером, поскольку Dante не открывает необходимые порты для UDP-трафика.

1. Принудительное открытие UDP-портов в Dante

Чтобы разрешить вашему серверу Dante обрабатывать UDP-трафик, необходимо правильно настроить конфигурационный файл. Обратите внимание на следующие шаги:

  • Проверьте конфигурацию на предмет поддержки UDP. В вашем случае в блоке socks pass следует убедиться, что вы добавили команды udpassociate. Таким образом, ваша конфигурация должна выглядеть следующим образом:
socks pass {
    from: 0.0.0.0/0 to: 0.0.0.0/0
    command: bind connect udpassociate
}
  • Предоставление ответа на запросы UDP. Для обработки пакетов, приходящих от внешних хостов, необходимо добавить следующий блок:
socks pass {
    from: 0.0.0.0/0 to: 0.0.0.0/0
    command: bindreply udpreply
}

Эти активные команды позволяют клиенту (в вашем случае uTorrent) инициировать UDP-соединение и обрабатывать ответ от прокси.

  • Перезапустите Dante. После изменения конфигурации не забудьте перезапустить сервис для применения новых настроек:
sudo systemctl restart danted

2. Почему uTorrent не отправляет UDP на TCP порт

Несмотря на то, что SOCKS5 поддерживает UDP, важно понимать, как происходит работа с UDP-пакетами через SOCKS. Протокол SOCKS5 не может самоинициировать соединение для UDP, а клиент (uTorrent) должен отправить первый UDP-пакет для инициации сессии.

uTorrent, как и большинство других клиентских приложений, использует механизм UDPASSOCIATE для установления ассоциаций UDP через SOCKS прокси. Он отправляет пакет ему, а прокси создает ассоциацию, позволяющую обмениваться UDP-трафиком между клиентом и сервером. Поэтому, когда вы настроите как udpassociate, так и udpreply, это позволит uTorrent правильно обрабатывать UDP-пакеты.

Заключение

Следуя приведенным инструкциям, вы сможете правильно настроить SOCKS прокси на базе Dante для обработки UDP-трафика. ЕслиDHT и другие функции, требующие UDP, все же не будут работать, стоит проверить дополнительные настройки сетевого окружения, такие как фаервол и маршрутизация.

Таким образом, правильная настройка конфигурационного файла и последующий тест являются ключевыми для успешного использования SOCKS-прокси с поддержкой UDP. Если у вас возникнут дополнительные вопросы или потребуется помощь с настройкой, не стесняйтесь обращаться за советом!

Оцените материал
Добавить комментарий

Капча загружается...