Microsoft Lync 2010 i Asterisk w jednym stali domu.

Zawsze uważałem że VoIP oraz nadanie kobietom praw wyborczych były jednymi z największych błędów ludzkości. Jednak od ostatnich paru dni zaczynam w swój osąd powątpiewać. Wyzwolenie kobiet było oczywistym błędem, natomiast VoIP jakoś tak mnie bardziej do siebie przekonał.

Zawsze VoIP (jak również wyzwolone kobiety) kojarzył mi się z brzydkim interfejsem, gównianą jakością połączenia, oraz wiecznym restartowanie kapryśnej bramki, lub klienta, oraz zamartwianiem się czy gdzieś po drodze nasz głos nie odbija się od NAT-u, PAT-u, kotu… Generalnie droga przez mękę i OpenSource w najmroczniejszym wydaniu.

Ostatnio jednak mimo mojej nieskrywanej niechęci do technologii VoIP musiałem się w temat wgryźć. Plan był taki – Freeconet + Asterisk + Microsoft Lync 2010, a wszystko powerd by VMware vShpere.

Postanowiłem podzielić ten artykuł na dwa etapy, pierwszy to Freeconet i Asterisk, oraz struktura VMware drugi to Microsoft Lync 2010. Tak wiec zacznijmy od minimalnych wymagań i zasad działania każdego z elementów układanki.

Przezornie chciałbym uciąć wszystkie dywagacje na temat który operator VoIP jest super a który be tak wiec przyjmijmy że jestem posiadaczem fabryki w Chinach robiącej toksyczne zabawki. Jestem zamożny. Kasa nie gra roli, a Freeconet ma taką śmieszną nazwę że wybrałem go z kaprysu. Tak wiec jeżeli macie innego operatora z którym jesteście jakoś emocjonalnie związani i udało wam się go pożenić z Asteriskiem to może on zastąpić Freeconet.

Wymagania sprzętowe tak naprawdę generuje oprogramowanie Microsofu. Przy założeniu że w lokalizacji mamy 50 osób to Asteriska można swobodnie postawić na maszynie z jednym procesorem i 256 mb ramu. Natomiast Mincrosoft Lync generuje zdecydowanie większe wymagania… Zależą one od topologii jaką sobie wybierzemy. Jeżeli założymy sobie że telefony mają być obsługiwane tylko wewnątrz organizacji, ewentualnie przez VPN to uda nam się upchnąć wszystko na jednej maszynie. Jednak gdy okaże się że zdecydujemy dać np. dla przedstawicieli handlowych możliwość  dzwonienia bez łączenia się przez VPN będziemy potrzebować jeszcze kolejnego serwera. Wymagania dla każdej wybranej topologii są bardzo szczegółowo opisane na stronach MS. Ja zdecydowałem się na dwa serwery czyli główny Lync Server z Mediation Server, oraz Edge Server do dostępu zdalnego. Przy założeniu 50 użytkowników można przyjąć że każdy z serwerów będzie potrzebować po 8GB ram i 4 procki przynajmniej 2GHz. Dodatkowo dla serwera pełniącego rolę Edge będzie trzeba zaplanować 2 karty sieciowe. Do instalacji i normalnego działania wymagane jest Active Directory i dobrze żeby gdzieś też w sieci dział Exchange. Reasumując potrzebujemy:

  • 1 maszynę dla Asteriska – 256MB RAM i 1 procek, 8 GB dysku powinno bez problemu wystarczyć, zainstalujemy na nim Ubuntu 10.4.2 x64.
  • 1 maszynę dla Lync Server – 8GB RAM i 4 procki, tak z 80 GB dysku (chyba że będziecie chcieli nagrywać rozmowy, ale to inna bajka), zainstalujemy na nim Microsoft Server 2008R2
  • 1 maszynę dla Lync Edge Server – 8GB RAM i 4 procki, 80GB HDD

Kiedy już zainstalujecie całe to ustrojstwo przejdziemy do konfiguracji sieci. Schemat poniżej przedstawia koncepcję. Nie jest ona jakaś specjalnie odkrywcza, każdy w końcu ma u siebie sieć podzieloną na strefy… a jak nie, to lepiej niech szybko to zrobi i nigdy pod żadnym pozorem niech się nie przyznaje że było inaczej 😉

Mamy tu strefę DMZ dla serwerów niezaufanych zewnętrznych dostępnych w jakiś sposób ze świata, strefę DMZ dla serwerów zaufanych wewnętrznych do których jest wjazd tylko od środka organizacji, oraz co może dziwić strefę specjalnie dla Asteriska. To tylko propozycja do rozważenia, którą jednak warto wziąć pod uwagę bo Asterisk jest źródłem wszelkiej maści dziur bezpieczeństwa i w każdej chwili może stać się wolną przepustką do naszej sieci. Jeżeli jednak uważacie że to paranoja, rozumiem Was i możecie go swobodnie umieścić w DMZ zewnętrznym.

Konfiguracja Asteriska jest bajecznie prosta. Oczywiście, można ją zmieniać i przystosowywać do swoich potrzeb, ja przedstawię tu absolutne minimum. Tak wiec instalujemy Asteriska tym poleceniem:

apt-get install asterisk

Przechodzimy do pliku /etc/asterisk/conf/sip.conf i wpisujemy tam:

