Der Asterisk speichert für das Register die mit "tel.t-online.de" aufgelöste IP-Adresse. Nach einem IP-Adresswechsel am Anschluss werden die zuständigen Server für die Telefonie vom Telekom-DNS neu vergeben (vmtl. Lastverteilung). Für das Register verwendet der Asterisk aber weiterhin die bereits gespeicherte IP-Adresse des ursprünglichen Servers.
Erfolgt nun ein Verbindungsaufbau vom Asterisk wird die Adresse "tel.t-online.de" aufgelöst und zeigt auf den neu zugeteilten Server. Der Server akzeptiert aber keinen Verbindungsaufbau von einem nicht registrierten Endgerät und lehnt den Verbindungsaufbau mit "Forbidden" ab.
Das Register läuft weiterhin gegen den ursprünglichen Server und zeigt natürlich auch keinen Fehler an.
Nach einem 'sip reload' wird dann auch für das Register die IP-Adresse neu ermittelt und alles funktioniert wieder.
Mein Asterisk läuft ohne NAT direkt auf dem Gerät mit der öffentlichen IP, und bei einer Neueinwahl wird automatisch ein "sip reload" ausgeführt, um sofort wieder erreichbar zu sein.
Allerdings habe ich an meinem Anschluss eine weitere Fehlerquelle entdeckt. Eigentlich soll sich der SRV-Record für tel.t-online.de nur beim Verbindungsaufbau ändern und nicht während der laufenden Verbindung. Da ich aber auch IPv6 verwende, bekomme ich beim Verbindungsaufbau insgesamt 4 DNS-Server zugewiesen (2x IPv4, 2x IPv6) - und genau an dieser Stelle scheint die Lastverteilung nicht bis zu Ende sauber implementiert zu sein: die IPv4- und IPv6-DNS-Server liefern jeweils eine andere Antwort für den SRV-Record von tel.t-online.de:
Code:
# dig @217.237.149.205 +short +noshort +identify SRV _sip._udp.tel.t-online.de
_sip._udp.tel.t-online.de. 3600 IN SRV 0 5 5060 f-epp-207.isp.t-ipnet.de.
_sip._udp.tel.t-online.de. 3600 IN SRV 1 5 5060 h-epp-207.isp.t-ipnet.de.
;; Received 131 bytes from 217.237.149.205#53(217.237.149.205) in 8 ms
# dig @217.237.151.51 +short +noshort +identify SRV _sip._udp.tel.t-online.de
_sip._udp.tel.t-online.de. 3600 IN SRV 0 5 5060 f-epp-207.isp.t-ipnet.de.
_sip._udp.tel.t-online.de. 3600 IN SRV 1 5 5060 h-epp-207.isp.t-ipnet.de.
;; Received 131 bytes from 217.237.151.51#53(217.237.151.51) in 11 ms
# dig @2003:180:2:6000::53 +short +noshort +identify SRV _sip._udp.tel.t-online.de
_sip._udp.tel.t-online.de. 3600 IN SRV 1 5 5060 s-epp-102.isp.t-ipnet.de.
_sip._udp.tel.t-online.de. 3600 IN SRV 0 5 5060 b-epp-102.isp.t-ipnet.de.
;; Received 131 bytes from 2003:180:2:6000::53#53(2003:180:2:6000::53) in 9 ms
# dig @2003:180:2::53 +short +noshort +identify SRV _sip._udp.tel.t-online.de
_sip._udp.tel.t-online.de. 3600 IN SRV 0 5 5060 b-epp-102.isp.t-ipnet.de.
_sip._udp.tel.t-online.de. 3600 IN SRV 1 5 5060 s-epp-102.isp.t-ipnet.de.
;; Received 131 bytes from 2003:180:2::53#53(2003:180:2::53) in 11 ms
Da die 4 Nameserver von meinem Resolver (dnsmasq) zufällig verwendet werden, kann sich der Wert nach jeweils einer Stunde (TTL 3600) ändern, was dann zu oben beschriebenem Problem führt.
Lösungsmöglichkeiten:
1) im Asterisk srvlookup = no (habe ich nicht ausprobiert, da dann wohl auch uri-Dials nicht mehr zuverlässig funktionieren, die ich aber benötige - umgeht die Lastverteilung)
2) IPv6-DNS deaktivieren und nur die IPv4-DNS-Server verwenden (löst das Problem ohne die Lastverteilung zu umgehen)
3) komplett andere DNS-Server verwenden (z.B. von Google - dann gibts gar keine Änderungen des SRV-Records - umgeht die Lastverteilung)
4) bei der Einwahl per Skript den SRV-Record genau einmal gezielt auflösen und dann bis zur nächsten Einwahl im Resolver fest "cachen" - z.B. dnsmasq.conf:
Code:
srv-host=_sip._udp.tel.t-online.de,f-epp-207.isp.t-ipnet.de,5060,0,5
srv-host=_sip._udp.tel.t-online.de,h-epp-207.isp.t-ipnet.de,5060,1,5
(löst das Problem ohne die Lastverteilung zu umgehen)
5) den SRV-Record statisch eintragen, so wie er bei der Verwendung von fremden DNS-Servern zurückgeliefert wird:
Code:
srv-host=_sip._udp.tel.t-online.de,ims001.voip.t-ipnet.de,5060,0,5
srv-host=_sip._udp.tel.t-online.de,ims002.voip.t-ipnet.de,5060,1,5
(entspricht dann letztendlich b-epp-001.isp.t-ipnet.de und h-epp-001.isp.t-ipnet.de - umgeht die Lastverteilung)
6) den SRV-Record komplett "entfernen"
Code:
local=/_sip._udp.tel.t-online.de/
(dann verwendet Asterisk den A-Record, was letztendlich b-epp-001.isp.t-ipnet.de entspricht - umgeht die Lastverteilung)
Aktuell läuft bei mir seit einigen Wochen Lösung 4, aber auch Lösung 6 habe ich einige Wochen erfolgreich getestet.
Es ist zwar sicher unschön, eine vom Anbieter vorgesehene Lastverteilung zu umgehen, aber die paar Asterisk-Nutzer die das machen dürften gegenüber den ganzen Speedports (für die die Lastverteilung wohl in erster Linie gedacht ist) locker untergehen. Außerdem ist die Lastverteilung (zumindest aktuell) nur über den SRV-Record umgesetzt - aber nicht alle SIP-Endgeräte und SIP-Clients nutzen überhaupt SRV-Records - und nirgends steht, dass man für die IP-Telefonie die Telekom-DNS-Server nutzen muss. Daher muss die Telekom natürlich damit rechnen, dass nicht alle Endgeräte an dieser Lastverteilung teilnehmen, daher sollte es kein Problem sein, den SRV-Record "auszuschalten" oder statisch zu setzen.
Alternativ kann die Telekom den Lastverteilungs-Mechanismus auch gerne so reparieren, dass er auch mit den IPv6-DNS-Servern so funktioniert, wie gedacht.