Socks5 прокси сервер за NAT с поддержкой UDP

Тест12345

Новичок
Регистрация
01.04.2019
Сообщения
6
Благодарностей
0
Баллы
1
Доброго времени суток.

Озадачился вопросом, как из своего домашнего ПК сделать Socks5 прокси сервер с поддержкой UDP.
Конфиг довольно обывательский. Есть домашний роутер с выделенным внешним Ip. ПК, подключен к роутеру, на ПК у меня Windows 10 и 3proxy.
Роутер из этой схемы не исключить (дома все хотят иметь интернет :-)), хоть вроде как именно он и создает основную проблему в моей задаче.

Под "поддержкой UDP" я подразумеваю, что если браузер (в какой-нибудь другой локации) подключен через мой прокси (про способ подключения - ниже), то я бы хотел видеть WebRTC "утекающий" именно с моим домашним Ip. То есть я хочу без всяких подмен (которые используются разными антидетект решениями) получить честную эмуляцию WebRTC через проксирование UDP трафика.

Браузер по умолчанию не умеет проксировать UDP через Socks5, поэтому я использую ProxyCap программу. Это проксификатор по своей сути. Он умеет вешаться на процесс и корректно работать с Socks5 UDP. В целом такого клиентского софта не так много я нашел (с поддержкой UDP). Про другой вариант тоже пониже немного напишу.

Проблема заключается в том, что где-то на этапе проброса портов в роутере, UDP пакеты теряются.
То есть пусть у меня прокси поднят на порту 10000. Я пробовал пробрасывать и порт 10000 (чтобы и для TCP и для UDP), пробовал пробрасывать диапазон портов, так как мне подсказали, что socks протокол UDP порт выбирает случайно из диапазона TCP/IP на системе. В Windows он по умолчанию 49152-65535. Этот диапазон для UDP я пробовал также пробрасывать - не работает. Пробовал на роутере функцию DMZ - это когда твой ПК (один из всей сети) как бы смотрит наружу, то есть все порты и пакеты автоматически прокидываются ему - это тоже не помогает.
Брандмауэр отключен, естественно, чтобы никаких помех. При всех этих попытках - обычный TCP трафик проксируется корректно, но как доходит до UDP и WebRTC проверки - ничего не происходит, UDP где-то обрубается.

Я думаю, что проблема в пробросе портов на роутере, так как если я пробую подключиться к своему прокси ПК из локальной сети (по локальному адресу соответственно) - UDP работает, как требуется (пусть и масло масляное получается с точки зрения ip адреса - он остается тот же, ведь мы в локальной сети, но факт, что в проксифаер вбита прокси и UDP проксируется). А как только снаружи пытаюсь подключиться - не проксируется.

Я нашел очень близкое решение своей проблемы в интернете в виде Double SSH Tunnel Manager. Но там она решается с помощью поднятия доп. меш сети, подключению к ней моего ПК и клиента. Мне это не подходит. Хочется как-то без посредников все сделать. Как будто кажется, что это возможно, так как в сети есть разного качества прокси на продажу, где люди действительно презентуют поддержку UDP и она работает без дополнительных усилий со стороны клиента в виде подключения к меш сети YG.

В конце скину конфиг 3proxy, который я использую, но он довольно бесхитростный. Тут 192.168.50.2 - это ip моего ПК в локальной сети. А на роутере соответственно проброс портов именно к нему.

maxconn 10000
users test:CL:password
flush
auth strong
allow test
socks -p10000 -i192.168.50.2 -e192.168.50.2

Прошу совета - где конкретно теряется UDP и как бы мне его не терять в моем конфиге?
Да, говорят, что если подключить ПК напрямую к наружней сети с выделенным ip (буквально к "проводу из стенки"), то без всякого NAT посередине, должна прокси завестись и поддерживать UDP. Но, к сожалению, это не мой случай и мне нужно как-то побороть свой роутер, чтобы не терял UDP пакеты.
 

pavelp1000

Новичок
Регистрация
16.02.2023
Сообщения
12
Благодарностей
4
Баллы
3
Да, надо прокидывать на роутере с внешки ВСЕ порты UDP на комп с 3proxy, т.к. для socks5 не существует аналога FTP conntrack. Примерно так -- https://github.com/3proxy/3proxy/issues/844
И да, еще надо сказать 3proxy чтоб говорил клиенту чтоб UDP слал на внешний IP а не на LAN IP.

Код:
socks --help
см ключи.
 
  • Спасибо
Реакции: Тест12345

