홈/엔지니어/네트워킹 / 서버/SSH 포트포워딩 · 터널링…
네트워킹 / 서버중급UbuntuDebianCentOSmacOSssh포트포워딩터널링

SSH 포트포워딩 · 터널링

로컬 포트포워딩으로 DB·Redis에 접속하고, 원격 포트포워딩으로 내부 서버를 외부에 노출하며, 동적 포트포워딩으로 SOCKS 프록시를 구성하는 방법을 설명합니다.

목차
  1. 3가지 포트포워딩 방식
  2. 로컬 포트포워딩 (-L)
  3. 원격 포트포워딩 (-R)
  4. 동적 포트포워딩 (-D) — SOCKS 프록시
  5. ~/.ssh/config로 터널 자동화
  6. 터널 프로세스 관리

3가지 포트포워딩 방식

방식명령 플래그용도
로컬 (Local)-L로컬 포트 → 원격 서비스 접속
원격 (Remote)-R원격 포트 → 로컬 서비스 노출
동적 (Dynamic)-DSOCKS 프록시 (전체 트래픽 터널)

로컬 포트포워딩 (-L)

패턴: 내 컴퓨터의 포트 → 서버를 경유 → 서버 측 서비스 접속

Bash
# 문법
ssh -L [로컬IP:]로컬포트:목적지호스트:목적지포트 서버

# 서버의 PostgreSQL에 로컬에서 접속
ssh -L 15432:localhost:5432 deploy@prod-server.example.com
# 이제 로컬에서: psql -h localhost -p 15432 -U admin

# 방화벽 뒤 Redis 접속
ssh -L 16379:10.0.1.5:6379 deploy@bastion.example.com
# redis-cli -h localhost -p 16379

# 여러 포트 동시에
ssh -L 15432:localhost:5432     -L 16379:localhost:6379     -L 18080:localhost:8080     deploy@prod-server.example.com

# 셸 없이 터널만 유지 (-N)
ssh -N -L 15432:localhost:5432 deploy@prod-server.example.com

# 백그라운드로 실행 (-f -N)
ssh -f -N -L 15432:localhost:5432 deploy@prod-server.example.com

원격 포트포워딩 (-R)

패턴: 서버의 포트 → 로컬 서비스 노출 (NAT 뒤 로컬 서버를 외부에 공개)

Bash
# 문법
ssh -R [원격IP:]원격포트:목적지호스트:목적지포트 서버

# 로컬 3000 포트를 서버의 8080으로 노출
ssh -R 8080:localhost:3000 user@public-server.example.com
# 이제 public-server.example.com:8080 접속 → 내 localhost:3000

# 서버 측 /etc/ssh/sshd_config 설정 필요
# GatewayPorts yes    # 외부에서 원격 포트 접속 허용

동적 포트포워딩 (-D) — SOCKS 프록시

패턴: 로컬 포트를 SOCKS5 프록시로 — 모든 트래픽을 서버 경유

Bash
# SOCKS5 프록시 시작 (로컬 1080 포트)
ssh -D 1080 user@server.example.com

# 또는 백그라운드
ssh -f -N -D 1080 user@server.example.com

# curl로 SOCKS5 프록시 사용
curl --socks5 localhost:1080 https://example.com

# 브라우저 설정:
# Firefox → 설정 → 네트워크 → SOCKS5 프록시 localhost:1080

~/.ssh/config로 터널 자동화

CODE
# 접속 시 자동으로 DB 터널 열기
Host prod-with-tunnel
    HostName prod-server.example.com
    User deploy
    LocalForward 15432 localhost:5432
    LocalForward 16379 localhost:6379

# 점프 호스트를 통한 터널
Host internal-via-bastion
    HostName 10.0.1.50
    User ubuntu
    ProxyJump bastion
    LocalForward 18080 localhost:8080
Bash
# 설정 후 한 번에 접속 + 터널
ssh prod-with-tunnel

터널 프로세스 관리

Bash
# 실행 중인 SSH 터널 확인
ps aux | grep "ssh -"
# 또는
ss -tlnp | grep ssh

# 특정 포트의 터널 종료
pkill -f "ssh -N -L 15432"

# autossh로 터널 자동 재연결
sudo apt install -y autossh
autossh -M 0 -f -N -L 15432:localhost:5432 deploy@prod-server.example.com
#ssh#포트포워딩#터널링#socks#bastion#네트워크
편집 안내 · Editorial Note

AI 도구가 초안 작성에 사용될 수 있습니다. 명령어의 실행 여부와 검증 환경은 각 가이드에 기재된 근거를 확인하세요. 적용 전 사용 중인 버전의 공식 문서를 확인하고, 오류는 이메일로 알려주세요. 이메일로 제보

주제 관련 공식 문서(자동 연결 · 문장별 근거 아님)Redis 공식 문서 ↗GNU/Linux man 페이지 ↗

질문 & 답변 (Q&A)

이 가이드에 대해 궁금한 점을 질문해보세요. 확인 후 답변드립니다.