Asterisk 11.6 sendet lokale IPv4 Adresse, sobald IPv6 eingeschaltet ist

R

rentier-s

Guest
Hallo zusammen,

nachdem sich Asterisk 13 auf meinem Pi nicht wohl fühlt, hab ich wieder 11.6 drauf. Dabei bin ich auf ein altes Problem gestoßen, das ich schon vergessen hatte.

Sobald ich in der sip.conf IPv6 aktiviere (udpbindaddr=[::]:5006) schickt Asterisk im SDP Paket die lokale IPv4 Adresse an die Telekom. Das Gespräch wird daraufhin sofort seitens Telekom mit einem BYE abgebrochen.

Code:
SIP/2.0 200 OK
Via: SIP/2.0/UDP 217.0.23.100:5060;branch=z9hG4bKg3Zqkv7ipm5oj5zuuk53iqy87f3fpbzbs;received=217.0.23.100
Record-Route: <sip:217.0.23.100;transport=udp;lr>
From: <sip:[email protected];user=phone>;tag=h7g4Esbg_p65554t1457444497m856481c193225056s1_3180542593-2097760973
To: <sip:[email protected];user=phone>;tag=as6851206a
Call-ID: p65554t1457444497m856481c193225056s2
CSeq: 1 INVITE
Server: Asterisk PBX certified/11.6-cert13
Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, SUBSCRIBE, NOTIFY, INFO, PUBLISH
Supported: replaces, timer
Session-Expires: 1800;refresher=uas
Contact: <sip:meineRufnummer@[COLOR=#ff0000]192.168.100.200[/COLOR]:5006>
Content-Type: application/sdp
Require: timer
Content-Length: 276

v=0
o=root 1138337578 1138337578 IN IP4 [COLOR=#ff0000]192.168.100.200[/COLOR]
s=Asterisk PBX certified/11.6-cert13
c=IN IP4 [COLOR=#ff0000]192.168.100.200[/COLOR]
t=0 0
m=audio 15128 RTP/AVP 8 101
a=rtpmap:8 PCMA/8000
a=rtpmap:101 telephone-event/8000
a=fmtp:101 0-16
a=silenceSupp:off - - - -
a=ptime:20
a=sendrecv

Wenn ich IPv6 ausschalte (udpbindaddr=0.0.0.0:5006) und sonst nichts weiter verändere, steht an den Stellen brav meine externe IPv4 Adresse und alles funktioniert wunderbar.

Ich verwende externhost=mein.dyn.dns, localnet=192.168.100.0/255.255.255.0, nat ist nicht explizit gesetzt.

Weiß jemand, warum das passiert? Bei Asterisk 13 bestand das Problem nicht.
 
Moins


Ich verwende externhost=mein.dyn.dns, localnet=192.168.100.0/255.255.255.0, nat ist nicht explizit gesetzt.
Verwende mal localnet nicht (kommentieren). Da lässt sich ja keine DNS oder IPv6 angeben.
...denn das ist und bleibt ja: IPv4

Wenn der User/Peer auch sichtlich mit einer IPv6 registriert wurde (sip show peers, sip show peer [peername]), dann wird diese auch genommen/übertragen.

Auch mit IPv4 angemeldete Phones nehmen dann die IPv6 des Asterisks als Kontakt.

EDIT: IPv6 ist im Raspberry aber schon aktiviert ?
Bei OSMC/KODI war das nicht so easy...
Enable_IPv6_on_OSMC (Hab ich lange nach gesucht)
 
Zuletzt bearbeitet:
Die Telekom ist noch nicht per IPv6 erreichbar, da läuft alles noch über IPv4. Deshalb finde ich das ja so seltsam, weil dieses Peer eigentlich überhaupt nicht davon betroffen ist.

Ohne localnet nimmt Asterisk immer die aus externhost aufgelöste Adresse als Source, auch innerhalb des lokalen Netzwerks. Da bekomme ich Probleme mit meinem Telefon am Schreibtisch.

sipgate funktioniert wunderbar über IPv6.
 
Hast Du das Problem immer noch?

Du benutzt die Asterisk-Variante „certified“. Diese Variante sieht nur wenige Bug-Fixes, fast nur Security-Fixes, basiert auf Asterisk 11.6 und stammt damit vom Oktober 2013. Mit Asterisk 13.4 (Mai 2015) ist ein ähnlich klingender Software-Bug behoben worden. Der selbe Bug-Fix ist in Asterisk 11.18 eingeflossen. Gestern ist ein weiterer Software-Bug im Zusammenhang mit IPv4/IPv6 Dual-Stack und sip.conf:externhost behoben worden. Also entweder
A) bis Asterisk 11.24 warten oder
B) Dein 11.6cert patchen (der Anhang in ASTERISK-18232 reicht bereits) oder
C) direkt die aktuelle Fassung von Branch 11 nehmen:
Code:
git clone --branch 11 http://gerrit.asterisk.org/asterisk
Wäre nämlich nicht schön, wenn noch ein weiterer Software-Bug herumlungern würde. Der Bug müsste erlegt werden. Daher könntest Du bitte mal nachtesten, ob Du den Fehler immer bekommst? Falls ja, poste bitte auch die genau Version vom verwendeten Betriebssystem – damit ich das dann nachstellen und anschauen kann.
 
