SPB Git forge
3commits 1branches 0releases
2.9 MBsize
maindefault branch
1 h agolast push
HTML 57.2% Shell 19.1% Python 11.2% CSS 7.4% JavaScript 5.1%
2.7 KB · 44 lines
Raw Blame History
1#!/usr/bin/env bash2# mlt — MacLustr Tunnel depuis le laptop : le « ngrok privé » du cluster (WireGuard + Caddy sur une passerelle OVH).3#4#   mlt [-g BHS64] status                       pairs WireGuard + routes publiques de la passerelle5#   mlt [-g …] peer <alias> [<alias>…]         installe WireGuard sur un Mac (brew wireguard-tools, LaunchDaemon) et l'enregistre sur le hub6#   mlt [-g …] add <domaine> <alias>:<port> [<alias>:<port>…]   expose https://<domaine> → nœud(s) (TLS auto ; DNS A → IP de la passerelle)7#   mlt [-g …] redirect <domaine> <cible>      ex. mlt redirect qc26.ca www.qc26.ca8#   mlt [-g …] rm <domaine> | ls | ssh9#10# Passerelle : BHS64 (Beauharnois, wg1 / 10.67.0.x, IP 51.161.112.61). R9128 (Gravelines, wg0 / 10.66.0.x) retirée le 2026-10-02.11# Équivalent de `ngrok http <port> --url=<domaine>` : mlt add <domaine> <nœud>:<port>  (+ A → IP passerelle chez GoDaddy).12set -euo pipefail13HERE="$(cd "$(dirname "$0")" && pwd)"14TOOLS="$HERE/maclustr-tunnel"15GW=${MLT_GW:-BHS64}16if [ "${1:-}" = "-g" ]; then GW=$2; shift 2; fi17case "$GW" in18  BHS64) GW_IP=51.161.112.61; IFACE=wg1; SUBNET=10.67.0; SERVER_PUB=${MLT_PUB_BHS64:-$(cat "$TOOLS/hub-BHS64.pub" 2>/dev/null || true)} ;;19  *) echo "mlt: passerelle inconnue $GW (BHS64 seulement depuis le 2026-10-02)" >&2; exit 1 ;;20esac21die(){ echo "mlt: $*" >&2; exit 1; }22sudo_pw_for(){ local pw; pw=$(ssh M1M32 "cat ~/dispatch/.sudo-$1 2>/dev/null"); echo "${pw:-492592}"; }   # loués : M1M32:~/dispatch/.sudo-<alias> ; LAN : 49259223cmd=${1:-status}; shift || true24case "$cmd" in25  status|ls) ssh "$GW" "sudo tunnelctl $cmd" ;;26  add|redirect|rm) ssh "$GW" "sudo tunnelctl $cmd $(printf '%q ' "$@")" ;;27  ssh) exec ssh "$GW" ;;28  peer)29    [ $# -ge 1 ] || die "mlt peer <alias>…"30    [ -n "$SERVER_PUB" ] || die "clé publique du hub $GW inconnue (fichier $TOOLS/hub-$GW.pub)"31    for a in "$@"; do32      ip=$(awk -v a="$a" '$1==a{print $2}' "$TOOLS/ipmap" | sed "s/^10\.66\.0\./$SUBNET./"); [ -n "$ip" ] || die "alias $a absent de $TOOLS/ipmap"33      pw=$(sudo_pw_for "$a")34      echo "== $a → $ip ($IFACE → $GW $GW_IP)"35      scp -q "$TOOLS/wg-node-setup.sh" "$a:/tmp/wg-node-setup.sh"36      out=$(ssh "$a" "bash /tmp/wg-node-setup.sh $ip $SERVER_PUB '$pw' $IFACE $GW_IP:51820 2>&1" | tail -3)37      echo "$out" | grep -v PUBKEY | sed 's/^/   /'38      pub=$(echo "$out" | awk '/PUBKEY/{print $NF}'); [ -n "$pub" ] || die "pas de clé publique renvoyée par $a"39      ssh "$GW" "sudo tunnelctl peer add $a $pub" | sed 's/^/   /'40      sleep 3; ssh "$GW" "ping -c 1 -W 3 -q $ip >/dev/null && echo '   ping OK depuis la passerelle' || echo '   ping KO (attendre le handshake, keepalive 25 s)'"41    done ;;42  *) sed -n '2,12p' "$0"; exit 1 ;;43esac44