서버

간단하게 Tailscale VPN 세팅하기

for2gles 2024. 1. 4. 14:41
반응형

이전 게시글에서는 간단하게 Wireguard를 설정 하여 사용해 보았다.
이전글 다시보고 오기> 간단하게 Wireguard VPN 세팅하기
Wireguard는 다른 VPN들과는 다르게 Wireguard는 빠른 특성을 지니고 있어 사용하기에도 충분히 편리했다.

이번 게시글에 소개할 기능은 Tailscale이다.

Tailscale

Tailscale은 사실 Wireguard 기반으로 구현된 VPN이다.
정확하게는 정말 쉽게 설정 및 연결할 수 있는 Wireguard VPN이 Tailscale이라고 생각하면 된다.

Wireguard는 빠르고 좋았으나 하나의 큰 단점이 존재했다.
설정하는데에 손이 너무 많이갔다.

  • 서버들이 많아지면 이를 관리하기 정말 불편했다.
    매번 Privatekey와 Publickey를 설정해주었어야했고, 서버가 5개가 있다면 각각 서버마다 4개의 Peer들을 설정해주는 작업들이 필요했다.
  • 서버를 추가한다고 한다면 이를 또 해주어야했다.
  • 서버 재설치가 필요 한 경우에는 다시 새롭게 설정을 해주거나, 내부아이피 Privatekey와 Publickey 등의 설정을 보관하여 재차 설정해주는 작업이 필요했다.

이 불편함을 모두 보완해주는 프로그램이 Tailscale이다.
Wireguard는 각 서버 개별적으로 설정을 해주고 이를 개별 서버가 보관함으로 운영이 되었다면, Tailscale은 중앙 통제시스템이 운영하는 설정을 개별서버가 받아 운영되는 VPN이다.


단순하게 Tailscale에 로그인을 함을 통해 아래의 작업들을 Tailscale에서 진행 해 준다.

  1. 각 노드는 자체적으로 임의의 공개/개인 키 쌍을 생성하고 공개 키를 해당 ID와 연결합니다.
  2. 노드는 조정 서버에 접속하여 공개 키와 해당 노드를 현재 찾을 수 있는 위치, 해당 노드가 속한 도메인에 대한 메모를 남깁니다.
  3. 노드는 다른 노드가 조정 서버에 남겨둔 도메인의 공개 키 및 주소 목록을 다운로드합니다.
  4. 노드는 적절한 공개 키 세트를 사용하여 WireGuard 인스턴스를 구성합니다.
    출처: Tailscale - how tailscale works

따라서 모든 귀찮은 작업을 Tailscale에서는 로그인 하나로 자동 설정할 수 있도록 도와준다.

아래에 Tailscale을 사용하며 느낀 장단점을 정리 해 보았다.

장점

  • 설치가 쉽고, 로그인만으로 vpn을 구성할 수 있다.
  • 모바일에서도 vpn연결이 쉬워 내부망에 접속하여 상태를 즉각적으로 확인할 수 있다.
  • 어드민 콘솔이 있어 연결되어있는 기기 목록, IP를 확인 및 삭제가 가능하다.
  • Exit Node(route all traffic/NAT) 설정이 간편하다.
  • 무료플랜에서 100개의 Device까지 무료인데, 이는 사실상 개인에게는 무제한이나 다름 없다라고 생각한다.
  • Derp 라는 릴레이 서버를 지원하여 UDP를 완전차단 혹은 엄격한 이유로 오픈할 수 없는 경우 어떻게든 연결을 시켜준다.(대신 다운로드 및 Ping속도는 극도로 느려진다.)
  • Synology Nas에서도 Tailsacle 앱을 공식적으로 지원해서 VPN에 연결하기 쉽다.
    단점
  • 서버 재설치 후 tailscale을 설정시 사설 아이피가 재할당 된다. 따라서 기존 사설아이피를 지속적으로 사용하고싶은 경우 재설정이 필요하다. 하지만 어드민 콘솔에서 기존 아이피를 확인할 수 있어서 서버 이름별 아이피를 별도 기록해 둘 필요는 없다.
  • Tailscale 계정이 노출될 경우 대부망이 오픈되는 큰 치명성이 있다. 계정에 관해서는 안전한 관리가 필요하다.(2FA 필수)
  • 개인 혹은 작은팀(3개 계정까지)이 사용할 때에는 문제가 없지만, 3개 계정이 초과하게 필요한 팀에서 사용할 때에는 추가 계정당 $6의 비용이 든다.

분명히 이 이외에도 다양한 기능들이 존재하고 지속적으로 업데이트가 되어가고 있다.
VPN구축이 필요한 사람이 있다면, Wireguard의 단점은 쏙 빼고 장점만을 가져온 Tailscale이라는 시스템을 정말 추천하지 않을 수 없다.

Tailscale 사용 해 보기

  1. 방화벽 설정
  2. Tailscale 설치
  3. Tailscale 로그인
  4. Tailscale 연결 확인해보기
  5. Tailscale 어드민 콘솔 사용해보기

방화벽 설정

Tailscale이 사용하는 포트 + 원하는 포트 사용하는 방법

Tailscale 공식문서에서 말해주기를Tailscale은 기본적으로 41641포트를 사용한다고 한다.
만약에 포트를 원하는대로 지정해주고 싶으면, /etc/default/tailscaled 파일을 수정해주면 된다.

# Set the port to listen on for incoming VPN packets.
# Remote nodes will automatically be informed about the new port number,
# but you might want to configure this in order to set external firewall
# settings.
PORT="41641"

# Extra flags you might want to pass to tailscaled.
FLAGS=""

포트번호를 바꿔주고 tailscaled 를 재시작 해주면 된다.

클라우드 방화벽 설정해주기

운영체제 방화벽 설정해주기

sudo ufw allow 41641/udp

Tailscale 설치하기

Tailscale 공식문서에 나와있는대로 진행하면 너무 쉽게 설치된다.

Tailscale 로그인

sudo tailscale up


커맨드를 입력하면 위 사진과 같이 로그인 url이 함께 나온다.

해당 url을 입력해서 tailscale에 로그인을 해서, Connect를 진행하게되면 해당 tailscale 계정을 중심으로 vpn이 구축되는 것이다.


Connect까지 완료가 된다면, 자동으로 완료처리가 된다.
이렇게 모든 기기들을 로그인 해주면 된다.

Tailscale 연결 확인해보기

연결되어있는 기기 목록은 Tailscale 콘솔 혹은 아래 커맨드를 통해 확인할 수 있다.

tailscale status

그리고, 해당 기기들 끼리 Direct P2P로 연결이 되어있는지는 아래 커맨드를 통해 확인할 수 있다.

tailscale ping ${목표 서버 tailscale 내부 아이피}

Tailscale이 Direct P2P로 연결이 된 경우

Tailscale이 Derp 릴레이 서버를 통해 연결이 된 경우(UDP 포트가 막힌 경우)

만약에 Derp로 연결이 된다면, 릴레이 서버를 통해 연결이 된 것이므로, 다른 tailscale에서 운영하는 중계 서버를 통해 접속을 하게 된 것이다.
이는 연결은 되었지만 P2P 통신에 비하여 심각한 속도저하를 일으키므로, 41641/UDP를 오픈하여 P2P 통신을 만들어주는것이 좋다.

Tailscale 어드민 콘솔 사용해보기

https://login.tailscale.com/admin/machines
Tailscale 어드민 콘솔 페이지에 접속하면


이와같은 콘솔 페이지를 확인할 수 있다.


그리고 기기별 IPv4 를 설정해줄 수도 있고, 물론 삭제도 가능하다.

아래 항목 그리고도 수많은 기능들이 개발 및 테스트 진행중이다.
Tailscale이 어떻게 발전되고 커져나갈지 너무 궁금하다.

 

 

 


오 깃헙 액션도 통합이 가능한가보다.


오.. Bastion 서버 역할도 가능하려나보다.

이 기능은 나로서는 굉장히 유용한 기능일 것 같다.

지금 내가 운영하는 서버의 경우에는 SSH포트를 항상 열어놓기 때문에 자연스럽게 이에 대한 보안적 위험이 따라오기 마련이다.

하지만 tailscale을 사용해 ssh를 연결할 수 있다면 내 서버에서 443포트 그리고 tailscale 포트 두개의 포트만을 오픈한다면 모든 기능을 활용할 수 있는것이다.

 

아래와 같이 로그를 볼 수 있는 페이지가 있는데, 현재는 tailscale에서 발생한 설정 로그들이 이곳에 남는 것 으로 보여진다.

추후에 어떠한 방식으로든 SSH접속 로그 등 더욱 다양 한 로그까지 확인 할 수 있으면 좋을 것 같다.



다른 기능들은 차차 사용 해 보면서 추가로 작성해보도록 해야겠다.
끝!

반응형