OpenSSH의 로컬 포워딩은 TCP를 전달합니다. 질의 도구와 원격 DNS 서비스가 그 전송 방식을 사용한다면 DNS도 TCP를 쓸 수 있습니다.

SSH 호스트에서 도달할 수 있는 DNS 서버라면 loopback에서만 수신하는 포워딩을 엽니다.

ssh -N -L 127.0.0.1:1053:dns.internal:53 [email protected]

그다음 로컬 머신에서 명시적인 TCP DNS 질의를 보냅니다.

dig +tcp @127.0.0.1 -p 1053 app.internal A

DNS 서버, SSH 호스트, 질의할 이름을 의도한 값으로 바꾸십시오. SSH 서버 쪽이 dns.internal:53에 도달할 수 있어야 하고, 포워딩 정책이 이를 허용해야 합니다.

로컬 포트는 특권 포트 범위보다 위에 있습니다. 로컬 포트 1053으로 보내는 질의는 시스템 DNS 포트 53을 바인딩할 필요가 없습니다.

이것은 일반 UDP DNS 질의를 자동으로 리디렉션하지 않습니다. UDP에서 TCP로 가는 원시 바이트 파이프로는 충분하지 않은데, DNS over TCP가 길이 필드와 스트림 프레이밍을 추가하기 때문입니다. 시스템 리졸버와 통합하려면 적절한 DNS 포워더나 명시적으로 지원되는 TCP 구성이 필요합니다.

마지막으로, 이 경로로 주소를 얻는다고 해서 이후 웹 연결이 SSH를 거치는 것은 아닙니다. DNS 조회와 목적지 전송은 별개의 선택으로 남습니다.

관련 글