[general]
context=default                ; Default context for incoming calls
allowguest=no
allowoverlap=no                ; Disable overlap dialing support. (Default is yes)
udpbindaddr=0.0.0.0            ; IP address to bind UDP listen socket to (0.0.0.0 binds to all)
bindport=5060
bindaddr=0.0.0.0
tcpenable=yes                  ; Enable server for incoming TCP connections (default is no)
tcpbindaddr=0.0.0.0            ; IP address for TCP server to bind to (0.0.0.0 binds to all interfaces)
srvlookup=yes                  ; Enable DNS SRV lookups on outbound calls
notifyhold = yes               ; Notify subscriptions on HOLD state (default: no)
nat=yes
defaultexpiry=60
localnet=tu.wpisujemy.lokalną.zaufaną/podsieć (np. 10.1.1.1/24)
externip= tu.wpisujemy.zewnętrzny.ip
register => cmentarnalpolka:zajebistehaslo@sip.freeconet.pl/freeconet-in

[lync-trunk]                   ; Our Lync trunk
type=friend
port=5068                      ; This is the default Lync Server TCP listening port
host=adres.ip.serwera.lync               ; This should be the IP address of your Lync Server
dtmfmode=rfc2833
context=from-lync
qualify=yes
transport=tcp,udp

[freeconet_in1]
type=peer
fromdomain=sip.freeconet.pl
port=5060
context=freeconet
host=213.218.116.65
insecure=no

[freeconet_in2]
type=peer
fromdomain=sip.freeconet.pl
port=5060
context=freeconet
host=213.218.116.66
insecure=no

[freeconet_out]
type=peer
username=cmentarnalpolka
secret=zajebistehaslo
fromdomain=sip.freeconet.pl
port=5060
context=freeconet
host=213.218.116.66
port=5060
outboundproxy=sip.freeconet.pl
outboundproxyport=5060
insecure=no

Myślę że nie trzeba tu wiele wyjaśniać – ustawiamy serwery Freeconetu oraz naszego Lync’a, kolejki do których mają wpadać przychodzące i wychodzące wiadomości. Zdecydowanie ciekawszy jest plik /etc/asterisk/extensions.conf:

[general]
static=yes
writeprotect=no

[globals]

[default]
exten=>_99XX,1,Dial(SIP/lync-trunk/${EXTEN},50)
exten=>_99XX,n,hangup()

[from-lync]
exten=>_+48.,1,SIPAddHeader(X-Fid: 4885666${CALLERID(num)})   ; Tu są małe czary, które sprawiają że jak dzwonimy to widać nasz numer a nie „Zastrzeżony”
exten=>_+48.,2,Set(CALLERID(num)=4885666${CALLERID(num)})   ; W poprzedniej linii pobieraliśmy numer tutaj go wysyłamy w nagłówku SIP
exten=>_+48.,3,Dial(SIP/${EXTEN}@freeconet_out,50)
exten=>_+48.,n,hangup()

[freeconet]
exten=>freeconet-in,1,Set(TOHDR=${SIP_HEADER(To)})
exten=>freeconet-in,2,GotoIf($[„${REGEX(„0856669900″ ${TOHDR})}” = „1”]?internal,9900,1)   ; Tu ustawiamy nasz numer tel tak aby był kierowany do Lynca
exten=>freeconet-in,n,hangup()

[internal]
exten=>_99XX,1,Dial(SIP/lync-trunk/${EXTEN},50)
exten=>_99XX,n,hangup()

Plik ten jest odpowiedzialny za kontrolowanie całego ruchu który wchodzi i wychodzi z naszego serwera, co w jaką kolejkę ma wpaść i kto znajduje się pod jakim numerem telefonu. Kiedy już przystosujecie do swoich potrzeb tą konfigurację wypadało by przeładować serwer, robi się to poleceniem:

/etc/init.d/asterisk restart

Od strony Asteriska to tyle. W następnym artykule postawimy serwery Lynca… z nimi będzie zdecydowanie więcej zabawy.

About the author

Bloger i niezależny konsultant z wieloletnim doświadczeniem w branży IT. Specjalizujący się w wirtualizacji i cloud computingu. Posiada tytuły MCP, MCTS, VCP oraz VMware vExpert.
5 Responses
  1. Witam,
    Pożarłem ten artykuł, bardzo apetycznie się zaczęło … i szukam drugiej części? Czyżby temat zdechł?? Bo nie widzę drugiej części.
    Pozdrawiam

  2. ml

    Właśnie nie wiedziałem czy kogoś zainteresuje ten temat… czekałem na jakiś odzew 🙂 Skoro znalazł się ktoś zainteresowany to postaram się napisać drugą część. Niedługo się pojawi 🙂

  3. Czy w tej konfiguracji Asterisk robi tylko za gateway/proxy czy będzie pełnił jeszcze jakąś inną rolę?

    Czy Lync nie może bezpośrednio łączyć się do Freeconet?

  4. ml

    Generalnie wtedy gdy instalowałem tą infrastrukturę freeconet nie świadczył usługi dla Lynca i trzeba było go żenić przez Asteriksa jako gateway/proxy… i tak Asterisk spełniać będzie tylko taką funkcję 🙂

  5. cześć, nie planujesz wrócić do Lynca i napisać drugą część tego artykułu na temat konfiguracji Lynca z asteriskiemm po stronie Lynca?
    Mnie by to bardzo interesowało, bo brakuje takich artykułów pokazujących jak poprawnie skonfigurować lynca dla niewielkiej grupy użytkowników bez kupowania dodatkowego hard-PBX. Swoją drogą teraz można zintegrować Exchange w ramach office365 z Lynciem (on premise). Byłoby to interesujące, gdyby postawić Lynca na prywatnej chmurze np Azure teraz daje możliwość instalowania własnej konfiguracji Windows Server. Co o tym myślisz?

Leave a Reply