Asterisk VoIP SIP Gateway how to

###########################################
Asterisk sollte auf Rechner oberhalb der 2GHZ Grenze betrieben werden, da doch relativ viel CPU Leistung benötigt wird.
Es sollte auch kein Connection Intensives Programm im Netz laufe wie z.B. eMule.

“lynx http://www.asterisk.org/”
###########################################
Build Asterisk 15.3 Stand 27.3.2018 auf Raspberry Pi 2 (Raspbian GNU/Linux 8 \n \l # Linux pi 4.9.35+ #1014 Fri Jun 30 14:34:49 BST 2017 armv6l GNU/Linux )

#Falls man Asterisk in einem Docker Container betreiben möchte, muss vom Hostbetriebssystem das /usr/src und /lib/modules mit eingebunden werden, da dahdi die Kernel Source Files benötigt:
# “docker run -d –privileged -it –ip=172.17.190.77 –net=vlan111 –name asterisk_test_3 -it suse_leap_42.3 -v /usr/src:/usr/src -v /lib/modules:/lib/modules /usr/sbin/sshd -D”

Openssl (mind. openssl-1.1.X ) Installation, nicht LibreSSL. Siehe Doku

wget https://downloads.asterisk.org/pub/telephony/dahdi-linux-complete/dahdi-linux-complete-current.tar.gz
tar -xzf dahdi-linux-complete-current.tar.gz
cd dahdi-linux-complete-2.11.1+2.11.1/
Bei opensuse “cd tools/xpp/” und dann “touch ./dahdi_registration.8 ./xpp_sync.8 ./lsdahdi.8 ./xpp_blink.8 ./dahdi_genconf.8 ./dahdi_hardware.8 ./twinstar.8 astribank_tool.8 astribank_hexload.8 astribank_allow.8 astribank_is_starting.8”
make all
make install
make config

wget https://downloads.asterisk.org/pub/telephony/libpri/libpri-current.tar.gz
tar -xzf libpri-current.tar.gz
cd libpri-1.6.0
make
make install

Bei rasbian und Opensuse
#libuuid
lynx https://sourceforge.net/projects/libuuid/
tar -xzf libuuid-1.0.3.tar.gz
cd libuuid-1.0.3
./configure –bindir=/usr/bin –sbindir=/usr/sbin –libdir=/usr/lib –includedir=/usr/include
make
make install

#jansson
wget http://www.digip.org/jansson/releases/jansson-2.11.tar.gz
tar -xzf jansson-2.11.tar.gz
cd jansson-2.11
./configure –bindir=/usr/bin –sbindir=/usr/sbin –libdir=/usr/lib –includedir=/usr/include
make
make install

libsrtp:
git clone https://github.com/cisco/libsrtp
./configure –bindir=/usr/bin –sbindir=/usr/sbin –libdir=/usr/lib –includedir=/usr/include
asterisk -rx “module show” | grep -i srt
res_srtp.so Secure RTP (SRTP) 0 Running core

Nur bei Opensuse
wget www.pjsip.org/release/2.7.1/pjproject-2.7.1.tar.bz2
git clone https://github.com/asterisk/pjproject pjproject
tar -xf pjproject-2.7.1.tar.bz2
cd pjproject-2.7.1
cd pjproject/
./configure –bindir=/usr/bin –sbindir=/usr/sbin –libdir=/usr/lib64 –includedir=/usr/include –enable-shared # –with-external-srtp
make dep
make
make install

wget http://downloads.asterisk.org/pub/telephony/asterisk/asterisk-15.3.0.tar.gz
tar -xzf asterisk-15.3.0.tar.gz
cd asterisk-15.3.0/
./configure –bindir=/usr/bin –sbindir=/usr/sbin –libdir=/usr/lib –includedir=/usr/include
Bei Opensuse wenn zuvor pjproject installiert wurde “./configure –bindir=/usr/bin –sbindir=/usr/sbin –libdir=/usr/lib64 –includedir=/usr/include –without-pjproject-bundled # –with-srtp=/usr/lib64 ”
make
make install
make config

###########################################
“wget http://www.digium.com/elqNow/elqRedir.htm?ref=http://downloads.digium.com/pub/telephony/asterisk/asterisk-1.4.21.1.tar.gz”
“tar -xvzf asterisk-1.4.21.1.tar.gz”
“cd asterisk-1.4.21.1”
“./configure” oder bei SuSE und Debian”./configure –bindir=/usr/bin –sbindir=/usr/sbin –libdir=/usr/lib –includedir=/usr/include”
“make”
Sollte vorher bereits eine älter Version installiert sein, so muss das Verzeichnis “rm -frv /usr/lib/asterisk/modules/*” geleert werden.
“make install”
“make samples” Erstellt eine ganze Reihe von Beispiel Konfigurationen.
“make progdocs” Erstellt die Dokumentenbasis. Benötigt “doxygen”.

Konfig Files liegen unter “cd /etc/asterisk”.
Voicemails und diverse Logs liegen unter “cd /var/spool/asterisk”.
Unter “cd /var/lib/asterisk” sind Sound Files für die VoiceMailBox.

#Minimal Konfiguration von SIP Telefon zu SIP Telefon via Asterisk SIP Gateway(lokal)##################################
SIP-Tel<====>Asterisk<====>SIP-Tel

“vi /etc/asterisk/sip.conf” -> alles auf default lassen und nur folgendes hinzufügen
[123] ;User 1
type=friend
context=meine-telefone
secret=<Passwort>
host=dynamic

[456] ;User 2
type=friend
context=meine-telefone
secret=<Passwort>
host=dynamic

“vi /etc/asterisk/extensions.conf” -> alles auf default lassen und nur folgendes hinzufügen
[meine-telefone]
exten => 123,1,Dial(SIP/123)
exten => 456,1,Dial(SIP/456)

#Minimal(ohne Vorwahl, direkt) Gateway(lokal) to Gateway(lokal)##########################
SIP-Tel<==(SIP)==>Asterisk_1<==(IAX2)==>Asterisk_2<==(SIP)==>SIP-Tel.
Das SIP Telefon-1 soll via Asterisk-1 und Asterisk-2 das andere SIP Telefon-2 erreichen.
Dazu wählt Tel-1 einfach die 2000 bzw. Tel-2 die 1000.
Asterisk 1 (filehunter.wenning.corp)
“vi /etc/asterisk/iax.conf” ->
[general]
bandwidth = high
allow = all
bindport = 4569
bindaddr = 0.0.0.0
[filehunter]
type=friend
context=telefon
host=imperator.wenning.corp
auth=plaintext
username=imperator
secret=passwort
“vi /etc/asterisk/sip.conf” ->
[general]
port = 5060
bindaddr = 0.0.0.0
context = sonstige
[1000]
type=friend
context=telefon
secret=RtsCommanderWenning
host=dynamic
[1001]
type=friend
context=telefon
secret=bit
host=dynamic
“vi /etc/asterisk/extensiosn.conf”
[telefon]
exten => 1000,1,Dial(SIP/1000)
exten => 1001,1,Dial(SIP/1001)
exten => 2000,1,DIAL(IAX2/imperator:passwort@imperator.wenning.corp/${EXTEN}@telefon)

Asterisk 2 (imperator.wenning.corp)
“vi /etc/asterisk/iax.conf” ->
[general]
bandwidth = high
allow = all
bindport = 4569
bindaddr = 0.0.0.0
[imperator]
type=friend
context=telefon
host=filehunter.wenning.corp
auth=plaintext
username=filehunter
secret=passwort
“vi /etc/asterisk/sip.conf” ->
[general]
port = 5060
bindaddr = 0.0.0.0
context = sonstige
[2000]
type=friend
context=telefon
secret=aldicommander
host=dynamic
[2001]
type=friend
context=telefon
secret=strikecommander
host=dynamic
“vi /etc/asterisk/extensiosn.conf” ->
[telefon]
exten => 2000,1,Dial(SIP/2000)
exten => 2001,1,Dial(SIP/2001)
exten => 1000,1,DIAL(IAX2/filehunter:passwort@filehunter.wenning.corp/${EXTEN}@telefon)

#Minimal(mit Vorwahl) Gateway(lokal) to Gateway(lokal)##########################
SIP-Tel<==(SIP)==>Asterisk_1<==(IAX2)==>Asterisk_2<==(SIP)==>SIP-Tel.
Das SIP Telefon-1 soll via Asterisk-1 und Asterisk-2 das andere SIP Telefon-2 erreichen.
Dazu wählt Tel-1 die Vorwahl plus normale Nummer um Tel-2 zu erreichen.
Tel-1 wählt 1232000 um Tel-2 zu erreichen bzw. Tel-2 4561000 um Tel-1 zu erreichen.
Es muss lediglich die “extensions.conf” angepasst werden (Asterisk-1 konfig).
“exten => _123XXXX,1,DIAL(IAX2/imperator:passwort@imperator.wenning.corp/2000@telefon)” oder
“exten => _123XXXX,1,DIAL(IAX2/imperator:passwort@imperator.wenning.corp/${EXTEN:-4}@telefon)” das ist das selbe wie “exten => _123XXXX,1,DIAL(IAX2/imperator:passwort@imperator.wenning.corp/${EXTEN:+3}@telefon)” das ist eleganter, da die Zusatznummern Variabler sind.

#Minimal Konfiguraion von SIP-Gateway(lokal) zu Congstar(QSC) (öffentlich)########################################
SIP-Tel<====>SIP-Gateway(Asterisk)<====>Provider(SIP Gateway)<====>normales analog/ISDN Telefon
“vi /etc/asterisk/sip.conf” ->
[general]
port = 5060
bindaddr = 0.0.0.0
defaultexpirey => 3600
context = sonstige
register => 06241200906:9907488015a9@farm1.tel2.congstar.qsc.de/congstar

[2000]
type=friend
context=meine-telefone
secret=1234
host=dynamic
qualify=yes
nat=yes
canreinvite=no

[2001]
type=friend
context=meine-telefone
secret=1234
host=dynamic
qualify=yes
nat=yes
canreinvite=no

[ext-sip-account]
type=friend
context=von-voip-provider
username=06241200906
fromuser=06241200906
secret=9907488015a9
host=213.148.136.3
fromdomain=213.148.136.3
qualify=yes
insecure=port,invite
nat=yes
;allow=all ;nicht aktivieren da sonst automatisch aufgelegt wird ??????
canreinvite=no

“vi /etc/asterisk/extensiosn.conf” ->
[sonstige]

[meine-telefone]
exten => 2000,1,Dial(SIP/2000,20)
exten => 2000,2,VoiceMail(2000,u)

exten => 2001,1,Dial(SIP/2001,20)
exten => 2001,2,VoiceMail(2001,u)

exten => 2999,1,VoiceMailMain(${CALLERID(num)},s)

exten => _X.,1,Dial(SIP/${EXTEN}@ext-sip-account)

[von-voip-provider]
exten => _X.,1,Verbose(${CALLERID(num)} ruft an)
exten => 06241200906,2,Dial(SIP/2000,20)
exten => 06241200906,3,VoiceMail(2000,u)

#Direkte Öffentliche Gespräche ohne über Vodafone zu gehn (xxx.dyndns.org) mit Verschlüsselung (Zfone)#############
Analog-Tel<====>Eumex 300 IP (Analog SIP wandler)<====>SIP-Gateway(Asterisk)<====>SIP-Tel
“vi /etc/asterisk/sip.conf” ->
[general]
language = de
port = 5060
bindaddr = 0.0.0.0
defaultexpirey => 3600
context = sonstige
register => 2001:1234@172.16.190.4 ; an der Eumex 300 Anlage registrieren. IP der Eumex 172.16.190.6
[2000] ;SIP Soft Client
type=friend
context=meine-telefone
secret=1234
host=dynamic
qualify=yes
nat=yes
canreinvite=no
[2001] ; Analog Telefon über Eumex 300 IP
type=friend
context=meine-telefone
secret=1234
host=dynamic
qualify=yes
nat=yes
canreinvite=no
“vi /etc/asterisk/extensiosn.conf” ->
[sonstige]
[meine-telefone]
exten => 2000,1,Dial(SIP/2000,20)
exten => 2000,2,VoiceMail(2000,u)
exten => 2001,1,Dial(SIP/2001,20)
exten => 2001,2,VoiceMail(2001,u)

An der Eumex Anlage lediglich die Rufnummer (2001), den User (2001), das Passwort (1234) und den Registra (172.16.190.4) eintragen.
Eventuel die IP Routen der Eumex kontrollieren.
Zusatz Infos: Mann kann auch beide Telefone Klingel lassen, und wer zuerst abhebt gewinnt.

#Direkte Öffentliche Gespräche ohne über Vodafone zu gehn (xxx.dyndns.org) mit Verschlüsselung (Zfone)#############
SIP-Tel<====>SIP-Gateway(Asterisk)<====>Internet<====>SIP-Tel oder normales analog/ISDN Telefon

#Voicemail(simple) bzw. Anrufbeantworter#################################
“vi /etc/asterisk/voicemail.conf” ->
[general]
format = wav ; Aufnahme Format
attach = yes ; Als Email Anhang
[default]
1000 => 1234,LapBit ; Für Nummer 1000 normale Voicemail und Passwort 1234
1001 => 1234,Aldi,root@bit-devil.dyndns.org,,delete=yes ; Für Nummer 1001 und Passwort 1234 wird die VoiceMail an ein Email Adresse verschickt und auf dem Server gelöscht.
“vi /etc/asterisk/extensions.conf” ->
[telefon]
exten => 1000,1,Dial(SIP/1000,30) ; Es wird für Numer 1000 nach 30 Sek. die Voicemail aktiviert.
exten => 1001,1,Dial(SIP/1001,30) ; Es wird für Numer 1001 nach 30 Sek. die Voicemail aktiviert.
exten => 1001,n,Goto(s-${DIALSTATUS},1) ; Wenn 1001 nicht erreichbar (NOANSWER,BUSY,CHANUNAVAIL,CONGESTION,ANSWER), zur Mailbox wechseln
exten => s-NOANSWER,1,VoiceMail(1001,u) ; Ansage “nicht erreichbar”
exten => s-BUSY,1,VoiceMail(1001,b) ; Ansage “besetzt”
exten => s-ANSWER,1,Hangup() ; zur Sicherheit nach Gespräch auflegen
exten => _s-.,1,Goto(s-NOANSWER,1) ; alles andere wie “nicht erreichbar” behandeln
exten => 250,1,VoiceMailMain(${CALLERID(num)}) ; auf der Extension 250 kann jeder Teilnehmer mit seinem Telefon seine persoenliche Voicemailbox abrufen:

#Voicemail(more featured) bzw. Anrufbeantworter#################################
“vi /etc/asterisk/voicemail.conf” ->
[general]
format = wav ; Aufnahme Format
attach = yes ; Als Email Anhang
serveremail = voicemailsystem@bit-devil.dyndns.org ; Absender Email Adresse
maxmsg = 200 ; Maximal 200 Nachrichten pro Benutzer
maxsecs = 300 ; Maximal 5 Minuten Pro Aufnahme der VoiceMailBox
emailbody = Guten Tag ${VM_NAME},\n\nSie haben eine neue Nachricht von ${VM_CALLERID} in Ihrer Voicemailbox ${VM_MAILBOX}. Bitte rufen Sie die 250 an, um die Nachricht abzuhoeren.\n\n– Asterisk Voicemail System\n ; Email Nachrichten Text
[default]
1000 => 1234,LapBit,root@bit-devil.dyndns.org ; Für Nummer 1000 normale Voicemail und Passwort 1234 und Email Benachrichtigung
1001 => 1234,Aldi,root@bit-devil.dyndns.org,,delete=yes ; Für Nummer 1001 und Passwort 1234 wird die VoiceMail an ein Email Adresse verschickt und auf dem Server gelöscht.
“vi /etc/asterisk/extensions.conf” ->
[telefon]
exten => 1000,1,Dial(SIP/1000,30) ; Es wird für Numer 1000 nach 30 Sek. die Voicemail aktiviert.
exten => 1001,1,Dial(SIP/1001,30) ; Es wird für Numer 1001 nach 30 Sek. die Voicemail aktiviert.
exten => _123XXXX,1,DIAL(IAX2/imperator:passwort@imperator.wenning.corp/${EXTEN:+3}@telefon)
exten => _[0-9][0-9][0-9][0-9],n,Set(ZIEL=${EXTEN}) ; Setzt eine neue Variable “Ziel” mit dem Inhalt von “${EXTEN}” (Telefonnummer). Das ist notwendig da später durch Verwendung von z.B. “${EXTEN}” in der “VoiceMail” Application nicht mehr die Nummer von “${EXTEN}” steht sonder der Status.
exten => _[0-9][0-9][0-9][0-9],n,Goto(s-${DIALSTATUS},1) ; Den Status feststellen und weiter zur gewählten Funktion springen
exten => s-NOANSWER,1,VoiceMail(${ZIEL},u) ; Keine Antwort Ansage auf die Ziefrufnummern Mailbox
exten => s-BUSY,1,VoiceMail(${ZIEL},b) ; Ziel ist besetzt Ansage auf die Ziefrufnummern Mailbox
exten => s-ANSWER,1,Hangup() ; Danach auflegen, sobald die Mailbox besprochen wurde
exten => _s-.,1,Goto(s-NOANSWER,1) ; Für sämtliche anderen Statuse, NOANSWER funktion wieder aufrufen
exten => 250,1,VoiceMailMain(${CALLERID(num)}) ; auf der Extension 250 kann jeder Teilnehmer mit seinem Telefon seine persoenliche Voicemailbox abrufen:

#Anrufweiterleitung zu einer bestimmten nummer bei “Nicht erreichbar” oder “Besetzte”(Forward Call)######################################################
“vi /etc/asterisk/extenstions.conf” ->
exten => 1000,1,Dial(SIP/1000,30)
exten => _[0-9][0-9][0-9][0-9],n,Goto(s-${DIALSTATUS},1)
exten => s-NOANSWER,1,Dial(SIP/5001,30)
exten => s-BUSY,1,Dial(SIP/5001,30)

#Konferenz Schaltung######################################################
Von SIP Client abhängig (Express Talk funktioniert)

#Gespräche Parken und wiederaufnehmen#############################
Von SIP Client abhängig (Express Talk funktioniert)

#Asterisk Log Analyzer#####################################################################################################################################################################################################################################################################################################################################################

#Security#################################
Rufnummernsperre:
Block den Absender (CallerID). Block aber leider nur einzelne Nummern und keine Bereiche
“vi /etc/asterisk/extensions.conf” ->
exten => _X.,n,GotoIf($[${BLACKLIST()}]?black,1) ;block den Absender (CallerID) in der Blacklist
exten => _X.,n,Dial(SIP/2000)
exten => black,1,Playback(tt-monkeys)
exten => black,2,Hangup()
“database put blacklist 0190666 1” zum hinzufügen der Schwarzen Nummer auf der CLI. Zum entfernen “database del blacklist 0190666”
“database show”
“Zapateller()”

Block beim Rausruf den kompletten bereich.
“vi /etc/asterisk/extensions.conf” ->
exten => _X.,1,Verbose(von ${CALLERID(num)} ruft ${EXTEN} an)
exten => _0180.,n(black),Playback(tt-monkeys)
exten => _0180.,n,Hangup()
exten => _0180.,1,Goto(black)
exten => _X.,n,Dial(SIP/2000)

#Eingehnede Anrufe von “049219469291” Zapateller`n.
exten => 06241200906,n,GotoIf($[“${CALLERID(number)}”=”049219469291”]?pm-fehler-3)
exten => 06241200906,n(pm-fehler-3),Set(CALLERID(number)=)
exten => 06241200906,n(pm-fehler-3),Zapateller(nocallerid)
exten => 06241200906,n(pm-fehler-3),Wait(2)
exten => 06241200906,n(pm-fehler-3),Zapateller(nocallerid)
exten => 06241200906,n(pm-fehler-3),Wait(1)
exten => 06241200906,n(pm-fehler-3),Zapateller(nocallerid)
exten => 06241200906,n(pm-fehler-3),Playback(tt-monkeys)
exten => 06241200906,n(pm-fehler-3),Hangup()

Spezielle eingehne Anrufe sperren: Siehe wie vorhin Block von nummern sperren
Rufnummernunterdrückung:
exten => 2001,1,Verbose(von ${CALLERID(num)} ruft ${EXTEN} an)
exten => 2001,n,SetCallerPres(prohib_not_screened) ;Rufnummer wird im Asterisk unterdrückt, fraglich ist allerdings ob das auch für das öffentlich SIP-Telefonnetz über einen Provider gilt.
exten => 2001,n,Dial(SIP/${EXTEN}@ext-sip-account)
IPtables Filter für ein und ausgehnde Gespräche nach extern(Congsat):
#UDP Stream nicht auf “NEW,ESTABLISHED,RELATED” setzten, da ab Kernel 2.6.31 nur Fehler bzw. UDP keine Verbindungsinformationen liefert ???
#Congstar/QSC SIP Gateway -> farm1.tel2.congstar.qsc.de -> 213.148.136.3
iptables -A FORWARD -i dsl0 -s 213.148.136.3 -d 172.16.190.16 -p icmp -j ACCEPT
iptables -A FORWARD -i dsl0 -d 213.148.136.3 -s 172.16.190.16 -p icmp -j ACCEPT
iptables -A FORWARD -o dsl0 -s 213.148.136.3 -d 172.16.190.16 -p icmp -j ACCEPT
iptables -A FORWARD -o dsl0 -d 213.148.136.3 -s 172.16.190.16 -p icmp -j ACCEPT
iptables -A FORWARD -i dsl0 -s 213.148.136.3 -d 172.16.190.16 -p udp –sport 5060 -j ACCEPT
iptables -A FORWARD -i dsl0 -d 213.148.136.3 -s 172.16.190.16 -p udp –dport 5060 -j ACCEPT
iptables -A FORWARD -o dsl0 -s 213.148.136.3 -d 172.16.190.16 -p udp –sport 5060 -j ACCEPT
iptables -A FORWARD -o dsl0 -d 213.148.136.3 -s 172.16.190.16 -p udp –dport 5060 -j ACCEPT
#RTP – the media stream (standard zwar nur 10000 – 20000, aber bei viel Traffic auch hoeher)
iptables -A FORWARD -i dsl0 -s 213.148.136.3 -d 172.16.190.16 -p udp –sport 10000:50000 -j ACCEPT
iptables -A FORWARD -o dsl0 -d 213.148.136.3 -s 172.16.190.16 -p udp –dport 10000:50000 -j ACCEPT
Aufnahme von Gesprächen intern:
exten => 2002,1,Monitor(wav,${STRFTIME(${EPOCH},,%Y%m%d-%H%M%S)})
exten => 2002,2,Dial(SIP/2002,20)
Zapateller (Gibt dem Autodialer an, das die Leitung nicht existiert und wird so meist automatisch aus dem Callcenter Verzeichnis gelöscht)
Aber vorsicht, alte Analogleitungen übertragen auch keine Rufnummer. Hier im Beispiel wird die CallerID Künstlich auf Null gesetzt.
Zapateller (Kein Anschluss unter dieser Nummer)
exten => 2002,1,Verbose(CHANGED CALLERID: von ${CALLERID(num)} ruft ${EXTEN} an)
;exten => 2002,n,Set(CALLERID(number)=)
;exten => 2002,n,Set(CALLERID(number)=anonymous)
exten => 2002,n,GotoIf($[“${CALLERID(number)}”=”anonymous”]?pm-fehler-2)

exten => 2002,n,Zapateller(nocallerid)
exten => 2002,n,Wait(2)
exten => 2002,n,Zapateller(nocallerid)
exten => 2002,n,Wait(1)
exten => 2002,n,Zapateller(nocallerid)

exten => 2002,n,Verbose(CHANGED CALLERID: von ${CALLERID(num)} ruft ${EXTEN} an)
exten => 2002,n,PrivacyManager(1,2)
exten => 2002,n,NoOp(Privacy Manager Status: ${PRIVACYMGRSTATUS} .)
exten => 2002,n,GotoIf($[“${PRIVACYMGRSTATUS}”=”FAILED”]?pm-fehler)

exten => 2002,n,Dial(SIP/2002,20)
exten => 2002,n,VoiceMail(2002,u)
exten => 2002,n,Hangup()

exten => 2002,n(pm-fehler),Playback(tt-monkeys)
exten => 2002,n(pm-fehler),Hangup()

exten => 2002,n(pm-fehler-2),Set(CALLERID(number)=)
exten => 2002,n(pm-fehler-2),Zapateller(nocallerid)
exten => 2002,n(pm-fehler-2),Wait(2)
exten => 2002,n(pm-fehler-2),Zapateller(nocallerid)
exten => 2002,n(pm-fehler-2),Wait(1)
exten => 2002,n(pm-fehler-2),Zapateller(nocallerid)

exten => 2002,n(pm-fehler-2),PrivacyManager(1,2)
exten => 2002,n(pm-fehler-2),NoOp(Privacy Manager Status: ${PRIVACYMGRSTATUS} .)
exten => 2002,n(pm-fehler-2),GotoIf($[“${PRIVACYMGRSTATUS}”=”FAILED”]?pm-fehler)

exten => 2002,n(pm-fehler-2),Dial(SIP/2002,20)
exten => 2002,n(pm-fehler-2),VoiceMail(2002,u)
exten => 2002,n(pm-fehler-2),Hangup()

exten => 2002,n(pm-fehler-2),Playback(tt-monkeys)
exten => 2002,n(pm-fehler-2),Hangup()
Zfone, verschüsselte telefonate führen. Leider funktioniert es nicht mit Asterisk, da Asterisk verschlüßelte Calls by default blockiert.
Ansonsten “wget http://zfoneproject.com/”. Dann einfach unter Windows installieren. Zfon immer vor dem SIP Client starten.
Um Asterisk Zfone komatibel zu machen bebötigt man das Zfone SDK.
“tar -xzf zfone-linux.tar”
“cd zfone-linux”
“./install.sh”
“cd libzrtp-0.81.514/projects/gnu”
“./configure”
“make clean && make”
“cd build/test”
“make”
“./libzrtp_test”
“cp -frv ~/zfone-linux/libzrtp-0.81.514/include/*.h /usr/include”
“cp -frv ~/zfone-linux/libzrtp-0.81.514/third_party/bgaes/*.h /usr/include”
“cp -frv ~/zfone-linux/libzrtp-0.81.514/third_party/bnlib/*.h /usr/include”
Leider weis ich jetzt nicht weiter wie die libzrtp in Asterisk implementiert wird, da ich den Asterisk Zfone Patch nicht finden kann.
Alternativ gibt es eine Build In Encryption von Asterisk via IAX2. Am bsten benutzt man diese Einstellungen zur Asterisk to Asterisk Kommunikation.
in der “iax.conf” bei den User folgendes eintragen:
encryption=aes128
auth=md5
secret=Passwort
Den Rest der IAX User Einstellungen Standard einstellen.
Oder die Komplette Wege Kommunikation über IPsec gestalten, siehe dazu strongSwan Doku.
ENUM Abfrage

#Sonstiges#################################
Gewinnspiel bzw. Zufallsgenerator
einen zufäigen Wert zwischen 1 und 10 (einschließich) wählen:
exten => 123,1,Set(zufall=${RAND(1,10)})
Jeder vierte (25%) gewinnt
exten => 123,1,GotoIf($[${RAND(0,100)} < 25]?gewonnen:verloren)
exten => _X.,n(gewonnen),Playback(tt-monkeys)
exten => gewonnen,n,Goto(123,1)
exten => _X.,n(verloren),Playback(verloren)
exten => verloren,n,Goto(123,1)
Nummernansage
exten => _X.,n,Answer
exten => 123,n,Set(LANGUAGE=de)
exten => 123,n,SayPhonetic(alex)
exten => 123,n,SayDigits(1234)
exten => 123,n,SayAlpha(ABC123)
exten => 123,n,SayNumber(1234)
exten => _X.,n,Hangup()
Zeitansage
exten => 123,1,SayUnixTime(,,IMp)
Gruppe von Telefonen klingeln lassen und wer zu erst abhebt gewinnt.
exten=2001,1,NoOp(MN)
exten=2001,n,Set(GROUP()=MN)
exten=2001,n,GotoIf($[${GROUP_COUNT(MN)} > 1]?200)
exten=2001,n,Dial(SIP/2000,20&SIP/2001,10,i)
exten=2001,n,Hangup
exten=2001,200,Busy
Spezielles Loggin (System Aufruf)
exten => 2002,1,System(echo ‘Zeit: ${STRFTIME(${EPOCH},,%Y%m%d-%H%M%S)} – von: ${CALLERID(num)} – nach: ${EXTEN} – Channel: ${CHANNEL}’ >> /var/log/asterisk/anrufe.log)
Email Versenden (System Aufruf) wenn ein Anruf kommt
exten => 2002,n,Set(zeit=${STRFTIME(${EPOCH},,%Y%m%d-%H%M%S)})
exten => 2002,n,Set(von=${CALLERID(num)})
exten => 2002,n,Set(nach=${EXTEN})
exten => 2002,n,Set(kanal=${CHANNEL})
exten => 2002,n,System(echo “Zeit: ${zeit} – von: ${von} – nach: ${nach} – Kanal: ${kanal} ” | mail -s “Incomming Call” root@bit-devil.dyndns.org -r root@bit-devil.dyndns.org)
Konferenzschaltungen MeetMe()
Outlook Adressbuch Integration bzw. SIP Tapi (“click 2 dial” mit Outlook) bzw. das Adressbuch ist via LDAP eingebunden (Siehe LDAP Dokus).
SIP TAPU Für Windows 7 noch nicht geeignet (v0.2.6).
“wget http://www.ipcom.at”. funktioniert leider mit Asterisk gar nicht.

#Zusatz Infos##############################################################################
Unbedingt auf die RTP Ports achten. Bei asterisk default Start bei 10000 und Ende bei 20000 (rtp.conf),
der SIP client muss darauf angepasset werden.
Da SIP/IAX auf den UDP Stream basiert tritt ab Kernel 2.6.31 das Problem auf
das der Verbindungstatus bei IPtables (NEW,ESTABLISHED,RELATED) nicht mehr benötigt wird, falls er doch aktiviert
wird kann keine Verbindung aufgebaut werden (cat /proc/net/ip_conntrack; cat /proc/net/ip_conntrack_expect).
Bei mehr als zwei Registereinträgen auf dem selben Server in der sip.conf macht Asterisk Probleme. Anscheinent kann er die REGISTER Header
nicht der richtigen INVITE Nachricht zuordnen da eventuel der Cseq Nummern Inkrementor Buggy ist. Quick and Dirty Lösung:
Sofern Zugriff auf einen DNS Server besteht einfach die Congstar IP als eigenständigen Server registieren oder equivalent in der lmhost eintragen
“vi /var/lib/named/<DNS Zone>”
congstar1 IN A 213.148.136.3
congstar2 IN A 213.148.136.3
congstar3 IN A 213.148.136.3
congstar4 IN A 213.148.136.3
Ganz gute SIP Client sind
Zoiper http://www.zoiper.com/ (Die Sprachqualität lässt teilweise zu wünschen übrig) Freeware
Express Talk http://www.nch.com.au (Sprachqualität ist gut) keine Freeware dafür abe gecrackt.
Ganz Gute IAX2 Clients sind
Zoiper http://www.zoiper.com/ (Die Sprachqualität lässt teilweise zu wünschen übrig) Freeware
Voix Phone http://www.voixphone.com/ Freeware
Der für das Gespräch verwendet Codec hängt nicht nur vom Asterisk ab, sonder auch vom SIP Client.
Das heißt wenn im Asterisk z.B. “allow = g722” aktiviert ist, kann trotzden kein Gespräch zustande kommen,
da die meisten freien Clients das g722 nicht unterstützen. Die besten und wohl meist eingesetzten Codecs sind “alaw” und “ulaw” (64Kbit/s).
Um MP3 Lieder in das GSM Format zu convertieren muss zu aller erst mal “sox” installiert werden.
“wget http://sox.sourceforge.net/”
“tar -xvzf sox-14.3.0.tar.gz”
“cd sox-14.3.0”
“./configure –bindir=/usr/bin –sbindir=/usr/sbin –libdir=/usr/lib –includedir=/usr/include/”
“make”
“make install”
Um dann die MP3 Datei zu konvertieren einfach den Befehl “sox -V test.mp3 -c1 test.gsm” eingeben.
Zum Schluss die gsm Datei nach “cp -frv ~/test.gsm /var/lib/asterisk/sounds/de/” kopieren.
Um die Musik dann im Asterisk abzuspielen einfach in der “extensions.conf”
;exten => 123,n,Playback(test)
exten => 123,n,Background(test)
eintragen. Gegebenfalls kann man mit dieser Methode auch eigene (Band)Ansagen machen. Zuerst auf MP3 (eventuel mit audacity) aufnehem und dann konvertieren.

#Importieren von Deutschen Soundfiles##############################################################################
“wget http://www.amooma.de/asterisk/sprachbausteine/asterisk-core-sounds-de-gsm-current.tar.gz” oder
“lynx http://www.amooma.de/tts/”
“tar -xvzf asterisk-core-sounds-de-gsm-current.tar.gz”
“cd de”
“mkdir /var/lib/asterisk/sounds/de”
“cp -frv * /var/lib/asterisk/sounds/de”
“vi /etc/asterisk/sip.conf” ->
[general]
language = de
“vi /etc/asterisk/indications.conf”
[general]
;country=us ; default location
country=de

#Quality of Service Filter##############################################################################
Für die Codecs uLaw und aLaw sollten mind. 64 Kbit aber in der Praxis besser 100Kbit Upload Bandbreite pro Kanal zugelassen werden.
iptables -A FORWARD -o dsl0 -s 213.148.136.3 -d 172.16.190.16 -p udp –sport 5060 -j MARK –set-mark 111
iptables -A FORWARD -o dsl0 -d 213.148.136.3 -s 172.16.190.16 -p udp –dport 5060 -j MARK –set-mark 111
iptables -A FORWARD -o dsl0 -d 213.148.136.3 -s 172.16.190.16 -p udp –dport 10000:50000 -j MARK –set-mark 111
iptables -A FORWARD -o dsl0 -p tcp –dport 22 -m state –state NEW,ESTABLISHED -j MARK –set-mark 222
iptables -A FORWARD -o dsl0 -s 172.16.190.16 -d 0/0 -p tcp –dport 22 -j MARK –set-mark 222
iptables -A FORWARD -o dsl0 -s 172.16.190.16 -d 0/0 -p tcp –sport 22 -j MARK –set-mark 222
iptables -A OUTPUT -o dsl0 -s 0/0 -d 0/0 -j MARK –set-mark 333
iptables -A FORWARD -o dsl0 -s 0/0 -d 0/0 -j MARK –set-mark 333
#Prio 1 mind. 100 KB Upload SIP/RTP
#Prio 2 mind. 64 KB Upload SSH
#Prio 3 mind. 20 KB Upload restlicher Verkehr
tc qdisc del dev dsl0 root
tc qdisc add dev dsl0 root handle 1:0 htb default 12
tc class add dev dsl0 parent 1: classid 1:1 htb rate 255kbit ceil 256kbit
tc class add dev dsl0 parent 1:1 classid 1:111 htb rate 100kbit ceil 256kbit prio 1
tc class add dev dsl0 parent 1:1 classid 1:222 htb rate 64kbit ceil 256kbit prio 2
tc class add dev dsl0 parent 1:1 classid 1:333 htb rate 20kbit ceil 256kbit prio 3
tc filter add dev dsl0 parent 1: prio 0 protocol ip handle 111 fw flowid 1:111
tc filter add dev dsl0 parent 1: prio 0 protocol ip handle 222 fw flowid 1:222
tc filter add dev dsl0 parent 1: prio 0 protocol ip handle 333 fw flowid 1:333

#Kommandos############
“asterisk” = Startet Asterisk normal als Daemon.
“asterisk -r” = Verbindet zur Asterisk Console (CLI).
“asterisk -vvvvgc” = Startet Asterisk mit Debug Output zu Asterisk CLI.
“asterisk -rx “core set verbose 5″” = Führt den Befehl in den Anführungszeichen auf der normalen Kommandozeile aus.
“module reload” = Starte den Asterisk im Client Modus neu.
“asterisk -rx “core show channels” ” = Zeigt aktuelle Verbindungen an.
“iax2 show registry” = Zeigt registrierte IAX2 Kanäle an.
“iax2 show peers” = Zeigt die IAX Telefon Connectons an.
“iax2 show users” = Listet alle IAX users auf (auch friends)
“sip show peers” = Zeigt die SIP Telefon Connectons an.
“sip show users” = Listet alle SIP users auf (auch friends)
“sip show registry” = Zeigt den Status der Hosts, bei denen wir uns anmelden
“sip show channels” = Zeigt aktive Calls an
“dialplan reload” = Den Rufnummern Plan neu laden (extensions.conf)
“iax2 set debug bzw. off” = Debugger für Protokoll ein/ausschalten
“sip set debug bzw. off” = Debugger für Protokoll ein/ausschalten
“core show codecs” = Zeigt die verschieden Codecs an
“core show translation” = Zeigt die Zeit in msec an, bis Codec 1 zu Codec 2 umtransformiert wurde.
“help” = Zeigt alle Verfügbaren Kommandos an
“core stop gracefully” = stopt den Asterisk Daemon normal.
“sip reload” = laedt die sip.conf neu
“voicemail reload” = leadt die voicemail neu voicemail.conf
“core set verbose 5” = log auf stufe 5 im cli setzen
“core show channels” = Zeigt aktive Gespräche
“soft hangup SIP/2002-084703d8” = Ein Gespräch von der CLI beenden

#################################################################################################################################################################################################
#################################################################################################################################################################################################
#################################################################################################################################################################################################
#################################################################################################################################################################################################
#################################################################################################################################################################################################
#Configs und How Tos ab v15 (Stand 03/2018)

#Features
https://www.asterisk.org/get-started/features

Config Files
###############
#Minimal Config
cd /etc/asterisk
/etc/asterisk/acl.conf
[name_of_acl1]
deny=0.0.0.0/0.0.0.0
permit=127.0.0.1
/etc/asterisk/asterisk.conf
[options]
highpriority = yes
/etc/asterisk/extensions.conf
[meine-telefone]
exten => 123,1,Dial(SIP/123)
exten => 456,1,Dial(SIP/456)
/etc/asterisk/http.conf
[general]
enabled=yes
bindaddr=0.0.0.0
bindport=8088
/etc/asterisk/indications.conf
[general]
country=de
/etc/asterisk/logger.conf
[general]
dateformat = %F %T.%3q
use_callids = yes
queue_log = yes
/etc/asterisk/modules.conf
[modules]
autoload = yes
/etc/asterisk/sip.conf
[general]
context=public
udpbindaddr=0.0.0.0
tcpenable=no
tcpbindaddr=0.0.0.0
transport=udp
[123] ;User 1
type=friend
context=meine-telefone
secret=123
host=dynamic
[456] ;User 2
type=friend
context=meine-telefone
secret=456
host=dynamic
###############

#################
Kommandos
“asterisk” = Startet Asterisk normal als Daemon.
“asterisk -r” = Verbindet zur Asterisk Console (CLI).
“asterisk -vvvvgc” = Startet Asterisk mit Debug Output zu Asterisk CLI.
” asterisk -rx “core set verbose 5″ ” = Führt den Befehl in den Anführungszeichen auf der normalen Kommandozeile aus.
” asterisk -rx “core show channels” ” = Zeigt aktuelle Verbindungen an.

#################
#CLI

#Core
core stop gracefully = stoppen
core set verbose 5 = Debug Level
core show channels = Verbdindungen anzeigen
core show version

#Module
module reload = reload
module show

#SIP
sip show users
sip show peers
sip show registry

#Sonstige
http show status
manager show settings
channel request hangup SIP/456-00000001
database show
#################

#################
#IPtables für VPN Server
#SIP,RTP, IAX zualssen . Im Auge behalten und ggf. welche loeschen. Kommunikation aus dem VPN Netz 172.18 ins PRD Netz 172.17 und zum Asterisk 172.17.190.60.
iptables -A FORWARD -i eth0 -o eth0 -m iprange –src-range 172.18.190.0-172.18.190.255 –dst 172.17.190.60 -p udp –sport 10000:50000 -m conntrack –ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -i eth0 -o eth0 -m iprange –src-range 172.18.190.0-172.18.190.255 –dst 172.17.190.60 -p udp –dport 10000:50000 -m conntrack –ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -i eth0 -o eth0 -m iprange –src 172.17.190.60 –dst-range 172.18.190.0-172.18.190.255 -p udp –sport 5060 –dport 10000:60000 -m conntrack –ctstate NEW,ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -i eth0 -o eth0 -m iprange –src-range 172.18.190.0-172.18.190.255 –dst 172.17.190.60 -p udp –dport 5060 –sport 10000:60000 -m conntrack –ctstate NEW,ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -i eth0 -o eth0 -m iprange –src-range 172.18.190.0-172.18.190.255 –dst 172.17.190.60 -p udp -j ACCEPT
iptables -A FORWARD -i eth0 -o eth0 -m iprange –src-range 172.18.190.0-172.18.190.255 –dst-range 172.17.190.0-172.17.190.255 -p udp –sport 10000:50000 –dport 10000:50000 -m conntrack –ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -i eth0 -o eth0 -m iprange –src-range 172.18.190.0-172.18.190.255 –dst-range 172.17.190.0-172.17.190.255 -p udp -m helper –helper sip -m conntrack –ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -i eth0 -o eth0 -m iprange –src-range 172.18.190.0-172.18.190.255 –dst-range 172.17.190.0-172.17.190.255 -p udp -m conntrack –ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -i eth0 -o eth0 -m iprange –src-range 172.18.190.0-172.18.190.255 –dst-range 172.17.190.0-172.17.190.255 -p udp –sport 4000:5000 –dport 4000:5000 -m conntrack –ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -i eth0 -o eth0 -m iprange –src-range 172.18.190.0-172.18.190.255 –dst-range 172.17.190.0-172.17.190.255 -p udp –sport 4000:5000 –dport 4000:5000 -j ACCEPT
iptables -A FORWARD -i eth0 -o eth0 -m iprange –src-range 172.17.190.0-172.17.190.255 –dst-range 172.18.190.0-172.18.190.255 -p udp –sport 4000:5000 –dport 4000:5000 -j ACCEPT
#################

##################
#Mobile App
Ganz gut ist CsipSimple https://play.google.com/store/apps/details?id=com.csipsimple&hl=de
in Kombination mit der StrongSwan Android App passt dies wunderbar .
##################

##################
#VoIP Client für Windows
MicroSIP https://www.microsip.org/
##################

#################################################################################################################################################################################################
#################################################################################################################################################################################################
#################################################################################################################################################################################################
#################################################################################################################################################################################################
#################################################################################################################################################################################################

Post Revisions: