fix(network): wait for network-online.target before caddy and coredns
Both services bind to the Tailscale IP, which isn't available until
the tailscale0 interface is fully up. Adding network-online.target to
after/wants ensures the bind address exists before either service starts.
Also adds explicit restart config to coredns (on-failure, 10s backoff)
so it recovers gracefully if it does lose the race on a slow boot.