커뮤니티 솔루션

Tailscale로 CasaOS에 원격으로 액세스하는 방법

A 2023 CasaOS community tutorial showing how to run the Tailscale Docker client, authenticate it with TS_AUTHKEY, join other devices to the same tailnet, and reach CasaOS remotely without conventional port forwarding.

Tailscale을 사용하면 집에서 멀리 떨어져 있을 때에도 인증된 본인의 디바이스에서 CasaOS 서버에 접근할 수 있는 사설 주소를 제공할 수 있습니다. 2023년 10월 CasaOS 0.4.4와 이전 Tailscale 버전을 대상으로 게시된 IceWhale Community의 원래 튜토리얼에서는 공식 Tailscale Docker 이미지와 인증 키, 그리고 두 번째 Tailscale 클라이언트를 사용해 이 사설 메시 연결을 구성했습니다.

기본 개념은 여전히 유효합니다. CasaOS 호스트에서 Tailscale을 실행하고 tailnet에 연결한 다음, 원격 휴대폰이나 컴퓨터에 Tailscale을 설치하고 Tailscale IP 또는 설정된 DNS 이름을 사용해 CasaOS를 엽니다. 그러나 스크린샷과 정확한 Docker 필드는 과거의 것입니다. 현재 Tailscale 컨테이너 배포에서는 Tailscale 상태도 영구적으로 저장하고, 인증 자격 증명을 보호하며, 최신 액세스 제어 지침을 따라야 합니다.

이 CasaOS + Tailscale 설정으로 할 수 있는 작업

이 커뮤니티 가이드는 일반적인 공용 포트 포워딩을 사용하지 않도록 설계되었습니다. CasaOS 대시보드를 인터넷에 직접 공개하는 대신, 디바이스를 tailnet이라고 하는 동일한 Tailscale 네트워크에 연결하고 Tailscale 주소를 통해 통신합니다.

원래 워크플로는 다음과 같았습니다.

  1. CasaOS 서버에서 Tailscale 클라이언트를 실행합니다.
  2. Tailscale 계정을 생성하거나 로그인합니다.
  3. 인증 키를 생성하고 Tailscale 컨테이너에 제공합니다.
  4. 원격 노트북, 휴대폰 또는 다른 디바이스에 Tailscale을 설치합니다.
  5. 해당 디바이스를 같은 tailnet에 로그인합니다.
  6. Tailscale IP 주소 또는 tailnet DNS 이름을 사용해 CasaOS를 엽니다.

이는 사설 네트워크 액세스입니다. Tailscale을 통해 CasaOS를 사용하기 위해 일반적으로 홈 라우터에서 CasaOS 대시보드 포트를 포워딩할 필요는 없습니다.

원본 튜토리얼의 중요한 버전 기준

원문에는 CasaOS 0.4.4Tailscale 1.21.3이 명시되어 있습니다. 이 글은 2023년에 작성되었으며, 이후 CasaOS와 Tailscale 컨테이너 구성은 모두 변경되었습니다. 현재 CasaOS 또는 Docker UI에서 모든 필드가 정확히 같은 위치에 표시된다고 가정하지 말고, 아래 스크린샷을 참고해 워크플로를 이해하세요.

현재 공식 Tailscale Docker 가이드에서도 TS_AUTHKEY를 사용해 컨테이너를 인증하는 방법을 안내하지만, 컨테이너에 필요한 영구 상태와 권한도 함께 설명합니다.

1단계: Tailscale 컨테이너를 CasaOS에 추가

2023년 가이드에서는 공식 Tailscale Docker 이미지를 CasaOS로 가져왔습니다. 당시의 UI 워크플로를 재현하는 경우 이미지 소스가 공식인지 확인하세요. tailscale/tailscale 알 수 없는 타사 컨테이너가 아닌 이미지입니다.

Tailscale Docker 컨테이너를 가져오는 데 사용되는 CasaOS 사용자 지정 애플리케이션 화면
기존 CasaOS 가이드에서는 먼저 Tailscale을 Docker 애플리케이션으로 가져오는 것부터 시작합니다.
Tailscale 컨테이너 애플리케이션용 CasaOS Docker 구성 화면
여기에 표시된 정확한 CasaOS 필드는 2023년 인터페이스를 기준으로 하므로 현재 설치 환경에서 확인해야 합니다.

최신 독립 실행형 Tailscale 컨테이너의 경우, 공식 문서에서는 개념적으로 다음과 같은 핵심 패턴을 보여 줍니다.

