# πͺ 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μμλ ν μ€ λͺ
λ Ήμ΄λ‘ νν λ€νΈμν¬ μ°κ²°!" π―