61 lines
2.3 KiB
PowerShell
61 lines
2.3 KiB
PowerShell
<#
|
|
.SYNOPSIS
|
|
Instala y conecta Tailscale en un PC Windows (malla privada para acceso remoto).
|
|
|
|
.DESCRIPTION
|
|
Idempotente. Tailscale une los equipos (sobremesa, portatil...) en una red privada
|
|
cifrada, sin abrir puertos en el router ni depender de la red local.
|
|
|
|
Hace:
|
|
1. Instala Tailscale via winget (si falta).
|
|
2. Ejecuta `tailscale up --hostname <nombre>` (autenticacion en el navegador, una vez).
|
|
3. Muestra estado y la IP de la tailnet.
|
|
|
|
Ejecutar en CADA equipo que quiera usar la malla (sobremesa Y portatil).
|
|
|
|
.EXAMPLE
|
|
powershell -ExecutionPolicy Bypass -File setup_tailscale.ps1 -Hostname sobremesa
|
|
#>
|
|
[CmdletBinding()]
|
|
param(
|
|
[string]$Hostname = $env:COMPUTERNAME.ToLower()
|
|
)
|
|
|
|
$ErrorActionPreference = 'Continue'
|
|
|
|
function Get-TailscaleExe {
|
|
$cmd = Get-Command tailscale -ErrorAction SilentlyContinue
|
|
if ($cmd) { return $cmd.Source }
|
|
foreach ($p in @("$env:ProgramFiles\Tailscale\tailscale.exe", "${env:ProgramFiles(x86)}\Tailscale\tailscale.exe")) {
|
|
if (Test-Path $p) { return $p }
|
|
}
|
|
return $null
|
|
}
|
|
|
|
Write-Host '== Tailscale (malla privada para acceso remoto) ==' -ForegroundColor Cyan
|
|
|
|
$ts = Get-TailscaleExe
|
|
if (-not $ts) {
|
|
Write-Host ' - Instalando Tailscale via winget...' -ForegroundColor Yellow
|
|
$wg = Get-Command winget -ErrorAction SilentlyContinue
|
|
if (-not $wg) { Write-Error 'winget no disponible. Instala Tailscale manualmente desde https://tailscale.com/download/windows'; exit 1 }
|
|
winget install --id Tailscale.Tailscale -e --accept-source-agreements --accept-package-agreements
|
|
Start-Sleep -Seconds 5
|
|
$ts = Get-TailscaleExe
|
|
if (-not $ts) { Write-Error 'No se encuentra tailscale.exe tras la instalacion.'; exit 1 }
|
|
}
|
|
Write-Host " - tailscale: $ts" -ForegroundColor Green
|
|
|
|
$svc = Get-Service -Name Tailscale -ErrorAction SilentlyContinue
|
|
if ($svc) { Set-Service -Name Tailscale -StartupType Automatic; if ($svc.Status -ne 'Running') { Start-Service Tailscale } }
|
|
|
|
Write-Host " - Conectando a la tailnet como '$Hostname' (se abrira el navegador para autenticar)..." -ForegroundColor Yellow
|
|
& $ts up --hostname $Hostname
|
|
|
|
Write-Host ''
|
|
Write-Host 'Estado:' -ForegroundColor Cyan
|
|
& $ts status
|
|
$ip = (& $ts ip -4 2>$null) -join ', '
|
|
Write-Host "IP Tailscale : $ip"
|
|
Write-Host "Conexion : ssh $env:USERNAME@$Hostname (o a la IP Tailscale)"
|