docker run -d \
  --name tailscale \
  --hostname casaos-server \
  -e TS_AUTHKEY=<tskey-YOUR-AUTH-KEY> \
  -e TS_STATE_DIR=/var/lib/tailscale \
  -v ./tailscale-state:/var/lib/tailscale \
  --cap-add=net_admin \
  --cap-add=net_raw \
  --restart unless-stopped \
  tailscale/tailscale:latest

인증 키를 공개 게시물, 스크린샷, 저장소 또는 지원 티켓에 붙여 넣지 마세요. 인증 키는 비밀번호처럼 취급해야 합니다. 정확한 CasaOS 사용자 지정 설치 필드는 사용 중인 버전의 GUI에 맞추면서 동일한 Docker 요구 사항을 반영해야 합니다.

2단계: Tailscale 인증 키 생성

이 커뮤니티 튜토리얼에서는 먼저 Tailscale 계정을 만든 다음 Tailscale 관리 인터페이스에서 인증 키를 생성했습니다. 그런 다음 해당 키를 CasaOS 컨테이너에 다음을 통해 제공했습니다. TS_AUTHKEY 환경 변수입니다.

CasaOS용 인증 키를 생성하는 데 사용되는 Tailscale 관리 페이지
원래 튜토리얼에서는 CasaOS 컨테이너가 tailnet에 참여할 수 있도록 인증 키를 생성했습니다.
TS_AUTHKEY로 구성된 CasaOS Tailscale 컨테이너 환경 변수 필드
생성된 자격 증명은 TS_AUTHKEY 환경 변수를 통해 Tailscale 컨테이너에 전달됩니다.

현재 Tailscale 문서에서도 계속 지원하는 항목은 TS_AUTHKEY인증 키는 재사용 가능하거나 일회성인 등 다양한 속성으로 생성할 수 있습니다. 서버에 적합한 권한과 유효 기간만 선택하고, 키가 노출되었다고 생각되면 키를 교체하세요.

다시 시작해도 새로 설치한 것처럼 동작하지 않도록 Tailscale 상태 영구 저장

이 점은 현재 배포 환경에서 특히 중요하며, 오래된 스크린샷만으로는 그 중요성이 잘 드러나지 않습니다. 현재 Tailscale Docker 예제에서는 다음을 설정합니다.

TS_STATE_DIR=/var/lib/tailscale

해당 디렉터리를 Docker 볼륨이나 바인드 마운트로 영구 저장합니다. 상태가 영구 저장되지 않으면 컨테이너를 다시 생성할 때 인증 및 노드 ID가 예상과 다르게 동작할 수 있습니다.

Tailscale은 또한 TS_AUTH_ONCE=true 컨테이너에 저장된 로그인 상태가 없을 때만 인증해야 하는 배포에 사용합니다. 이 옵션을 사용하는 경우 상태 디렉터리가 실제로 영구 저장되는지 확인하세요.

기존 CasaOS 스크린샷을 새로운 컨테이너 구성으로 옮겨 번역하기 전에 현재 Tailscale Docker 구성 매개변수를 확인하세요.

3단계: Tailscale에 CasaOS 노드가 표시되는지 확인

컨테이너가 성공적으로 시작되면 Tailscale 장치 관리 페이지를 열고 CasaOS 노드가 연결된 것으로 표시되는지 확인하세요. 원래 튜토리얼에서는 장치 목록을 사용해 서버에 할당된 Tailscale 주소를 확인했습니다.

tailnet에 연결된 CasaOS 서버가 표시된 Tailscale 장치 목록
인증이 완료되면 CasaOS 서버가 동일한 Tailscale 네트워크의 장치로 표시됩니다.

컨테이너가 실행 중인데도 서버가 연결된 것으로 표시되지 않으면 컨테이너 로그를 확인하고, 인증 키가 유효한지 검증하며, 현재 사용 중인 Tailscale 이미지에 필요한 상태 및 네트워킹 기능이 구성되어 있는지 확인하세요.

4단계: 원격 장치에 Tailscale 설치

집 밖에서 사용할 노트북, 휴대폰 또는 태블릿에 Tailscale 클라이언트를 설치한 다음 동일한 tailnet에 로그인하세요. 두 장치가 모두 Tailscale에 연결되면 같은 Wi-Fi 네트워크에 있을 필요가 없습니다.

현재 Tailscale 연결은 네트워크 상태에 따라 직접 연결되거나 릴레이를 사용할 수 있습니다. Tailscale 문서에 따르면 직접 연결, DERP 릴레이 연결, Tailscale 피어 릴레이 연결은 모두 WireGuard를 사용해 종단 간 암호화됩니다. 주요 차이는 페이로드가 암호화되는지 여부가 아니라 성능입니다.

