Обновить
125
6
Vladislav Yarmak@YourChief

11x engineer

Отправить сообщение

Дефолтных настроек достаточно, они выведут все ошибки. Если вы запускаете по рецепту из статьи, то логи собирает systemd. Вывести последние 1000 строк можно так: `journalctl -u dumbproxy -n 1000`

Я мог бы прикрутить загрузку JSON из файла в JS скриптах, которые контроллируют доступ и выбирают прокси. Ну а Вы там себе конвертируйте геобазу из формата максмайнда в жсон, да смотрите из скрипта куда кого пульнуть. Как Вам такое?

О, тогда значит Вы могли бы мне помочь снова заставить их работать или хотя бы попытаться понять, что именно фильтруется.

Есть несколько вариантов, что может быть не так:

  • Прокси банят после активной пробы потому что он отвечает 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 на клиенте со всеми этими опциями и увидеть в логах, что за ошибка.

Да, конфиг что надо.

Понятно. Ну голый SOCKS5 без шифрования скорее всего не пройдёт. Потребуется где-то запустить какую-то обёртку на стороне клиента, чтобы обеспечить мост SOCKS5 <-> TLS. Можно в dumbproxy на сервере включить TLS даже для socks5, но телевизор такое не примет. Можно на самом телевизоре запустить dumbproxy с опциями `-mode socks5 -proxy h2://LOGIN:PASSWORD@vps.example.org` и тогда он будет слать всё в шифрованном виде дальше. А сам ТВ настроить на использование этого сокса на адресе 127.0.0.1. Возможно, потребуется приложение терминала (типа Termux) добавить в исключения, если настройка прокси на TV заруливает все приложения в прокси.

Опция proxyproto вам вообще не нужна, скорее всего - она для тех, у кого dumbproxy стоит позади HAProxy или Nginx. Вычитывает метку адреса вначале соединения, если она там есть.

А где у вас stunnel был запущен на клиентской стороне? На ПК?

Проще всего будет иметь запущенными три разных экземпляра приложения. Но это довольно редкий случай, обычно нужно либо то, либо другое: либо dumbproxy запускают у себя на клиенте как "адаптер" к удалённому прокси и тогда там нет шифрования соединения (HTTP/SOCKS5), либо на удалённом сервере и тогда оно там действительно нужно (HTTPS).

CAA в DNS это ограничение, в которое должны смотреть УЦ при выпуске, а не клиенты при проверке.

Не, вообще первый раз про него слышу. Даже если и поддерживает, всё равно лучше сделать на уровне роутинга по SNI, как по ссылке, что я дал выше. dumbproxy работает в т.ч. по http/2, а nginx не поддерживает http/2 апстримы в принципе, поэтому эффективное мультиплексирование и некоторые другие фичи тогда работать не будут.

Там целый скриптовый движок есть чтобы любое сочетание правил нарисовать можно было. Опцией -js-access-filter задаём файл со скриптом:

const allowedIPs = new Set([
	"203.0.113.99",
]);

function ipFromAddrPort(addrPort) {
	return addrPort.replace(/\:[^:]+$/, "").replace(/^\[(.*)\]$/, "$1");
}

function access(req, dst, username) {
	const ip = ipFromAddrPort(req.remoteAddr);
	if (allowedIPs.has(ip)) {
		return true;
	}
	print(`rejecting IP address ${ip} due to IP filter restrictions`);
	return false;
}

Добавил рецепт в вики проекта: https://github.com/SenseUnit/dumbproxy/wiki/Recipe:-restricting-access-by-IP-address

А у софта нету никаких крутилок для ограничения трафика по логинам?

Спрашиваю не просто так -- я автор dumbproxy, в нём в принципе можно накрутить лимиты по трафу, но не очень удобным образом. Думаю, насколько целесообразно и востребовано было бы прикрутить лимиты по трафику.

Если кто-то интересуется мультихопом, то dumbproxy поддерживает форвардинг через вышестоящий прокси и прост в настройке.

Мда, какой-то позор просто... Ну оставлю тогда рефералочку, но не знаю как там с оплатой из России дела обстоят. У меня весь вебсерфинг через неё, всё устраивает и стоит 2 евро в месяц.

https://webdock.io/en/pricing?ReferralCode=WDREFAJNY

Насчёт скорости дешёвых VPS слишком категоричное заявление. Масса дешёвых хостеров предоставляют гигабитный порт. Другое дело, что сейчас почти везде объём трафика лимитирован (однако, зачастую лимит вполне достаточный).

Да, и гигабит с полным дуплексом, насквозь.

Можно на уровне 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.

Три противоречащих точки зрения, конечно, лучше, чем две.

Так уже можно делать.

Допустим, у меня есть вот такой конфиг 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 ""
}

отправит трафик в заданный домен избирательно.

А что в этой отечественной РЕД ОС отечественного?

Есть такое, да. Потому и встал вопрос альтернатив. Может с их стороны заблокировано. А передвину-ка я его на последнее место, раз такое дело.

1
23 ...

Информация

В рейтинге
955-й
Откуда
Одесса, Одесская обл., Украина
Зарегистрирован
Активность

Специализация

Технический директор
Ведущий
От 15 000 $
Golang
Python
Базы данных
Linux
Системное программирование
Системное администрирование