홈서버를 운영하다 보면 집 밖에서도 NAS, 미디어 서버, 개발 서버, 원격 데스크톱 등에 접속하고 싶은 경우가 많습니다. 일반적으로는 공유기에서 포트포워딩을 설정하고, DDNS나 고정 IP를 이용해 외부 접속 환경을 구성합니다. 하지만 이 방식은 인터넷에 서비스 포트를 노출해야 하므로 보안 설정과 지속적인 관리가 필요합니다.
특히 SSH, 웹 관리 페이지, 원격 데스크톱 포트 등을 외부에 열어 두면 자동 스캔이나 무차별 대입 공격의 대상이 될 수 있습니다. 방화벽과 강력한 비밀번호, 인증서, 접근 제한 등을 적용하면 위험을 줄일 수 있지만, 초보자에게는 설정 과정 자체가 부담스럽습니다. 통신사 환경에 따라 CGNAT가 적용되어 포트포워딩이 아예 불가능한 경우도 있습니다.
Tailscale은 이러한 문제를 비교적 간단하게 해결해 주는 메시 VPN 서비스입니다. 각 기기에 Tailscale을 설치하면 기기들이 하나의 사설 네트워크처럼 연결되며, 외부에서 집 서버의 Tailscale IP 또는 내부 DNS 이름으로 안전하게 접속할 수 있습니다. 별도의 포트포워딩이나 공인 IP, DDNS 설정이 필요하지 않은 것이 가장 큰 장점입니다.
이 글에서는 Tailscale의 기본 개념부터 홈서버와 외부 기기 연결, SSH 및 웹 서비스 접속, 보안 설정까지 순서대로 살펴봅니다. 예시는 Linux 홈서버를 기준으로 설명하지만, Windows, macOS, NAS, 라즈베리 파이 등에도 거의 동일한 방식으로 적용할 수 있습니다. 단, 서비스를 인터넷에 공개하는 방법이 아니라 본인 또는 허가된 사용자만 접속하는 사설 네트워크를 만드는 방법이라는 점을 먼저 이해해야 합니다.
Tailscale이 포트포워딩 없이 연결되는 원리
Tailscale은 WireGuard 기반의 메시 VPN입니다. WireGuard는 빠르고 단순한 VPN 프로토콜로 잘 알려져 있으며, Tailscale은 여기에 기기 인증, 키 관리, DNS, ACL, NAT 통과 기능 등을 추가했습니다. 사용자는 복잡한 VPN 서버를 직접 구축하지 않아도 계정 로그인과 앱 설치만으로 여러 기기를 연결할 수 있습니다.
각 기기는 Tailscale 네트워크인 tailnet에 참여하며, 일반적으로 100.x.x.x 형태의 Tailscale 전용 IP 주소를 받습니다. 예를 들어 집에 있는 서버가 100.64.10.20이라는 주소를 받았다면, 외부에 있는 노트북이나 스마트폰도 같은 tailnet에 로그인한 상태에서 해당 주소로 접속할 수 있습니다. 이 통신은 인터넷을 이용하지만, 일반 공개 IP로 서비스를 노출하는 방식은 아닙니다.
Tailscale은 가능한 경우 두 기기 사이에 직접 암호화 터널을 생성합니다. 공유기 NAT 환경에서도 UDP 홀 펀칭 기술을 이용해 연결을 시도하며, 직접 연결이 어려운 네트워크에서는 DERP 릴레이 서버를 통해 통신을 중계합니다. 릴레이를 사용하는 경우에도 데이터는 종단 간 암호화되므로 중계 서버가 통신 내용을 읽을 수는 없습니다.
즉, 홈서버가 외부에서 직접 접근 가능한 공인 IP를 가질 필요가 없습니다. 공유기에서 특정 포트를 열지 않아도 서버가 Tailscale 네트워크에 능동적으로 연결되기 때문에, 외부 기기가 같은 tailnet을 통해 서버를 찾을 수 있습니다. 다만 Tailscale을 설치하지 않은 불특정 다수에게 웹사이트를 공개하려는 목적이라면 별도의 리버스 프록시, Tailscale Funnel 또는 클라우드 터널 같은 구성이 필요할 수 있습니다.
홈서버에 Tailscale 설치하기
먼저 Tailscale 공식 사이트에서 계정을 만들고 로그인합니다. Google, Microsoft, GitHub, Apple 등의 계정으로 가입할 수 있으며, 개인 용도의 소규모 기기 연결은 무료 플랜으로도 시작하기 좋습니다. 계정을 만든 뒤 관리 콘솔에서 연결된 기기와 사용자, 접근 정책을 확인할 수 있습니다.
Ubuntu나 Debian 계열 Linux 홈서버에서는 다음과 같이 설치할 수 있습니다. 배포판과 버전에 따라 세부 명령이 달라질 수 있으므로, 실제 설치 전에는 Tailscale 공식 설치 문서를 확인하는 것이 좋습니다. Docker 컨테이너로 설치할 수도 있지만, 처음에는 서버 운영체제에 직접 설치하는 편이 네트워크 구조를 이해하기 쉽습니다.
curl -fsSL https://tailscale.com/install.sh | sh
sudo tailscale up
sudo tailscale up 명령을 실행하면 로그인용 URL이 표시됩니다. 브라우저에서 해당 주소를 열고 앞서 만든 Tailscale 계정으로 로그인하면 홈서버가 tailnet에 등록됩니다. 서버에 GUI가 없어도, URL을 본인의 PC 브라우저에서 열어 인증할 수 있으므로 헤드리스 서버에서도 문제없이 사용할 수 있습니다.
설치가 끝난 뒤에는 상태를 확인합니다. tailscale status 명령을 실행하면 현재 tailnet에 연결된 기기와 각 기기의 Tailscale IP를 볼 수 있습니다. 서버의 IP를 매번 외우기 어렵다면 다음 단계에서 설명할 MagicDNS를 활성화하는 것이 좋습니다. 그러면 IP 주소 대신 home-server와 같은 기기 이름으로 접속할 수 있습니다.
외부 기기 연결과 MagicDNS 설정
홈서버만 Tailscale에 설치해도 외부에서 접속할 수는 없습니다. 접속에 사용할 노트북, 데스크톱, 스마트폰, 태블릿 등에도 Tailscale 앱을 설치하고 같은 계정으로 로그인해야 합니다. 회사 노트북처럼 개인 계정 설치가 제한된 기기라면 조직 정책을 먼저 확인해야 합니다.
외부 노트북에서 Tailscale에 로그인한 후, 홈서버의 Tailscale IP로 연결을 확인할 수 있습니다. 예를 들어 서버 IP가 100.64.10.20이라면 다음처럼 테스트합니다. 서버 방화벽이 ICMP를 막고 있다면 ping이 실패할 수 있으므로, SSH나 웹 포트 연결 테스트도 함께 확인하는 것이 좋습니다.
ping 100.64.10.20
ssh 사용자이름@100.64.10.20
Tailscale 관리 콘솔의 DNS 메뉴에서 MagicDNS를 활성화하면 기기 이름으로 접근할 수 있습니다. 예를 들어 서버 이름이 homeserver라면 ssh user@homeserver처럼 사용할 수 있고, 환경에 따라 homeserver.tailnet-이름.ts.net 형태의 전체 도메인도 제공됩니다. IP가 바뀌어도 이름은 유지되므로 실사용 환경에서는 MagicDNS를 켜 두는 편이 편리합니다.
기기 이름은 관리 콘솔 또는 운영체제의 호스트 이름을 기준으로 생성됩니다. 이름이 알아보기 어렵다면 Linux에서 hostnamectl set-hostname homeserver 같은 명령으로 호스트 이름을 정리한 뒤 Tailscale 장치를 다시 확인할 수 있습니다. NAS, 미니 PC, 라즈베리 파이, 개인 노트북에 각각 명확한 이름을 붙여 두면 관리 콘솔과 접속 명령에서 혼동을 줄일 수 있습니다.
SSH와 웹 서비스에 접속하는 방법
가장 흔한 활용 사례는 SSH 접속입니다. 홈서버에서 OpenSSH 서버가 실행 중이라면, 외부에서도 기존 SSH 포트인 22번을 그대로 이용할 수 있습니다. 중요한 점은 공유기에서 22번 포트를 외부로 열 필요가 없다는 것입니다. 접속 경로가 일반 인터넷 공개 주소가 아니라 Tailscale 사설 네트워크로 제한되기 때문입니다.
예를 들어 외부 카페의 Wi-Fi에 연결된 노트북에서 다음과 같이 접속할 수 있습니다. MagicDNS를 활성화했다면 IP 주소보다 호스트 이름을 쓰는 편이 더 편리합니다. SSH 키 인증을 설정해 두었다면 비밀번호 입력 없이도 안전하고 빠르게 접속할 수 있습니다.
ssh user@homeserver
홈서버에서 Docker, Nginx, Home Assistant, Jellyfin, Portainer, Syncthing 등의 웹 서비스를 실행 중이라면 브라우저에서 Tailscale 주소로 접속하면 됩니다. 예를 들어 서비스가 서버의 3000번 포트에서 실행 중이라면 http://homeserver:3000 또는 http://100.64.10.20:3000으로 접근할 수 있습니다. 이 경우에도 공유기의 3000번 포트는 열 필요가 없습니다.
다만 웹 서비스 자체의 인증 기능은 계속 유지해야 합니다. Tailscale이 외부 노출 위험을 줄여 주지만, 같은 tailnet에 접근 가능한 기기나 사용자가 서비스에 접속할 가능성은 남아 있습니다. Home Assistant, NAS 관리자 페이지, Portainer처럼 권한이 강한 서비스는 별도의 계정, 강력한 비밀번호, 2단계 인증, HTTPS 설정 등을 함께 적용하는 것이 좋습니다.
Tailscale SSH와 접근 제어 설정
일반 SSH 서버 대신 Tailscale SSH 기능을 사용할 수도 있습니다. Tailscale SSH는 tailnet 내부에서만 작동하는 SSH 접속 기능으로, Tailscale 계정과 접근 정책을 기반으로 접속을 제어할 수 있습니다. 서버의 SSH 포트를 인터넷에 노출하지 않는다는 점은 일반 SSH와 같지만, 사용자 인증 및 권한 관리에 Tailscale 정책을 활용할 수 있다는 차이가 있습니다.
Linux 서버에서 Tailscale SSH를 활성화하려면 다음 명령을 사용할 수 있습니다. 이후 Tailscale 관리 콘솔의 ACL 또는 정책 설정에서 누가 어떤 서버에 SSH로 접속할 수 있는지 지정해야 합니다. 단순히 기능만 켠다고 모든 사용자가 자동으로 접속할 수 있는 것은 아니므로 정책 상태를 확인해야 합니다.
sudo tailscale up --ssh
Tailscale 관리 콘솔의 Access controls 메뉴에서는 ACL 정책을 작성할 수 있습니다. 예를 들어 본인 계정만 홈서버에 접속하도록 제한하거나, 가족 구성원은 미디어 서버 포트만 접근하게 하고 관리 페이지나 SSH에는 접근하지 못하도록 구성할 수 있습니다. 여러 사람이 하나의 tailnet을 공유한다면 ACL은 선택이 아니라 사실상 필수에 가깝습니다.
보안 측면에서는 기기 승인과 키 만료 정책도 확인하는 것이 좋습니다. 새 기기가 로그인할 때 관리자의 승인을 요구하도록 설정하면 계정이 탈취되었을 때 무단 기기 등록 위험을 줄일 수 있습니다. 사용하지 않는 스마트폰이나 오래된 노트북은 관리 콘솔에서 즉시 제거하고, 중요한 계정에는 2단계 인증을 활성화해야 합니다.
서브넷 라우터와 Exit Node 활용하기
Tailscale을 홈서버에 설치하면 해당 서버 자체에는 쉽게 접속할 수 있습니다. 하지만 집 안의 프린터, 스마트 TV, 공유기 관리 페이지, Tailscale을 설치할 수 없는 NAS 등 다른 내부 장치에도 접근하고 싶을 수 있습니다. 이때 홈서버를 서브넷 라우터로 설정하면 Tailscale이 없는 로컬 네트워크 장치에도 외부에서 접속할 수 있습니다.
예를 들어 집 내부 네트워크가 192.168.0.0/24이고 홈서버의 내부 IP가 192.168.0.10이라고 가정해 보겠습니다. 홈서버에서 다음과 같이 서브넷 경로를 광고하면, 외부의 Tailscale 기기는 홈서버를 경유해 192.168.0.x 대역 장치에 접근할 수 있습니다. 실제 네트워크 대역은 공유기 설정에 맞게 바꿔야 합니다.
sudo tailscale up --advertise-routes=192.168.0.0/24
명령을 실행한 뒤에는 Tailscale 관리 콘솔에서 광고된 경로를 승인해야 합니다. 또한 외부 클라이언트에서 해당 경로를 수락하도록 설정해야 할 수 있습니다. 서브넷 라우터는 매우 편리하지만, 집 안 전체 네트워크에 대한 접근 범위를 넓히는 기능이므로 ACL과 방화벽 규칙을 함께 검토해야 합니다.
Exit Node는 외부 기기의 인터넷 트래픽 전체를 홈 네트워크를 통해 보내는 기능입니다. 여행 중 공용 Wi-Fi를 사용할 때 집 인터넷을 경유해 접속하거나, 외부에서 집의 공인 IP로 인터넷을 사용해야 할 때 유용합니다. 다만 모든 트래픽이 홈 인터넷 회선을 통과하므로 업로드 대역폭, 데이터 사용량, 서버 성능에 영향을 줄 수 있으며, 단순히 홈서버에 접속하는 목적이라면 Exit Node까지 설정할 필요는 없습니다.
안전하게 운영하기 위한 점검 항목
Tailscale을 사용한다고 해서 모든 보안 설정을 생략할 수 있는 것은 아닙니다. 가장 먼저 Tailscale 계정 자체를 보호해야 합니다. 로그인에 사용하는 Google, GitHub, Microsoft 등의 계정에 2단계 인증을 설정하고, 복구 이메일과 로그인 기록을 정기적으로 점검하는 것이 기본입니다. 계정이 탈취되면 tailnet에 등록된 장치까지 위험해질 수 있습니다.
홈서버 운영체제와 서비스도 최신 상태로 유지해야 합니다. Tailscale은 네트워크 진입 경로를 안전하게 만들어 주지만, 서버 내부의 취약한 웹 애플리케이션이나 오래된 플러그인까지 보호해 주지는 않습니다. Ubuntu라면 보안 업데이트를 적용하고, Docker 컨테이너를 사용한다면 이미지 업데이트와 백업 계획도 함께 마련하는 것이 좋습니다.
공유기 포트포워딩 규칙도 정리해 보세요. 기존에 SSH, NAS 관리 페이지, RDP, 웹 관리 도구 등을 위해 열어 둔 포트가 있다면 Tailscale 접속으로 전환한 뒤 불필요한 규칙을 제거하는 것이 좋습니다. 포트포워딩을 지우기 전에는 외부 Tailscale 환경에서 필요한 서비스가 모두 정상 작동하는지 테스트해야 합니다.
마지막으로, Tailscale 관리 콘솔에서 등록 기기를 주기적으로 확인해야 합니다. 더 이상 사용하지 않는 장치, 초기화한 휴대폰, 타인에게 양도한 노트북 등이 남아 있다면 즉시 삭제하거나 키를 만료시키는 것이 좋습니다. 포트포워딩 없이도 홈서버를 외부에서 편리하게 사용할 수 있다는 장점은 크지만, 계정 관리와 접근 권한 관리까지 꾸준히 수행해야 진정으로 안전한 홈서버 환경을 만들 수 있습니다.