2 분 소요

원격 근무가 일반화되면서 “사무실에 있는 서버에 어떻게 안전하게 접속할 것인가”는 모든 팀의 공통 과제입니다. 전통적인 OpenVPN·IPsec은 서버 구축·인증서 관리·방화벽 포트 개방까지 상당한 준비가 필요합니다. Tailscale은 WireGuard 위에 컨트롤 플레인을 얹어, 클라이언트 간 직접(P2P) 연결을 자동으로 만들어 주는 Mesh VPN 서비스입니다. 방화벽에 들어오는 포트를 열 필요가 없고, 설치 후 로그인 한 번이면 연결이 됩니다.

왜 Tailscale인가

  • NAT 뚫기 자동화: STUN·DERP 릴레이를 거쳐 양쪽 모두 NAT 뒤에 있어도 연결 성립
  • 제로 컨피그 MagicDNS: 장비 호스트네임이 그대로 도메인처럼 동작
  • 세분화된 ACL: JSON 기반으로 “누가 어떤 포트에 접근 가능한지” 정의
  • Exit Node / Subnet Router: 팀 전체 트래픽을 특정 노드로 보내거나, 기존 회사 네트워크와 브릿지

1. 계정과 테일넷 준비

tailscale.com에서 Google·Microsoft·GitHub 등으로 로그인하면 자동으로 개인·팀 전용 테일넷(tailnet)이 만들어집니다. 관리자 콘솔에서 조직 도메인을 지정하면 동일 도메인 사용자가 자동으로 같은 테일넷에 합류합니다.

2. 리눅스 서버에 설치

Rocky Linux 9 / Alma

dnf config-manager --add-repo https://pkgs.tailscale.com/stable/rhel/9/tailscale.repo
dnf install -y tailscale
systemctl enable --now tailscaled

# 브라우저 로그인 흐름
tailscale up

Ubuntu 22.04 / 24.04

curl -fsSL https://tailscale.com/install.sh | sh
sudo tailscale up

tailscale up을 실행하면 한 번 사용 URL이 출력됩니다. 브라우저에서 열어 로그인하면 해당 머신이 테일넷에 합류합니다.

macOS / Windows

Mac App Store 또는 tailscale.com/download에서 GUI 클라이언트를 설치하고 같은 계정으로 로그인하면 끝입니다.

3. 연결 확인과 MagicDNS

# 현재 테일넷 상태
tailscale status

# 각 장비 IP (100.x.x.x 대역)
tailscale ip -4

# MagicDNS로 바로 접근
ssh user@web-server
ping db-01

MagicDNS가 켜져 있으면 100.x.x.x IP를 외울 필요 없이 장비 이름으로 접근할 수 있습니다. 관리자 콘솔의 DNS 탭에서 활성화합니다.

4. ACL로 접근 권한 세분화

Tailscale의 가장 강력한 기능은 JSON ACL입니다. 관리자 콘솔의 Access Controls에서 다음처럼 작성합니다.

{
  "tagOwners": {
    "tag:prod":    ["group:sre"],
    "tag:dev":     ["group:engineering"],
    "tag:db":      ["group:sre"]
  },

  "groups": {
    "group:sre":         ["[email protected]", "[email protected]"],
    "group:engineering": ["group:sre", "[email protected]"]
  },

  "acls": [
    { "action": "accept",
      "src": ["group:sre"],
      "dst": ["tag:prod:*", "tag:db:5432"] },

    { "action": "accept",
      "src": ["group:engineering"],
      "dst": ["tag:dev:*"] }
  ],

  "ssh": [
    { "action": "check",
      "src": ["group:sre"],
      "dst": ["tag:prod"],
      "users": ["root", "user"] }
  ]
}
  • SRE 그룹은 프로덕션과 DB(5432 포트)에 접근
  • 엔지니어링 그룹은 개발 서버에만 접근
  • SRE는 프로덕션에 Tailscale SSH로 로그인 가능(2FA check 필요)

장비에 태그를 부여하려면 tailscale up --advertise-tags=tag:prod 옵션을 씁니다.

5. Exit Node — 팀 트래픽을 특정 노드로 나가게 하기

고정 IP가 필요한 SaaS IP 화이트리스트, 지역 제한 우회 등에 유용합니다.

# 서버에서 Exit Node로 광고
sudo tailscale set --advertise-exit-node

# 관리자 콘솔에서 해당 노드의 Exit Node를 승인한 후,
# 클라이언트에서 사용
sudo tailscale set --exit-node=100.64.0.10 --exit-node-allow-lan-access=true

6. Subnet Router — 기존 사내 LAN과 브릿지

사내 192.168.10.0/24 대역의 프린터·NAS까지 외부에서 접근하고 싶을 때 사용합니다.

# 라우터 역할을 할 노드에서 IP 포워딩 활성화
echo 'net.ipv4.ip_forward = 1' | sudo tee -a /etc/sysctl.d/99-tailscale.conf
echo 'net.ipv6.conf.all.forwarding = 1' | sudo tee -a /etc/sysctl.d/99-tailscale.conf
sudo sysctl -p /etc/sysctl.d/99-tailscale.conf

# 경로 광고
sudo tailscale up --advertise-routes=192.168.10.0/24

관리자 콘솔에서 광고된 라우트를 승인하면, 다른 테일넷 장비에서 192.168.10.x 주소에 바로 접근할 수 있습니다.

7. Tailscale SSH — SSH 키 관리 없이 접근

# SSH 허용 플래그와 함께 노드 등록
sudo tailscale up --ssh

이렇게 하면 원격에서 tailscale ssh user@web-server로 접근할 수 있고, 키 파일이 아니라 Tailscale ID로 인증합니다. 위 ACL의 ssh 섹션과 결합하면 프로덕션에 대해 2FA check를 강제할 수 있습니다.

8. 운영 팁

  • key expiry 끄기: 무인 서버는 관리자 콘솔에서 Disable key expiry를 체크해 180일 만료로 인한 갑작스런 연결 단절을 예방합니다.
  • device authorization 켜기: 새 장비 합류 시 관리자 승인을 요구하도록 설정하면 외부인이 조직 계정으로 로그인해도 자동 합류되지 않습니다.
  • 로그 감사: Logs 탭에서 접속·거부 이벤트를 S3나 Panther 등에 스트리밍할 수 있습니다.
  • 상태 확인: tailscale netcheck로 현재 장비의 NAT 유형, DERP 지연을 점검합니다.

Tailscale은 무료 요금제로도 사용자 3명·장비 100대까지 지원하므로 소규모 팀이나 개인 홈 랩에서 바로 도입할 수 있습니다. 자체 호스팅을 선호한다면 오픈소스 대안인 Headscale로 동일한 구성을 구축할 수 있습니다.

댓글남기기