Im Moment habe ich einen apt Asterisk 11.13.1~dfsg-2+b1 laufen, weil es mit den selbst gebauten ständig irgendwelche komischen Effekte gab und das Übersetzen auf dem Pi immer so dermaßen lange dauert. Bis jetzt hatte ich mich mit dem fehlenden IPv6 abgefunden, aber durch Deinen Post hast Du mich wieder angestachelt ;-)

Zur Zeit ist die Zeit ein wenig zu wenig, und ich bin mir nicht sicher, ob ich mein running system wirklich anfassen soll. Wenn zu Hause wieder etwas Ruhe installiere ich mir vielleicht ein neues Raspbian auf einer anderen SD Karte und teste das damit noch mal.

Danke jedenfalls für die Hinweise!
 
Ich würde an Deiner Stelle nicht direkt auf dem Pi experimentieren, weil Du für jede Kleinigkeit ewig compilieren musst. Beispielsweise könntest Du extra eine neue SSD kaufen, in einen Stand-Rechner einbauen (einfach umstecken), eine ähnliche Linux-Distribution wie auf Deinem Pi installieren und dann dort experimentieren. Wenn Du einen Mehrkern-Prozessor hast, kompiliert sich so Asterisk beim ersten Mal in weniger als 10 Minuten (make --jobs 3). Änderungen danach brauchen sogar nur wenige Sekunden. In der Zeitschrift c’t findest Du Bastelanleitungen für Computer, die weniger als 11 Watt verbrauchen. Das ist natürlich immer noch viel mehr als Dein Pi – nur ich würde wahnsinnig werden, wenn ich jedesmal so lange warten müsste. Oder Du testest auf einem Stand-Rechner. Ist alles OK, übernimmst Du die Konfiguration für Deinen Pi.

Du kannst übrigens auch den Quellcode Deines Debian-Packages laden und dann schrittweise auf den aktuellen Stand von Asterisk 11 hochpatchen, siehe die asterisk-11.xx-patch.tar.gz Dateien auf dem Release-Server. Wenn Du willst, schreibe ich Dir dafür eine Schritt-für-Schritt-Anleitung. Dann bleibst Du ganz nah am Paket in der Distribution, und hast trotzdem die Vorteile der neusten Version. Asterisk 11 bekommt bereits in zehn Tagen keine Bug-Fixes mehr, daher wäre es toll zu wissen, dass alle Bugs bezüglich IPv6/Firewall/NAT draußen sind. Ansonsten müsstest Du auf Asterisk 13 wechseln (oder halt wie bisher auf IPv6 verzichten).
 
Moin

@rentier-s: Bei dir ist auch eine Fritz!Box im Spiel?
Bei meinen IPv6 Experimenten erkannte ich, dass bei Registrierungen von Asterisk zur Fritz!Box einer von Beiden Murks gebaut hat.
Registrierungen von Fritz!Box zum Asterisk scheinen jedoch gut zu funktionieren...
sip show peer 1000
Code:
Useragent    : AVM FRITZ!Box Fon WLAN 7360 SL 109.06.30 (Jul 10 2015)
Reg. Contact : sip:1000@[2003:ff:ffff:ffff:ffff:ffff:ffff:ffff];uniq=Hash

Account in der Box
Screenshot_2016-10-15-11-52-28.jpg

