Using webhooks on locally running n8n instances?

I am runnning an n8n instance on docker on my homelab. Now the thing is my homelab is connected to my college’s wifi network and i use tailscale as a medium to access it. Now when i was trying out a workflow ( i am a beginner), it gave me an error stating that webhooks couldnt be accessed. I asked chatgpt it made me use a cloudflared tunnel to open it to accept https webhooks. Is there a workaround that i dont know. Please help, i dont wanna pay for a domain name again.

Describe the problem/error/question

What is the error message (if any)?

Please share your workflow

(Select the nodes on your canvas and use the keyboard shortcuts CMD+C/CTRL+C and CMD+V/CTRL+V to copy and paste the workflow.)

Share the output returned by the last node

Information on your n8n setup

  • n8n version:
  • Database (default: SQLite):
  • n8n EXECUTIONS_PROCESS setting (default: own, main):
  • Running n8n via (Docker, npm, n8n cloud, desktop app):
  • Operating system:

@Liruan the webhook URL needs to be publicly reachable. Local means no incoming internet traffic.

Two practical options:

Ngrok is the quickest fix. Install it, run “ngrok http 5678”, and you get a public URL tunnelling to your local n8n. In n8n settings set WEBHOOK_URL to the ngrok address. Your webhook node will then show the correct public URL. Works well for testing but the URL rotates every restart unless you pay for a fixed domain.

Cloudflare Tunnel is the cleaner free alternative. Install cloudflared, create a tunnel pointing to localhost:5678, and you get a fixed subdomain at no cost. Set that as your WEBHOOK_URL and it persists across restarts.

One thing to set regardless: the WEBHOOK_URL environment variable in n8n. Without it, n8n generates webhook URLs based on its own host detection and will produce a localhost address that external services cannot reach.

What service is sending the webhook? Some have IP allowlists you can configure which changes the approach.

Since you’re already on Tailscale, there’s an even easier path - Tailscale Funnel. It gives you a stable public HTTPS URL that routes directly to your Docker container, no domain needed and no rotating URLs. Enable it with tailscale funnel 5678 (assuming default n8n port). Then set WEBHOOK_URL=https://your-machine-name.tailnet-name.ts.net in your n8n Docker env. The URL stays the same across restarts, which makes it cleaner than ngrok free tier for long-running homelab setups.