#!/usr/bin/env bash # ssh-mdns-proxy: Resolve .local via mDNS with fallbacks, then connect # Usado como ProxyCommand en ~/.ssh/config # # PERSONALIZAR: # - ALIASES: agregar tus hosts con nombres cortos # - TS_DOMAIN: cambiar a tu dominio Tailscale (ver: tailscale status) # - Si no usas Tailscale, el fallback simplemente se salta HOST="$1" PORT="${2:-22}" CACHE="$HOME/.ssh/mdns-cache" QUERY="${HOST%.local}" # --- PERSONALIZAR: aliases de tus equipos --- declare -A ALIASES=( [dell]="dell-latitude3400" [lenovo]="lenovo-ideapad" ) # --- PERSONALIZAR: dominio Tailscale --- TS_DOMAIN="tailb0bb74.ts.net" [[ -n "${ALIASES[$QUERY]}" ]] && QUERY="${ALIASES[$QUERY]}" # 1. mDNS resolution (red local) IP=$("$HOME/.local/bin/mdns-resolve" "${QUERY}.local" 2 2>/dev/null) # 2. Fallback: Tailscale DNS (fuera de LAN) if [[ -z "$IP" ]]; then IP=$(getent hosts "${QUERY}.${TS_DOMAIN}" 2>/dev/null | awk "{print \$1}") fi # 3. Fallback: cached IP (si todo falla) if [[ -z "$IP" && -f "$CACHE" ]]; then IP=$(grep "^${QUERY} " "$CACHE" 2>/dev/null | awk "{print \$2}") fi if [[ -z "$IP" ]]; then echo "Error: cannot resolve ${HOST}" >&2 exit 1 fi # Save to cache for next time mkdir -p "$(dirname "$CACHE")" grep -v "^${QUERY} " "$CACHE" > "${CACHE}.tmp" 2>/dev/null || true echo "${QUERY} ${IP}" >> "${CACHE}.tmp" mv "${CACHE}.tmp" "$CACHE" exec nc "$IP" "$PORT"