Dr.Pipetka

Client
Регистрация
12.12.2017
Сообщения
1 421
Благодарностей
958
Баллы
113
А где можно проверить udp работает или нет на проксе?
 

pavelp1000

Новичок
Регистрация
16.02.2023
Сообщения
12
Благодарностей
4
Баллы
3

Тест12345

Новичок
Регистрация
01.04.2019
Сообщения
6
Благодарностей
0
Баллы
1
Да, надо прокидывать на роутере с внешки ВСЕ порты UDP на комп с 3proxy, т.к. для socks5 не существует аналога FTP conntrack. Примерно так -- https://github.com/3proxy/3proxy/issues/844
И да, еще надо сказать 3proxy чтоб говорил клиенту чтоб UDP слал на внешний IP а не на LAN IP.

Код:
socks --help
см ключи.
Я пробовал пробрасывать все порты снаружи на свой ПК. Даже вот DMZ режим пробовал. Кстати, не очень понятно в том ишью на гитхабе, как у товарища работало с пробросом, если ниже ЗАРАЗА говорит, что так не получится сделать.
И действительно вот вчера ночью нарыл вроде бы новую настройку к своему прежнему конфигу - надо через ключ "-N" прописывать еще и внешний ip ПК. Чтобы как раз в UDP Associate запросах подменялись айпишники на него.
Попробовал все вместе запустить и тоже не работает. Я уже прям поплыл. Может еще какой ключик есть и я пропустил?

То есть мой текущий конфиг выглядит так (185.123.123.123 - мой внешний айпи):


maxconn 10000
users test:CL:test123
flush
auth strong
allow test
socks -p49152 -i192.168.50.2 -e192.168.50.2 -N185.123.123.123

Фаервол отключен, порты проброшены. И все равно ерунда выходит.
 

Тест12345

Новичок
Регистрация
01.04.2019
Сообщения
6
Благодарностей
0
Баллы
1
А где можно проверить udp работает или нет на проксе?
Я могу предложить только ProxyCap прогу. Добавить в нее свой прокси, и после добавления там есть опция проверки прокси. Там есть возможность проверить UDP Associated запрос. Но честно - не знаю, как внутри это работает.
Для меня лучшая проверка, если я вижу на сайтах типа CreepJs утекающий айпишник прокси в графе WebRTC
 

Тест12345

Новичок
Регистрация
01.04.2019
Сообщения
6
Благодарностей
0
Баллы
1
Нашел похожее описание своей проблемы: https://github.com/3proxy/3proxy/issues/681
В целом я в логах 3прокси получаю туже самую ошибку 00012 - failed to bind(). И выходит, что раз ветка помечена до сих пор как bug - исправления до сих пор нет.
Может есть какая альтернатива 3proxy для моей задачи?
 

pavelp1000

Новичок
Регистрация
16.02.2023
Сообщения
12
Благодарностей
4
Баллы
3
альтернатива 3proxy
Gost https://v2.gost.run/en/ попробуй, стартани socks сервер в LAN, тоже придется порты ВСЕ пробросить.

как у товарища работало с пробросом
этот товарищ -- я (ezbik).

если ниже ЗАРАЗА говорит, что так не получится сделать.
Он такого не писал. Он писал, что по дефолту за NAT не заработает UDP, но есть ср-ва чтоб заработало.
 
  • Спасибо
Реакции: Тест12345

Тест12345

Новичок
Регистрация
01.04.2019
Сообщения
6
Благодарностей
0
Баллы
1
-
 
Последнее редактирование:

Тест12345

Новичок
Регистрация
01.04.2019
Сообщения
6
Благодарностей
0
Баллы
1
Gost https://v2.gost.run/en/ попробуй, стартани socks сервер в LAN, тоже придется порты ВСЕ пробросить.
Вот тут то и начинаются у меня проблемы. Я на Windows хочу это все дело поднять, а решения по туннелям, что смотрю - обычно все на юникс системы. Плюс не до конца я понимаю, какие требования к ПК. Вроде говорят можно ipv6 туннель прокинуть, но провайдер должен поддерживать этот ipv6, а это вроде не у всех есть.
 

westruk

Client
Регистрация
30.03.2020
Сообщения
404
Благодарностей
130
Баллы
43
Вот тут то и начинаются у меня проблемы. Я на Windows хочу это все дело поднять, а решения по туннелям, что смотрю - обычно все на юникс системы. Плюс не до конца я понимаю, какие требования к ПК. Вроде говорят можно ipv6 туннель прокинуть, но провайдер должен поддерживать этот ipv6, а это вроде не у всех есть.
 
  • Спасибо
