내 로컬 컴퓨터에는 공용 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 전달은 로컬 트래픽만 허용할 수 있습니다.
따라서 이 문제를 해결하는 방법에는 두 가지가 있습니다.
TCP 전달을 위한 iptables 규칙 설정(저는 이에 대한 전문가는 아니지만 가능하다고 생각합니다)
요청을 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))
}