- Mitglied seit
- 18 Sep 2007
- Beiträge
- 11
- Punkte für Reaktionen
- 0
- Punkte
- 0
Hallo,
ich habe ein Problem mit meinem Asterisk. Wenn ich Asterisk starte, kann ich ohne Probleme raustelefonieren und angerufen werden. Allerdings kommt es nach einiger Zeit (ich weiß nicht, wie lange genau - aber weniger als 3 Tage) dazu, dass ich nicht mehr angerufen werden kann, da meine eingehenden Anrufe im Standard-Context (d.i. "default") in der "extensions.conf" landen - und nicht in dem Context, den ich angegeben habe (d.i. "sip_in_1und1"). Kennt jemand dieses Problem und weiß, wie ich es beheben kann. (Wie gesagt, direkt nach dem Start von Asterisk läuft alles problem los. Ich kann das Problem auch lösen, in dem ich "sip reload" mache. Allerdings ist das ja nur ein Workaround und löst das Problem nicht.)
Ach ja: VoIP-Provider ist 1&1 und Asterisk-Version 1.4.11.
Hier meine sip.conf:
Und meine "extensions.conf":
ich habe ein Problem mit meinem Asterisk. Wenn ich Asterisk starte, kann ich ohne Probleme raustelefonieren und angerufen werden. Allerdings kommt es nach einiger Zeit (ich weiß nicht, wie lange genau - aber weniger als 3 Tage) dazu, dass ich nicht mehr angerufen werden kann, da meine eingehenden Anrufe im Standard-Context (d.i. "default") in der "extensions.conf" landen - und nicht in dem Context, den ich angegeben habe (d.i. "sip_in_1und1"). Kennt jemand dieses Problem und weiß, wie ich es beheben kann. (Wie gesagt, direkt nach dem Start von Asterisk läuft alles problem los. Ich kann das Problem auch lösen, in dem ich "sip reload" mache. Allerdings ist das ja nur ein Workaround und löst das Problem nicht.)
Ach ja: VoIP-Provider ist 1&1 und Asterisk-Version 1.4.11.
Hier meine sip.conf:
Code:
;
; Asterisk Konfigurationsdatei: SIP
;
; Siehe auch:
; * http://www.voip-info.org/wiki/index.php?page=Asterisk+config+sip.conf
;
;
; Globale Optionen
;
; Die folgenden Optionen gelten global und dienen ggf. als Standardwerte für
; die Client-Sektionen (falls die Direktive dort verwendet wird).
;
[general]
language=de
context=default
; Mache Asterisk öffentlich verfügbar (d.h. binde an alle Adressen)
bindaddr=0.0.0.0
; Benutze Standard-SIP-Port 5060
bindport=5060
; Gibt den Namen der Domain an, zu der diese Asterisk-Installation gehört.
; Wird dieser Name nicht angegeben, wird stattdessen die IP-Adresse des Servers
; übermittelt, was die Identifikation des Anrufers schwerer macht und bei
; manchen Client (z.B. X-Lite) verhindert, bei einem internen Anruf die
; Rufnummer als intern zu erkennen (d.h. die IP-Adresse wird angehängt, was
; nicht sein müsste).
;
; Hinweis: Ist scheinbar unterschiedlich von "fromdomain" in einer
; Peer-Konfiguration. (siehe unten bei Provider)
fromdomain=mayastudios.de
; SIP-Realm des von Asterisk bereitgestellten SIP-Servers
;
; Sollte der Einfachheit halber gleich dem Domain-Namen (fromdomain) sein.
;
; Hinweis: Dieser Name taucht nicht in der CallerID (übermittelte Kontaktdaten
; wie z.B. Rufnummer und Name) auf. Er wird scheinbar nur bei der
; Registrierung eines SIP-Clients benötigt.
;
; ACHTUNG: Wird der Realm-Name geändert, MUSS auch das md5secret geändert
; werden.
;
; TODO Gibt es irgendwelche Regeln bei der Vergabe dieses Namens?
realm=mayastudios.de
; Client-NAT-Verhalten
;
; Der Wert "yes" ermöglicht es Endgeräten, die sich hinter einer Firewall/NAT
; befinden, sich trotzdem am Server anmelden zu können. Ist dieser Wert auf
; "no" gesetzt (Standard), können die diese Client nicht am Server anmelden.
nat=yes
; Verbindung zum Peer überwachen
;
; Der Wert "yes" bringt Asterisk dazu, die Verbindung zum angemeldeten Peer
; alle zwei Sekunden (mittels Befehl "OPTIONS") zu überprüfen. Reagiert der
; Peer nicht, wird er als Offline angesehen. Diese Funktion hat den angenehmen
; Nebeneffekt, die Verbindung zum Peer offen zu halten, falls er über UDP
; verbunden ist.
; Außerdem taucht der Peer beim CLI-Befehl "sip show peers" unter "Monitored"
; auf.
qualify=yes
; Bei einem Telefonat beide SIP-Client direkt miteinander verbinden
;
; Der Wert "yes" würde Asterisk dazu veranlassen, bei einem Telefonat beide
; SIP-Client direkt (mittels (re)INVITE Befehl) miteinander zu verbinden, so
; dass der Datenstrom nicht mehr über den Asterisk-Server laufen würde.
; Allerdings funktioniert das meistens nicht, wenn sich beide SIP-Clients
; hinter einem NAT befinden.
; Deshalb wird der Wert hier auf "no" gesetzt.
canreinvite=no
; TODO Muss das wirklich auf "yes" gesetzt werden?
srvlookup=yes
; Wenn die Verbindung zum einem anderen SIP-Server (d.i. meistens der
; eigentliche VoIP-Provider) verloren geht, muss sie neu aufgebaut werden.
; Standardmäßig gibt Asterisk hierbei nach 10 Versuchen auf und baut die
; Verbindung dann nicht mehr auf.
;
; Wir ändern diese Anzahl der Versuche auf unendlich (=0), so dass Asterisk
; niemals aufhört, einen Verbindungsaufbau zu versuchen.
;
; Hinweis: Die Zeit zwischen den Verbindungsversuchen beträgt standardmäßig 20
; Sekunden. Dies kann aber auch mit der Direktive "registertimeout" geändert
; werden.
registerattempts=0
; Erlaube nur die Codecs "alaw" (Europa), "ulaw" (USA) und GSM.
;
; Siehe auch: http://www.ozvoip.com/voip-codecs/
;
; TODO Warum sollten die erlaubten Codecs begrenzt werden?
disallow=all
allow=alaw
allow=ulaw
allow=gsm
; Gaugle 1&1 vor, dies sei eine FritzBox.
; Damit können sie sich nicht mehr beschweren,
; dass sie dieses System "nicht supporten" würden.
useragent=AVM FRITZ!Box Fon WLAN 7170 (UI) 29.04.40 (Aug 3 2007)
; Die Sprache, die für Audio-Rückmeldungen (wie z.B. die VoiceBox) verwendet
; werden soll.
language=de
;
; SIP-Provider registrieren
;
; Hinweis: Aus irgendeinem Grund muss hier hinter dem / wieder der Benutzername
; stehen; sonst landen eingehende Telefonate nicht im sip_in_1und1 Context
; sondern im Default-Context.
; TODO Was ist hiermit? http://www.voip-info.org/wiki/index.php?page=Asterisk+SIP+channels -> Abschnitt "Incoming SIP Connections"
;
register => 497111603XXX:[email protected]/497111603XXX
;
; Provider
;
; Zumindest bei 1&1 muss sowohl 'username' als auch 'fromuser' auf den
; Benutzernamen (hier die Rufnummer) gesetzt sein.
;
[497111603XXX]
type=peer
host=sip.1und1.de
fromdomain=sip.1und1.de ; Muss auf den gleichen Wert wie "host" gesetzt sein
username=497111603XXX ; TODO Kann man das auch weglassen, wenn der Context so heißt?
fromuser=497111603XXX
secret=PASSWORT
insecure=port,invite
context=sip_in_1und1 ; Context für eingehende Anrufe
;
; SIP-Endgeräte
;
; [ID] : Anmelde-ID
; Das ist der Benutzername, mit dem sich das Endgerät am Server anmeldet.
; Hierbei kann es sich um jede Kombination aus alphanumerischen Zeichen
; handeln. Um das Wählen auf Mobiltelefonen jedoch zu vereinfachen, sollten
; hier nur Nummern verwendet werden.
;
; Die Nummer darf jedoch nicht mit 0 beginnen, da sonst nicht zwischen
; internen und externen Nummern (die alle mit 0 beginnen) unterschieden
; werden kann.
;
; Vorzugsweise sollten die Nummer auch nicht mit 1 beginnen, dafür aber aus
; genau zwei Ziffern bestehen, denn in diesem Fall erkennt z.B. ein Nokia
; E65 (und wahrscheinlich jedes andere Symbian-Telefon) die Nummer sofort als
; Internetrufnummer (wenn man sie eingibt und einfach auf "Optionen" drückt,
; kann man "Internetanruf" direkt auswählen). Bei allen anderen Nummern muss
; man sich noch durch ein zusätzliches Menü hangeln.
;
; Wenn weder "user" noch "username" angegeben sind, dann wird als
; Benutzername die Anmelde-ID gewählt.
;
; ACHTUNG: Wird die Anmelde-ID geändert, MUSS auch das md5secret geändert
; werden.
;
; Variablen:
; * type: Kann einen der Werte "friend", "peer" oder "user" annehmen.
; 1) "peer": Kann nur angerufen werden, kann aber niemanden anrufen.
; 2) "user": Kann nur anrufen, kann aber nicht angerufen werden. (Normale
; SIP-Clients können sich an so einem Benutzer gar nicht registrieren.)
; 3) "friend": Ist eeine Mischung aus "peer" und "user" (siehe
; http://www.voip-info.org/wiki/index.php?page=Asterisk+sip+type). Das
; ist der Standard-Typ, der für einen SIP-Client (wie z.B. ein
; Softphone oder Nokia E65) verwendet werden muss/sollte.
;
; * callerid: Die CallerID ist der Name des Endgeräts. Wird von diesem aus ein
; Anruf auf ein anderes SIP-Telefon gemacht, wird dieser Name übertragen
; und beim Angerufenen im Display angezeigt.
;
; Man kann noch zusätzlich die Nummer des Anrufers in spitzen Klammern
; hinter den Namen schreiben (z.B. "Nokia E65 <20>"). Auch diese Nummer
; wird zum Angerufenen übertragen - allerdings als Rückrufnummer. D.h. wenn
; man hier etwas anderes als die tatsächliche Anmelde-ID einträgt, kann der
; Angerufene nicht unter der übermittelten Nummer zurückrufen. Deshalb
; sollte man die Nummer einfach weglassen. Sie wird von Asterisk dann
; automatisch ermittelt (d.h. die Anmelde-ID wird verwendet).
;
; Hinweis: Man kann als CallerNum auch eine SIP-Adresse à la "<20@server>"
; angeben. Das führt jedoch bei manchen Telefonen (z.B. beim Nokia E65)
; dazu, dass das Telefon den Anruf automatisch ablehnt ohne den Benutzer
; darüber zu informieren.
;
; * host: Der Wert "dynamic" sagt aus, dass die IP-Adresse dynamisch ist (d.h.
; wechseln kann) und auch nicht durch einen DynDNS-Hostnamen ermittelt
; werden kann. Das ist bei fast allen End-Geräten der Fall, die sich hinter
; einem NAT befinden. Und hat der Client eine feste IP-Adresse, dann
; funktioniert das Ganze trotzdem.
;
; * md5secret: Letztendlich das Passwort, mit dem sich ein Client mit dieser
; Anmelde-ID anmelden kann. Ersetzt die Direktive "secret", so dass die
; Passwörter nicht mehr im Klartext in dieser Datei stehen. Der Hash kann
; (unter Linux) mit folgendem Befehl erzeugt werden (s.a. Warnung unten):
;
; $ echo -n "<user>:<realm>:<secret>" | md5sum
;
; Dabei steht <user> für die Anmelde-ID (z.B. "20"), <realm> für den oben
; angegebenen Realm (z.B. "mayastudios.de") und <secret> für das Passwort
; im Klartext.
;
; ACHTUNG: Wenn dieser Befehl so auf der Konsole eingegeben wird, wird er
; ggf. in der bash_history gespeichert. (Nach(!) dem Abmelden des
; Benutzers wird diese in der Datei "~/.bash_history" gespeichert.) Über
; diese Datei ist das Ermitteln des Passworts möglich (sofern jemand
; Zugriff auf die Datei hat). Aus Sicherheitsgründen sollte stattdessen
; das Script "create-md5secret.sh" verwendet werden, das hier im
; Config-Verzeichnis befindet.
;
;
[20]
type=friend
callerid=Nokia E65
host=dynamic
md5secret=f6415a42b7f7c923469b0561602xxxxx
mailbox=07111603xxx
context=registered
[21]
type=friend
callerid=FritzBox
host=dynamic
md5secret=21e2d36796729435fa752e031dxxxxx
mailbox=07111603xxx
context=registered
[22]
type=friend
callerid=Softphone
host=dynamic
md5secret=705817de6f9b71a2ae756cafc25xxxxx
mailbox=07111603xxx
context=registered
Und meine "extensions.conf":
Code:
; dialplan reload
[general]
static=yes
writeprotect=no
; --------------------------------------------------------------------
; Es hat sich als gute Praxis erwiesen, die Inhalte der Datei
; extensions.conf modular aufzubauen. Diese Praxis wollen
; wir auch hier anwenden.
;
; Der Aufbau der Anweisungen hier ist wie folgt:
;
; exten => <Angerufene Nummer>,<Befehlsnummer>,<Befehl>,<Parameter1>|<Parameter2>|...
;
; Wenn ein Anrufversuch bei Asterisk eingeht, werden alle exten-Befehl
; nach dieser Nummer durchsucht. Wird die Nummer gefunden, dann werden die
; entsprechenden Befehle nacheinander ausgeführt.
; Wo die Suche beginnt, wird in der "sip.conf" per Direktive "context"
; festgelegt.
;
; http://www.voip-info.org/wiki/index.php?page=Asterisk+-+documentation+of+application+commands
;
[echotest]
exten => 99,1,answer
exten => 99,n,wait,1
exten => 99,n,playback,demo-echotest
exten => 99,n,echo
exten => 99,n,playback,demo-echodone
exten => 99,n,hangup
;
; Interne Nebenstellen
;
; Dieser Block sorgt dafür, dass die Nebenstellen 20-29 erreichbar
; sind.
;
[intern]
exten => _2X,1,Dial,SIP/${EXTEN}|55|Ttr
[sip_out_1und1]
; Diesen Context verwenden wir zum waehlen von abgehenden
; Rufnummern über den Sipgate Account 6112233
exten => _0.,1,Dial,SIP/${EXTEN}@497111603XXX|45|r
exten => _+49.,1,Dial,SIP/${EXTEN}@497111603XXX|45|r
[sip_in_1und1]
; alle Anrufe mit einer ID 6112233 sollen an das SIP Endgeraet 30
; signalisiert werden
; Eweiterung "t": Gespräche können an eine andere Nebenstelle vermittelt werden
; Entferne 49 am Anfang der Rufnummer und ersetze sie durch eine 0
exten => 497111603XXX,1,Set(CALLERID(num)=${IF($[ ${CALLERID(num):0:2} = 49]?0${CALLERID(num):2}:${CALLERID(num)})})
exten => 497111603XXX,n,Set(CALLERID(name)="")
exten => 497111603XXX,n,Dial,SIP/20&SIP/21&SIP/22|30|rt
exten => 497111603XXX,n,Goto,result-${DIALSTATUS}|1
; Die Nummer hinter "b" oder "u" wird beim Starten der Mailbox
; vorgelesen. Deshalb sollte hier die entsprechende externe
; Rufnummer angegeben werden.
; Es muss(!) sich dabei um eine Nummer handeln; diese muss mit
; der Nummer in "voicemail.conf" übereinstimmen.
; TODO Mailbox-Prefixes sind veraltet; Angabe jetzt über "07111603XXX|b"?
; Wenn alle Endgeräte bereits telefonieren
exten => result-BUSY,1,voicemail,b07111603XXX
exten => result-BUSY,n,Hangup
; Wenn alle Endgeräte das Gespräch ablehnen
; TODO Wie macht man das, dass wenn einer das Gespräch ablehnt, es komplett abgelehnt wird?
exten => result-CONGESTION,1,wait,1
exten => result-CONGESTION,n,voicemail,b07111603XXX
exten => result-CONGESTION,n,Hangup
; Wenn keine Endgeräte registriert sind
exten => result-CHANUNAVAIL,1,wait,1 ; da es nicht klingelt, brauchen wir hier noch ein Timeout
exten => result-CHANUNAVAIL,n,voicemail,u07111603XXX
exten => result-CHANUNAVAIL,n,Hangup
; Wenn der Angerufene nicht innerhalb der gewählten Zeit abnimmt
exten => result-NOANSWER,1,voicemail,u07111603XXX
exten => result-NOANSWER,2,Hangup
; --------------------------------------------------------------------
;
; hier kommt der default-Context, in dem alle Geraete in der
; Grundkonfiguration erstmal laufen.
; Alle Geraete koennen sich gegenseitig anrufen
[registered]
include => intern
include => echotest
include => sip_out_1und1
;
; Hier kommen alle nicht authorisierten Anfragen an, die an den Server
; gerichtet werden. Wir verhindern damit, dass jemand auf unsere Kosten
; telefoniert. Er könnte nämlich einfach in sein SIP-Telefon
;
; Nummer@Server-Domain
;
; eingeben und dann im SIP-OUT-Kontext landen. Hiermit wird das verhindert.
;
[default]
exten => _X.,1,Answer
exten => _X.,n,wait,2 ; Zwei Sekunden warten, da das Audiofile sonst am Anfang abgeschnitten ist
exten => _X.,n,Playback(tt-somethingwrong)
exten => _X.,n,Hangup