Реакции: orka13 и ftbwork10

FastSpace

Client
Read only
Регистрация
05.04.2018
Сообщения
665
Благодарностей
240
Баллы
43
Я бы искал нормальный айпишник без NAT
 

AGAT

Активный пользователь
Регистрация
17.11.2018
Сообщения
171
Благодарностей
37
Баллы
28
Вот тут то и начинаются у меня проблемы. Я на Windows хочу это все дело поднять, а решения по туннелям, что смотрю - обычно все на юникс системы. Плюс не до конца я понимаю, какие требования к ПК. Вроде говорят можно ipv6 туннель прокинуть, но провайдер должен поддерживать этот ipv6, а это вроде не у всех есть.
в итоге получилось ли найти решение?
 
Регистрация
21.03.2019
Сообщения
503
Благодарностей
279
Баллы
63
привет напиши пожалуйста мне в тг подними и мне я за настройку заплачу
 

orka13

Client
Регистрация
07.05.2015
Сообщения
2 190
Благодарностей
2 208
Баллы
113
О, спасибо за сервисы. Благодаря hev-socks5-server получилось наконец то получить UDP на серваке c 4G-модемами (ОС Debian 13). А то старый 3proxy добавлял UDP только к прокси самого сервака, а на модемах не получалось. Ну или я криворукий, ибо я не тру линуксоид, а настраиваю все методом тыка по мануалах из гугла.
Если кому надо подобное, то вот пример конфиг файла, где просто добавляем айпишку 4G-модема (192.168.32.100). Маркировку в конфиге я отключил (# mark: 0), ниже объяснил почему.
Bash:
# Main configuration for hev-socks5-server

main:
  # Worker threads
  workers: 4
  # Listen port
  port: 1081
  # Listen address (ipv4|ipv6)
  listen-address: '::'
  # UDP listen port (0: random, a-b: range)
# udp-port: 0
  # UDP listen address (ipv4|ipv6)
# udp-listen-address: '::1'
  # UDP public address (ipv4)
# udp-public-address-v4: '134.249.144.95'
  # UDP public address (ipv6)
# udp-public-address-v6: ''
  # Listen ipv6 only
  listen-ipv6-only: false
  # Bind source address (ipv4|ipv6)
  # It is overridden by bind-address-v{4,6} if specified
  bind-address: '192.168.32.100'
  # Bind source address (ipv4)
  bind-address-v4: '192.168.32.100'
  # Bind source address (ipv6)
  bind-address-v6: ''
  # Bind source network interface
# bind-interface: 'enx0c5b8f279a64'
  bind-interface: ''
# Domain address type (ipv4|ipv6|unspec)
  domain-address-type: unspec
  # Socket mark (hex: 0x1, dec: 1, oct: 01)
#  mark: 0

dns:
  # DNS port
  port: 1053
  # DNS address
  address: '::'
  # DNS upstream
  upstream: 8.8.8.8

auth:
file: /root/hev-socks5-server/conf/auth.txt
# username:
# password:

Но он всегда берет DNS самого сервера. Работает глобальная смена DNS в файле "/etc/resolv.conf", но мне так не подходит. У меня модемы на разных операторах. Как сделать чтобы у прокси был DNS самого модема? например, конкретно для 192.168.32.100 это 192.168.32.1.
В 3proxy это решалось одной строкой в конфиге:
Bash:
nserver 192.168.32.1
а в hev-socks5-server такого нет. Я пробовал вставлять отрывок конфига от "hev-socks5-tproxy" с "# DNS upstream", но это не влияет на работу.

Думал решить проблему через маркировку трафика метками. Для этого в файле с аутентификацией (у меня он по пути /root/hev-socks5-server/conf/auth.txt) добавляем нового пользователя с меткой 1a:
Bash:
user2 pass2blablabla2 1a
И дальше как советует гугл добавляем свои DNS (пробовал гугловские 8.8.8.8 ):
Bash:
iptables -t nat -A OUTPUT -p udp --dport 53 -m mark --mark 0x1a -j DNAT --to-destination 8.8.8.8
Но это не сработало. Метка правильно прописана, так как отключение трафика по метке работает, я проверял:
Bash:
iptables -A OUTPUT -m mark --mark 0x1a -j DROP
 
Последнее редактирование:

Кто просматривает тему: (Всего: 1, Пользователи: 0, Гости: 1)