컴퓨터 네트워크

[컴퓨터 네트워크] SSH 원격 포트 포워딩으로 내부망 서버에 접속하기

comgu 2025. 5. 13. 17:58
반응형

SSH의 원격 포트 포워딩(-R 옵션)을 활용해 외부에서 내부망의 서버에 접속하는 방법에 대해 알아본다.



SSH 원격 포트 포워딩(-R)이란?

SSH의 -R 옵션은 원격 포트 포워딩(Remote Port Forwarding)을 설정하는 기능이다. 간단히 말하자면, 로컬 컴퓨터의 특정 포트를 원격 서버의 포트로 전달하는 것이다. 이렇게 하면 원격 서버에 접속하는 다른 사람들이 마치 원격 서버의 서비스처럼 로컬 컴퓨터의 서비스에 접근할 수 있게 된다.

기본적인 사용 방법은 다음과 같다:

ssh -R [원격서버포트]:[로컬IP]:[로컬포트] [사용자명]@[원격서버주소]

 

SSH 터널링이란?

SSH 터널링은 SSH 프로토콜을 사용하여 암호화된 통로(터널)를 만드는 과정이다. 이 터널을 통해 데이터가 안전하게 전송되며, 외부에서는 단순한 SSH 연결로만 보인다. SSH 터널링에는 크게 세 가지 유형이 있다:

  1. 로컬 포트 포워딩(-L): 로컬 컴퓨터의 포트를 원격 서버를 통해 다른 서버로 연결한다. 원격 서버의 서비스를 로컬에서 사용하고 싶을 때 유용하다.
  2. 원격 포트 포워딩(-R): 원격 서버의 포트를 로컬 컴퓨터로 연결한다. 로컬 서비스를 원격에서 접근 가능하게 만들 때 사용한다.
  3. 동적 포트 포워딩(-D): SOCKS 프록시를 설정하여 다양한 프로그램의 트래픽을 SSH 연결을 통해 라우팅한다.

SSH 터널링의 주요 이점은:

  • 모든 데이터가 암호화되어 안전하다
  • 방화벽을 우회할 수 있다
  • 공개 네트워크에서도 안전한 통신이 가능하다
  • 특별한 추가 소프트웨어 없이도 구현할 수 있다

이번 글에서는 이 중 원격 포트 포워딩(-R)을 중점적으로 살펴볼 것이다.

 

실제 활용 사례: 사무실 내부 서버에 집에서 접속하기

사무실 내부망에 있는 서버는 보통 외부에서 직접 접속하기 어렵다. 공유기 뒤에 있거나 방화벽으로 보호되어 있기 때문이지. 하지만 SSH의 원격 포트 포워딩을 활용하면 이 문제를 해결할 수 있다.

시나리오

  • 사무실 내부망에 있는 서버에서 외부로 나갈 수 있음
  • 집에서 사무실 서버에 접속하고 싶음
  • 중간에 공개 접속 가능한 서버(예: example.com)가 있음

설정 방법

1. 사무실 서버에서 다음 명령을 실행한다:

ssh -R 2222:localhost:22 user@example.com
  • user: 원격 서버(example.com)의 유효한 사용자 계정(이 계정은 원격 서버에서 포트를 바인딩할 수 있는 권한이 있어야 하고, 그리고 당연히 이 계정으로 로그인하기 위한 인증(비밀번호 또는 SSH 키)이 필요함)
  • example.com: 터널의 중간 지점이 될 공개적으로 접근 가능한 서버
  • 2222: 원격 서버에서 열리는 포트
  • localhost:22: 로컬 컴퓨터의 SSH 서비스(22번 포트)

2. 이 명령은 다음을 의미한다:

  • 사무실 서버가 example.com 서버로 SSH 연결을 수립함
  • example.com 서버의 2222 포트로 들어오는 모든 연결을
  • 사무실 서버의 22번 포트(SSH 기본 포트)로 전달함

3. 이제 집에서는 다음과 같이 접속할 수 있다:

ssh -p 2222 office-username@example.com

