서버에 허가된 SSH 접근 권한이 있으면 OpenSSH로 컴퓨터에 SOCKS 리스너를 만들 수 있습니다. SSH 연결이 포워딩 트래픽을 운반하고 원격 서버가 목적지에 연결합니다.

루프백 전용 리스너

ssh -N -T -o ControlPath=none -o ForkAfterAuthentication=no -o ExitOnForwardFailure=yes -D 127.0.0.1:1080 [email protected]

계정과 호스트 이름을 바꾸세요. SSH 서버가 포워딩을 허용해야 하며 관리자는 계정 로그인과 별도로 포워딩 및 목적지를 제한할 수 있습니다.

-D는 동적 포워딩을 만들며 명시한 루프백 주소는 리스너를 이 컴퓨터로 제한합니다. -N는 원격 명령을 생략하고 -T는 의사 터미널을 생략합니다. ControlPath=none는 기존 공유 마스터 사용을 피하고 ForkAfterAuthentication=no는 이번 실행을 포그라운드에 유지합니다.

프록시를 쓰는 동안 프로세스를 실행해 두세요. 포트1080이 사용 중이면 다른 빈 고위 포트를 선택하고 클라이언트도 수정하세요. ExitOnForwardFailure=yes는 리스너를 만들 수 없을 때 SSH를 종료합니다.

SOCKS 엔드포인트 사용하기

curl --proxy socks5h://127.0.0.1:1080 --noproxy '' --connect-timeout 5 --max-time 15 https://example.com/

이 요청은 SOCKS5를 통해 목적지 이름 처리를 위임합니다. 다른 애플리케이션은 자체 SOCKS 설정이 필요합니다. HTTP 프록시 필드로는 이 리스너와 SOCKS 통신을 할 수 없습니다.

포트를 소유한 프로세스 확인:

ss -ltnp 'sport = :1080'

의도한 SSH 프로세스가 루프백 리스너를 소유해야 합니다. 그 리스너를 통한 요청으로 원격 서버도 목적지에 도달하는지 확인합니다. 출구를 살펴보려면 직접 관리하는 목적지에서 관찰된 출구를 확인하세요.

세션 수명

Ctrl-C는 SSH 프로세스, 리스너와 포워딩 연결을 닫습니다. SSH 연결이 끊겨도 프록시를 사용할 수 없게 됩니다.

ExitOnForwardFailure는 설정 단계를 검사합니다. 이후 목적지 연결 실패마다 SSH를 종료하지는 않으므로 세션, 로컬 포트와 목적지 요청을 각각 진단하세요.

관련 글