Мосты socat SOCKS: сохраните TLS-имя хоста сайта
Используйте loopback TCP-слушатель для одного назначения SOCKS, сохраняя идентичность HTTP и TLS в приложении.
У приложения нет опции SOCKS, но оно может подключиться к выбранному TCP-адресу. Адаптер с фиксированной целью может обеспечить разговор SOCKS для одного назначения. Ему не обязательно становиться ещё одним универсальным пересылающим прокси.
Для сборок socat с поддержкой SOCKS4A иллюстративная схема такова:
socat TCP4-LISTEN:9443,bind=127.0.0.1,reuseaddr,fork \
SOCKS4A:127.0.0.1:service.example.net:443,socksport=1080
Конечная точка SOCKS — локальный порт 1080. Адаптер слушает локальный порт 9443 и запрашивает у этой точки service.example.net:443. Это примерные значения, а не полное развёртывание службы.
У адаптера одна фиксированная цель
Каждое принятое TCP-соединение запрашивает одну и ту же службу. Приложение, подключающееся к 9443, передаёт свои обычные байты протокола; socat обеспечивает согласование SOCKS4A. Новый запрос HTTP CONNECT на 9443 не выбрал бы другое назначение—он отправил бы эти байты дальше фиксированной службе.
SOCKS4A передаёт имя хоста конечной точке SOCKS для удалённого разрешения. Это отличается от формы SOCKS4, использующей выбранный клиентом адрес. Выбранный вышестоящий узел—включая публичного кандидата из списка SOCKS4-прокси—должен поддерживать обработку имён хостов SOCKS4A и требуемую аутентификацию; этот пример не является рецептом входа по паролю SOCKS5.
Подключайтесь локально, опознавайте настоящую службу
Замена HTTPS-адреса на https://127.0.0.1:9443/ меняет имя хоста, которое клиент может использовать для TLS и HTTP. Сертификат для service.example.net не станет действительным сертификатом для loopback.
Там, где клиент поддерживает отдельную маршрутизацию соединения, сохраняйте идентичность исходного адреса. Curl может проиллюстрировать это различие:
curl --noproxy '*' \
--connect-to service.example.net:443:127.0.0.1:9443 \
https://service.example.net/
Сокет идёт к локальному адаптеру, а проверка TLS и HTTP-назначение остаются service.example.net. Другим приложениям нужен собственный эквивалентный поддерживаемый контроль; не каждый клиент его предоставляет.
Привязка loopback ограничивает сетевую экспозицию, но другие подходящие локальные процессы всё ещё могут до неё добраться. Держите срок службы и пользователей подходящими. Сохраняйте проверку TLS, а не подавляйте ошибку идентичности, вызванную адресом loopback.