# πŸͺŸ Windows용 팜큐 Headscale 원클릭 μ„€μΉ˜ νŒ¨ν‚€μ§€ κΈ°νšμ„œ ## 🎯 λͺ©ν‘œ Windows ν΄λΌμ΄μ–ΈνŠΈμ—μ„œ **단 ν•œ 번의 μ‹€ν–‰**으둜 Tailscale μ„€μΉ˜λΆ€ν„° 팜큐 Headscale λ„€νŠΈμ›Œν¬ μ—°κ²°κΉŒμ§€ μ™„μ „ μžλ™ν™” ## πŸ” ν˜„μž¬ Windows 상황 뢄석 ### κΈ°μ‘΄ μ—°κ²°λœ Windows ν΄λΌμ΄μ–ΈνŠΈλ“€ ``` 100.79.125.82 upharm-1 thug0bin@ windows offline 100.76.226.63 upharm thug0bin@ windows offline 100.93.4.146 prox-win10-kiosk thug0bin@ windows offline 100.109.121.8 desktop-06t3j0m thug0bin@ windows offline 100.70.5.37 desktop-9a1aurp thug0bin@ windows offline 100.126.213.6 desktop-m445evd thug0bin@ windows offline ``` ### Windows νŠΉμ„± - **κ΄€λ¦¬μž κΆŒν•œ** ν•„μš” (UAC) - **PowerShell** 슀크립트 μ‹€ν–‰ μ •μ±… - **GUI μ„€μΉ˜ λ§ˆλ²•μ‚¬** μ„ ν˜Έ - **λ ˆμ§€μŠ€νŠΈλ¦¬** μ„€μ • 관리 - **μ„œλΉ„μŠ€** μžλ™ μ‹œμž‘ μ„€μ • ## πŸ’‘ Windows μ„€μΉ˜ νŒ¨ν‚€μ§€ λ°©μ•ˆ (5κ°€μ§€) ## λ°©μ•ˆ 1: PowerShell 원클릭 슀크립트 (ꢌμž₯) ### κ°œλ…λ„ ``` [μ‚¬μš©μž] β†’ [PowerShell 슀크립트] β†’ [Tailscale MSI μ„€μΉ˜] β†’ [Headscale 등둝] β†’ [μ™„λ£Œ] 우클릭 "κ΄€λ¦¬μžλ‘œ μ‹€ν–‰" μžλ™ λ‹€μš΄λ‘œλ“œ/μ„€μΉ˜ μžλ™ μ„œλ²„ μ„€μ • ``` ### κ΅¬ν˜„ 방법 #### 1.1 PowerShell 슀크립트 생성 ```powershell # farmq-headscale-installer.ps1 param( [switch]$Force, [string]$HeadscaleServer = "https://head.0bin.in", [string]$PreAuthKey = "8b3df41d37cb158ea39f41fc32c9af46e761de817ad06038" ) # κ΄€λ¦¬μž κΆŒν•œ 확인 if (-NOT ([Security.Principal.WindowsPrincipal] [Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] "Administrator")) { Write-Host "❌ κ΄€λ¦¬μž κΆŒν•œμ΄ ν•„μš”ν•©λ‹ˆλ‹€." -ForegroundColor Red Write-Host "우클릭 β†’ 'κ΄€λ¦¬μžλ‘œ μ‹€ν–‰'을 μ‚¬μš©ν•΄μ£Όμ„Έμš”." -ForegroundColor Yellow pause exit 1 } Write-Host "πŸš€ 팜큐 Headscale Windows μ„€μΉ˜ μ‹œμž‘..." -ForegroundColor Green ``` #### 1.2 μ›Ή μ‹€ν–‰ 방법 ```powershell # κ΄€λ¦¬μž PowerShellμ—μ„œ iex ((New-Object System.Net.WebClient).DownloadString('https://git.0bin.in/.../farmq-install.ps1')) # λ˜λŠ” κ°•μ œ μž¬λ“±λ‘ iex ((New-Object System.Net.WebClient).DownloadString('https://git.0bin.in/.../farmq-install.ps1?force=1')) ``` ### μž₯점 - βœ… 단일 λͺ…λ Ήμ–΄λ‘œ μ‹€ν–‰ κ°€λŠ₯ - βœ… κΈ°μ‘΄ Linux μŠ€ν¬λ¦½νŠΈμ™€ μœ μ‚¬ν•œ UX - βœ… μ›Ήμ—μ„œ λ°”λ‘œ μ‹€ν–‰ κ°€λŠ₯ - βœ… 버전 관리 용이 ### 단점 - ❌ PowerShell μ‹€ν–‰ μ •μ±… 문제 - ❌ 일반 μ‚¬μš©μžμ—κ²Œ λ³΅μž‘ν•¨ - ❌ UAC ν”„λ‘¬ν”„νŠΈ ν•„μš” --- ## λ°©μ•ˆ 2: MSI μ„€μΉ˜ νŒ¨ν‚€μ§€ (GUI 방식) ### κ°œλ…λ„ ``` [μ‚¬μš©μž] β†’ [farmq-headscale-installer.msi μ‹€ν–‰] β†’ [μ„€μΉ˜ λ§ˆλ²•μ‚¬] β†’ [μ™„λ£Œ] 더블클릭 GUI 단계별 μ§„ν–‰ ``` ### κ΅¬ν˜„ 방법 #### 2.1 WiX Toolset으둜 MSI μ œμž‘ ```xml ``` #### 2.2 μ„€μΉ˜ λ§ˆλ²•μ‚¬ UI ``` β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ 팜큐 Headscale ν΄λΌμ΄μ–ΈνŠΈ μ„€μΉ˜ β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚ [ ] κΈ°λ³Έ μ„€μΉ˜ (ꢌμž₯) β”‚ β”‚ [ ] κΈ°μ‘΄ μ—°κ²° ν•΄μ œ ν›„ μž¬μ„€μΉ˜ β”‚ β”‚ β”‚ β”‚ μ„œλ²„: https://head.0bin.in β”‚ β”‚ λ„€νŠΈμ›Œν¬: 100.64.0.0/10 β”‚ β”‚ β”‚ β”‚ [< 이전] [λ‹€μŒ >] [μ·¨μ†Œ] β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ ``` ### μž₯점 - βœ… Windows μ‚¬μš©μžμ—κ²Œ μΉœμˆ™ν•œ GUI - βœ… μ œμ–΄νŒμ—μ„œ 제거 κ°€λŠ₯ - βœ… λ””μ§€ν„Έ μ„œλͺ… κ°€λŠ₯ - βœ… κ·Έλ£Ή μ •μ±… 배포 κ°€λŠ₯ ### 단점 - ❌ 개발 λ³΅μž‘λ„ λ†’μŒ - ❌ μ½”λ“œ μ„œλͺ… μΈμ¦μ„œ ν•„μš” - ❌ μ—…λ°μ΄νŠΈ 배포 볡작 --- ## λ°©μ•ˆ 3: μ‹€ν–‰ 파일 (EXE) + λ‚΄μž₯ λ¦¬μ†ŒμŠ€ ### κ°œλ…λ„ ``` [μ‚¬μš©μž] β†’ [farmq-installer.exe μ‹€ν–‰] β†’ [μ½˜μ†”/GUI 선택] β†’ [μ™„λ£Œ] 단일 μ‹€ν–‰ 파일 λͺ¨λ“  λ¦¬μ†ŒμŠ€ λ‚΄μž₯ ``` ### κ΅¬ν˜„ 방법 #### 3.1 Go/C#으둜 λ„€μ΄ν‹°λΈŒ μ‹€ν–‰νŒŒμΌ ```go // farmq-installer.go package main import ( "embed" "fmt" "os" "os/exec" ) //go:embed resources/tailscale-windows.msi //go:embed resources/register-script.ps1 var resources embed.FS func main() { fmt.Println("πŸš€ 팜큐 Headscale Windows μ„€μΉ˜") // κ΄€λ¦¬μž κΆŒν•œ 확인 if !isAdmin() { fmt.Println("❌ κ΄€λ¦¬μž κΆŒν•œμœΌλ‘œ λ‹€μ‹œ μ‹€ν–‰ν•΄μ£Όμ„Έμš”") return } // Tailscale MSI μΆ”μΆœ 및 μ„€μΉ˜ installTailscale() // Headscale 등둝 registerHeadscale() } ``` #### 3.2 배포 ν˜•νƒœ - **farmq-installer.exe** (단일 파일, ~50MB) - Tailscale MSI 포함 - PowerShell 슀크립트 포함 - λͺ¨λ“  μ˜μ‘΄μ„± λ‚΄μž₯ ### μž₯점 - βœ… 단일 파일둜 배포 κ°„νŽΈ - βœ… μ˜€ν”„λΌμΈ μ„€μΉ˜ κ°€λŠ₯ - βœ… μ˜μ‘΄μ„± 문제 μ—†μŒ - βœ… μ½˜μ†”/GUI ν•˜μ΄λΈŒλ¦¬λ“œ κ°€λŠ₯ ### 단점 - ❌ 파일 크기 큼 (50MB+) - ❌ λ„€μ΄ν‹°λΈŒ 개발 ν•„μš” - ❌ Tailscale μ—…λ°μ΄νŠΈ μ‹œ μž¬λΉŒλ“œ --- ## λ°©μ•ˆ 4: μ›Ή 기반 μ„€μΉ˜ (λΈŒλΌμš°μ €) ### κ°œλ…λ„ ``` [μ‚¬μš©μž] β†’ [μ›ΉνŽ˜μ΄μ§€ λ°©λ¬Έ] β†’ [원클릭 λ‹€μš΄λ‘œλ“œ] β†’ [μžλ™ μ‹€ν–‰] β†’ [μ™„λ£Œ] μ„€μΉ˜ κ°€μ΄λ“œ νŽ˜μ΄μ§€ λ§žμΆ€ν˜• μ„€μΉ˜νŒŒμΌ λΈŒλΌμš°μ € μ‹€ν–‰ ``` ### κ΅¬ν˜„ 방법 #### 4.1 μ›Ή μ„€μΉ˜ νŽ˜μ΄μ§€ ```html 팜큐 Headscale Windows μ„€μΉ˜

