Tailscale Funnel
Tailscale Funnel ermoglicht es Ihnen, Ihre lokale PRX-Instanz uber Tailscales Relay-Infrastruktur dem offentlichen Internet zu exponieren. Im Gegensatz zu einem traditionellen Tunnel, der ein Drittanbieter-Edge-Netzwerk erfordert, nutzt Funnel Ihr bestehendes Tailscale-Mesh -- was es zu einer ausgezeichneten Wahl macht, wenn Ihre PRX-Knoten bereits uber Tailscale kommunizieren.
Ubersicht
Tailscale bietet zwei komplementare Funktionen fur PRX-Konnektivitat:
| Funktion | Umfang | Anwendungsfall |
|---|---|---|
| Tailscale Serve | Privat (nur Tailnet) | PRX fur andere Gerate in Ihrem Tailscale-Netzwerk exponieren |
| Tailscale Funnel | Offentlich (Internet) | PRX fur externe Webhooks und Dienste exponieren |
PRX verwendet Funnel fur Webhook-Ingress und Serve fur Knoten-zu-Knoten-Kommunikation innerhalb eines Tailnets.
Wie Funnel funktioniert
Externer Dienst (GitHub, Telegram, etc.)
│
▼ HTTPS
┌─────────────────────┐
│ Tailscale DERP Relay│
│ (Tailscale-Infra) │
└────────┬────────────┘
│ WireGuard
┌────────▼────────────┐
│ tailscaled │
│ (Ihre Maschine) │
└────────┬────────────┘
│ localhost
┌────────▼────────────┐
│ PRX-Gateway │
│ (127.0.0.1:8080) │
└─────────────────────┘Traffic kommt an Ihrem Tailscale-MagicDNS-Hostnamen an (z.B. prx-host.tailnet-name.ts.net), wird uber Tailscales DERP-Relay-Netzwerk uber WireGuard geroutet und an das lokale PRX-Gateway weitergeleitet.
Voraussetzungen
- Tailscale auf der Maschine installiert und authentifiziert, auf der PRX lauft
- Tailscale Funnel fur Ihr Tailnet aktiviert (erfordert Admin-Genehmigung)
- Der Tailscale-Knoten der Maschine muss Funnel-Fahigkeit in der ACL-Richtlinie haben
Tailscale installieren
# Debian / Ubuntu
curl -fsSL https://tailscale.com/install.sh | sh
# macOS
brew install tailscale
# Authentifizieren
sudo tailscale upFunnel in der ACL-Richtlinie aktivieren
Funnel muss explizit in der ACL-Richtlinie Ihres Tailnets erlaubt werden. Fugen Sie Folgendes zu Ihrer Tailscale-ACL-Datei hinzu (uber die Admin-Konsole):
{
"nodeAttrs": [
{
"target": ["autogroup:member"],
"attr": ["funnel"]
}
]
}Dies gewahrt allen Mitgliedern die Funnel-Fahigkeit. Fur strengere Kontrolle ersetzen Sie autogroup:member durch bestimmte Benutzer oder Tags:
{
"target": ["tag:prx-agent"],
"attr": ["funnel"]
}Konfiguration
Grundlegende Funnel-Einrichtung
[tunnel]
backend = "tailscale"
local_addr = "127.0.0.1:8080"
[tunnel.tailscale]
# Funnel exponiert den Dienst dem offentlichen Internet.
# Auf false setzen, um Serve zu verwenden (nur Tailnet-Zugriff).
funnel = true
# Port, der uber Funnel exponiert wird. Tailscale Funnel unterstutzt
# die Ports 443, 8443 und 10000.
port = 443
# HTTPS ist fur Funnel obligatorisch. Tailscale stellt
# automatisch ein Zertifikat uber Let's Encrypt bereit.Nur-Tailnet-Setup (Serve)
Fur private Knoten-zu-Knoten-Kommunikation ohne offentliche Exponierung:
[tunnel]
backend = "tailscale"
local_addr = "127.0.0.1:8080"
[tunnel.tailscale]
funnel = false
port = 443Konfigurationsreferenz
| Parameter | Typ | Standard | Beschreibung |
|---|---|---|---|
funnel | boolean | true | true fur offentlichen Funnel, false fur Nur-Tailnet-Serve |
port | integer | 443 | Offentlicher Port (Funnel unterstutzt 443, 8443, 10000) |
tailscale_path | string | "tailscale" | Pfad zum tailscale-CLI-Binary |
hostname | string | auto-erkannt | MagicDNS-Hostnamen uberschreiben |
reset_on_stop | boolean | true | Funnel/Serve-Konfiguration entfernen, wenn PRX stoppt |
background | boolean | true | tailscale serve im Hintergrundmodus ausfuhren |
Wie PRX Tailscale verwaltet
Wenn der Tunnel startet, fuhrt PRX aus:
# Fur Funnel (offentlich)
tailscale funnel --bg --https=443 http://127.0.0.1:8080
# Fur Serve (privat)
tailscale serve --bg --https=443 http://127.0.0.1:8080Das --bg-Flag fuhrt Serve/Funnel im Hintergrund innerhalb des tailscaled-Daemons aus. PRX muss keinen Kindprozess am Leben halten -- tailscaled ubernimmt die Weiterleitung.
Wenn PRX stoppt, bereinigt es durch Ausfuhren von:
tailscale funnel --https=443 off
# oder
tailscale serve --https=443 offDieses Verhalten wird durch den Parameter reset_on_stop gesteuert.
Offentliche URL
Die offentliche URL fur Funnel folgt dem MagicDNS-Muster:
https://<maschinenname>.<tailnet-name>.ts.netWenn Ihre Maschine beispielsweise prx-host heisst und Ihr Tailnet example ist, lautet die URL:
https://prx-host.example.ts.netPRX erkennt diesen Hostnamen automatisch durch Parsen der Ausgabe von tailscale status --json und konstruiert die vollstandige offentliche URL.
Gesundheitsprufungen
PRX uberwacht den Tailscale-Tunnel mit zwei Prufungen:
- Tailscale-Daemon-Status --
tailscale status --jsonmuss den Knoten als verbunden melden - Funnel-Erreichbarkeit -- HTTP GET an die offentliche URL muss eine 2xx-Antwort zuruckgeben
Wenn Gesundheitsprufungen fehlschlagen, versucht PRX den Funnel durch erneutes Ausfuhren des tailscale funnel-Befehls wiederherzustellen. Wenn tailscaled selbst nicht lauft, protokolliert PRX einen Fehler und deaktiviert den Tunnel, bis sich der Daemon erholt.
ACL-Uberlegungen
Tailscale-ACLs steuern, welche Gerate kommunizieren konnen und welche Funnel verwenden durfen. Wichtige Uberlegungen fur PRX-Bereitstellungen:
Funnel auf PRX-Knoten beschranken
Taggen Sie Ihre PRX-Maschinen und beschranken Sie den Funnel-Zugriff:
{
"tagOwners": {
"tag:prx-agent": ["autogroup:admin"]
},
"nodeAttrs": [
{
"target": ["tag:prx-agent"],
"attr": ["funnel"]
}
]
}Knoten-zu-Knoten-Traffic erlauben
Fur verteilte PRX-Bereitstellungen Traffic zwischen PRX-Knoten erlauben:
{
"acls": [
{
"action": "accept",
"src": ["tag:prx-agent"],
"dst": ["tag:prx-agent:443"]
}
]
}Fehlerbehebung
| Symptom | Ursache | Losung |
|---|---|---|
| "Funnel not available" | ACL-Richtlinie fehlt funnel-Attribut | funnel-Attribut zum Knoten oder Benutzer in der ACL hinzufugen |
| "not connected"-Status | tailscaled lauft nicht | Tailscale-Daemon starten: sudo tailscale up |
| Zertifikatsfehler | DNS nicht propagiert | Auf MagicDNS-Propagierung warten (normalerweise < 1 Minute) |
| Port bereits belegt | Anderer Serve/Funnel auf demselben Port | Bestehenden entfernen: tailscale funnel --https=443 off |
| 502 Bad Gateway | PRX-Gateway hort nicht zu | Verifizieren, dass local_addr mit der Listen-Adresse Ihres Gateways ubereinstimmt |