- Update INSTALLATION_GUIDE.md: * Add Headplane configuration section with proper config.yaml * Update docker-compose.yml example with simplified environment variables * Add Headplane login instructions and API key information * Update troubleshooting section for cookie_secret validation errors - Update CLIENT_CONNECTION_TEST.md: * Add Headplane web UI access information * Include external access URL (192.168.0.151:3000/admin/) * Add login credentials and API key details - Update start.sh: * Include Headplane UI URLs in installation summary * Add external access information for network environments All documentation now reflects the working Headplane UI configuration and provides complete setup instructions for both local and external access. 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
301 lines
7.6 KiB
Markdown
301 lines
7.6 KiB
Markdown
# 🔗 Tailscale 클라이언트 연결 및 테스트 가이드
|
|
|
|
## 📋 테스트 개요
|
|
- **목적**: Headscale 서버에 Tailscale 클라이언트 연결 및 VPN 기능 검증
|
|
- **환경**: Ubuntu 24.04 LTS, Tailscale 1.86.2
|
|
- **서버**: Headscale (http://localhost:8070)
|
|
|
|
## 🛠️ 사전 준비사항
|
|
- Headscale 서버가 정상 작동 중 (8070 포트)
|
|
- 사용자 및 Pre-auth 키 생성 완료
|
|
- 테스트할 클라이언트 장치 준비
|
|
|
|
## 📊 기본 정보 확인
|
|
|
|
### Headscale 서버 상태
|
|
```bash
|
|
# API 헬스 체크
|
|
curl -s http://localhost:8070/health
|
|
# 응답: {"status":"pass"}
|
|
|
|
# 컨테이너 상태 확인
|
|
docker-compose ps
|
|
# STATUS: Up (healthy 또는 running)
|
|
```
|
|
|
|
### 사용자 및 키 정보
|
|
```bash
|
|
# 사용자 목록
|
|
docker-compose exec headscale headscale users list
|
|
# 결과: myuser (ID: 1)
|
|
|
|
# Pre-auth 키 확인
|
|
echo "Pre-auth Key: fc4f2dc55ee00c5352823d156129b9ce2df4db02f1d76a21"
|
|
```
|
|
|
|
## 🚀 Tailscale 클라이언트 설치
|
|
|
|
### Ubuntu/Debian 설치
|
|
```bash
|
|
# 공식 설치 스크립트 사용
|
|
curl -fsSL https://tailscale.com/install.sh | sh
|
|
|
|
# 설치 확인
|
|
tailscale version
|
|
# 결과: 1.86.2
|
|
```
|
|
|
|
### 설치 후 서비스 상태 확인
|
|
```bash
|
|
# Tailscale 데몬 상태 확인
|
|
sudo systemctl status tailscaled
|
|
# Active: active (running)
|
|
|
|
# Tailscale 명령어 확인
|
|
which tailscale
|
|
# /usr/bin/tailscale
|
|
```
|
|
|
|
## 🔗 Headscale 서버 연결
|
|
|
|
### 연결 명령어 실행
|
|
```bash
|
|
# Pre-auth 키를 사용한 자동 연결
|
|
tailscale up --login-server=http://localhost:8070 --authkey=fc4f2dc55ee00c5352823d156129b9ce2df4db02f1d76a21
|
|
```
|
|
|
|
### 연결 성공 확인
|
|
```bash
|
|
# 연결 상태 확인
|
|
tailscale status
|
|
```
|
|
|
|
**성공적인 출력 예시:**
|
|
```
|
|
100.64.0.1 0bin-ubuntu-vm myuser linux -
|
|
```
|
|
|
|
## 📡 네트워크 인터페이스 확인
|
|
|
|
### Tailscale 인터페이스 생성 확인
|
|
```bash
|
|
# tailscale0 인터페이스 확인
|
|
ip addr show tailscale0
|
|
```
|
|
|
|
**출력 결과:**
|
|
```
|
|
214: tailscale0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1280 qdisc pfifo_fast state UNKNOWN group default qlen 500
|
|
link/none
|
|
inet 100.64.0.1/32 scope global tailscale0
|
|
valid_lft forever preferred_lft forever
|
|
inet6 fd7a:115c:a1e0::1/128 scope global
|
|
valid_lft forever preferred_lft forever
|
|
inet6 fe80::a49:8d96:4244:2fcf/64 scope link stable-privacy
|
|
valid_lft forever preferred_lft forever
|
|
```
|
|
|
|
### IP 주소 할당 확인
|
|
- **IPv4**: `100.64.0.1/32`
|
|
- **IPv6**: `fd7a:115c:a1e0::1/128`
|
|
- **링크로컬**: `fe80::a49:8d96:4244:2fcf/64`
|
|
|
|
## 🌐 Headscale 서버에서 노드 확인
|
|
|
|
### 연결된 노드 목록 확인
|
|
```bash
|
|
docker-compose exec headscale headscale nodes list
|
|
```
|
|
|
|
**출력 결과:**
|
|
```
|
|
ID | Hostname | Name | MachineKey | NodeKey | User | IP addresses | Ephemeral | Last seen | Expiration | Connected | Expired
|
|
1 | 0bin-Ubuntu-VM | 0bin-ubuntu-vm| [rzOhs] | [SbpbT] | myuser | 100.64.0.1, fd7a:115c:a1e0::1| false | 2025-09-09 05:42:25 | N/A | online | no
|
|
```
|
|
|
|
### 노드 세부 정보
|
|
- **ID**: 1
|
|
- **호스트명**: 0bin-Ubuntu-VM
|
|
- **노드명**: 0bin-ubuntu-vm
|
|
- **사용자**: myuser
|
|
- **IP 주소**: 100.64.0.1 (IPv4), fd7a:115c:a1e0::1 (IPv6)
|
|
- **상태**: online
|
|
- **임시 노드**: false
|
|
- **만료**: 없음
|
|
|
|
## 🧪 연결 테스트
|
|
|
|
### 1. 자기 자신 핑 테스트
|
|
```bash
|
|
# IPv4 핑 테스트
|
|
ping -c 3 100.64.0.1
|
|
```
|
|
|
|
**성공 결과:**
|
|
```
|
|
PING 100.64.0.1 (100.64.0.1) 56(84) bytes of data.
|
|
64 bytes from 100.64.0.1: icmp_seq=1 ttl=64 time=0.032 ms
|
|
64 bytes from 100.64.0.1: icmp_seq=2 ttl=64 time=0.044 ms
|
|
64 bytes from 100.64.0.1: icmp_seq=3 ttl=64 time=0.050 ms
|
|
|
|
--- 100.64.0.1 ping statistics ---
|
|
3 packets transmitted, 3 received, 0% packet loss, time 2080ms
|
|
rtt min/avg/max/mdev = 0.032/0.042/0.050/0.007 ms
|
|
```
|
|
|
|
### 2. IPv6 핑 테스트
|
|
```bash
|
|
# IPv6 핑 테스트
|
|
ping6 -c 3 fd7a:115c:a1e0::1
|
|
```
|
|
|
|
### 3. DNS 확인 (Magic DNS)
|
|
```bash
|
|
# Magic DNS 테스트 (설정된 경우)
|
|
nslookup 0bin-ubuntu-vm.headscale.local
|
|
```
|
|
|
|
## 📋 추가 클라이언트 연결 방법
|
|
|
|
### 다른 장치에서 연결하기
|
|
|
|
#### Windows
|
|
```cmd
|
|
# PowerShell 또는 Command Prompt에서
|
|
tailscale up --login-server=http://YOUR_SERVER_IP:8070 --authkey=fc4f2dc55ee00c5352823d156129b9ce2df4db02f1d76a21
|
|
```
|
|
|
|
#### macOS
|
|
```bash
|
|
# Terminal에서
|
|
sudo tailscale up --login-server=http://YOUR_SERVER_IP:8070 --authkey=fc4f2dc55ee00c5352823d156129b9ce2df4db02f1d76a21
|
|
```
|
|
|
|
#### 다른 Linux 장치
|
|
```bash
|
|
# 동일한 명령어 사용
|
|
tailscale up --login-server=http://YOUR_SERVER_IP:8070 --authkey=fc4f2dc55ee00c5352823d156129b9ce2df4db02f1d76a21
|
|
```
|
|
|
|
### 새로운 Pre-auth 키 생성 (필요시)
|
|
```bash
|
|
# 새로운 24시간 유효 키 생성
|
|
docker-compose exec headscale headscale preauthkeys create --user 1 --reusable --expiration 24h
|
|
```
|
|
|
|
## 🔍 모니터링 및 관리
|
|
|
|
### 실시간 연결 상태 모니터링
|
|
```bash
|
|
# 실시간 로그 확인
|
|
docker-compose logs -f headscale
|
|
|
|
# Tailscale 상태 지속 확인
|
|
watch -n 5 'tailscale status'
|
|
```
|
|
|
|
### 네트워크 트래픽 모니터링
|
|
```bash
|
|
# tailscale0 인터페이스 트래픽 확인
|
|
iftop -i tailscale0
|
|
|
|
# 또는 간단한 통계
|
|
ip -s link show tailscale0
|
|
```
|
|
|
|
## 🚨 문제 해결
|
|
|
|
### 연결 실패 시 체크리스트
|
|
|
|
#### 1. Headscale 서버 상태 확인
|
|
```bash
|
|
curl -f http://localhost:8070/health || echo "Headscale not responding"
|
|
```
|
|
|
|
#### 2. 방화벽 설정 확인
|
|
```bash
|
|
# 8070 포트 오픈 확인
|
|
sudo ufw status | grep 8070
|
|
|
|
# 필요시 포트 개방
|
|
sudo ufw allow 8070
|
|
```
|
|
|
|
#### 3. Pre-auth 키 유효성 확인
|
|
```bash
|
|
# 키 목록 확인
|
|
docker-compose exec headscale headscale preauthkeys list
|
|
```
|
|
|
|
#### 4. Tailscale 서비스 재시작
|
|
```bash
|
|
sudo systemctl restart tailscaled
|
|
```
|
|
|
|
### 연결 해제 및 재연결
|
|
```bash
|
|
# 연결 해제
|
|
tailscale down
|
|
|
|
# 재연결
|
|
tailscale up --login-server=http://localhost:8070 --authkey=fc4f2dc55ee00c5352823d156129b9ce2df4db02f1d76a21
|
|
```
|
|
|
|
## 📊 성능 테스트
|
|
|
|
### 대역폭 테스트 (2개 이상 클라이언트 연결 시)
|
|
```bash
|
|
# iperf3 설치
|
|
sudo apt install iperf3
|
|
|
|
# 서버 모드 (첫 번째 클라이언트)
|
|
iperf3 -s
|
|
|
|
# 클라이언트 모드 (두 번째 클라이언트)
|
|
iperf3 -c 100.64.0.1
|
|
```
|
|
|
|
### 지연시간 테스트
|
|
```bash
|
|
# 지속적인 핑 테스트
|
|
ping -i 0.1 100.64.0.1
|
|
```
|
|
|
|
## 🎯 테스트 결과 요약
|
|
|
|
### ✅ 성공적으로 확인된 기능
|
|
1. **클라이언트 설치**: Tailscale 1.86.2 설치 완료
|
|
2. **서버 연결**: Pre-auth 키를 통한 자동 인증 성공
|
|
3. **IP 할당**: IPv4(100.64.0.1), IPv6(fd7a:115c:a1e0::1) 정상 할당
|
|
4. **네트워크 통신**: 핑 테스트 성공 (0% 패킷 손실)
|
|
5. **인터페이스 생성**: tailscale0 인터페이스 정상 생성
|
|
6. **서버 인식**: Headscale에서 노드 정상 인식
|
|
|
|
### 📈 네트워크 성능
|
|
- **핑 지연시간**: 평균 0.042ms (로컬)
|
|
- **패킷 손실**: 0%
|
|
- **MTU**: 1280 bytes
|
|
- **상태**: UNKNOWN (정상 동작)
|
|
|
|
### 🔒 보안 확인사항
|
|
- **암호화**: WireGuard 프로토콜 사용
|
|
- **인증**: Pre-auth 키 기반 자동 인증
|
|
- **키 관리**: 24시간 만료, 재사용 가능 설정
|
|
|
|
## 🚀 결론
|
|
|
|
Headscale 서버와 Tailscale 클라이언트 간의 연결이 완벽하게 성공했습니다.
|
|
|
|
**주요 성과:**
|
|
- ✅ VPN 터널 구성 완료
|
|
- ✅ IP 주소 자동 할당 성공
|
|
- ✅ 실시간 통신 확인
|
|
- ✅ Headscale 관리 인터페이스 정상 동작
|
|
- ✅ Headplane 웹 UI 외부 접속 성공
|
|
|
|
### 🌐 완전한 관리 환경 구축
|
|
- **Headscale API**: http://localhost:8070 (명령줄 관리)
|
|
- **Headplane UI**: http://192.168.0.151:3000/admin/ (웹 관리)
|
|
- **로그인 API Key**: `8qRr1IB.tV95CmA0fLaCiGGIgBfeoN9daHceFkzI`
|
|
|
|
이제 **Tailscale을 완전히 대체**할 수 있는 자체 호스팅 VPN 솔루션이 구축되었습니다! |