딥러닝 서버 구축 3편: 포트포워딩으로 외부에서 서버에 접속하기
🔑 핵심 요약: 포트포워딩은 외부 네트워크에서 내부 네트워크의 특정 장치에 접속할 수 있게 해주는 기술입니다. 집 안의 딥러닝 서버에 외부에서 안전하게 접속하는 방법을 알아봅시다.
안녕하세요! 이전 포스팅에서는 게임용 PC를 딥러닝 서버로 전환하고, 2편에서는 TensorFlow와 CUDA 버전 충돌 문제를 해결했습니다. 이번 3편에서는 외부에서 집에 있는 딥러닝 서버에 접속하기 위한 포트포워딩에 대해 알아보겠습니다.
포트포워딩이란 무엇인가?
포트포워딩은 네트워크에서 외부의 요청을 내부 네트워크의 특정 장치로 전달해주는 기술입니다. 전문 용어 없이 쉽게 설명해보겠습니다.
네트워크 구조 이해하기
일반적인 가정의 네트워크 구조는 다음과 같습니다
인터넷 회선(LG, KT, SK 등) → 집(세대) 라우터 → 공유기 → 여러 기기(PC, 서버, 스마트폰 등)
포트포워딩 개념을 이해하기 위한 비유
IP 주소 = 집 주소
각 인터넷 회선마다 고유한 공인 IP 주소가 있습니다. 이는 마치 우리 집의 실제 주소와 같습니다. 외부에서 우리 집을 찾아오려면 이 주소가 필요합니다.
포트(Port) = 문(Door)
IP 주소가 집 주소라면, 포트는 그 집의 여러 개의 문이라고 생각할 수 있습니다. 집에는 현관문, 베란다 문, 후문 등 여러 출입구가 있는 것처럼, 네트워크에도 다양한 서비스를 위한 여러 포트가 있습니다.
예를 들면:
- SSH: 22번 포트
- FTP: 21번 포트
- HTTP: 80번 포트
- HTTPS: 443번 포트
포트포워딩의 필요성
집 밖에서 집 안의 서버에 접속하려면 어떻게 해야 할까요? 여기서 포트포워딩이 필요합니다.
왜 필요한가?
- 보안: 모든 포트를 열어두면 보안 위험이 있습니다
- 내부 네트워크 구조 숨기기: 외부에서는 내부 네트워크의 구조를 알 필요가 없습니다
- 여러 기기 연결: 하나의 공인 IP로 여러 내부 기기에 접속할 수 있게 합니다
포트포워딩 작동 방식: 아파트 비유
포트포워딩을 아파트에 비유해 보겠습니다:
- 공인 IP = 아파트 단지 주소
- 외부 포트 = 아파트 단지 정문 번호
- 내부 IP = 우리 집 호수
- 내부 포트 = 우리 집 현관문 번호
예시: SSH 연결 설정
딥러닝 서버에 SSH로 접속하려면:
[인터넷] → [공인 IP:외부 포트 5000] → [공유기 포트포워딩] → [내부 IP:내부 포트 22(SSH)]
이것은 다음과 같은 경로로 이해할 수 있습니다:
[외부] → [아파트 단지 정문(5000번)] → [안내 시스템] → [101동 303호 현관문(22번)]
포트포워딩 설정 방법
1. 공유기 포트포워딩 설정
대부분의 공유기는 관리 페이지에서 포트포워딩을 설정할 수 있습니다:
- 공유기 관리 페이지 접속 (일반적으로 192.168.0.1 또는 192.168.1.1)
- 고급 설정 또는 NAT/포트포워딩 메뉴 찾기
- 포트포워딩 규칙 추가:
2. 서버 방화벽 설정
Ubuntu 서버에서 방화벽을 설정하는 방법:
# UFW(Uncomplicated Firewall) 활성화
$ sudo ufw enable
# SSH 접속 허용
$ sudo ufw allow 22/tcp
# 상태 확인
$ sudo ufw status
보안 고려사항
포트포워딩은 외부에서의 접근을 허용하므로 보안에 신경 써야 합니다:
- 기본 포트 변경: SSH의 경우 22번 대신 다른 포트 사용 (예: 5000)
- 강력한 비밀번호 사용: 복잡한 비밀번호로 무차별 대입 공격 방지
- 공개 키 인증: 비밀번호 대신 SSH 키 인증 사용
- IP 제한: 특정 IP에서만 접속 가능하도록 제한
- fail2ban 설치: 로그인 실패 시도를 모니터링하고 차단
내 딥러닝 서버 접속 설정 예시
제 딥러닝 서버의 포트포워딩 설정은 다음과 같습니다:
- SSH 접속:
- 외부 포트: 5022
- 내부 포트: 22
- 이렇게 하면 ssh username@공인IP -p 5022 명령으로 접속 가능
- Jupyter Notebook 접속:
- 외부 포트: 8888
- 내부 포트: 8888
- 웹 브라우저에서 http://공인IP:8888 접속 가능
- TensorBoard 접속:
- 외부 포트: 6006
- 내부 포트: 6006
- 모델 학습 모니터링을 위해 설정
동적 IP 문제 해결하기
대부분의 가정용 인터넷은 고정 IP가 아닌 동적 IP를 사용합니다. 이 경우 IP가 변경될 때마다 접속 주소가 바뀌는 문제가 있습니다. 이를 해결하는 방법:
- DDNS(Dynamic DNS) 서비스 이용
- No-IP, DuckDNS 등의 무료 서비스 활용
- 공유기에 DDNS 클라이언트 설정
- 예: myserver.ddns.net으로 항상 접속 가능
- 고정 IP 서비스 신청
- 인터넷 서비스 제공업체에 문의
자주 묻는 질문 (FAQ)
Q: 포트포워딩이 설정되어 있는지 어떻게 확인할 수 있나요?
A: 외부 네트워크(예: 모바일 데이터)에서 telnet 공인IP 포트번호 명령어를 실행하거나, 온라인 포트 스캐너를 사용해 확인할 수 있습니다.
Q: 여러 서비스를 동시에 포트포워딩 할 수 있나요?
A: 네, 각 서비스마다 다른 외부 포트를 사용하면 가능합니다. 예를 들어, SSH는 5022, Jupyter는 8888 등으로 설정할 수 있습니다.
Q: 공유기가 여러 대인 경우 어떻게 설정하나요?
A: 각 공유기마다 포트포워딩 설정이 필요합니다. 첫 번째 공유기에서 두 번째 공유기로, 그리고 두 번째 공유기에서 서버로 포트포워딩을 설정합니다.
마치며
이제 포트포워딩을 통해 외부에서도 집에 있는 딥러닝 서버에 접속할 수 있게 되었습니다. 이를 활용하면 언제 어디서나 모델 학습을 시작하고 결과를 확인할 수 있습니다. 다음 포스팅에서는 Jupyter Notebook과 TensorBoard를 원격으로 설정하는 방법에 대해 알아보겠습니다.
보안에 항상 유의하시고, 궁금한 점이 있으시면 댓글로 남겨주세요!
'AI > Deep Learning' 카테고리의 다른 글
딥러닝 GPU 성능 비교: GTX 1060부터 1080 Ti SLI까지 (0) | 2020.05.28 |
---|---|
[DL] MNIST 데이터셋으로 U-Net 구현하기: 이미지 노이즈 제거 실험 (1) | 2020.05.07 |
[DL] GAN과 DCGAN 구현 경험: 적대적 생성 신경망의 학습 과정과 도전 과제 (0) | 2020.04.29 |
[DL] 딥러닝 서버 구축 2편: TensorFlow와 CUDA 버전 충돌 해결하기 (0) | 2020.04.06 |
[DL] 게임용 PC를 딥러닝 서버로 전환하기: CUDA 10.0 & TensorFlow 설정 가이드 (0) | 2020.04.06 |