πŸͺŸ Windows용 팜큐 λ„€νŠΈμ›Œν¬ μ„€μΉ˜

``` #### 4.2 동적 μ„€μΉ˜νŒŒμΌ 생성 ```python # Flask μ„œλ²„μ—μ„œ μ‹€μ‹œκ°„ 생성 @app.route('/download') def download_installer(): install_type = request.args.get('type', 'basic') # μ‚¬μš©μž λ§žμΆ€ν˜• PowerShell 슀크립트 생성 script = generate_powershell_script( force=install_type=='force', preauth_key=get_current_preauth_key(), server_url="https://head.0bin.in" ) response = make_response(script) response.headers['Content-Type'] = 'application/octet-stream' response.headers['Content-Disposition'] = 'attachment; filename=farmq-install.ps1' return response ``` ### μž₯점 - βœ… μ΅œμ‹  μ„€μ • 항상 반영 - βœ… μ‚¬μš©μžλ³„ 맞좀 μ„€μΉ˜ - βœ… 톡계 μˆ˜μ§‘ κ°€λŠ₯ - βœ… μ›Ή 기반으둜 μ ‘κ·Όμ„± μ’‹μŒ ### 단점 - ❌ 인터넷 μ—°κ²° ν•„μˆ˜ - ❌ μ›Ή μ„œλ²„ 인프라 ν•„μš” - ❌ λΈŒλΌμš°μ € λ³΄μ•ˆ μ •μ±… μ œμ•½ --- ## λ°©μ•ˆ 5: 배치 파일 (BAT) 슀크립트 ### κ°œλ…λ„ ``` [μ‚¬μš©μž] β†’ [farmq-install.bat μ‹€ν–‰] β†’ [Windows CMD λͺ…λ Ή] β†’ [μ™„λ£Œ] 우클릭 "κ΄€λ¦¬μžλ‘œ μ‹€ν–‰" 전톡적인 배치 방식 ``` ### κ΅¬ν˜„ 방법 #### 5.1 배치 슀크립트 ```batch @echo off :: farmq-install.bat title 팜큐 Headscale Windows μ„€μΉ˜ :: κ΄€λ¦¬μž κΆŒν•œ 확인 net session >nul 2>&1 if %errorLevel% neq 0 ( echo ❌ κ΄€λ¦¬μž κΆŒν•œμ΄ ν•„μš”ν•©λ‹ˆλ‹€. echo 우클릭으둜 "κ΄€λ¦¬μžλ‘œ μ‹€ν–‰"ν•΄μ£Όμ„Έμš”. pause exit /b 1 ) echo πŸš€ 팜큐 Headscale Windows μ„€μΉ˜ μ‹œμž‘... :: Tailscale λ‹€μš΄λ‘œλ“œ 및 μ„€μΉ˜ echo πŸ“¦ Tailscale λ‹€μš΄λ‘œλ“œ 쀑... powershell -Command "Invoke-WebRequest -Uri 'https://pkgs.tailscale.com/stable/tailscale-setup.exe' -OutFile 'tailscale-setup.exe'" echo πŸ”§ Tailscale μ„€μΉ˜ 쀑... tailscale-setup.exe /S :: Headscale 등둝 echo 🌐 Headscale μ„œλ²„ 등둝 쀑... "C:\Program Files\Tailscale\tailscale.exe" up --login-server=https://head.0bin.in --authkey=8b3df41d37cb158ea39f41fc32c9af46e761de817ad06038 echo βœ… μ„€μΉ˜ μ™„λ£Œ! pause ``` ### μž₯점 - βœ… 개발 간단 - βœ… Windows λ„€μ΄ν‹°λΈŒ 지원 - βœ… μ˜μ‘΄μ„± μ—†μŒ - βœ… 디버깅 용이 ### 단점 - ❌ κΈ°λŠ₯ μ œν•œμ  - ❌ μ—λŸ¬ 처리 볡작 - ❌ μ‚¬μš©μž κ²½ν—˜ 떨어짐 --- ## 🎯 ꢌμž₯ κ΅¬ν˜„ μš°μ„ μˆœμœ„ ### 1단계: PowerShell 슀크립트 (μ¦‰μ‹œ κ΅¬ν˜„ κ°€λŠ₯) **κΈ°κ°„**: 1-2일 **λ‚œμ΄λ„**: ν•˜ ```powershell # μ‚¬μš©μž μ‹€ν–‰ 방법 # 1. κ΄€λ¦¬μž PowerShell μ—΄κΈ° # 2. λ‹€μŒ λͺ…λ Ή μ‹€ν–‰ iex ((New-Object System.Net.WebClient).DownloadString('https://git.0bin.in/.../farmq-install.ps1')) ``` ### 2단계: μ‹€ν–‰ 파일 (EXE) 방식 **κΈ°κ°„**: 3-5일 **λ‚œμ΄λ„**: 쀑 - Goμ–Έμ–΄λ‘œ 크둜슀 컴파일 - 단일 μ‹€ν–‰νŒŒμΌλ‘œ 배포 - GUI μ˜΅μ…˜ 포함 ### 3단계: MSI μ„€μΉ˜ νŒ¨ν‚€μ§€ **κΈ°κ°„**: 1주일 **λ‚œμ΄λ„**: 상 - 전문적인 μ„€μΉ˜ κ²½ν—˜ - μ œμ–΄νŒ 등둝 - κ·Έλ£Ή μ •μ±… 배포 지원 ## πŸ“‹ PowerShell 슀크립트 κ΅¬ν˜„ λͺ…μ„Έμ„œ ### κΈ°λ³Έ κΈ°λŠ₯ ```powershell # 1. μ‹œμŠ€ν…œ 확인 - Windows 버전 체크 (Windows 10/11 지원) - κ΄€λ¦¬μž κΆŒν•œ 확인 - 인터넷 μ—°κ²° 확인 # 2. Tailscale μ„€μΉ˜ - κΈ°μ‘΄ μ„€μΉ˜ 확인 - μ΅œμ‹  버전 λ‹€μš΄λ‘œλ“œ - μžλ™ μ„€μΉ˜ (Silent Install) - μ„œλΉ„μŠ€ μ‹œμž‘ # 3. Headscale 등둝 - κΈ°μ‘΄ μ—°κ²° 확인 및 ν•΄μ œ - Pre-auth key둜 μžλ™ 등둝 - μ—°κ²° μƒνƒœ 확인 # 4. λ°©ν™”λ²½ μ„€μ • - Windows Defender μ˜ˆμ™Έ μΆ”κ°€ - ν•„μš”ν•œ 포트 ν—ˆμš© # 5. μ™„λ£Œ 확인 - IP μ£Όμ†Œ ν• λ‹Ή 확인 - λ„€νŠΈμ›Œν¬ μ—°κ²° ν…ŒμŠ€νŠΈ - μƒνƒœ 좜λ ₯ ``` ### μ‚¬μš©μž μ‹œλ‚˜λ¦¬μ˜€ ``` 1. μ•½κ΅­ 직원이 μƒˆ PC μ„€μ • 2. κ΄€λ¦¬μž PowerShell μ‹€ν–‰ 3. 원클릭 λͺ…λ Ήμ–΄ λΆ™μ—¬λ„£κΈ° 4. μžλ™ μ„€μΉ˜ μ§„ν–‰ (2-3λΆ„) 5. 팜큐 λ„€νŠΈμ›Œν¬ μ—°κ²° μ™„λ£Œ ``` ## πŸ”§ μ¦‰μ‹œ κ΅¬ν˜„ κ°€λŠ₯ν•œ MVP ### 파일 ꡬ쑰 ``` farmq-windows-installer/ β”œβ”€β”€ farmq-install.ps1 # 메인 μ„€μΉ˜ 슀크립트 β”œβ”€β”€ modules/ β”‚ β”œβ”€β”€ system-check.ps1 # μ‹œμŠ€ν…œ 확인 β”‚ β”œβ”€β”€ tailscale-installer.ps1 # Tailscale μ„€μΉ˜ β”‚ β”œβ”€β”€ headscale-register.ps1 # Headscale 등둝 β”‚ └── network-verify.ps1 # λ„€νŠΈμ›Œν¬ 확인 β”œβ”€β”€ resources/ β”‚ └── farmq-logo.ico # μ•„μ΄μ½˜ └── README-windows.md # Windows μ„€μΉ˜ κ°€μ΄λ“œ ``` ### μ›Ή μ‹€ν–‰ λͺ…λ Ήμ–΄ ```powershell # κΈ°λ³Έ μ„€μΉ˜ Set-ExecutionPolicy Bypass -Scope Process -Force; iex ((New-Object System.Net.WebClient).DownloadString('https://git.0bin.in/thug0bin/headscale-tailscale-replacement/raw/branch/main/farmq-install.ps1')) # κ°•μ œ μž¬μ„€μΉ˜ Set-ExecutionPolicy Bypass -Scope Process -Force; iex ((New-Object System.Net.WebClient).DownloadString('https://git.0bin.in/thug0bin/headscale-tailscale-replacement/raw/branch/main/farmq-install.ps1?force=1')) ``` ## πŸ“Š μ˜ˆμƒ μ‚¬μš© 톡계 ### λŒ€μƒ μ‚¬μš©μž - **팜큐 μ•½κ΅­**: ~100개 μ•½κ΅­ Γ— 2-3λŒ€ PC = 200-300λŒ€ - **μ‹ κ·œ PC**: μ›” 10-20λŒ€ μΆ”κ°€ - **μž¬μ„€μΉ˜**: μ›” 5-10건 ### 성곡 μ§€ν‘œ - βœ… **μ„€μΉ˜ 성곡λ₯ **: 95% 이상 - βœ… **μ„€μΉ˜ μ‹œκ°„**: 3λΆ„ 이내 - βœ… **μ‚¬μš©μž λ§Œμ‘±λ„**: 5점 만점 4점 이상 - βœ… **지원 μš”μ²­**: μ›” 5건 μ΄ν•˜ ## πŸš€ κ²°λ‘  및 μΆ”μ²œ **μ¦‰μ‹œ κ΅¬ν˜„ ꢌμž₯**: PowerShell 원클릭 슀크립트 1. **개발 μš©μ΄μ„±** ⭐⭐⭐⭐⭐ 2. **μ‚¬μš©μž νŽΈμ˜μ„±** ⭐⭐⭐⭐ 3. **μœ μ§€λ³΄μˆ˜μ„±** ⭐⭐⭐⭐⭐ 4. **배포 νŽΈμ˜μ„±** ⭐⭐⭐⭐⭐ **λ‹€μŒ 단계**: PowerShell 슀크립트 κ΅¬ν˜„ β†’ EXE 파일 β†’ MSI νŒ¨ν‚€μ§€ 순으둜 단계적 λ°œμ „ --- **λͺ©ν‘œ**: "Linux처럼 Windowsμ—μ„œλ„ ν•œ 쀄 λͺ…λ Ήμ–΄λ‘œ 팜큐 λ„€νŠΈμ›Œν¬ μ—°κ²°!" 🎯