Я хотел бы форсировать трафик 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
):
Это необходимо, потому что в противном случае прокси не сможет определить, на какой сервер должен быть перенаправлен запрос.
Но как именно работают эти прокси-серверы "Smart DNS"? (Для общей информации см. Здесь)
Поскольку им не нужны запросы CONNECT, кажется, что они работают без. Но как они могут определить сервер, на который должен быть отправлен запрос? Вот дамп HTTPS-соединения с использованием такого прокси-сервера "Smart DNS" (IP-адрес 37.xxx). (DNS манипулирует, чтобы указать на этот прокси):
Так как же это работает? И, кроме того, есть ли способ архивировать это на моем VPS (возможно, не с Tinyproxy, а с другим программным обеспечением)?