5. 루프백 뚫기

2026. 9. 11. 13:14·홈 서버 구축기

홈 서버에서 구동한 후, 외부에서 사이트(namecheap.com에서 구매한 도메인)으로 접속까지 완성하였다.

그런데 만약, 데이터들을 더 추가해야 하는 일이 생긴다면?

SSH 포트 포워딩으로 DB 접속 통로를 열어서, 맥에서 로컬로 `load.py`를 그대로 실행하면 홈 서버의 Docker MySQL에 데이터가 들어간다. MySQL의 '루프백만 허용' 제한은 그대로 유지되고, 그 안에서 SSH가 대신 노크해주는 상황이다.

# load.py
# 로컬 설정 그대로 둔 채로 터널만 붙이는 법
# DB_HOST는 localhost로 설정

# DB 접속
def get_connection():
    conn = pymysql.connect(
        host=config.DB_HOST,
        port=config.DB_PORT,
        user=config.DB_USER,
        password=config.DB_PASSWORD,
        database=config.DB_NAME,
        charset="utf8mb4",
        autocommit=False,
    )
    return conn

이 과정이 동작하는 방식은 다음과 같다.


먼저, 루프백이란 무엇인가?

컴퓨터가 "자기 자신"과 통신할 때 쓰는 네트워크 경로이다.

주소로는 `127.0.0.1` / `localhost`라는 이름으로 부르는 게 바로 이것이다.

 

 

홈 서버의 MySQL은 `127.0.0.1`(자기 자신)에서 온 접속만 받아준다.

그런데 맥에서 `load.py`를 돌리면 어떻게 통과할 수 있는가?

‼️진짜로 문을 통과하는 게 아니라, SSH가 문 안쪽까지 대신 들어가서 노크를 해 준다‼️

 

[시나리오 A]

맥이 홈서버 IP로 포트에 곧장 접속하면, MySQL은 `127.0.0.1`에서 온 게 아니기 때문에 거부한다.

 

[시나리오 B]

같은 요청을 SSH 터널에 태우면, 실제로 MySQL 앞에서 노크하는 건 홈 서버 안에 있는 sshd 자신이 되어 루프백 조건을 그대로 만족시킨다.

 

패킷 하나가 지나가는 과정

* 3307 포트는 내가 설정한 값이다. DB 포트가 3306(기본값)으로 설정되어 있으면 3307 말고 3306을 쓰면 된다.

  1. [맥] `ssh -fNL 3307:localhost:3307 <홈서버계정>@<홈서버주소>` 실행 → 맥의 `localhost:3307`에 SSH가 리스닝 포트를 하나 열어둠
  2. [맥] `load.py`가 `.env` 파일에 적혀 있는 설정(`DB_HOST, DB_PORT`)대로 가짜 문에 접속
  3. [맥 → 홈서버] SSH 클라이언트가 이 데이터를 통째로 암호화해서, 이미 열려있는 SSH 연결(홈 서버의 22번 포트)에 실어서 전송
  4. [홈서버] `sshd`가 데이터를 복호화하고, `-L`에 적힌 목적지 `localhost:3307` - 즉, 홈서버 자기 자신의 `127.0.0.1:3307` - 로 새 연결을 만들어 대신 접속
  5. [홈서버] MySQL이 소켓을 보니 발신지가 `127.0.0.1` - 규칙대로 루프백이니 접속을 허용하고, 응답은 같은 경로를 거꾸로 타고 `load.py`에게 돌아감

명령어 해부

ssh -fNL 3307:localhost:3307 <홈서버계정>@<홈서버주소>
명령어 설명
-fNL f: 백그라운드 실행
N: 셸은 안 띄우고 포워딩만
L: 로컬 포트 포워딩
  * 셋 다 인자가 없어 붙여 써도 무방
앞의 3307 맥에 새로 여는 포트 번호. 이 숫자가 기준
localhost:3307 SSH로 로그인한 홈서버가 최종적으로 접속할 주소
홈서버 입장의 '자기 자신'
<홈서버계정>@<홈서버주소> 이 터널을 열 수 있는 자격
SSH 로그인 인증을 통과한 사람만 애초에 이 통로를 만들 수 있음

한 마디로,

MySQL의 "루프백만 허용" 제한은 그대로 둔 채, SSH 포트 포워딩으로 홈 서버가 자기 자신에게
대신 접속해주는 통로를 열어두면, 맥에서는 평소처럼 로컬 접속인 줄 알고 그대로 실행하면 된다.

'홈 서버 구축기' 카테고리의 다른 글

4. CloudFlare Tunnel 연결  (0) 2026.08.28
3. 외부 접속 허용 - Tailscale  (0) 2026.08.24
2. 노트북에 리눅스 설치 (Ubuntu Server)  (0) 2026.08.24
1. 리눅스 부팅  (0) 2026.08.24
'홈 서버 구축기' 카테고리의 다른 글
  • 4. CloudFlare Tunnel 연결
  • 3. 외부 접속 허용 - Tailscale
  • 2. 노트북에 리눅스 설치 (Ubuntu Server)
  • 1. 리눅스 부팅
MinsooLee
MinsooLee
  • MinsooLee
    민수의 개발 기록
    MinsooLee
  • 전체
    오늘
    어제
    • 분류 전체보기 (68)
      • 홈 서버 구축기 (5)
      • JAVA (4)
      • 디자인 패턴 (9)
        • 생성 패턴 (2)
        • 구조 패턴 (4)
        • 행위 패턴 (2)
      • 데이터베이스 (2)
      • 정보처리기사 오답노트 (개정 전) (17)
        • 1과목. 데이터베이스 (9)
        • 4과목. 소프트웨어 공학 (8)
      • 정보처리기사 오답노트 (개정 후) (30)
        • 1과목. 소프트웨어 설계 (6)
        • 2과목. 소프트웨어 개발 (6)
        • 3과목. 데이터베이스 구축 (6)
        • 4과목. 프로그래밍 언어 활용 (6)
        • 5과목. 정보시스템 구축 관리 (6)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    정보처리기사
    부팅USB
    리눅스os
    우분투
    #
    리눅스
    홈서버
    부팅
    서버구축
    rufus
    오답노트
    우분투 서버
    노트북 홈서버
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.6
MinsooLee
5. 루프백 뚫기
상단으로

티스토리툴바