Provider-Konfiguration¶
Uebersicht¶
Die xynap-Telefonieanlage ist an zwei SIP-Provider angebunden, die über unterschiedliche Authentifizierungsmethoden und IP-Versionen arbeiten.
| Provider | Profil | Auth | IP-Version | Rufnummern |
|---|---|---|---|---|
| Plusnet | external-ipv4 | IP-Auth (kein REGISTER) | IPv4 | +493455667290 |
| 1&1 | internal | REGISTER (User/Pass) | IPv6 (Pflicht!) | +4934556643378, +493455630488 |
1&1 blockiert Hetzner IPv4
1&1 lehnt SIP-Registrierungen von Hetzner-IPv4-Adressen mit 503 Service Unavailable ab. Alle 1&1-Trunks müssen über IPv6 laufen. Dies betrifft sowohl das Sofia-Profil (ext-sip-ip, ext-rtp-ip) als auch den Outbound-Proxy.
Plusnet¶
Eckdaten¶
| Parameter | Wert |
|---|---|
| Proxy | sip.plusnet.de |
| Outbound-Proxy | 92.197.176.16 |
| Authentifizierung | IP-Auth (NOREG) |
| Sofia-Profil | external-ipv4 |
| Bind-IP | 46.4.96.105 (IPv4) |
| Rufnummer | +49 345 566 7290 |
| caller-id-in-from | false |
Besonderheiten¶
Outbound-Proxy ist Pflicht
Plusnet nutzt DNS Round-Robin für sip.plusnet.de. Ohne festen Outbound-Proxy landen INVITE und ACK möglicherweise bei unterschiedlichen SIP-Servern, was zu 408 Request Timeout führt. Der Outbound-Proxy 92.197.176.16 muss immer gesetzt sein.
IP-Authentifizierung: Plusnet authentifiziert ausschließlich über die Quell-IP. Die IP 46.4.96.105 muss im Plusnet-Kundenportal freigeschaltet sein. Ein REGISTER findet nicht statt.
Gateway-Status: Da kein REGISTER erfolgt, zeigt sofia status den Gateway-Status nicht als REGED an. Der Gateway-State ist NOREG, was korrekt ist.
Trunk-Konfiguration (Platform API)¶
Die Trunk-Konfiguration wird über die Platform API verwaltet. Relevante Felder:
Provider: Plusnet
Proxy: sip.plusnet.de
Outbound-Proxy: 92.197.176.16
Register: false
Profile: external-ipv4
Caller-ID: +493455667290
1&1¶
Eckdaten¶
| Parameter | Wert |
|---|---|
| Proxy | sip.1und1.de |
| Outbound-Proxy | [2001:8d8:104:100:212:227:124:129] (IPv6!) |
| Authentifizierung | REGISTER (Benutzername/Passwort) |
| Realm | sip.1und1.de |
| Sofia-Profil | internal (Dual-Stack) |
| ext-sip-ip / ext-rtp-ip | 2a01:4f8:140:829d::2 (IPv6) |
Rufnummern¶
| Rufnummer | Verwendung |
|---|---|
| +49 345 566 43378 | IVR-Hauptnummer |
| +49 345 563 0488 | Support-Hotline |
Besonderheiten¶
Realm-Konfiguration
Der Realm muss sip.1und1.de sein, nicht 1und1.de. Ein falscher Realm führt zu 401 Unauthorized bei der Registrierung, obwohl Username und Passwort korrekt sind.
IPv6-Outbound-Proxy: Der Outbound-Proxy muss in eckigen Klammern stehen: [2001:8d8:104:100:212:227:124:129]. Ohne Klammern wird die Adresse nicht als IPv6 erkannt.
Passwörter: Die SIP-Passwörter sind Fernet-verschlüsselt in der Datenbank gespeichert und werden nur zur Laufzeit entschlüsselt. Sie sind über die API abrufbar:
# Extension-Config inkl. SIP-Credentials (nur mit passender Permission)
GET /api/v1/sip/extensions/{id}/config
Trunk-Konfiguration (Platform API)¶
Provider: 1und1
Proxy: sip.1und1.de
Outbound-Proxy: [2001:8d8:104:100:212:227:124:129]
Register: true
Realm: sip.1und1.de
Profile: internal
Username: (aus DB)
Password: (verschluesselt in DB)
Gateway-Loading (mod_xml_curl)¶
Gateways werden nicht statisch in XML-Dateien definiert, sondern dynamisch über mod_xml_curl geladen:
FreeSwitch Startup / REGISTER-Event
│
▼
POST /api/v1/sip/xml-curl
section=directory
│
▼
Platform API generiert XML mit Gateway-Definitionen
│
▼
FreeSwitch lädt Gateways in Sofia-Profile
Bei Änderungen an Trunks über die API wird automatisch ein Sofia-Reload über die ESL-Verbindung ausgelöst.
Gateway-Discovery¶
Beim Directory-Request liefert die API neben User-Credentials auch Gateway-Definitionen aus. FreeSwitch erkennt neue Gateways und startet den REGISTER-Prozess (bei Trunks mit register: true).
Reihenfolge beim Start
FreeSwitch muss die Platform API erreichen können, bevor Gateways geladen werden. Beim Container-Start kann es 5–10 Sekunden dauern, bis die API auf Port 8001 antwortet. Die ESL-Verbindung hat einen Auto-Reconnect.
Sofia-Profile im Detail¶
external-ipv4¶
Dieses Profil bindet ausschließlich auf IPv4 und wird für Provider genutzt, die IP-Authentifizierung verwenden.
<!-- Wesentliche Parameter -->
<param name="sip-ip" value="46.4.96.105"/>
<param name="sip-port" value="5060"/>
<param name="ext-sip-ip" value="46.4.96.105"/>
<param name="ext-rtp-ip" value="46.4.96.105"/>
internal¶
Das interne Profil bindet auf :: (Dual-Stack) und bedient sowohl IPv6-Provider als auch interne Extensions und WebRTC.
<!-- Wesentliche Parameter -->
<param name="sip-ip" value="::"/>
<param name="sip-port" value="5060"/>
<param name="ext-sip-ip" value="2a01:4f8:140:829d::2"/>
<param name="ext-rtp-ip" value="2a01:4f8:140:829d::2"/>
<param name="tls-sip-port" value="5061"/>
<param name="wss-binding" value=":7443"/>
ext-rtp-ip und Audio
Die ext-rtp-ip muss zur IP-Version des Providers passen. Für 1&1 (IPv6) muss hier die IPv6-Adresse stehen, sonst kommt kein Audio zustande — der Call verbindet sich zwar, aber es herrscht Stille in beide Richtungen.
Firewall-Regeln (UFW)¶
Nur die IP-Bereiche der Provider sind für SIP zugelassen:
Plusnet (IPv4)¶
# SIP Signaling
ufw allow from 92.197.176.0/24 to any port 5060 proto udp
ufw allow from 92.197.177.0/24 to any port 5060 proto udp
ufw allow from 92.197.182.0/24 to any port 5060 proto udp
# TLS
ufw allow from 92.197.176.0/24 to any port 5061 proto tcp
ufw allow from 92.197.177.0/24 to any port 5061 proto tcp
ufw allow from 92.197.182.0/24 to any port 5061 proto tcp
1&1 (IPv6)¶
# SIP Signaling (IPv6)
ufw allow from 2001:8d8:104:100:212:227:124:128/125 to any port 5060 proto udp
# SIP Signaling (IPv4 — für Fallback)
ufw allow from 212.227.124.0/24 to any port 5060 proto udp
Allgemein¶
# WebRTC (offen, da über Traefik/TLS gesichert)
ufw allow 7443/tcp
# RTP Media (offen fuer alle, da dynamische Ports)
ufw allow 10000:10060/udp
ufw allow 16384:16484/udp
Zweite Schutzschicht: FreeSwitch ACL
Zusätzlich zur UFW-Firewall verwendet FreeSwitch eine eigene ACL sip-gateways mit default deny. Nur explizit eingetragene IP-Bereiche dürfen SIP-Requests an das internal-Profil senden.