Skript: "reload" bei IP-Wechsel

kleiner Verbesserungsvorschlag / nach wie vor Problem!

Hallo Otaku,

Mir ist beim Ausprobieren Deines Skriptes aufgefallen,
dass es nicht mit auskommentierten externip Zeilen umgehen
kann. Da ich grundsaetzlich beim Editieren von
Configfiles die default-Belegung zwar einkommentiere, jedoch
im config file liegen lasse.... hat mir das ein paar Fehler geworfen
und haette auch nicht funktioniert.

Um auch hiermit fehlerfrei umzugehen, waere der Einsatz einer klitze
kleinen regular expression moeglich.

Originale Zeile:
Code:
LASTIP=$(cat $SIPCONF|grep externip|awk -F "[\t| |=|.]+" '{ printf "%d.%d.%d.%d\n", $2, $3, $4, $5; }')

Meine Verbesserung:
Code:
LASTIP=$(cat $SIPCONF|grep -e "^externip" | awk -F "[\t| |=|.]+" '{ printf "%d.%d.%d.%d\n", $2, $3, $4, $5; }')

also kurz: grep externip durch grep -e "^externip" ersetzen
und schon sucht es nur nach tatsaechlich verwendeten config
zeilen.

[hr:ec6b3341d2]

Nichts desto trotz hat das mein Problem mit den ganzen time_outs bei
bei der erneuten SIP Registrierung nicht behoben (nichtmal ein manueller
Reload tut das...)

Code:
Jan 15 18:58:51 NOTICE[19115]: Peer 'xxx' is now UNREACHABLE!
Jan 15 18:58:51 NOTICE[19115]: Peer 'yyy' is now UNREACHABLE!
Jan 15 18:59:12 NOTICE[22347]: Removed default indication country 'nl'
Jan 15 18:59:12 NOTICE[22347]: No IAX provisioning configuration found, IAX provisioning disabled.
Jan 15 18:59:12 NOTICE[19115]: Still have a call...
Jan 15 18:59:18 WARNING[19115]: Maximum retries exceeded on call [email protected] for seqno 102 (Critical Request)
Jan 15 18:59:18 WARNING[19115]: Maximum retries exceeded on call [email protected] for seqno 102 (Critical Request)
Jan 15 18:59:32 NOTICE[19115]: Registration for '[email protected]' timed out, trying again
Jan 15 18:59:32 NOTICE[19115]: Registration for '[email protected]' timed out, trying again

hierbei ist der Zeitpunkt des Reloads zwar deutlich zu erkennen, doch
auf die Registrierung bei sipgate hat das scheinbar keinen Einfluss...

stell ich mich zu bloed an? :)

Auszug aus der sip.conf:
Code:
[xxx]
type=friend
username=xxxxxx
secret=blabla
host=sipgate.de
fromuser=xxxxxx
fromdomain=sipgate.de
context=remote
canreinvite=no
qualify=yes
disallow=all
allow=gsm
allow=alaw
allow=ulaw
insecure=very
nat=yes
dtmfmode=info
tos=0x18

nat=yes, weil sonst der externip Eintrag laut default-config gar nicht
benutzt wird.

Ich frag mich also, wo genau der Wurm begraben liegt ;)

Weder sip reload, noch reload haben irgend eine Auswirkung
und selbst ein warmstart bringt keinen Erfolg. Ich muss tatsaechlich
asterisk beenden und etwa eine Minute warten!!! bevor ich ihn wieder
dazu bringe, sich bei sipgate zu registrieren.


Sorry, dass ich euch damit in diesem Thread nerve, aber bei euch scheint
das Skript alle Probleme beseitigt zu haben und ich stelle mich nach wie vor
bloed an...

Bin fuer jeden Tipp dankbar!

Cya all,
SegFault
 
Hallo zusammen,

sollte es in der sip.conf um "externip" gehen, so habe ich, trotz NAT hier nichts eingetragen. Da es bei mir dennoch funktioniert, frage ich mich nun, wozu das Skript gut ist. Sicher, bei einem IP-Wechsel muss ein /etc/init.d/asterisk reload gemacht werden, doch das liesse sich ja in einem Einzeiler hinbekommen. Was ist also das Geheimnis mit den Einträgen der IP in der sip.conf?

