Skip to content

Опциональная аутентификация для прокси#148

Closed
Lamantus wants to merge 4 commits intoFlowseal:mainfrom
Lamantus:main
Closed

Опциональная аутентификация для прокси#148
Lamantus wants to merge 4 commits intoFlowseal:mainfrom
Lamantus:main

Conversation

@Lamantus
Copy link
Copy Markdown

@Lamantus Lamantus commented Mar 15, 2026

Добавил возможность указать аргументы для аутентификации в SOCKS5 прокси: аргументы -u и -P.

Теперь можно выставить на публичный адрес и не бояться, что кто-то влезет. Например я пока держу на домашнем роутере.
Вероятно, стоит также убрать passthrough для всего, что не связано с телегой, но я не уверен, что это не помешает работе телеги - не трогал.


Я не особо хорош в питоне, т.ч. прошу не казнить за решение.

@Mikha197
Copy link
Copy Markdown

Спасибо! Да, без passthrough было бы надежнее

@Lamantus
Copy link
Copy Markdown
Author

@Flowseal А можете ль подсказать, зачем нужен passthrough для всех, кроме адресов ТГ? Это имеет какой-то смысл или можно убирать?

# -- Non-Telegram IP -> direct passthrough --
        if not _is_telegram_ip(dst):
            _stats.connections_passthrough += 1
            log.debug("[%s] passthrough -> %s:%d", label, dst, port)
            try:
                rr, rw = await asyncio.wait_for(
                    asyncio.open_connection(dst, port), timeout=10)
            except Exception as exc:
                log.warning("[%s] passthrough failed to %s: %s: %s", label, dst, type(exc).__name__, str(exc) or "(no message)")
                writer.write(_socks5_reply(0x05))
                await writer.drain()
                writer.close()
                return

            writer.write(_socks5_reply(0x00))
            await writer.drain()

            tasks = [asyncio.create_task(_pipe(reader, rw)),
                     asyncio.create_task(_pipe(rr, writer))]
            await asyncio.wait(tasks,
                               return_when=asyncio.FIRST_COMPLETED)
            for t in tasks:
                t.cancel()
            for t in tasks:
                try:
                    await t
                except BaseException:
                    pass
            return

Пока что тестирую - ничего не отваливается в таком исполнении... Только я еще счетчик статы добавил, чтобы посмотреть как часто туда что-то идет

if not _is_telegram_ip(dst):
    writer.write(_socks5_reply(0x05))
    await writer.drain()
    writer.close()
    return

@Lamantus Lamantus changed the title Опциональная авторизация для прокси Опциональная аутентификация для прокси Mar 25, 2026
@Lamantus
Copy link
Copy Markdown
Author

В общем-то... Привел коммиты в нормальный вид, поправил микро-баги (в т.ч. которые пушил отдельно). Теперь все нужное в 1м коммите.
Отдельным коммитом закрыл passthrough для соединений не с ТГ. Вдруг овнер что-то скажет - откачу.

Сам проблем не заметил пока. Открыт к предложениям

@GeorgeM2
Copy link
Copy Markdown

Здраствуйте.
Подскажите пожалуйста где взять бинарник в поддержкой авторизации для вин7х64? Текущая версия, v1.3.0 на запуск с ключами -u и -p не реагирует.
Так же, было бы удобно добавить форму для настройки логина\пароля в окно настроек.
Спасибо.

зы: не планируется ли вариант программы в виде пакета для openwrt?

@Lamantus
Copy link
Copy Markdown
Author

Lamantus commented Mar 28, 2026

Здраствуйте. Подскажите пожалуйста где взять бинарник в поддержкой авторизации для вин7х64? Текущая версия, v1.3.0 на запуск с ключами -u и -p не реагирует. Так же, было бы удобно добавить форму для настройки логина\пароля в окно настроек. Спасибо.

зы: не планируется ли вариант программы в виде пакета для openwrt?

Приветствую
Как видите, пока что предложение на стадии открытого pull request. Соотвтетсвенно, этой доработки еще нет в оригинальном репозитории, а значит, что и в релиз оно никак не попадет.
Можете скачать из моего форка, собрать и протестить доработку. Лично я запускаю из python напрямую.

Но, если честно... Не очень понимаю, в каком кейсе может понадобится устанавливать аутентификацию на прокси для стационарного ПК. Тем более, когда используется UI. Если запускаете на ПК, то, скорее всего, используете только в локальной сети. Там уж вряд-ли кто-то лишний подключится.

P.S. Правки в UI я вряд-ли буду вносить. Ни опыта в этом, ни желания, ни необходимости...

А по wrt... А разве там нельзя просто запустить питон? У меня кинетик, потому тут ничего не скажу. С таким лучше в отдельную тему идти.

