У моего локального компьютера нет общедоступного IP-адреса, и ИТ-отдел не может настроить для меня NAT, я хочу настроить прокси на моем удаленном общедоступном сервере, который будет пересылать запрос на мой локальный сервер.
Я пытаюсь использовать Privoxy + ssh, но он говорит о недопустимом заголовке.
Шаг 1: откройте туннель ssh на
ssh -nNT -R 8081:localhost:8080 user@example.com
Шаге 2: На удаленной машине настройте конфигурацию Privoxy, я попробовал
forward-socks5 / 127.0.0.1:8081 .
listen-address 0.0.0.0:8080
и
forward / 127.0.0.1:8081
listen-address 0.0.0.0:8080
оба указали недопустимый заголовок в браузере
После некоторого расследования я нашел причину:
Privoxy не подходит для такой работы с обратным прокси, а ssh forward может принимать только локальный трафик.
Поэтому есть 2 подхода для решения этой проблемы:
настроить правило iptables для пересылки tcp (я не профессионал в этом, но думаю, что это возможно)
настроить обратный прокси, пересылающий запрос на порт пересылки ssh, это можно сделать через nginx, или написать простой самостоятельно, например, используя go:
e. g.
package main
import (
"net/http/httputil"
"net/http"
"net/url"
"log"
)
func main() {
target, _ := url.Parse("http://localhost:8081")
proxy := httputil.NewSingleHostReverseProxy(target);
http.Handle("/", proxy)
log.Fatal(http.ListenAndServe(":8080", nil))
}
Вы не открываете туннель с помощью:
ssh -R -nNT 8081:localhost:8080 user@example.com
, но это должно произойти.
Это должно быть
ssh -nNT -R 8081:localhost:8080 user@example.com
, и это называется переадресацией удаленного порта.