5단계: Tailscale IP로 CasaOS 열기

원래 가이드에서는 CasaOS 서버의 Tailscale IP를 복사한 다음 원격 장치의 브라우저에 입력했습니다.

Tailscale 주소를 통해 원격으로 CasaOS 대시보드에 연결하는 브라우저
두 장치가 모두 동일한 tailnet에 속해 있으면 원격 클라이언트에서 서버의 Tailscale 주소를 사용해 CasaOS를 열 수 있습니다.

주소는 일반적으로 Tailscale 100.x.x.x IP입니다. tailnet에서 MagicDNS를 사용하고 CasaOS 노드에 적절한 머신 이름이 있다면 IP를 외우는 대신 Tailscale DNS 이름을 사용할 수도 있습니다.

실제로 설치된 CasaOS가 수신 대기하는 대시보드 포트를 사용하세요. CasaOS가 기본 포트가 아닌 포트로 구성된 경우 URL에 해당 포트를 포함하세요.

Tailscale IP와 홈 LAN IP는 서로 다릅니다

혼동이 발생하는 흔한 이유는 한 서버의 Tailscale만으로 일반적인 홈 네트워크의 모든 IP에 자동으로 접속할 수 있다고 예상하기 때문입니다. Tailscale 주소를 통해 CasaOS 머신에 직접 연결하는 것은 하나의 설정입니다. 다음과 같이 다른 장치에 일반 LAN 주소로 접속하는 것은 192.168.1.x이는 서브넷 라우팅이라는 별도의 Tailscale 기능입니다.

동일한 호스트에서 실행 중인 CasaOS 대시보드와 앱만 사용하면 된다면 먼저 서버의 Tailscale IP를 사용하세요. Tailscale 노드가 홈 네트워크의 다른 기기나 서브넷으로 트래픽을 라우팅하도록 의도적으로 구성할 때만 서브넷 라우팅을 설정하세요.

보안 정정: 일반적으로 Tailscale에 추가 VPN을 사용할 필요가 없습니다

원래 2023년 게시물에는 민감한 데이터 전송에 추가 VPN을 사용할 수 있다는 내용이 있었습니다. 이 표현은 오해를 불러일으킬 수 있습니다. Tailscale 자체가 WireGuard를 기반으로 구축된 암호화된 사설 네트워킹 시스템입니다. 현재 Tailscale 문서에 따르면 연결이 릴레이되는 경우를 포함해 Tailscale 기기 간 트래픽은 종단 간 암호화됩니다.

따라서 Tailscale 노드 간에 이미 이동 중인 CasaOS 트래픽을 암호화하기 위해 추가 VPN을 사용할 필요는 일반적으로 없습니다. 여러 VPN 제품을 동시에 실행하면 라우팅 충돌이 발생할 수도 있습니다. 더 유용한 보안 제어 방법은 다음과 같습니다.

  • tailnet에 액세스하는 데 사용하는 계정을 보호하세요.
  • 인증 키와 OAuth 자격 증명은 비밀로 취급하세요.
  • 오래되었거나 인식할 수 없는 기기는 tailnet에서 제거하세요.
  • 모든 노드가 모든 서비스에 무기한 접근하도록 허용하지 말고 최소 권한 액세스 규칙을 적용하세요.
  • CasaOS, Docker, Tailscale 및 호스팅 중인 애플리케이션을 최신 상태로 유지하세요.
  • Tailscale이 함께 설치되어 있다는 이유만으로 CasaOS 대시보드를 공개적으로 노출하지 마세요.

이제 Tailscale은 특정 사용자와 기기가 특정 서비스에 접근할 수 있는 범위를 제한할 때 Grants 및 액세스 제어 정책을 사용할 것을 권장합니다.

이후 ZimaOS 답변에서 추가된 내용

2024년에 올라온 답변에서는 동일한 튜토리얼이 ZimaOS를 실행하는 현재 판매 중인 ZimaCube 개인용 클라우드 NAS에서도 작동하는지 질문했습니다. 사용자는 Tailscale에서 기기가 연결된 것으로 확인했지만, ZimaOS 인터페이스는 일부만 로드되었고 앱 로딩 실패 메시지가 반복해서 표시되었습니다. 원 작성자는 재시작을 권장하며 ZimaOS에도 자체 원격 액세스 옵션이 있다고 덧붙였습니다. 이후 사용자는 ZimaOS를 버전 1.2.2로 업데이트한 뒤 문제가 해결되기 시작했다고 알렸습니다.

