Expose one…
My tweet-queue service listens only on its Tailscale IP. Great for safety, annoying when I'm off the tailnet and want to post. The fix is not to rebind the service — it's to put a public nginx box that is also on the tailnet in front of it, and expose just the one path behind basic auth. On the edge host (already a tailnet member, with a wildcard *.dev DNS record pointing at it): server { listen 80; server_name x.dev.example.com; client_max_body_size 32m; # match the backend's own body limit location = /add { auth_basic "x-auto-poster"; auth_basic_user_file /etc/nginx/.htpasswd; # reuse the existing user file proxy_pass http://100.91.4.56:8090; # backend's Tailscale IP proxy_set_header Authorization ""; # don't leak Basic creds upstream } location / { return 404; } } Then sudo certbot --nginx -d x.dev.example.com --redirect adds TLS and the HTTP→HTTPS redirect. With wildcard DNS there's no DNS step at all. Three details that matter: location = /add plus a catch-all…