`ssh -D`는 DNS 요청을 프록시합니까?

`ssh -D`는 DNS 요청을 프록시합니까?

를 사용하여 생성된 SOCKS 프록시를 사용할 때 DNS 확인이 다른 쪽 끝으로 터널링됩니까 ssh -D? 설명서를 읽고 인터넷에서 검색했지만 문서를 찾을 수 없습니다.

답변1

Socks를 통한 DNS 확인은 클라이언트에 의해 결정됩니다. Socks를 통해 DNS를 조회하도록 애플리케이션에 명시적으로 지시해야 합니다.

이름 확인은 호스트에 연결하는 것과 마찬가지로 시스템 호출로 수행됩니다.gethostbyname()또는getaddrinfo().

달리 명시하지 않는 한, 프로그램은 이름 확인을 위해서만 이 기능을 사용할 수 있으며 물론 터널에 대한 지식은 없습니다.

socks5h://예를 들어, 컬은 가 아닌 지정된 경우 에만 DNS를 찾습니다 socks5://.

답변2

애플리케이션은 SOCKS 프록시를 사용하여 표시된 이름을 확인할 수 있습니다. 여기.

여부를 묻는다면 시스템 전체 조회는 터널을 통해 수행됩니다., 그렇다면 대답은아니요.

서버 측을 제어하는 ​​경우 다음과 같이 클라이언트에서 UDP-TCP 프록시를 시작할 수 있습니다. 여기:

socat -T15 udp4-recvfrom:53,reuseaddr,fork tcp:localhost:5353

그런 다음 SSH를 통해 TCP-UDP 데몬을 시작한 서버로 TCP 연결을 전달합니다.

socat tcp4-listen:5353,reuseaddr,fork UDP:nameserver:53

당신은 이것에 눈살을 찌푸릴 수도 있고 당연히 그렇습니다. 다행히도 SSH 셔틀(예를 들어 언급 여기). DNS 쿼리를 쉽게 전달할 수 있는 패치가 있습니다.

YMMV이지만 다음과 같이 성공했습니다.

#!/bin/bash
# Taken from http://stackoverflow.com/questions/4594319/shell-replace-cr-lf-by-comma
DNSSERVERS=$(nmcli d show | grep DNS | awk '{print $2}' | sed -e 'H;${x;s/\n/,/g;s/^,//;p;};d' )
sshuttle  \
    -vvv                \
     --dns-hosts ${DNSSERVERS}   \
    -r server   \
    254.254.254.254/32

답변3

ssh -D 작동(man ssh를 통해)

로컬 "동적" 애플리케이션 수준 포트 전달을 지정합니다. 이는 로컬 측 포트에서 수신 대기하도록 소켓을 할당하여 수행됩니다.

그럼 소켓이란 무엇인가? 통과하다

소켓은 단지 통신을 위한 논리적 종점일 뿐입니다. 전송 계층에 존재합니다. 소켓에서 콘텐츠를 보내고 받을 수 있으며, 소켓을 바인딩하고 수신할 수 있습니다. 소켓은 프로토콜, 시스템 및 포트별로 다르며 패킷 헤더에 주소가 지정됩니다.

그리고

클라이언트는 소켓 프록시를 통해 DNS 조회를 수행할 수 있습니다.

Firefox mozilla-kb 사용 방법

관련 정보