privoxy+ssh はリモート http 要求をローカル Web サーバーに転送します。

privoxy+ssh はリモート http 要求をローカル Web サーバーに転送します。

私のローカルコンピュータにはパブリックIPがなく、IT部門でNATを設定できません。リクエストを自分のローカルサーバーに転送するリモートパブリックサーバーにプロキシを設定したいと思います。

私はprivoxy + sshを使ってみましたが、ヘッダーが無効であると思います。

ステップ1:以下を介してsshtunelを開く

ssh -nNT -R 8081:localhost:8080 [email protected]

ステップ2:リモートコンピュータでプライバシー設定を設定しました。

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

どちらもブラウザのヘッダーが無効であると言います。

答え1

以下を使用してトンネルを開けませんでした。

ssh -R -nNT 8081:localhost:8080 [email protected]

しかし、失敗する必要があります。

しなければならない

ssh -nNT -R 8081:localhost:8080 [email protected]

これをリモートポート転送と呼びます。

答え2

数回調査したところ、次の理由がわかりました。

Privoxyはこのようなリバースプロキシ操作には適していません。SSH転送はローカルトラフィックのみを許可できます。

したがって、この問題を解決するには2つの方法があります。

  1. TCP配信のためのiptablesルールの設定(私はこれについての専門家ではありませんが、可能だと思います)

  2. 要求を SSH 転送ポートに転送するリバースプロキシを設定します。これはnginxを介して行うことも、goを使用するなどの簡単なものを直接作成することもできます。

例えば

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))
}

関連情報