해당 답변은 현재의 호환성을 보장하는 내용이 아니라 역사적 증거입니다. 특정 ZimaOS UI 버전에서 애플리케이션 로딩 문제가 계속 발생하는 동안에도 Tailscale 연결을 설정할 수 있음을 보여 줍니다. 이후 2025년에 올라온 답변에서는 단계별 방법을 통해 ZimaOS에서 Tailscale을 사용할 수 있게 되었다고 했습니다.

CasaOS가 아닌 최신 ZimaOS를 사용 중이라면 2023년 CasaOS Custom Install 화면이 권장 설정이라고 가정하지 말고, 현재 ZimaOS 앱 및 원격 액세스 문서를 따르세요. 두 운영체제는 일부 생태계 역사를 공유하지만 현재의 앱 관리 및 원격 액세스 워크플로는 서로 동일하지 않습니다.

CasaOS Tailscale 문제 해결 체크리스트

  1. CasaOS에서 Tailscale 컨테이너가 실행 중인지 확인하세요.
  2. 이미지가 공식 Tailscale 컨테이너 또는 사용자가 의도적으로 신뢰하는 다른 출처의 이미지인지 확인하세요.
  3. 인증 자격 증명이 유효하며 만료되거나 취소되지 않았는지 확인하세요.
  4. 영구 저장 /var/lib/tailscale 컨테이너를 다시 생성해도 노드가 상태를 유지하도록
  5. Tailscale 장치 목록에서 CasaOS 서버가 연결된 상태로 표시되는지 확인하세요.
  6. 원격 장치에 Tailscale을 설치하고 동일한 허용된 tailnet에 로그인하세요.
  7. CasaOS 서버의 Tailscale을 테스트하세요 100.x.x.x 일반적인 LAN 주소를 시도하기 전에 Tailscale 주소
  8. IP로는 연결되지만 호스트 이름으로는 연결되지 않는다면 DNS 또는 MagicDNS 설정을 검토하세요.
  9. 다른 LAN 장치에 액세스해야 한다면 서브넷 라우팅을 별도로 구성하세요.
  10. 의도한 사용자와 장치만 CasaOS 서비스에 액세스할 수 있도록 tailnet 액세스 규칙을 검토하세요.

CasaOS Tailscale 원격 액세스 FAQ

라우터에서 CasaOS 포트를 포워딩해야 하나요?

여기서 설명하는 일반적인 Tailscale 워크플로에는 필요하지 않습니다. CasaOS 서버와 원격 클라이언트가 동일한 비공개 tailnet에 참여하므로, CasaOS 대시보드를 공용 인터넷에 직접 노출하는 대신 Tailscale 주소를 통해 서버에 액세스합니다.

TS_AUTHKEY란 무엇인가요?

TS_AUTHKEY 컨테이너를 tailnet에 인증하는 데 사용하는 Tailscale Docker 환경 변수입니다. 현재 Tailscale Docker 문서에서도 이를 계속 지원합니다. 이 값은 비밀로 취급하고 노출된 경우 교체하세요.

/var/lib/tailscale을 영구 저장해야 하는 이유는 무엇인가요?

이 디렉터리에는 컨테이너의 Tailscale 상태가 저장됩니다. 이 디렉터리를 영구 저장하면 Docker가 컨테이너를 다시 시작하거나 재생성할 때 컨테이너가 노드 ID와 인증 상태를 유지할 수 있습니다.

100.x Tailscale IP에는 연결되는데 왜 192.168.x.x 홈 주소에는 연결할 수 없나요?

CasaOS 서버 자체에 연결하는 것과 홈 서브넷 전체를 라우팅하는 것은 서로 다른 구성입니다. 일반적인 Tailscale 노드 액세스에서는 서버의 Tailscale IP를 사용합니다. 다른 LAN 주소에 액세스하려면 서브넷 라우팅을 구성하고 승인해야 합니다.

Tailscale은 암호화되나요?

예. Tailscale은 tailnet 장치 간 암호화된 통신에 WireGuard를 사용합니다. 현재 Tailscale 문서에 따르면 직접 연결과 릴레이 연결 모두 종단 간 암호화가 유지됩니다.

2023년 CasaOS 스크린샷은 아직 최신인가요?

이 내용은 과거 UI 참고 자료로 취급해야 합니다. Tailscale 실행, 노드 인증, 원격 장치 연결이라는 기본 워크플로는 여전히 유효하지만, 현재 Docker 매개변수와 CasaOS 또는 ZimaOS 인터페이스는 다를 수 있습니다.