W ramach sieci HamNET możemy uruchomić lokalną cyfrową centrala telefoniczna VoIP, która może być połączona z innymi centralami w sieci HamNET przy pomocy protokołu DUNDI. Rozwiązanie to pozwala lokalnym użytkownikom centrali łączyć się telefonicznie z każdym krótkofalowcem który ma telefon VoIP czy to sprzętowy czy programowy zalogowany do swojej lokalnej centrali. HamNET-VoIP.pdf

Budowa centrali VoIP sprowadza się do instalacji oprogramowania Asterisk. Są dostępne nakładki do Asterisk które pozwalają konfigurować centrale poprzez stronę internetową. Najbardziej znane rozwiązanie to FreePBX. Są dostępne gotowe obrazy pod Raspberry PI gdzie mamy zaisnatlowany asterisk i FreePBX: RaspPBX.

W ramach sieci HamNET poszczególne centrale telefoniczne (PBX) pracujące na Asterisk wykorzystują protokół DUNDi (ang: Distributed Universal Number Discovery). Protokół ten pozwala zestawić połączenie telefoniczne pomiędzy użytkownikami (numerami telefonów) którzy są zarejestrowani i zalogowani na różnych centralach telefonicznych. Tak więc znając numer telefonu krótkofalowca, nasz lokalny PBX sprawdza w jakim innym PBX jest dany numer zarejestrowany i zestawia połączanie.

Przykład połączonych centrali w sieci HamNET można zobaczyć na stronie: https://www.afu.rwth-aachen.de/projekte/hamnet/infos-fuer-betreiber/dundi-netzuebersicht

Obecnie w Polsce działają centrale VoIP HamNET w Toruniu (SP2PMK), Limanowa (SP9OYB), Augustów (SP4BK), Gorzów Wlkp. (SP3CAI).

Krótkofalowcy używają numerów telefonów VoIP na bazie własnego znaku. Podana poniżej strona internetowa pozwała wygenerować swój numer VoIP:

https://www.oe2wnl.at/calltodtmf-voip.php

Poniższy opis ograniczy się tylko do instalacji asterisk i konfiguracji jego z poziomu konsoli.

Instalacje centrali VoIP Asterisk opisze na przykładzie dystrybucji DEBIAN v9 Stretch oraz Asterisk v13

UWAGA. Opisana konfiguracja jest dla serwera Asterisk który ma swój własny IP 44-Net adres, który nie jest za NAT'em.

Aby uruchomić i skonfigurować naszą centrale VoIP musimy posiadać działający serwer z adresem IP w sieci 44-NET i zainstalowany na nim DEBIAN STRETCH v9.

Musimy zalogować się jako użytkownik root lub używać przed komendami polecenie "sudo" jeśli nie zalogowaliśmy się do naszego serwera jako użytkownik "root" na przykład: sudo apt-get update itp

Instalujemy oprogramowanie Asterisk v13 następującymi poleceniami:

apt-get update apt-get upgrade apt-get install asterisk

Po zainstalowaniu Asterik możemy połączyć się do konsoli centrali (liczba liter "v" zwiększa poziom komunikatów)

asterisk -r vvvvvvvvvvvvvvvvvv

z konsoli centrali wychodzimy poleceniem "exit"

Po zainstalowaniu centrali VoIP Asterisk musimy skopiować do katalogu /etc/asterisk przykładowe pliki konfiguracyjne które możesz pobrać: VoIPHamNET.tar

cd / sudo wget http://sp2ong.noip.pl/downloads/voip-hamnet.tgz sudo tar xvzfP voip-hamnet.tgz

Po rozpakowaniu archiwum przykładowe pliki konfiguracyjne Asterisk dla HamNET znajdziesz w katalogu /etc/asterisk/hamnet

Należy zrobić sobie kopie oryginalnych plików.

cd /etc/asterisk mkdir backup mc (jeśli nie masz zainstalowanego programu mc zrób to poleceniem: sudo apt-get install mc)

Przy pomocy programu 'mc' przekopiować pliki z /etc/asterisk do /etc/asterisk/backup

codecs.conf, confbridege.conf, dundi.conf, iax.conf, modules.conf, extensions.conf, sip.conf, rtp.conf, voicemail.conf

Następnie przekopiować wszystkie pliki z /etc/asterisk/hamnet do /etc/asterisk

Konfiguracja Asterisk

Należy wykonać edycje plików przykładowych aby skonfigurować centrale PBX do pracy. Edycje plików możesz wykonać przy pomocy programu 'mc' W plikach konfiguracyjnych znak średnika ; używany jest dla linii które zawierają komentarz tekstowy.

plik sip.conf

Plik ten zawiera konfiguracje protokołu SIP oraz użytkowników w naszej centrali.

Wprowadzić zmiany zamiast przykładowego adres IP 44.128.32.1 wpisz adres z sieci 44-Net IP komputera na którym masz zainstalowany asterisk

[general] tcpbindaddr=44.128.32.1 udpbindaddr=44.128.32.1

Konfiguracja numeru konferencji na centrali. Zamiast IP 44.128.32.1 wpisz adres amprnet IP komputera na którym masz zainstalowany asterisk Zamiast xxxxx6000 wpisz numer pod jakim będzie dostępna konferencja na Twoje centrali (oczywiście możesz wybrać innym numer dla swojej konferencji, nie musi to być z końcówka 6000). Obecnie dostępne konferencje w SP HamNET:

  • Torun 7471206000
  • Gorzów Wlkp: 7471306000
  • Augustów: 7471406000
  • Linamowa: 7471906000
  • Sieradz: 7471706000

[xxxxx6000] type=friend host=44.128.32.1 context=local subscribecontext = conference

Definicja konta użytkownika. Zamiast XXXXX wpisz numer telefonu na bazie znaku wygenerowany z strony: https://www.oe2wnl.at/calltodtmf-voip.php

; SP2ABC [XXXXX] callerid="SP2ABC_Adam" secret=vhamnet host=dynamic type=friend context=local ; zamiast xxxxx wpisac numer telefonu usera mailbox=xxxxx@voicemail subscribecontext = local call-limit = 10

Konfiguracja poczty głosowej.

Konstrukcja wpisu składa się z numeru telefonu użytkownika , hasła oraz znaku użytkownika

plik: voicemail.conf

[voicemail]

;numer telefonu = haslo, Znak 747120134241 = 98765,SP2ABC

Konfiguracja reguł DIAL.

plik: extensions.conf

W pliku tym mamy zapisane reguły wg których centrala sprawdza co ma zrobić kiedy odbierze numer telefonu. W pliku tym główną zmianą jaką musimy zrobić to wprowadzenie numeru telefonu naszej konferencji.

[dundiextens] ; np zamiast XXXXX wpisz poczatkowe 5 cyfr Twojego numer. Wazne aby ; numery konferencji nie powtarzaly sie. Obecnie sa: ; 7471206000 Torun SP2PMK ; 7471306000 Gorzow Wlkp SP3CAI ; 7471906000 Limanowa SP9OYB ; 7471406000 Augustow SP4BK ; 7471706000 Augustow SP7UTO ; zmien XXXXX6000 na numer Twoje lokalnej konferencji exten => XXXXX6000,1,Goto(conference,${EXTEN},1)

[conference] ; Zmien wg opisu jak wyzej zamiast XXXXX6000 exten => XXXXX6000,1,Noop() same => n,ConfBridge(room-one,default_bridge,default_user,sample_user_menu)

[lookupdundi] switch => DUNDi/priv

[local] ; zmien XXXXX6000 wg opisu wyzej exten => XXXXX6000,1,Noop() same => n,ConfBridge(room-one,default_bridge,default_user,sample_user_menu)

exten => 6000,1,Noop() same => n,ConfBridge(room-one,default_bridge,default_user,sample_user_menu)

; numer poczty glosowej exten => 500,1,VoiceMailMain(${CALLERID(num)}@Voicemail)

include => dundiextens include => lookupdundi

exten => _Z.,2,Dial(SIP/${EXTEN},30) same => n,Voicemail(${EXTEN}@voicemail) same => n,Hangup()

[incomingdundi] exten => _Z.,1,Goto(local,${EXTEN},2)

