4

Я хотел бы форсировать трафик HTTP(S) на определенные веб-сайты из моей домашней сети через прокси-сервер, работающий на VPS.

Я установил tinyproxy на VPS, работающем на порту 8080 . На моем компьютере я бегу

sudo ssh -i /home/user/.ssh/id_rsa -nNT -L 80:localhost:8080 -L 443:localhost:8080 remoteuser@vps

чтобы получить доступ к прокси локально. Когда я настраиваю localhost:80 в качестве прокси в настройках Firefox, все работает нормально (HTTP и HTTPS).

Но так как я не хочу, чтобы весь трафик проходил через этот прокси, я добавил это в мой компьютер /etc/hosts:

127.0.0.1     server.example 

server.example - это имя веб-сервера, настроенного для HTTP и HTTPS.

Доступ к http://server.example работает, в то время как открытие https://server.example в Firefox завершается с ошибкой

SSL_ERROR_RX_RECORD_TOO_LONG

Также не удается curl страницу по HTTPS:

curl: (35) error:140770FC:SSL routines:SSL23_GET_SERVER_HELLO:unknown protocol

Насколько я понимаю, эта проблема вызвана тем, что tinyproxy отвечает на запрос HTTPS с помощью простого HTTP.

Во-первых, возможно ли теоретически реализовать то, что я хочу? Эти так называемые сервисы "Smart DNS", кажется, именно это и делают.

Эта проблема вызвана моей установкой или крошечный прокси, скорее всего, не может этого не делать? Есть ли другой прокси-сервер, который способен на это?

РЕДАКТИРОВАТЬ: В настоящее время я использую туннель SSH на моем ПК, и модификация DNS также локально, но я хотел бы развернуть это на моем маршрутизаторе позже, чтобы трафик с любого устройства моей сети проходил через этот прокси ,

EDIT2: Как писал @SteffenUllrich в комментариях, когда HTTPS маршрутизируется через HTTP-прокси, клиент сначала отправляет незашифрованный запрос CONNECT до того, как произойдет рукопожатие. Смотрите здесь (SSH туннель к VPS работает на 10.0.5.4):

https://i.imgur.com/hPtPY3h.png

Это необходимо, потому что в противном случае прокси не сможет определить, на какой сервер должен быть перенаправлен запрос.

Но как именно работают эти прокси-серверы "Smart DNS"? (Для общей информации см. Здесь)

Поскольку им не нужны запросы CONNECT, кажется, что они работают без. Но как они могут определить сервер, на который должен быть отправлен запрос? Вот дамп HTTPS-соединения с использованием такого прокси-сервера "Smart DNS" (IP-адрес 37.xxx). (DNS манипулирует, чтобы указать на этот прокси):

https://i.imgur.com/hyOHejm.png

Так как же это работает? И, кроме того, есть ли способ архивировать это на моем VPS (возможно, не с Tinyproxy, а с другим программным обеспечением)?

2 ответа2

0

Похоже, что tinyproxy не будет прозрачно использовать прокси HTTPS-соединения, клиент должен использовать метод CONNECT что означает, что он должен быть настроен для использования прокси.

Вы не можете прозрачно прокси HTTPS без установки сертификата MITM в любом случае, в противном случае каждый доступ приведет к ошибкам сертификата или сбой по этой причине.

Вам, вероятно, нужно что-то более сложное, например, squid .

0

Но как именно работают эти прокси-серверы "Smart DNS"? Им не нужны запросы CONNECT, они, кажется, работают без.

Я думаю, что эти прокси Smart DNS работают путем извлечения целевого домена из HTTP-запроса для простого HTTP. Для HTTPS они, вероятно, извлекают домен из расширения SNI TLS в сообщении ClientHello в начале рукопожатия TLS.

Подобную настройку можно создать, например, с помощью прокси-сервера squid. Этот прокси может быть настроен для использования в качестве прозрачного прокси на центральном маршрутизаторе. Поскольку все клиенты используют этот маршрутизатор в качестве шлюза к Интернету, трафик на соответствующих портах (80,443 для http и https) может быть перенаправлен на прокси-сервер с правилами фильтрации пакетов, то есть никакой специальной настройки DNS не требуется.

Затем прокси-сервер может извлечь реальную цель из заголовка HTTP (обычный HTTP) или ClientHello (HTTPS), не нарушая шифрование SSL - подробнее см. Squid:SSL Peek And Splice . Прокси-сервер squid также может быть настроен на использование разных прокси-серверов восходящего потока (например, VPS) или прямого соединения в зависимости от цели.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .