SSH 터널을 통한 DNS

SSH 터널을 통한 DNS

모든 네트워크 트래픽이 SSH 터널을 통해 이루어지도록 OSX 시스템을 설정하고 싶습니다.

나는 이 목적을 위해 작은 스크립트를 작성했으며, 이 스크립트에 의해 실행되는 명령은 다음과 같습니다.

# setup tunnel
ssh -fN -D 1080 -p 22 user@remote

# start up redsocks
sudo redsocks -c /tmp/redsocks.conf -p /tmp/redsocks.pid

# forward all tcp traffic to tunnel
sudo ipfw add 0010 \
    fwd 127.0.0.1,12345 \
    tcp from me \
    to any not dst-port 12345 \
           not dst-port 1080 \
           not dst-ip REMOTE_IP

나는 redsocks를 사용하여 ssh-tunnel에 http 프록시를 생성합니다.모두ipfw를 통해 tcp 트래픽을 전송하는 경우 redsocks.conf는 다음과 같습니다.

base {
    log_debug = on;
    log_info = on;
    log = "file:/tmp/redsocks.log";
    redirector = generic;
}
redsocks {
    local_ip = 127.0.0.1;
    local_port = 55660;
    ip = 127.0.0.1;
    port = 1080;
    type = socks4;
}

지금까지 모든 것이 작동하는 것 같습니다. 내 OSX 시스템의 모든 TCP 트래픽은 SSH 터널을 통해 수행되지만 문제는 UDP 트래픽에 있으며 그 때문에 DNS 쿼리가 작동하지 않습니다.

SSH 터널을 통해 로컬 컴퓨터의 DNS가 작동하도록 하려면 어떻게 해야 합니까?

답변1

귀하의 ipfw …회선은 TCP 트래픽만 전달합니다. 어쩌면 다음 줄을 추가할까요?

sudo ipfw add 0011 fwd 127.0.0.1,12345 \
                   udp from me \
                   to any not dst-port 12345 \
                          not dst-port 1080 \
                          not dst-ip REMOTE_IP

set -x(디버깅을 위해) 및 set -e(명령 중 하나라도 실패하면 즉시 실패하도록)을 추가하는 것도 좋은 생각입니다 .

  • tunSSH를 사용하여 /를 지칭하려면 일반적으로 'SSH 터널링'이라는 용어를 사용해야 합니다 tap.
  • 포트 전달은 터널링의 특정 형태이지만 이 맥락에서는 여전히 '포트 전달'로만 참조되어야 합니다.
  • 빠른 임시 작업을 제외하고 SSH 터널링( -oTunnel및 에서와 같이)을 사용하지 마십시오 .-oTunnelDevice
  • DNS는 TCP를 전송 수단으로 사용할 수 있습니다. UDP로 제한되지는 않지만우선의수송.

답변2

사용셔틀대신에? sshuttle은 이 정도의 조작 없이 DNS와 TCP를 올바르게 처리한다고 주장합니다. 단지 --dns옵션일 뿐입니다.

IME SOCKS는 약간 낡고 사랑받지 못하는 것 같았습니다. 그리고 저는 ipfw와 redsocks의 사용을 정말로 이해하지 못합니다.

그러나 SOCKS4는 터널링 DNS를 지원하지 않으므로 문제가 발생하는 것이 놀랍지 않습니다. SOCKS의 후속 버전에서는 이를 지원하므로 이를 살펴볼 수 있습니다. 그리고 분명히 SSH는 SOCKS5를 지원할 수 있습니다..

답변3

이미 사용하고 있는 것 외에도 SSH는 사용된 레이어 4 프로토콜과 관계없이 모든 IP 트래픽의 터널링을 허용합니다. 원격 서버에는 터널이 있어야 하며 PermitTunnel yes클라이언트는 지시문을 사용하여 터널을 요청해야 합니다 Tunnel. 그런 다음 해당 새 링크를 기본 게이트웨이로 사용할 수 있습니다. 보다터널에 대한 자세한 지침은 여기를 참조하세요.

관련 정보