privoxy + ssh 将远程http请求转发到本地Web服务器

privoxy + ssh 将远程http请求转发到本地Web服务器

我的本地计算机没有公共 IP,IT 部门无法为我设置 NAT,我想在远程公共服务器上设置一个代理,它将请求转发到我的本地服务器。

我尝试使用 privoxy + ssh,但它说标头无效。

第 1 步:通过以下方式打开 sshtunel

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

步骤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

两者都说浏览器中的标头无效

答案1

您没有使用以下方式打开任何隧道:

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

但它应该失败。

它应该是

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

这称为远程端口转发。

答案2

经过一番调查,我找到了原因:

Privoxy不适合这样的反向代理工作,并且ssh转发只能接受本地流量。

因此有两种方法可以解决这个问题:

  1. 设置 iptables 规则进行 tcp 转发(我对此并不专业,但我认为这是可能的)

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

相关内容