[태그:] VPN

  • 포트를 하나도 안 열고 — Tailscale로 내 서버에 어디서나 안전 접속

    포트를 하나도 안 열고 — Tailscale로 내 서버에 어디서나 안전 접속

    포트를 하나도 안 열고 — Tailscale로 내 서버에 어디서나 안전 접속

    셀프호스팅 구축기 16편. 9편이 방문자를 블로그로 들이는 길(Cloudflare Tunnel)이었다면, 이번엔 나만 내 서버 안으로 들어가는 길이다.

    짝이 되는 편: 9편 — 보이지 않는 다리 (Cloudflare Tunnel)


    TL;DR (한 화면 요약)

    • 문제: 집 서버에 밖에서, 혹은 다른 방 노트북에서 원격 데스크톱·SSH로 들어가고 싶다. 그런데 포트를 열면 위험하다.
    • 옛 방식: 공유기에 원격 데스크톱 포트를 개방 → 전 세계 봇이 24시간 무차별 로그인 공격.
    • 새 방식: Tailscale — 내 기기들(서버·노트북·폰)을 암호화된 사설망 하나로 묶는다. 공유기 구멍 0개.
    • 안전한 이유: 인터넷에 포트를 하나도 노출 안 함 + 기기 간 종단간 암호화 + 로그인된 내 기기만 입장.
    • 도구: 각 기기에 Tailscale 앱 설치 + 같은 계정으로 로그인. 5분.
    • 비용: 0원 (개인 사용은 기기 100대까지 무료).

    1. 풀고 싶은 문제 — 내 서버에 어떻게 들어가나

    집에 작은 서버를 한 대 띄워두면 곧 이런 게 필요해진다. 밖에서, 혹은 같은 집 다른 방에서 그 서버에 원격 데스크톱(화면 그대로 보기) 이나 SSH(터미널) 로 들어가고 싶다.

    가장 흔한 옛날 방법은 공유기에 포트를 여는 것(포트포워딩)이다. 그런데 이게 골치다.

    골치
    무차별 공격 원격 데스크톱 포트를 인터넷에 열면, 켜자마자 전 세계 봇이 비밀번호를 찍어본다
    비밀번호 한 겹 봇이 뚫으면 서버 전체가 넘어간다. 로그인 하나가 유일한 방어선
    위치 노출 공인 IP만 알면 대략적인 동네가 추정된다
    갱신 골치 통신사가 공인 IP를 바꾸면 접속 주소도 바뀐다

    원격 데스크톱을 인터넷에 직접 여는 건 보안적으로 거의 자살에 가깝다. (앞서 9편에서 방문자용 트래픽을 다뤘다면, 이건 관리자인 나만 쓰는 통로라 더 민감하다.)


    2. 다른 발상 — 포트를 열지 말고, 기기끼리 사설망

    발상의 전환은 이렇다. 외부에서 서버로 들어오는 문을 열지 말자. 대신 내 기기들끼리만 통하는 암호화된 사설망을 따로 만들자.

    이걸 해주는 게 Tailscale이다. 핵심 엔진은 WireGuard(현대적이고 빠른 암호화 터널 기술) 이고, Tailscale은 그 WireGuard 터널들을 설정 없이 자동으로 깔아주는 앱이다.

    설치하면 내 기기들이 한 사설망(테일넷)에 묶이고, 각 기기는 100.x.x.x 형태의 사설 주소를 받는다. 이 주소는 인터넷엔 안 보이고, 내 기기끼리만 통한다. 멀리 떨어져 있어도 같은 방 랜선처럼 연결된다.


    3. 어떻게 안전한가 — 소개팅과 통화

    Tailscale의 가장 영리한 설계는 조정(control)과 데이터(data)를 분리한 것이다. 소개팅 주선자에 빗대면 쉽다.

    • 조정 서버 = 소개팅 주선자: Tailscale 본사 서버가 기기들을 인증하고 서로를 소개시킨다. “이 둘은 같은 주인 거니까 연결해도 돼” 하고 공개키를 나눠준다. 하지만 실제 대화 내용은 절대 듣지 않는다.
    • 데이터 = 실제 통화: 원격 데스크톱 화면 같은 진짜 트래픽은 기기끼리 직접(P2P), WireGuard로 종단간 암호화되어 흐른다. 본사 서버를 거치지 않는다.

    여기서 나오는 세 겹의 보안:

    보안 장치 내용
    포트 0개 노출 서버의 원격 데스크톱 포트가 인터넷엔 존재조차 안 보인다. 스캐너가 찾을 표적이 없다
    종단간 암호화 기기 간 모든 통신을 WireGuard가 암호화. 중간에서 가로채도 못 읽는다
    신분 기반 입장 공유 비밀번호가 아니라, 내 계정으로 로그인한 기기만 사설망에 들어온다. 잃어버린 기기는 콘솔에서 즉시 차단

    개인키(각 기기의 비밀 열쇠)는 그 기기를 절대 떠나지 않는다. 본사 서버엔 공개키만 올라가므로, 설령 본사가 털려도 내 트래픽은 못 푼다.


    4. 트래픽 흐름 — 옛 방식과 비교

    

    옛 방식은 공유기에 구멍을 뚫어 누구나 두드릴 수 있게 한다. 새 방식은 내 기기끼리 암호화 터널을 직접 잇고, 외부엔 아무 문도 열지 않는다.


    5. Cloudflare Tunnel과 뭐가 다른가 — 공개용 vs 나만의

    9편의 Cloudflare Tunnel과 헷갈리기 쉽다. 둘은 경쟁이 아니라 역할이 다른 보완재다.

    Cloudflare Tunnel (9편) Tailscale (이번 편)
    목적 방문자에게 블로그를 공개 만 서버에 비공개 접속
    대상 전 세계 누구나 (https) 내 로그인된 기기만
    쓰는 곳 블로그·웹사이트 공개 원격 데스크톱·SSH·관리
    비유 호텔 프론트데스크(손님 안내) 직원만 아는 뒷통로

    블로그는 Cloudflare Tunnel로 세상에 열고, 그 서버를 관리할 땐 Tailscale로 나만 들어간다. 한 서버에 둘을 같이 써도 전혀 충돌하지 않는다.


    6. 쓰는 법 — 5분

    개념은 단순하다. 접속하려는 모든 기기에 앱을 깔고, 같은 계정으로 로그인하면 끝.

    1. 서버(예: 리눅스 미니PC)에 Tailscale 설치 → 로그인
    2. 내 노트북·폰에도 Tailscale 앱 설치 → 같은 계정 로그인
    3. 이제 모든 기기가 한 사설망에 묶이고, 각자 100.x.x.x 주소를 받는다
    4. 원격 데스크톱·SSH는 그 서버의 Tailscale 주소로 접속한다

    MagicDNS를 켜면 주소 대신 기기 이름으로도 접속된다 (예: myserver → 그 기기). 이 사설 주소는 한 번 정해지면 안 바뀌어서, 즐겨찾기처럼 계속 쓸 수 있다.


    7. 함정 — 우리가 실제로 만난 것

    함정 1. 내부망 IP로 접속하면 막힌다

    같은 집 안 기기는 두 개의 주소를 가진다 — 공유기가 준 내부망 IP(192.168.x.x)와 Tailscale이 준 사설 주소(100.x.x.x). 서버 방화벽을 ‘안전하게’ 잠가서 Tailscale 통로만 허용해두면, 내부망 IP로 접속할 땐 방화벽이 막아버린다.

    증상이 고약하다. ping도 되고 SSH(22)도 되는데 원격 데스크톱만 안 된다 — 방화벽이 그 포트만 막고 있어서다. 같은 집이라도 Tailscale 주소로 접속해야 한다. 이걸 모르고 “집 안에서도 안 되네?” 하며 한참 헤맸다. (저장된 접속 주소가 내부망 IP로 되어 있던 게 범인이었다.)

    함정 2. 양쪽 다 켜져 있어야 한다

    Tailscale은 양쪽 기기에 다 떠 있어야 연결된다. 노트북에서 Tailscale이 로그아웃돼 있으면 당연히 사설망에 없어서 접속이 안 된다. 보통 부팅 시 자동 실행되지만, 안 될 땐 이걸 먼저 의심한다.

    함정 3. 오래 안 켠 기기는 오프라인으로 빠진다

    한동안 안 켠 폰 같은 기기는 콘솔에서 “오프라인”으로 표시된다. 다시 켜고 로그인하면 복귀한다. 기기 목록을 가끔 정리해주면 좋다.


    8. 검증

    연결됐는지 확인하는 가장 빠른 방법은 두 가지다 (양쪽 기기에서 Tailscale을 켠 상태에서).

    ① 서버의 사설 주소가 살아있나ping <서버의 Tailscale 주소> 로 응답을 본다.

    ② 목표 포트가 실제로 도달되나 — 윈도우라면 PowerShell에서:

    Test-NetConnection -ComputerName <서버 Tailscale 주소> -Port <포트>
    

    TcpTestSucceeded : True가 뜨면 사설망 터널이 정상이다. 이제 그 주소로 원격 데스크톱·SSH를 붙이면 된다.


    FAQ

    Q. Cloudflare Tunnel이랑 같이 써도 되나?
    된다. 역할이 다르다. 블로그는 Cloudflare Tunnel로 공개하고, 서버 관리(원격 데스크톱·SSH)는 Tailscale로 한다. 충돌 없다.

    Q. 무료 한도는?
    개인 플랜으로 기기 100대·사용자 3명까지 무료다. 집 서버 몇 대 묶는 용도엔 평생 무료로 충분하다.

    Q. Tailscale 회사가 내 트래픽을 보나?
    못 본다. 본사 서버는 소개만 하고, 실제 데이터는 기기끼리 직접 암호화로 흐른다. (직접 연결이 막힌 까다로운 망에서는 암호화된 중계 서버를 거치는데, 그때도 양 끝에서만 복호화되어 중계 서버는 내용을 못 본다.)

    Q. 전기·인터넷이 끊기면?
    서버가 꺼지면 사설망에서 빠진다. 다시 켜지면 자동 복귀한다. 사설망 자체는 내 계정에 묶여 있어 그대로 유지된다.

    Q. 회사에서도 쓰나?
    쓴다. “제로 트러스트(아무것도 기본 신뢰하지 않음)” 사내망 접속 방식으로 기업에서도 널리 쓰인다. 개인 홈랩에 같은 원리를 공짜로 적용하는 셈이다.


    한 줄 정리

    집 서버에 어디서나 들어가려면, 공유기에 포트를 열어 봇 공격을 자초하는 옛 방식 대신, 내 기기들만 묶는 암호화 사설망을 만드는 Tailscale이 깔끔하다. WireGuard로 종단간 암호화하고, 인터넷엔 포트를 하나도 안 연다. 설치는 각 기기에 앱 깔고 같은 계정 로그인, 5분.


    참고