@GeorgeM2
Copy link
Copy Markdown

GeorgeM2 commented Mar 28, 2026

Но, если честно... Не очень понимаю, в каком кейсе может понадобится устанавливать аутентификацию на прокси для стационарного ПК.

Тут всё просто, на домашнем НАС (хренолоджи) крутится виртуалка с вин7 под свои задачи, проще запустить прокси на ней, пробросить порт на роутере (с опенврт) и забыть, чем с неизвестным успехом разбираться в линуксах что там и как(не имея понимания и опыта), и\или поднимать ещё одну виртуалку на ограниченых ресурсах НАСа.

@Lamantus
Copy link
Copy Markdown
Author

Lamantus commented Mar 28, 2026

Но, если честно... Не очень понимаю, в каком кейсе может понадобится устанавливать аутентификацию на прокси для стационарного ПК.

Тут всё просто, на домашнем НАС (хренолоджи) крутится виртуалка с вин7 под свои задачи, проще запустить прокси на ней, пробросить порт на роутере (с опенврт) и забыть, чем с неизвестным успехом разбираться в линуксах что там и как(не имея понимания и опыта), и\или поднимать ещё одну виртуалку на ограниченых ресурсах НАСа.

Абсолютно точно так же можете поставить питон тогда и запускать прокси через консоль. Когда поймёте, что аргументы работают - можно поставить это на автозапуск.
Команду в батник - батник в папку автозапуска или через сервисы. Там много вариантов - точно не подскажу.

Что-то типа...
python3 C:/.../proxy/tg-ws-proxy.py --arg

@IMDelewer
Copy link
Copy Markdown
Contributor

IMDelewer commented Mar 28, 2026

Отдельным коммитом закрыл passthrough для соединений не с ТГ. Вдруг овнер что-то скажет - откачу.

Отвечу за овнера. passthrough создан чтобы пропускать весь трафик:

  1. Если человек поставил прокси как системный и поэтому весь трафик идет через прокси, если закрывать соединение то ничего не будет работать
  2. Если некоторые программы будут использовать: 127.0.0.1:1080, то трафик опять же будут идти через прокси тг, и если закрывать соединение то ничего не будет работать.

Короче, навсякий случай от всяких неприятных ситуаций, так что лучше вернуть passthrough.
Ниже постараюсь найти примеры когда люди ставили прокси tg-ws-proxy как системный:
#435

@Lamantus
Copy link
Copy Markdown
Author

Lamantus commented Mar 28, 2026

Отдельным коммитом закрыл passthrough для соединений не с ТГ. Вдруг овнер что-то скажет - откачу.

Отвечу за овнера. passthrough создан чтобы пропускать весь трафик:

  1. Если человек поставил прокси как системный и поэтому весь трафик идет через прокси, если закрывать соединение то ничего не будет работать
  2. Если некоторые программы будут использовать: 127.0.0.1:1080, то трафик опять же будут идти через прокси тг, и если закрывать соединение то ничего не будет работать.

Короче, навсякий случай от всяких неприятных ситуаций, так что лучше вернуть passthrough.
Ниже постараюсь найти примеры когда люди ставили прокси tg-ws-proxy как системный:
#435

Насколько вижу, flowseal тоже не понял прикола)
Но окей

@IMDelewer
Copy link
Copy Markdown
Contributor

Отдельным коммитом закрыл passthrough для соединений не с ТГ. Вдруг овнер что-то скажет - откачу.

Отвечу за овнера. passthrough создан чтобы пропускать весь трафик:

  1. Если человек поставил прокси как системный и поэтому весь трафик идет через прокси, если закрывать соединение то ничего не будет работать
  2. Если некоторые программы будут использовать: 127.0.0.1:1080, то трафик опять же будут идти через прокси тг, и если закрывать соединение то ничего не будет работать.

Короче, навсякий случай от всяких неприятных ситуаций, так что лучше вернуть passthrough.
Ниже постараюсь найти примеры когда люди ставили прокси tg-ws-proxy как системный:
#435

Насколько вижу, flowseal тоже не понял прикола)
Но окей

Скорее всего flowseal добавил эту функцию как защиту от не самых продвинутых пользователей пк, чтобы случайно не добавили как системный прокси

@Lamantus
Copy link
Copy Markdown
Author

Скорее всего flowseal добавил эту функцию как защиту от не самых продвинутых пользователей пк, чтобы случайно не добавили как системный прокси

Хм... Наверно лучше добавлю атрибут отдельный тогда на отключение функции

@Flowseal
Copy link
Copy Markdown
Owner

moved to mtproto, so not needed anymore

@Flowseal Flowseal closed this Mar 29, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants