들어가며
대학원생이라면 한 번쯤 이런 상황을 겪는다.
학교 연구실 데스크탑에는 GPU도 박혀 있고 코드도 다 세팅돼 있다. 그런데 주말에 집에서 잠깐 실험 돌려보고 싶다. 또는 출장 가서 호텔 wifi로 잠깐 결과 확인하고 싶다. 그런데 학교 네트워크는 외부에서 SSH가 안 뚫린다.
NAT 뒤에 있고, 방화벽도 있고, 학교 IT팀에 포트 열어달라고 부탁하는 것도 보통 일이 아니다. VPN을 깔자니 학교 VPN은 또 매번 끊기고 느리다.
그러다 Tailscale을 알게 됐는데, 솔직히 처음 깔아보고 좀 놀랐다. 학교 데탑이랑 내 맥북을 같은 LAN에 있는 것처럼 묶어버린다. 방화벽 설정도, 포트 포워딩도, 공인 IP도 필요 없다. 양쪽에 깔고 같은 계정으로 로그인하면 끝이다.
각설하고, 출발해보자.
Tailscale이 뭘 해주는가
한 줄로 정리하면, WireGuard 기반의 mesh VPN이다.
뜻을 풀면 이렇다.
- 내가 가진 모든 디바이스(맥북, 학교 데탑, 집 서버 등)에 Tailscale을 깔고 같은 계정으로 로그인하면,
- 그 디바이스들끼리만 통하는 가상의 LAN(
100.x.x.x대역)이 생긴다. - 디바이스 간 통신은 P2P로 직결되고, NAT를 못 뚫는 경우에만 Tailscale의 DERP relay 서버를 잠깐 거친다.
학교 데탑 입장에서는 바깥에서 들어오는 연결이 아니라 자기가 Tailscale 서버에 나가서 연결을 유지하는 모양새이다. 대부분의 방화벽은 outbound 연결은 허용하니까, 포트 하나도 새로 열 필요가 없다. 신기한 건 이 지점이다.
설치
1. 학교 데탑 (Ubuntu 가정)
curl -fsSL https://tailscale.com/install.sh | sh
sudo tailscale up
sudo tailscale up을 치면 터미널에 인증 URL이 뜬다.
브라우저로 접속해서 본인 계정(Google, GitHub 등 사용 가능)으로 로그인하면 그 머신이 본인의 tailnet에 등록된다.
tailscale ip -4
# → 100.x.x.x 형태의 주소가 뜸
이게 학교 데탑의 Tailscale IP이다. 이 IP는 본인 디바이스끼리만 보이고, 본인이 어디로 이동해도 바뀌지 않는다.
2. 내 노트북 (macOS 가정)
brew install --cask tailscale
또는 공식 다운로드 페이지에서 앱을 받는다. 앱 실행 후 학교 데탑과 같은 계정으로 로그인하면 끝이다.
이 시점에서 노트북에서 tailscale status를 치면 학교 데탑이 본인의 tailnet 멤버로 보인다.
SSH 접속
이제 카페든 호텔이든 어디서든, 노트북에서 그냥 이렇게 치면 된다.
ssh user@100.x.x.x
학교 네트워크에 있는 것과 완전히 동일하게 들어간다. 공인 IP도, 포트 포워딩도, 학교 VPN도 필요 없다.
MagicDNS로 IP 외우지 않기
100.x.x.x를 매번 치기 귀찮으니, Tailscale admin 콘솔에서 MagicDNS를 켜자.
그러면 디바이스 이름(예: lab-desktop)으로 바로 접속할 수 있다.
ssh user@lab-desktop
~/.ssh/config에 굳이 등록하지 않아도 된다. tailnet 안에서는 디바이스 이름이 곧 hostname이다.
Tailscale SSH (선택)
한 발 더 나아가, 학교 데탑에서 이렇게 켜두면
sudo tailscale up --ssh
SSH key 관리조차 Tailscale이 대신해준다.
즉, 노트북에 새 SSH key를 깔거나 authorized_keys에 등록하는 과정 없이, Tailscale 인증 자체를 SSH 인증으로 쓴다.
디바이스를 잃어버렸을 때 admin 콘솔에서 그 디바이스만 떼어내면 접근이 즉시 차단되니, key 관리 측면에서도 깔끔하다.
다만 본인은 OpenSSH key 기반 인증이 익숙해서 그냥 일반
ssh를 쓰고 있다. 본인 취향대로 고르면 된다.
어디까지 되나
SSH만 되는 게 아니다. tailnet 안의 디바이스끼리는 모든 포트가 그냥 열려 있는 것처럼 동작한다.
실제로 자주 쓰는 패턴 몇 가지.
- Jupyter / TensorBoard 원격 접속: 학교 데탑에서
jupyter notebook --no-browser --port=8888을 띄워두고, 노트북 브라우저로http://lab-desktop:8888접속. - VS Code Remote-SSH: 그냥
lab-desktop을 host로 등록해두면 어디서든 학교 데탑의 코드를 IDE에서 직접 편집할 수 있다. 본인은 이 조합이 가장 효용이 크다. - 파일 복사:
scp some_result.bag user@lab-desktop:~/처럼 그대로 동작한다. - 집 NAS 마운트, 서버 간 데이터 동기화 등도 같은 원리로 다 된다.
정리
- 학교 데탑에 외부에서 접근하고 싶은데 방화벽/NAT 때문에 막혀 있다면, Tailscale을 깔자. 포트 하나 열지 않고 해결된다.
- 양쪽 디바이스에 깔고 같은 계정으로 로그인하면 끝.
100.x.x.xIP 또는 MagicDNS hostname으로 SSH를 친다. - SSH key 관리도 귀찮으면
tailscale up --ssh로 Tailscale에 위임할 수 있다. - 개인용은 무료 플랜으로 디바이스 100개까지 묶을 수 있다. 대학원생 입장에서는 사실상 무제한이다.
한 번 세팅해두면 학교에 가야만 쓸 수 있는 컴퓨터라는 개념 자체가 사라진다. 연구 효율 측면에서 체감 차이가 큰 도구이니, 아직 안 써봤다면 오늘 한 번 깔아보길 권한다.