Asterisk: Asterisk 11.13.1~dfsg-2+b1 built by buildd @ bm-wb-03 on a armv7l running Linux on 2015-01-08 19:21:28 UTC
 
@sonyKatze, im Moment komme ich echt zu gar nichts, hatte noch nicht mal die Muße eine Debian VM aufzubauen.

Raspbian und Debian sind irgendwo doch nicht ganz dasselbe, so hatte ich mit manchen Quellen, die auf dem Igel wunderbar liefen, auf dem Pi Schwierigkeiten. Deshalb bleibt letztlich immer nur der Test auf dem Pi.

Ideal wäre Cross-Compiling, aber ich glaube bis ich das kapiert und eingerichtet habe, kann ich Asterisk auch über Nacht auf dem Pi übersetzen lassen.

Mit Asterisk 13 ging zwar soweit ich mich erinnern kann IPv6, dafür aber sonst nur Probleme, siehe Link in #1.

@koy, es geht wie beschrieben um die Registrierung bei der Telekom.
 
Hm, ich kann mich nicht mehr daran erinnern, ob ich zum testen meinen normalen v4-only Strato dynDNS als externhost verwendet hatte, oder einen eigens dafür angelegten A+AAAA Record.

Aber für mich liest sich das nicht so, als hätte es unmittelbar mit meinem Problem zu tun.
Ohne AAAA hätte Asterisk nur die v4 Adresse auflösen können. Mit A+AAAA hätte, soweit ich die Beschreibung verstehe, die v6 Adresse auftauchen müssen. In keinem Fall aber die LAN Adresse.

Trotzdem danke für den Hinweis, das könnte einen Versuch wert sein, externhost testweise durch externip zu ersetzen. Mal sehen, was dann passiert.
 
Habe dasselbe Problem. mit pjsip.

Hauptleitungs Konfiguration ist bei selbiger und IPv4 gültig und ausgehende Anrufe problemlos möglich. Möchte es nur für ausgehende Anrufe konfigurieren.

im transport steht :
local_net=192.168.178.0/24
trotzdem wird die lokale ipv4 signalisiert und nicht die öffentliche ipv6.
somit registriert sich die hauptleitung nie.
PHP:
<--- Transmitting SIP request (614 bytes) to UDP:[2a04:2100:0:100::73]:5060 --->
REGISTER sip:proxyV6.dus.net SIP/2.0
Via: SIP/2.0/UDP 192.168.178.2:5060;rport;branch=z1hG4bKPj43a454b9-ae74-4ccc-8359-8460118d95bd
Route: <sip:proxyV6.dus.net;lr>
From: <sip:0

es kommt keine antwort auf das register bzw. an die falsche adresse.

wenn man die ipv6 manuell unter
NAT-Einstellungen
Externe Adresse
einträgt, wird diese verwendet. und es sind immer noch keine ausgehenden Anrufe möglich.
auf ein INVITE folgt ein Trying 403 Forbidden.
an dieser stelle sendet er bei ipv4 ein Proxy Authentication Required
bei ipv6 bricht hier der anruf ab, (all lines are busy now) anstatt sich beim proxy anzumelden. das setzen von outbound_proxy=sip:[2a04:2100:0:100::73]:5060\;lr brachte auch nichts.


dann schlägt allerdings ipv4 endpunkt fehl, weil sie diese ebenfalls verwendet...



INI:
; https://wiki.asterisk.org/wiki/display/AST/Configuring+res_pjsip+for+IPv6

;Bind PJSIP to the first available IPv6 interface
;A transport can be configured to automatically bind to the first available IPv6 interface. You use "::" as the bind address.
[transport-auto-ipv6-udp]
type=transport
protocol=udp
bind=[::]:5060
allow_reload=yes
local_net=192.168.178.0/24

Wie bekommt man beide IPv4 & 6 zum laufen?
Entweder geht bei mir nur IPv4 oder IPv6 gar nicht.

bei eintragung der dyndns Adresse mit A+AAAA records, wird die öffentliche IPv4 im register Via: SIP/2.0/UDP über ipv6 verschickt.
[2019-12-26 12:39:27] WARNING[2138]: res_pjsip_outbound_registration.c:796 schedule_retry: No response received from 'sip:proxyV6.dus.net' on registration attempt to 'sip:49xxxxxxxxxxxx', retrying in '60'

