#!/usr/bin/env bash # ZION TERMINAL - Diagnostico do Tailscale # Cyberdeck criado por Pablo Murad em 2026 export LC_ALL=C . /opt/zion-terminal/bin/zion-lib.sh 2>/dev/null [ "$1" = "--help" ] && { echo "Uso: zion tailscale — estado, IP, MagicDNS, peers, direto/DERP, netcheck e recomendacoes."; exit 0; } ui_dep tailscale || exit 1 ui_header "TAILSCALE" ui_section "ESTADO" printf ' %b%-14s%b %b\n' "$ZDISC" "Conexao" "$ZR" "$(tailscale status >/dev/null 2>&1 && ui_state ok || ui_state off)" ui_kv "Versao" "$(tailscale version 2>/dev/null | head -1)" ui_kv "IPv4" "$(tailscale ip -4 2>/dev/null | head -1)" ui_kv "IPv6" "$(tailscale ip -6 2>/dev/null | head -1)" ui_kv "Servico" "$(systemctl is-enabled tailscaled 2>/dev/null)/$(systemctl is-active tailscaled 2>/dev/null)" ui_section "PEERS" online=$(tailscale status 2>/dev/null | awk '/^100\./ && !/offline/{c++} END{print c+0}') total=$(tailscale status 2>/dev/null | awk '/^100\./{c++} END{print c+0}') ui_kv "Online" "$online de $total" tailscale status 2>/dev/null | awk '/^100\./{printf " %-16s %-10s %s\n",$2,$4,$5}' | head -10 ui_section "REDE (netcheck)" nc=$(tailscale netcheck 2>/dev/null) udp=$(echo "$nc" | awk -F': ' '/UDP/{print $2; exit}') derp=$(echo "$nc" | grep -A20 "DERP latency" | grep -m1 "ms" | sed 's/^[[:space:]]*//;s/[[:space:]]*$//') varies=$(echo "$nc" | awk -F': ' '/MappingVariesByDestIP/{print $2; exit}') printf ' %b%-14s%b %b %s\n' "$ZDISC" "UDP" "$ZR" "$([ "$udp" = true ] && ui_state ok || ui_state warn)" "" ui_kv "DERP proximo" "${derp:-?}" printf ' %b%-14s%b %b %s\n' "$ZDISC" "NAT dificil" "$ZR" "$([ "$varies" = true ] && ui_state warn || ui_state ok)" "${varies:-?}" ui_section "RECOMENDACOES" tailscale status 2>/dev/null | grep -q "advertising routes" && ui_info "Peers anunciam rotas — se precisar: tailscale set --accept-routes (nao aplicado)" [ "$varies" = true ] && ui_info "NAT dificil: fora da LAN tende a DERP-SP (~19ms). Normal." ui_info "Teste um peer: zion radar ou tailscale ping " ui_rule