privoxy + ssh는 원격 http 요청을 로컬 웹 서버로 전달합니다.

privoxy + ssh는 원격 http 요청을 로컬 웹 서버로 전달합니다.

내 로컬 컴퓨터에는 공용 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 전달은 로컬 트래픽만 허용할 수 있습니다.

따라서 이 문제를 해결하는 방법에는 두 가지가 있습니다.

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

관련 정보