
Комментарии 25
А можно добавить поддержку proxy protocol на слушающем сокете ? Полезно, если dumbproxy стоит за nginx, разруливающем подключения на основе sni.
Патч могу прислать, но там буквально несколько строчек кода listener обернуть (ну и параметр командной строки добавить)
Вот, кстати, у меня недоступен из СПб. Недели 2-3 назад начались проблемы с мегафоном (перестали резолвится поддомены). А сейчас (я только пару дней назад приехал и начал разбираться) и сам сайт не доступен (timeout), в том числе и по проводу, В списке заблокированых не значится. Traceroute умирает где-то недалеко от Вашингтона (из Европы - доходит до конца, но по совершенно другой траектории).
На андроиде проблема с DNS решается включением Private DNS, на Windows 11 DoH, до iPhone/iPad жены еще не добрался.
Есть такое, да. Потому и встал вопрос альтернатив. Может с их стороны заблокировано. А передвину-ка я его на последнее место, раз такое дело.
Заюзайте `set-src-hints://?hints=X.X.X.X` не только для PBR, но и для форварда трафика через конкретные интерфейсы, будет пушка-ракета.
Так уже можно делать.
Допустим, у меня есть вот такой конфиг Wireguard для Proton VPN:
[Interface]
# Key for ws
# Bouncing = 3
# NAT-PMP (Port Forwarding) = off
# VPN Accelerator = on
PrivateKey = XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX=
Address = 10.2.0.2/32
# DNS = 10.2.0.1
PreUp = ip rule add from 10.2.0.2 lookup 1000
PostDown = ip rule del from 10.2.0.2 lookup 1000
Table = 1000
[Peer]
# NL-FREE#106
PublicKey = ExWwfvm2QK3oJhrz4s0tsBLt1PVBiONhljwh5jt40Bk=
AllowedIPs = 0.0.0.0/0
Endpoint = 185.182.193.108:51820Строка 11 задаёт, что маршруты для этого соединения будут добавлены не в главную таблицу маршрутизации, а в дополнительную с номером 1000. Т.е. интерфейс не станет маршрутом по умолчанию.
Строки 9 и 10 добавляют и удаляют при старте правило, что для исходящего адреса 10.2.0.2 используется таблица маршрутизации с номером 1000. Всё, этого достаточно для избирательной отправки в разные интерфейсы. Уже упомянутый выше скрипт
function getProxy(req, dst, username) {
const normalizedHostname = dst.originalHost.replace(/\.$/, "").toLowerCase()
if (normalizedHostname === "2ip.ru" || normalizedHostname.endsWith(".2ip.ru")) {
return "set-src-hints://?hints=10.2.0.2"
}
return ""
}отправит трафик в заданный домен избирательно.
443 порт получается занят, а nginx со стандартным портом хочется для разного. nginx в метод connect не умеет нормально. Может ли dumbproxy форвардить запросы с методами отличными от connect на другой порт, без проверок авторизации ?
Можно на уровне TCP форвардить, разделяя соединения с помощью nginx по SNI: https://github.com/SenseUnit/dumbproxy?tab=readme-ov-file#example-http-proxy-over-tls-pre-issued-cert-behind-nginx-reverse-proxy-performing-sni-routing
Либо можно просто вместо nginx использовать haproxy, который не имеет проблем с методом CONNECT.
А angie умеет в CONNECT? Не тестировали?
Не, вообще первый раз про него слышу. Даже если и поддерживает, всё равно лучше сделать на уровне роутинга по SNI, как по ссылке, что я дал выше. dumbproxy работает в т.ч. по http/2, а nginx не поддерживает http/2 апстримы в принципе, поэтому эффективное мультиплексирование и некоторые другие фичи тогда работать не будут.
А можно одновременно принимать подключения по http, https(со своим сертификатом), socks5 на трёх разных портах, разумеется? С одним и тем же файлом пользователей-паролей. Как для такого конфиг правильно настроить? Или только три разных процесса каждый со своим конфигом запускать?
Проще всего будет иметь запущенными три разных экземпляра приложения. Но это довольно редкий случай, обычно нужно либо то, либо другое: либо dumbproxy запускают у себя на клиенте как "адаптер" к удалённому прокси и тогда там нет шифрования соединения (HTTP/SOCKS5), либо на удалённом сервере и тогда оно там действительно нужно (HTTPS).
У меня частный случай. Я использую https прокси из браузера на компьютере, и ещё мне нужен socks5 для телевизора с ютубом(там другого нет). До последнего времени 3proxy+stunnel пользовал, получалось одновременно и тот и другой протокол. Но несколько дней назад это перестало работать,- похоже, что из-за РКН. Сейчас наладил dumbproxy как https - это работает, вот ищу ещё решение для сокс5. Правильно понимаю, что в конфиг нужно добавить строку 'mode socks5' и убрать строку 'proxyproto' ?
Опция proxyproto вам вообще не нужна, скорее всего - она для тех, у кого dumbproxy стоит позади HAProxy или Nginx. Вычитывает метку адреса вначале соединения, если она там есть.
А где у вас stunnel был запущен на клиентской стороне? На ПК?
На VPS в другой стране 3proxy принимает http и socks5 подключения на разных портах. Там же на VPS stunnel с моими сертификатами для моего домена принимает https и перенаправляет это на 3proxy. Еще stunnel обеспечивает работу faketls для mtproto.
proxyproto из конфига убрал - хуже не стало.
Понятно. Ну голый SOCKS5 без шифрования скорее всего не пройдёт. Потребуется где-то запустить какую-то обёртку на стороне клиента, чтобы обеспечить мост SOCKS5 <-> TLS. Можно в dumbproxy на сервере включить TLS даже для socks5, но телевизор такое не примет. Можно на самом телевизоре запустить dumbproxy с опциями `-mode socks5 -proxy h2://LOGIN:PASSWORD@vps.example.org` и тогда он будет слать всё в шифрованном виде дальше. А сам ТВ настроить на использование этого сокса на адресе 127.0.0.1. Возможно, потребуется приложение терминала (типа Termux) добавить в исключения, если настройка прокси на TV заруливает все приложения в прокси.
Вот буквально до недавнего времени (с августа прошлого года) именно, что голый сокс5 работал, он у меня только для ютуба на телеке используется. Я сейчас хочу для начала просто 3proxy на что-то другое заменить, посмотреть, что будет. Безопасность обеспечена ufw по белым спискам на входящие подключения, у меня статик белый айпи от провайдера. Вечером проверю. Чтобы сокс5 правильно работал достаточно этих трёх строчек в конфиге?
bind-address 1.2.3.4:55555
mode socks5
auth basicfile://?path=/opt/dumbproxy/dumbproxy.htpasswd
Да, конфиг что надо.
В общем, видимо, это всё проделки ркн. У меня одномоментно на двух vps в разных странах(но они обе куплены у одного российского хостера) перестали работать https прокси что через stunnel, что через dumbproxy, и socks5 тоже больше не работает. При этом sstp туннель пока держится. При этом те же самые прокси и носки на vps, который к России никакого отношения не имеет, пока продолжают работать. Такие дела.
Вам спасибо за консультации и поддержку.
О, тогда значит Вы могли бы мне помочь снова заставить их работать или хотя бы попытаться понять, что именно фильтруется.
Есть несколько вариантов, что может быть не так:
Прокси банят после активной пробы потому что он отвечает 407 ответом на запросы соединения без пароля. Лечится опцией
hidden_domainв параметрах в урле авторизации на сервере. Либо просто реджектить другим кодом: `auth basicfile://?path=/opt/dumbproxy/dumbproxy.htpasswd&else=reject-static://?code=403`. Это не будет хорошо работать с браузерами, лучше подключаться к прокси через dumbproxy на клиенте: `dumbproxy -proxy h2://LOGIN:PASSWORD@vps.example.org`.Могут банить по отпечатку TLS клиента. Решается использованием опции uTLS, если с сервером dumbproxy разговаривает тоже dumbproxy на клиенте: `dumbproxy -proxy h2://LOGIN:PASSWORD@vps.example.org?utls-fp=HelloChrome_Auto`
Можно убрать из запроса SNI, на клиенте: `dumbproxy -proxy h2://LOGIN:PASSWORD@vps.example.org?utls-fp=HelloChrome_Auto&sni=`
И можно попробовать заставить имитировать скачивание файла вначале соединения, чтобы обмануть фильтры по фильтру трафика. На клиенте:
`dumbproxy -proxy h2://LOGIN:PASSWORD@vps.example.org?utls-fp=HelloChrome_Auto&sni=&fetchrandom=100000-500000`
В общем, если бы вы попробовали это пробить разными опциями, это много кому бы могло помочь понять, что происходит. Важно попробовать использовать dp на клиенте со всеми этими опциями и увидеть в логах, что за ошибка.
На это может потребоваться некоторое время. Я не программист и не сетевик, поэтому некоторые подобные задачи решаются не сразу. Я здесь отпишусь о результатах.
Про логи вопрос. Я так понимаю, что на сервере в конфиг можно добавить "verbosity 10" для получения более полной картины происходящего, верно? Но что-то не пойму, куда логи складываются. В /var/log не нашёл следов dp, в документации тоже не вижу способа указать куда писать логи.
dumbproxy — что нового?