Powyższa konfiguracja uniwersalna powoduje że poczta głosowa tylko jest wtedy kiedy ktoś ma włączony telefon czy to sprzętowy czy programowy. Jeśli chcemy aby poczta głosowa zgłaszała się kiedy ktoś ma wyłączony telefon musimy w regułach [dundiextens] dopisać każdy numer zarejestrowany w sip.conf w następujacy sposób:

[dundiextens]

exten => 101,1,Dial(SIP/${EXTEN},30) same => n,Voicemail(${EXTEN}@voicemail) same => n,Hangup()

exten => 102,1,Dial(SIP/${EXTEN},30) same => n,Voicemail(${EXTEN}@voicemail) same => n,Hangup()

itd.....

gdzie zamiast 101 i 102 itd są numery telefonów użytkowników z sip.conf

Konfiguracja połączeń z innymi centralami HamNET.

Jak wspomniałem wcześniej naszą centrala możemy połączyć z innymi centralami w sieci HamNET przy pomocy DUNDI który łączy centrale wykorzystując protokół IAX. Konfiguracja składa się z 2 plików dundi.conf i iax.conf. (Polecam lekture: https://exain.wordpress.com/2010/07/03/asterisk-basics-and-load-balancing-via-dundi/ oraz http://blog.sinologic.net/wp-content/uploads/2007/08/DUNDi_So_Easy.pdf)

plik: iax.conf

W pliku tym zamiast adresu 44.128.32.1 wpisujemy adres IP 44-Net naszego serwera asterisk

[general] ; zamiast 44.128..32.1 adres IP serwera Asterisk bindaddr=44.128.32.1

[iaxuser] type=friend dbsecret=dundi/secret context=incomingdundi

plik: dundi.conf

W pliku tym zamiast adresu IP 44.128.32.1 wpisz adres IP 44-Net Twoje serwera asterisk oraz mac adres karty sieciowej która posiada adres IP Twojego serwera asterisk. Adres mac karty możesz sprawdzić poleceniem

sudo ifconfig

lub

sudo ip addr show

Jeśli Twój IP adres 44-Net nie jest na karcie fizycznej typu ethernet możesz wygenerować losowy MAC adres używając narzędzia: https://www.browserling.com/tools/random-mac . Ważne jest aby w sieci central nie trafił się taki sam Entityid

[general] ; Wpisz IP adres server asterisk bindaddr=44.128.32.1 ; wpisac zamiast xx:xx:xx:xx:xx:xx mac adres z adresu karty na ktorej IP jest adres asterisk entityid=xx:xx:xx:xx:xx:xx ; wpisz swoij adres kontaktowy email=sp2abc@sp2abc.ampr.org ; autokill=yes country=PL department=HAMNET-VoIP locality=Poland organization=pl.ampr.org phone=+48 port=4520 cachetime=5 ttl=5

[mappings] ; zamiast 44.128.32.1 wpisac adres IP serwera Asterisk priv => dundiextens,0,IAX2,iaxuser:${SECRET}@44.128.32.1/${NUMBER},nopartial

Plik dundi.conf zawiera także definicje centrali z którymi nasza centrala ma linki. Zalecane jest maksymalnie do 4 central definiowanie. Poniżej przykład definicje linku do centrali SP2PMK Pamiętaj żeby wpisywać definicje po wcześniejszym ustalaniu z administratorem danej centrali o linkowaniu gdyż link zadziała kiedy w obu centralach będą wpisy w pliku dundi.conf w przeciwnym wypadku link nie będzie działał. Wpisy centrala są takie same i musimy otrzymać od centrali do której chcemy mieć link adres IP (wpisujemy w host=) hasło do linku ( w polu secret=) oraz ID centrali bazujący na mac adresie centrali (wpisujemy w na początku definicji linku w kwadratowych nawiasach [xx:xx:xx:xx:xx:xx] )

; Link do centrali SP2PMK Torun [00:0a:5e:3e:b0:2d] host=44.165.32.1 ; haslo uzgodnione z druga strona secret=hamvoip include=priv auth=md5 model=symmetric permit=priv qualify=yes

Kilka praktycznych komend w konsoli Asterisk.

Połączanie do konsoli asterisk:

asterisk -r vvvvvvvvvvvvvvvvvv

dundi show peers pokazuj status połączonych centrali

sip show peers pokazuje status podłączonych użytkowników

core show codes core show translation pokazuje status kodeków

Jeśli chcemy sprawdzić czy dany numer 747130428133 jest dostępny w sieci centrali piszemy np polecenie: dundi lookup 747130428133@priv

sp2pmk*CLI> dundi lookup 747130428133@priv

  1. 0 IAX2/iaxuser:FMCRI3ENKDJyPwsYvj2Idg==@44.165.51.1/747130428133 (EXISTS) from 00:13:3b:00:04:e1, expires in 50 s

widzimy że numer jest osiągalny na centrali o adresie IP 44.165.51.1. Jeśli dany numer nie jest osiągalny na żadnej z central to wynik zwrotny zapytania będzie:

sp2pmk*CLI> dundi lookup 747130629333@priv DUNDi lookup returned no results. DUNDi lookup completed in 597 ms

W przypadku diagnozowania problemów można w konsoli asterisk włączyć opcje: sip set debug on i na konsoli będziemy mieli szczegółowe informacje z tego co się dzieje na poziomie sieciowym protokołu SIP. Wyłączenie tego trybu poleceniem: sip set debug off

Dystrybucja asterisk nie zawiera kodeków G729 i G723 które są dostępne w telefonach CISCO. Możemy dograć te kodeki pobierając je do danej wersji asterisk i typu procesora który mamy z strony: http://asterisk.hosting.lv/

Pobrane kodeki należy wgrać do katalogu /usr/lib/asterisk/modules/ pod nazywy: codec_g729.so codec_g723.so

Jeśli chcemy aby telefon użytkownika korzystała z tego kodeka a nie z innych należy w definicji konta użytkownika wpisać:

disallow=all allow=g729

Można zrobić sobie monitorowanie status asterisk przy pomocy skryptów dostępnych na stronie: https://github.com/rwth-afu/dundicrawler opis https://www.afu.rwth-aachen.de/projekte/hamnet/infos-fuer-betreiber/dundi-netzuebersicht#english

Do połączeń w ramach technologi VoIP w sieci hamNET możemy używać tanich telefonów VoIP np CISCO C7940 (cena na Allegro od 20 do 50 zł) lub C7941, C7942, C7960 itp które mają obsługę SIP

lub programowe telefony VoIP, jednym z najbardziej popularnych programów jest PHONER.

Możemy skorzystać też z popularnego programu Jitsi https://download.jitsi.org/jitsi/ który oprócz konta SIP ma możliwości używania go jako komunkatora JABBER'a ( w sieci HamNET są dostępne serwery JABBER na bazie PROSODY)

Typowa konfiguracja użytkownika w sieci HamNET wygląda:

Warto zwrócić uwagę jeśli nasz telefon VoIP jest w sieci domowej tzn ma adres inny niż 44-NET należy w firewall ustawić przekierowanie portów VoIP na IP telefonu tzn

  • UDP 5060
  • UDP 16384-32766

Przykładowa konfiguracja firewall w OpenWRT routerze w pliku /etc/config/firewall dla adresu IP telefonu 192.168.1.125 a adres IP 44.165.2.35 to nasz adres 44-Net:

config redirect option name VoIP-SIP option src wlan option dest lan option proto udp option src_dport 5060 option dest_port 5060 option src_dip 44.165.2.35 option dest_ip 192.168.1.125

config redirect option name VoIP-RTP option src wlan option dest lan option proto udp option src_dport 16384-32766 option dest_port 16384-32766 option src_dip 44.165.2.35 option dest_ip 192.168.1.125

W linux gdzie eth0 nazwa portu przez który wychodzi nasze połączenie do sieci 44-Net:

iptables -t nat -A PREROUTING -p udp -i eth0 -d 44.165.2.35 –dport 5060 -j DNAT –to 192.168.1.125:5060 iptables -t nat -A PREROUTING -p udp -i eth0 -d 44.165.2.35 –dport 16384:32766 -j DNAT –to 192.168.1.125:16384-32766

W rozwiązywaniu różnych problemów z NAT można spróbować użyć: http://siproxd.sourceforge.net/

Na koniec dla tych co chcą pogłębić swoją wiedzę o Asteriks polecam książkę: Asterisk - The Definitive Guide

Poprzedni Post Następny Post