Gruß
Rolf
 
rowitech schrieb:
Hallo zusammen,

sollte es in der sip.conf um "externip" gehen, so habe ich, trotz NAT hier nichts eingetragen. Da es bei mir dennoch funktioniert, frage ich mich nun, wozu das Skript gut ist. Sicher, bei einem IP-Wechsel muss ein /etc/init.d/asterisk reload gemacht werden, doch das liesse sich ja in einem Einzeiler hinbekommen. Was ist also das Geheimnis mit den Einträgen der IP in der sip.conf?

Gruß
Rolf
Seidem ich Asterisk 1.0.3 stabel nutze, benötige ich auch kein reload-Skript mehr. Das problem wurde wohl irgendwann mal gefixt.
 
Ich habe die Version 1.0.2, dort ist es aber schon noch so, dass bei einem IP-Wechsel beim Provider nicht neu registriert wird, ist das bei der 1.0.3 drin?
Einen asterisk reload brauche ich demnach immer noch.

Gruß
Rolf
 
Was hat es denn eigentlich mit diesem "IP-Wechsel-Bemerker" in asterisk 1.0.3 auf sich?

- macht asterisk damit automatisch ein reload, wenn die IP gewechselt hat?
- Kann dafür asterisk hinter nem Router laufen, oder muss auf dem asterisk server auch die dsl-verbindung hergestellt werden?

Gruß
Holg
 
Holg schrieb:
Was hat es denn eigentlich mit diesem "IP-Wechsel-Bemerker" in asterisk 1.0.3 auf sich?

- macht asterisk damit automatisch ein reload, wenn die IP gewechselt hat?
- Kann dafür asterisk hinter nem Router laufen, oder muss auf dem asterisk server auch die dsl-verbindung hergestellt werden?

Gruß
Holg

Bin mir nicht ganz sicher, was Du meinst, aber ab 1.0.3 scheit kein reload mehr nötig zu sein, wenn man seinen Asterisk hinter einem Router betreibt, und es einen Reconnect gab. Das scheint * nun zu bemerken und sich beimSip Server neu anzumelden, sodass die Sprachpakete auch zur neuen Ip kommen. Ich vermute mal, dass das auch funzt, wenn auf dem Router Asterisk läuft.
 
Hmm, sicher?

Woher erkennt Asterisk, dass die IP sich geändert hat?
Er dürfte ja nur z.B. bei einer neuen SIP-Registrierung informiert werden, die kann aber z.B. bei Nikotel ne Stunde dauern..

Gruß
Rolf
 
rowitech schrieb:
Hmm, sicher?

Woher erkennt Asterisk, dass die IP sich geändert hat?
Er dürfte ja nur z.B. bei einer neuen SIP-Registrierung informiert werden, die kann aber z.B. bei Nikotel ne Stunde dauern..

Gruß
Rolf

Also, ich bin mir absolut sicher, dass ich bei mir keinen Reload mehr machen muss. Wie genau die Asterisk-Programmierer das gemacht haben, entzieht sich meiner Kenntnis.
 
@Hupe

Ich habe den heutigen CVS-Head verwendet und nach einem IP-Wechsel habe ich dann ein Problem mit 1&1 da die Pakete noch an die alte IP geschickt werden. Du sagst ja, dass es bei Dir keine Probleme mehr gibt. Ich habe den Eindruck, dass es z.B. mit sipgate auch keine Probleme gibt, aber eben mit 1&1 weiterhin. Bisher hatte ich externip auf meinen dyndns-Namen gesetzt.
Ich hatte das Problem in einem anderen Thread schonmal näher analysiert, muss selber mal wieder meinen Thread lesen wie das nochmal war :)

Jetzt wollte ich mal fragen ob ich Deine sip.conf mal sehen könnte, nachdem Du fest überzeugt bist, dass bei dir jetzt bei einem IP-Wechsel automatisch ein sip-reload erzwungen wird. Will das mal vergleichen, vielleicht erkenne ich da was zwischen deiner und meiner sip.conf. Wäre echt super.

Ich teste jetzt mal mit externhost = und externrefresh =

Gruß,

Jui
 
Hier meine sip.conf:
Code:
[general]
context=default			; Default context for incoming calls
;realm=asterisk		; Realm for digest authentication
				; defaults to "asterisk"
				; Realms MUST be globally unique according to RFC 3261

nat=yes				; Set this to your host name or domain name
port=5060			; UDP Port to bind to (SIP standard port is 5060)
bindaddr=0.0.0.0		; IP address to bind to (0.0.0.0 binds to all)
srvlookup=yes			; Enable DNS SRV lookups on outbound calls
				; Note: Asterisk only uses the first host 
				; in SRV records
				; Disabling DNS SRV lookups disables the 
				; ability to place SIP calls based on domain 
				; names to some other SIP users on the Internet
				
;pedantic=yes			; Enable slow, pedantic checking for Pingtel
				; and multiline formatted headers for strict
				; SIP compatibility
tos=184                        ; Set IP QoS to either a keyword or numeric val
;tos=lowdelay                   ; lowdelay,throughput,reliability,mincost,none
;maxexpirey=3600		; Max length of incoming registration we allow
defaultexpirey=120		; Default length of incoming/outoing registration
;notifymimetype=text/plain	; Allow overriding of mime type in NOTIFY
;videosupport=yes		; Turn on support for SIP video

dtmfmode=info
disallow=all			
allow=gsm
allow=g726
allow=ilbc
;allow=ulaw
;allow=alaw			; Note: codec order is respected only in [general]
;musicclass=default		; Sets the default music on hold class for all SIP calls
				; This may also be set for individual users/peers
language=de			; Default language setting for all users/peers
				; This may also be set for individual users/peers
relaxdtmf=no			; Relax dtmf handling
;rtptimeout=60			; Terminate call if 60 seconds of no RTP activity
				; when we're not on hold
;rtpholdtimeout=300		; Terminate call if 300 seconds of no RTP activity
				; when we're on hold (must be > rtptimeout)

externhost= meine.dyndns.org	; Alternatively you can specify an
				; external host, and Asterisk will 
				; perform DNS queries periodically.  Not
				; recommended for production 
				; environments!  Use externip instead
;externrefresh=10




  

                         	; Address that we're going to put in outbound SIP messages
				; if we're behind a NAT

				; The externip and localnet is used
				; when registering and communicating with other proxies
				; that we're registered with
				; You may add multiple local networks.  A reasonable set of defaults
				; are:
localnet=192.168.1.0/255.255.255.0 ; All RFC 1918 addresses are local networks
;localnet=10.0.0.0/255.0.0.0	; Also RFC1918
;localnet=172.16.0.0/12		; Another RFC1918 with CIDR notation
;localnet=169.254.0.0/255.255.0.0 ;Zero conf local network


[2635053]
insecure=very
type=friend
username=1234567
secret=abcdef
host=sipgate.de
fromuser=1234567
fromdomain=sipgate.de
nat=no
context=sipgaterein
canreinvite=no
dtmfmode=info
disallow=all
allow=g726
allow=ilbc
allow=gsm
;allow=ulaw
;allow=alaw


[gmx]
insecure=very
type=friend
secret=abcdefg
username=4912345678
host=sip-gmx.net
fromuser=12345678
callerid="491234568" <4912345678>
fromdomain=sip-gmx.net
nat=no
context=gmxin
canreinvite=no
dtmfmode=info
disallow=all
allow=ilbc
allow=gsm
allow=g726
allow=ulaw
allow=alaw
 
Hi!

Besteht die möglichkeit das Script dahingehend zu erweitern, das wenn sich die IP Adresse geändert hat * für z.B. 5 Minuten herunterfährt und dann * wieder zu starten?

Ich habe dahingehend festgestellt, das sich weder IAX2 noch SIP anmelden können wenn ich * nicht diese Zeit vor einem erneuten Anmeldungsversuch gebe :( auch das mit dem CVS Head und externhost klappt nicht, da eben diese Zeit nicht gewartet wird ...

Da ich leider ein völliger Unix Dummy bin, kann ich diese Erweiterung leider nicht selber implementieren, so bleibt mir bis auf weiteres keine andere möglichkeit als bei einem IP Wechsel per SSH * zu beenden und dann nachher wieder neu zu starten ...

Ist zwar die Holzfällermethode (das mit 5 min. * beenden) geht aber leider nicht anders ... oder ich bin zu dumm das anders zu lösen :)

de Maik
 
@maikd: Das geht relativ einfach, und zwar mit Hilfe von EXEC_PRE_RELOAD. Diese Variable findest Du im Konfigurationsbereich. Dort musst Du einfach "sleep 300" anhaengen (inkl. der ""), dann sieht die Zeile so aus:
EXEC_PRE_RELOAD="sleep 300"

Dadurch verzoegert das Skript den Reload um 300 Sekunden (= 5 Minuten).
 
@otaku42: Leider klappt das nicht, ich muss Asterisk beenden und dann diese Zeit warten und danach Asterisk wieder neu starten, während dieser ca. 5 Minuten darf Asterisk keine Anmeldeversuche machen, sonst klappt es nicht ... aber frag mich bitte nicht warum :-(

de Maik
 
gibts denn jemanden bei dem die externhost/externrefresh kombination
funktioniert?
wenn asterisk bzw. der dynDNS etwas mehr zeit braucht, koennte
dann nicht auch ein hoeherer wert fuer externrefresh helfen?

in jeden fall hab ich mir auch ein eigenes kleinen reload script geschrieben
welches ich alle 5min laufen lassen und wollte es euch nicht vorenthalten ;-)

gruss
bohne
 

Anhänge

  • astcheck.txt
    1.7 KB · Aufrufe: 38
hmm habe hier mit 1und1 auch das problem, dass nach einem ip-wechsel eingehende daten im nirvana verschwinden. ich benutze für externip einen dyndns und habe externrefresh auf 10 gesetzt, wobei ich aber nicht weiss ob 10 minuten oder sekunden gemeint sind.

wenn ich das richtig verstanden habe, sollte asterisk doch dann nach 10? den dyndns account nach der ip fragen oder? habe jetzt mal manuell disconnected und dann angerufen. man hört mich und ich höre nix, 10 sekunden gewartet aber es bleibt dabei. entweder steht externrefresh für 10 minuten oder es funktioniert nicht.

da ein reload während einem laufenden gespräch nicht zu schaden scheint, werde ich einfach einen cronjob laufen lassen der alle 5 minuten ASTERISK -r -x "reload" ausführt oder spricht da irgendwas dagegen?
 
das ist zwar nicht unbedingt elegant, aber sollte zumindest
das problem loesen ;-)

ich bin momentan dazu uebergegangen, alle 5 mit den status
der sip registrierung abzufragen und bei einem fehlenden "connected"
einen reload zu starten. das ganze passt auch in einen einzeiler und
laeest sich per cron aufrufen.

gruss
bohne
 
wenn das der status ist, den "sip show registry" anzeigt würde das mir nicht helfen, da hier "registered" steht aber ich meinen gesprächspartner trotzdem nicht höre. erst nach einem "reload" gehts wieder.
 
Ein Kleiner Daemon, der das gleiche macht.

Hallo,

Ich bin gerade durch Zufall auf diesen Thread gestossen. Ich habe soetwas ähnliches wie euer script vor einiger Zeit einmal in C geschrieben.

Er forkt sich auch automatisch.

Hier könnt ihr das Runterladen:
http://www.soeren-sprenger.de/download/ip_watchdog.c

Es ist wirklich Simpel, wer Interesse hat, kann von mir auch noch Start/Stop Skripte bekommen.

ps. Übersetzen einfach mit
Code:
g++ ip_watchdog.c -o /usr/sbin/ip_watchdog
 
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.