2026-10-03 00:01:09 -04:00
|
|
|
#!/usr/bin/env bash
|
2026-10-03 00:35:39 -04:00
|
|
|
# netvm-topology.sh — live topology + per-node diagnostics.
|
|
|
|
|
# Run as root (operator: sudo -n via the allowlist).
|
2026-10-03 00:01:09 -04:00
|
|
|
set -u
|
2026-10-03 00:43:08 -04:00
|
|
|
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
|
|
|
|
|
. "$SCRIPT_DIR/netvm-names.sh"
|
2026-10-03 00:01:09 -04:00
|
|
|
for ns in $(ip netns list 2>/dev/null | awk '{print $1}' | grep '^warp-'); do
|
2026-10-03 00:43:08 -04:00
|
|
|
netvm_names "${ns#warp-}"
|
|
|
|
|
hs=$(ip netns exec "$ns" wg show "$WG" latest-handshakes 2>/dev/null | awk '{print $2}')
|
2026-10-03 00:35:39 -04:00
|
|
|
[ -z "$hs" ] && hs="none"
|
2026-10-03 00:36:42 -04:00
|
|
|
egress=$(ip netns exec "$ns" curl -sk --max-time 10 'https://1.1.1.1/cdn-cgi/trace' 2>/dev/null | grep -oP '^ip=\K.*' || true)
|
2026-10-03 00:43:08 -04:00
|
|
|
printf 'node=%s netns=%s ifaces=%s/%s handshake=%s egress=%s\n' "$NODE" "$ns" "$WG" "$VETH" "$hs" "${egress:-?}"
|
2026-10-03 00:01:09 -04:00
|
|
|
done
|
2026-10-03 00:43:08 -04:00
|
|
|
iptables -t nat -L POSTROUTING -n 2>/dev/null | grep '10.201\.' || echo "(no netvm NAT rules on host)"
|
2026-10-03 01:02:25 -04:00
|
|
|
echo "--- CDP relays ---"
|
2026-10-03 00:57:11 -04:00
|
|
|
for ns in $(ip netns list 2>/dev/null | awk '{print $1}' | grep '^warp-'); do
|
2026-10-03 01:02:25 -04:00
|
|
|
netvm_names "${ns#warp-}"
|
|
|
|
|
if [ -f "/run/netvm-${NODE}-cdp-relay.pid" ] && kill -0 "$(cat "/run/netvm-${NODE}-cdp-relay.pid")" 2>/dev/null; then
|
|
|
|
|
echo "$NODE: relay up ($PEER_IP:$CDP_PORT -> 127.0.0.1:$CDP_PORT)"
|
|
|
|
|
else
|
|
|
|
|
echo "$NODE: relay DOWN"
|
|
|
|
|
fi
|
2026-10-03 00:57:11 -04:00
|
|
|
done
|