repositories / bugabinga.net
bugabinga.net
personal infrastructure for bugabinga!
owned by admin
scripts/local/verify-ipv6.sh
Raw#!/usr/bin/env bash
set -euo pipefail
repo_root="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)"
cd "${repo_root}"
relay_v4="$(just tofu output server_public_ip_v4)"
relay_v6="$(just tofu output server_public_ip_v6)"
wg_peer_v6="$(just tofu output wireguard_peer_ipv6)"
domains="${IPV6_DOMAINS:-home vault fin tracks media docs genie ci pkg registry vcs site}"
echo "alpha: IPv6 address/routes/nft/WireGuard"
ssh alpha bash -s -- "${wg_peer_v6}" <<'REMOTE'
set -euo pipefail
wg_peer_v6="$1"
ip -6 addr show dev eth0
ip -6 route show
sudo nft -nn list ruleset | grep -E "table ip6 nat|dnat to ${wg_peer_v6}|tcp dport \\{ 80, 443 \\}"
sudo wg show wg0 allowed-ips
REMOTE
echo "klops: WireGuard IPv6 address/routes/rules"
ssh klops bash -s -- "${wg_peer_v6}" <<'REMOTE'
set -euo pipefail
wg_peer_v6="$1"
ip -6 addr show dev wg0
ip -6 route show table 51820
ip -6 rule show | grep -F "${wg_peer_v6}"
REMOTE
echo "alpha -> klops over WireGuard IPv6"
ssh alpha bash -s -- "${wg_peer_v6}" <<'REMOTE'
set -euo pipefail
wg_peer_v6="$1"
ping -6 -c 3 "${wg_peer_v6}"
ping -6 -M do -s 1232 -c 3 "${wg_peer_v6}"
curl -6 -kI --connect-timeout 5 --max-time 10 --resolve "home.bugabinga.net:443:[${wg_peer_v6}]" https://home.bugabinga.net
REMOTE
echo "external IPv4 regression"
curl -4 -kI --connect-timeout 5 --max-time 10 --resolve "home.bugabinga.net:443:${relay_v4}" https://home.bugabinga.net
echo "external IPv6 direct relay probes"
for domain in ${domains}; do
code="$(curl -6 -kI -sS -o /dev/null -w '%{http_code}' --connect-timeout 5 --max-time 10 --resolve "${domain}.bugabinga.net:443:[${relay_v6}]" "https://${domain}.bugabinga.net")"
if [[ "${code}" == "000" ]]; then
echo "${domain}.bugabinga.net IPv6 failed"
exit 1
fi
echo "${domain}.bugabinga.net IPv6 HTTP ${code}"
done
echo "external IPv6 HTTP-01 path"
curl -6 -I --connect-timeout 5 --max-time 10 --resolve "home.bugabinga.net:80:[${relay_v6}]" http://home.bugabinga.net
echo "public DNS AAAA IPv6 probes"
for domain in ${domains}; do
dig +short AAAA "${domain}.bugabinga.net" | grep -F "${relay_v6}"
code="$(curl -6 -kI -sS -o /dev/null -w '%{http_code}' --connect-timeout 5 --max-time 10 "https://${domain}.bugabinga.net")"
if [[ "${code}" == "000" ]]; then
echo "${domain}.bugabinga.net public IPv6 failed"
exit 1
fi
echo "${domain}.bugabinga.net IPv6 HTTP ${code}"
done