4. 이 연결은 example.com의 2222 포트로 가고, 이 포트는 사무실 내부 서버의 22번 포트로 터널링된다. 결과적으로 집에서 사무실 내부 서버에 SSH 접속이 가능해진다.

 

SSH 터널 작동 원리 자세히 살펴보기

위 과정에서 SSH 터널은 다음과 같이 작동한다:

  1. 터널 생성: 사무실 서버가 example.com으로 SSH 연결을 맺고, 이 연결 내에 암호화된 통로(터널)를 형성한다.
  2. 포트 바인딩: 이 명령으로 example.com 서버는 자신의 2222 포트에 리스너를 설정하게 된다.
  3. 데이터 흐름:
    • 집 컴퓨터에서 example.com:2222로 SSH 접속 요청을 보낸다
    • example.com 서버는 이 연결 요청을 받아서 기존에 설정된 SSH 터널을 통해 사무실 서버로 전달한다
    • 사무실 서버는 자신의 22번 포트(SSH 서비스)로 이 요청을 보낸다
    • 응답도 같은 경로로 반대 방향으로 전달된다
  4. 암호화: 모든 통신은 SSH 프로토콜로 암호화되어 있어 중간에 누군가 패킷을 가로채더라도 내용을 해독할 수 없다.

이러한 터널링 과정을 통해 외부에서 직접 접근할 수 없는 내부 네트워크의 서비스에 안전하게 접속할 수 있게 된다.

 

연결 유지하기

ssh -R 명령을 실행하면 SSH 연결(터널)이 계속 유지된다. 이 SSH 세션이 활성 상태로 있는 한 포트 포워딩도 계속 작동한다. 하지만 네트워크 불안정이나 서버 재시작 등의 이유로 연결이 끊어질 수 있다.

안정적인 운영을 위해서는 다음과 같은 방법들을 고려해 볼 수 있다:

1. 터미널 멀티플렉서 사용

screen이나 tmux와 같은 터미널 멀티플렉서를 사용하면 SSH 세션을 백그라운드에서 유지할 수 있다.

screen -S tunnel
ssh -R 2222:localhost:22 user@example.com
# Ctrl+A, D로 detach

나중에 screen -r tunnel로 다시 접속할 수 있다.

2. autossh 사용하기

autossh는 연결이 끊어지면 자동으로 재연결을 시도하는 도구다.

autossh -M 0 -o "ServerAliveInterval 30" -o "ServerAliveCountMax 3" -R 2222:localhost:22 user@example.com

3. 시스템 서비스로 등록하기

더 안정적인 운영을 위해서는 systemd 서비스로 등록하여 서버 재시작 시에도 자동으로 연결이 수립되도록 할 수 있다.

 

SSH 터널링의 다른 활용 사례

SSH 터널링은 원격 서버 접속 외에도 다양한 용도로 활용할 수 있다:

1. 데이터베이스 원격 접속: 외부에서 접근할 수 없는 DB 서버에 안전하게 접속

ssh -R 3306:localhost:3306 user@example.com

2. 웹 개발 환경 공유: 로컬에서 개발 중인 웹사이트를 다른 사람에게 보여주기

ssh -R 8080:localhost:3000 user@example.com

3. 보안 프록시: 공용 Wi-Fi 같은 안전하지 않은 네트워크에서 안전한 인터넷 사용

ssh -D 8080 user@example.com

 

마치며

SSH의 터널링과 원격 포트 포워딩은 내부망의 서버에 외부에서 접속할 수 있게 해주는 강력한 도구다. 보안을 위해 포트 번호는 잘 선택하고, 필요한 경우 SSH 키 인증을 사용하는 것을 권장한다. 또한 중요한 서비스에 대한 접근을 위해서는 자동 재연결 기능을 갖춘 설정을 고려하는 것이 좋다.

이 방법을 활용하면 집에서도 사무실 서버에 쉽게 접속할 수 있어 원격 근무 환경에서 큰 도움이 될 것이다. SSH 터널링은 단순히 서버 접속뿐만 아니라 네트워크 보안과 편의성을 높이는 다양한 상황에서 활용될 수 있는 강력한 기술이다.

반응형