- External IP: switch from DDNS domain lookup to curl ifconfig.me with 5-min cache; DDNS approach broke because host detection uses HOST1_NAME but conf has HOST1, so domain was never resolved - Tailscale IP: switch from hardcoded tailscale0 iface to `tailscale ip -4`; interface name varies (tailscale0, tailscale1) across kernels/installs