我的本地计算机没有公共 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转发只能接受本地流量。
因此有两种方法可以解决这个问题:
设置 iptables 规则进行 tcp 转发(我对此并不专业,但我认为这是可能的)
设置一个反向代理转发请求到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))
}