asterisk 16 freepbx 15
 
Zuletzt bearbeitet:
Mit Issue-Report 26309 wurde das in Asterisk behoben. Dort findet sich auch ein Beispiel. Kurz: Im Gegensatz zum alten Channel-Driver chan_sip musst Du für den neuen Channel-Driver chan_pjsip zwei Transports anlegen. Aber wie der Stand im aktuellen FreePBX ist, weiß ich nicht. Dort ist der entsprechende Issue-Report 10181 noch offen. Ich persönlich betreibe hier sowohl chan_sip als auch chan_pjsip in Asterisk 13 jeweils als Dual-Stack jeweils mit UDP, TCP, TLS und DynDNS – bisher keine Probleme unter Ubuntu 18.04 LTS.

Dus.net steuere ich auch Dual-Stack mäßig an aber noch über chan_sip. Ich weiß gar nicht, ob Asterisk (geschweige denn FreePBX) abgehend überhaupt Dual-Stack fähig ist. War das die Frage? Ich hätte an Deiner Stelle einen neuen Thread aufgemacht. Hier ging es um Asterisk 11 und chan_sip. Du nutzt FreePBX 15 mit chan_pjsip. Und dann auch noch anstatt Telekom Deutschland (IPv4-only) kommt bei Dir dus.net zum Einsatz. Dus.net bietet wahlweise IPv4-only, IPv6-only und Dual-Stack. Ihr beide habt eigentlich nur SIP-over-UDP gemein. Egal: Wenn ich Deine Frage nicht abgedeckt habe, bitte nochmals fragen.

Übrigens für alle Mitleser: Wer von chan_sip in Dual-Stack betreibt, braucht nur das Python-Skript ./contrib/scripts/sip_to_pjsip/sip_to_pjsip.py ausführen und bekommt eine passende pjsip.conf. Weil so viele Beispiele für sip.conf im Netz umherschwirren, würde ich jedem raten lieber damit anfangen und dann mittels jenem Skript umwandeln lassen.
 
Habe es nach langen hin und her lauffähig bekommen.
Über die Transportwhal lässt sich IPv4/6 steuern. Wirklich Dual-Stack scheint mir das nun nicht.
Gibt viele Stolpersteine.
Mit Issue-Report 26309 wurde das in Asterisk behoben.
Das hat mich auf die Idee gebracht, das der Fehler nicht bei mir liegt.... Einer ist die nicht RFC Konforme Antwort von manchen SIP Servern. Daher IPv6 in eckigen [ ] Klammern, was pjsip zwar registrieren lässt aber keinen ausgehende Anrufe. Ist ein bereits gemeldeter Bug mit Issue-Report
ASTERISK-26955


musst Du für den neuen Channel-Driver chan_pjsip zwei Transports anlegen. Aber wie der Stand im aktuellen FreePBX ist, weiß ich nicht.

FreePBX 15 zeigt leider keine pjsip IPv6 Transporte an....
habe sie ganz einfach manuell angelegt.

INI:
[udp6](0.0.0.0-udp)
bind=[::]
[tcp6](0.0.0.0-tcp)
bind=[::]
[tls6](0.0.0.0-tls)
bind=[::]

und sie müssen über umwege dem trunk zugewiesen werden. Bei jeder Änderung im freepbx webui des Trunk, wird der transport wieder auf 0.0.0.0-udp resettet. Auch OHNE dessen Transporte Änderung! Da es die IPv6 Transporte in der auswahl nicht auftauchen und somit der default Wert gesetzt wird.

Somit hat es sich für mich vorerst gelöst. Ohne AAAA DynDNS Notwendigkeiten. Denn die öffentliche IPv6 kennt PJSIP bereits ohne Angabe.
 
Holen Sie sich 3CX - völlig kostenlos!
Verbinden Sie Ihr Team und Ihre Kunden Telefonie Livechat Videokonferenzen

Gehostet oder selbst-verwaltet. Für bis zu 10 Nutzer dauerhaft kostenlos. Keine Kreditkartendetails erforderlich. Ohne Risiko testen.

3CX
Für diese E-Mail-Adresse besteht bereits ein 3CX-Konto. Sie werden zum Kundenportal weitergeleitet, wo Sie sich anmelden oder Ihr Passwort zurücksetzen können, falls Sie dieses vergessen haben.