Хочу на маршрутизаторе под OpenWRT поднять простейший SOCKS5-сервер с авторизацией по паролю. Перечитал до хренища тем, но в подавляющем большинстве случаев народ обсуждает обратную задачу — как завернуть трафик с маршрутизатора на чужой SOCKS5-сервер в обход провайдера. Ситуация с поднятием собственного SOCKS5-сервера какая-то очень мутная.
На обычных линуксах принято ставить squid, но для моих целей он чрезмерен примерно на 95%. Perplexity порекомендовал microsocks, но я не нашел его в собранном виде под MT7620 (ramips), а морочиться со сборкой самому категорически не хочется.
Следующей рекомендацией идет shadowsocks-libev, я его поставил, но в упор не понимаю, как это чудо должно работать. В "config ss_local" задаются local_address и local_port (по умолчанию 1080), я так понял, что это и есть локальный сервер. Но, если разрешить только его, то порт 1080 никто не слушает. Порт открывается только при дополнительном разрешении "config server", но там нужно задавать server и server_port — это это и зачем? Еще там задается password, но нет возможности задать user, в то время как для аутентификации в SOCKS5 нужна пара user/password.
То, что у них называется "документацией", представляет собой крайне сумбурное перечисление конкретных примеров с комментариями, которые понятны только тем, кто уже прошел по всем предусмотренным граблям.
Сообщения в системном логе, как это принято у линуксового софта, предельно убоги и невнятны:
daemon.info /usr/bin/ss-local[31174]: listening at 0.0.0.0:1080
daemon.info /usr/bin/ss-local[31174]: running from root user
daemon.err /usr/bin/ss-local[31174]: getpeername: Socket not connected
"Описания" от ИИ ничуть не лучше:
Enable the SOCKS5 proxy and set:
Local Port: 1080 (default SOCKS5 port)
Server: Enter your Shadowsocks server details (IP, port, password, encryption method).
Что здесь означают "local_port" и "server_port", если мне нужно поднять у себя локальный сервер? Эти люди вообще умеют выражаться так, чтоб для понимания смысла написанного не приходилось привлекать мировое сообщество?
P.S. Вообще, многие описания создают впечатление, что в них термин "server" означает непосредственно сервер, а "proxy" означает дополнительную клиентскую компоненту, которая заворачивает локальный трафик через указанный сервер. В этом случае понятие "proxy server" полностью теряет смысл. Подобная чехарда в описаниях еще допустима для тупых юзеров, но когда ее активно используют разработчики и админы — это уже какой-то сюр...
ЕМ>Что здесь означают "local_port" и "server_port", если мне нужно поднять у себя локальный сервер?
local_port не нужен.
<local_port>
Set the local port number. Not available in server nor manager mode.
server '<your-server-ip>' ip входящие пакеты на который обрабатывает сервис. иногда не очевидно какой нужен. Пишите "0.0.0.0"
server_port '<server-port>' порт, прослушиваемый сервисом, на котором он принимает входящие соединения.
password '<your-password>' пароль.
ЕМ>Эти люди вообще умеют выражаться так, чтоб для понимания смысла написанного не приходилось привлекать мировое сообщество?
Здравствуйте, Stanislaw K, Вы писали:
SK>local_port не нужен.
Что значит "не нужен"?
local_port задается в разделе ss_local, а server_port — в разделах server и ss_server. При этом умолчание для local_port — 1080 (один из типовых номеров для SOCKS), а для server_port — 9001/9002 (вообще нетипичный номер).
Ну и, как я уже писал, если включать эти разделы по отдельности, то никакой из портов не открывается на прием. local_port открывается, если включить оба раздела, а ни один из server_port мне вообще ни разу не удалось увидеть открытым.
Эта явно нечеловеческая логика реально бесит. Ладно бы эти поделия клепали мышевозы-формошлепы, которые умеют только ставить галочки в пунктах вроде "activate service". А когда такое делают люди, претендующие на титул "программист-разработчик", то очень уж за профессию обидно.
SK>password '<your-password>' пароль.
А как этот пароль задать на стороне клиента? В протоколе ж указывается пара user/password. У меня, конечно, есть подозрение, что это чудо использует в качестве user текущего пользователя. Если так, что это уже запредельная тупость.
SK>Это линукс, без сообщества никак нельзя.
Ну да, как же им иначе поднимать свою значимость... Если сразу написать понятно, то и обсуждать не будут.
SK>Приблизительно потому, что в разных линуксах разный формат опций и разный набор опций.
Не понял. Как они добиваются того, чтобы формат опций программы в разных линуксах получался разным? Это задается в тексте, и при компиляции выбирается в зависимости от версии линукса? У них это называется "совместимостью"?
Здравствуйте, Евгений Музыченко, Вы писали:
ЕМ>На обычных линуксах принято ставить squid, но для моих целей он чрезмерен примерно на 95%. Perplexity порекомендовал microsocks, но я не нашел его в собранном виде под MT7620 (ramips), а морочиться со сборкой самому категорически не хочется.
dante работает ли в вашем окружении?
Re[2]: SOCKS5-сервер на маршрутизаторе под OpenWRT
Здравствуйте, Слава, Вы писали:
С>dante работает ли в вашем окружении?
Вроде есть, я его поставил, но он выглядит еще более убого — установщик из пакета не создал даже дефолтного конфига. "Документация" на сайте написана как будто для тех, кто и так все знает, и нужно лишь освежить память. Понять, как именно задаются некоторые параметры, из описания невозможно. Это и есть тот самый "unix way"? Мне казалось, юниксоиды как раз должны уметь делать внятные описания.
Еще что-то непонятное с аутентификацией клиентов. Такое впечатление, что любая альтернатива полностью открытому серверу требует непременного создания отдельных пользователей в системе. Возможности тупо прописать user/password в конфиге не нашел.
Re[2]: SOCKS5-сервер на маршрутизаторе под OpenWRT
Здравствуйте, Слава, Вы писали:
С>dante работает ли в вашем окружении?
Запинал кое-как без аутентификации. Способа задать user/password непосредственно для сервера я не нашел — нужно создавать пользователя в системе. Это нынче считается фактором безопасности? Мне одному кажется, что утечка пароля даже непривилегированного пользователя более опасна, чем утечка пароля на доступ к SOCKS-серверу?
Еще он почему-то не дает указать в external 0.0.0.0 — требует или конкретный IP, или конкретный же интерфейс, а eth0 в маршрутизаторе не является интерфейсом по умолчанию.
Штатного способа завершения демона не имеет — только через kill. При этом он создает с десяток дочерних процессов, но не всегда завершает их все — приходится вручную прибивать по одному.
Блин, и это софт с двадцатилетней историей... Возможно, еще лет через десять в нем пофиксят пару мелких глюков.
Re[3]: SOCKS5-сервер на маршрутизаторе под OpenWRT
Здравствуйте, Евгений Музыченко, Вы писали:
SK>>local_port не нужен.
ЕМ>Что значит "не нужен"?
"не нужен" = можно не указывать в командной строке / закомментировать в конфиге / если указать будет прогнорирован. В режиме сервера принимающего соединения ветка кода к которой относится этот параметр не исполняется.
Он используется только в режиме клиента, когда shadowsocks подключается к (другому) серверу. тогда shadowsocks принимает запросы на локал порт и пересылает на server_ip:server_port.
ЕМ>Эта явно нечеловеческая логика реально бесит. Ладно бы эти поделия клепали мышевозы-формошлепы, которые умеют только ставить галочки в пунктах вроде "activate service". А когда такое делают люди, претендующие на титул "программист-разработчик", то очень уж за профессию обидно.
Это типичные для линукс сообщества скрепы. мне иногда кажется что линукс программиста за попытку сделать по человечески бьют всем коллективом, и именно для этого линуксфесты проводятся до 8 раз в год.
SK>>password '<your-password>' пароль.
ЕМ>А как этот пароль задать на стороне клиента? В протоколе ж указывается пара user/password. У меня, конечно, есть подозрение, что это чудо использует в качестве user текущего пользователя. Если так, что это уже запредельная тупость.
Вот честно — хз. Мне никогда не приходилось использовать shadowsocks. Всегда обходился
SK>>Приблизительно потому, что в разных линуксах разный формат опций и разный набор опций.
ЕМ>Не понял. Как они добиваются того, чтобы формат опций программы в разных линуксах получался разным? Это задается в тексте, и при компиляции выбирается в зависимости от версии линукса? У них это называется "совместимостью"?
В их лексиконе нет слова "совместимость".
Все проблемы от жадности и глупости
Re[4]: SOCKS5-сервер на маршрутизаторе под OpenWRT
Здравствуйте, Stanislaw K, Вы писали:
SK>Он используется только в режиме клиента, когда shadowsocks подключается к (другому) серверу. тогда shadowsocks принимает запросы на локал порт и пересылает на server_ip:server_port.
Вы, как обычно, с уверенным видом несете ахинею — прямо-таки наглядная иллюстрация синдрома Даннинга-Крюгера. Сильно подозреваю, что многие свои высказывания Вы копируете непосредственно из выдачи ИИ.
Правильный ответ таков: использование shadowsocks в качестве SOCKS-сервера (по RFC 1928) возможно исключительно в виде связки ss_local и ss_server. Первый работает в режиме "front-end", реализуя собственно протокол для клиента, а второй — в режиме "back-end", выдавая запросы целевым узлам и возвращая результаты. Между ними устанавливается шифрованный канал связи — для чего, собственно, и нужно указание метода шифрования.
Эти серверы называются "local" и "remote" потому, что первоначальной идеей было поднимать ss_local непосредственно на компьютере или сервере локальной сети, а ss_remote — где-то ближе к целевым узлам, и маскировать трафик между ними (разработчиком оригинала был китаец, который сделал его для обхода "великого файрвола"). Именно поэтому ss_local и не поддерживает авторизации — она тупо не имеет особого смысла в такой модели. Можно поднимать оба сервера на одном узле, тогда это будет SOCKS в одном флаконе, только открытый для всех.
К сожалению, в "документации" этот принцип описан довольно мутно, там постоянно путаются смыслы понятий "server", "proxy", "local" и "remote", отчего действительно создается ощущение, будто ss_server — это "собственно SOCKS-сервер", а ss_local — это некий "клиент", "редиректор" или еще что. Догадайся составители "документации" выбрать адекватную терминологию — не приходилось бы гадать и экспериментировать.
SK>В их лексиконе нет слова "совместимость".
Здравствуйте, Евгений Музыченко, Вы писали:
ЕМ>На обычных линуксах принято ставить squid, но для моих целей он чрезмерен примерно на 95%. Perplexity порекомендовал microsocks, но я не нашел его в собранном виде под MT7620 (ramips), а морочиться со сборкой самому категорически не хочется.
Не знаю про сокс (кроме "ssh -Dпорт"), но вообще почти всегда когда мне кажется "чрезмерно" (bind9 или apache2 против аналогов попроще) — я в итоге запускаю это самое чрезмерное, потому что именно оно умеет всё что мне в итоге надо, и гугл его знает. Эти тулзы допотопные и изначально написаны работать на чахлом железе, а современные роутеры для них это уже почти суперкомпьютер.
ЕМ>Следующей рекомендацией идет shadowsocks-libev, я его поставил, но в упор не понимаю, как это чудо должно работать.
Ну, как уже выяснили, это в первую очередь форвардилка к другому прокси, а не прокси сам по себе. https://en.wikipedia.org/wiki/Shadowsocks с этого начинает. Не то чтоб он принципиально не мог делать что ты хочешь, но и не обязан
А кстати почему именно socks, а не http-прокси? tinyproxy вполне годен (правда, пришлось хакнуть), чем socks лучше?
Re[5]: SOCKS5-сервер на маршрутизаторе под OpenWRT
Здравствуйте, Евгений Музыченко, Вы писали:
SK>>Он используется только в режиме клиента, когда shadowsocks подключается к (другому) серверу. тогда shadowsocks принимает запросы на локал порт и пересылает на server_ip:server_port.
ЕМ>Правильный ответ таков: использование shadowsocks в качестве SOCKS-сервера (по RFC 1928) возможно исключительно в виде связки ss_local и ss_server.
Весь этот увлекательный "богатый внутренний мир" shadowsocks не имеет отношения к заданному вопрос про его же внешние интерфейсы.
SK>>В их лексиконе нет слова "совместимость".
ЕМ>В какой момент оно исчезло?
Примерно между 000.00.0001 и 000.00.0002 pre alfa. и именно это решение сообщества породило чрут докер снап прочие костыли.
Все проблемы от жадности и глупости
Re[2]: SOCKS5-сервер на маршрутизаторе под OpenWRT
Здравствуйте, aik, Вы писали:
ЕМ>>Следующей рекомендацией идет shadowsocks-libev
aik>как уже выяснили, это в первую очередь форвардилка к другому прокси, а не прокси сам по себе.
Это не "выяснили", а "ввели в заблуждение".
aik>почему именно socks, а не http-прокси? tinyproxy вполне годен (правда, пришлось хакнуть), чем socks лучше?
Он непрозрачный (не передает целевому узлу информацию о клиенте).
Re[6]: SOCKS5-сервер на маршрутизаторе под OpenWRT
Здравствуйте, Stanislaw K, Вы писали:
SK>Весь этот увлекательный "богатый внутренний мир" shadowsocks не имеет отношения к заданному вопрос про его же внешние интерфейсы.
Что такое "внешние интерфейсы"? Вопрос был задан о том, как поднять собственный SOCKS5-прокси. shadowsocks по определению не является таковым "в одном флаконе", он изначально разделен на две части, каждую из которых нужно устанавливать и настраивать отдельно, и ни одна из которых сама по себе не способна работать в качестве SOCKS5-прокси.
Re[7]: SOCKS5-сервер на маршрутизаторе под OpenWRT
Здравствуйте, Евгений Музыченко, Вы писали:
SK>>Весь этот увлекательный "богатый внутренний мир" shadowsocks не имеет отношения к заданному вопрос про его же внешние интерфейсы.
ЕМ>Что такое "внешние интерфейсы"?
Интерфейсы через которые принимаются соединения от других (НЕ shadowsock) программ,
ЕМ>Вопрос был задан о том, как поднять собственный SOCKS5-прокси.
ЕМ>shadowsocks по определению не является таковым "в одном флаконе", он изначально разделен на две части, каждую из которых нужно устанавливать и настраивать отдельно, и ни одна из которых сама по себе не способна работать в качестве SOCKS5-прокси.
И теперь вы поняли что в конфиге серверной части параметр local_port (можно не указывать/игнорируется если указан) ?
Все проблемы от жадности и глупости
Re[8]: SOCKS5-сервер на маршрутизаторе под OpenWRT
Здравствуйте, Евгений Музыченко, Вы писали:
С>>dante работает ли в вашем окружении? ЕМ>Запинал кое-как без аутентификации.
А нет ли у вас желания сделать свой и нормальный socks5 сервер на C++ или Rust? Протокол вроде несложный, а со всеми вашими претензиями к имеющемуся софту я согласен. У squid и apache была чудесная документация, а у этих — дрянь какая-то.
Здравствуйте, Евгений Музыченко, Вы писали:
ЕМ>Хочу на маршрутизаторе под OpenWRT поднять простейший SOCKS5-сервер с авторизацией по паролю. Перечитал до хренища тем, но в подавляющем большинстве случаев народ обсуждает обратную задачу — как завернуть трафик с маршрутизатора на чужой SOCKS5-сервер в обход провайдера. Ситуация с поднятием собственного SOCKS5-сервера какая-то очень мутная.
А зачем вам SOCKS5-сервер ? С трудом представляю использование SOCKS5-сервера в домашней сети . Вы опишите задачу
... Хорошо уметь читать между строк. Это иногда
приносит большую пользу
Re[2]: SOCKS5-сервер на маршрутизаторе под OpenWRT