marți, 25 decembrie 2012

Asterisk si configurarea automata a telefoanelor SIP Cisco

 Tema pe care am studiat-o de curand a fost sa configurez sistemul Asterisk astfel incat telefoanele sa isi ia configuratia in mod automat de la acesta. Ingredientele sunt: Asterisk 1.8 instalat pe Debian 6, conectat in Internet, sa presupunem ca are adresa 200.100.50.1. Telefoanele IP sunt conectate intr-un LAN privat, in care se gaseste un server DHCP (ruleaza pe un alt Debian 6); un telefon este Cisco SPA303 si altul Cisco SPA525G.



Telefoanele obtin adresa IP de la un server DHCP; tot pe acesta l-am configurat sa trimita telefoanelor si serverul de unde isi pot lua fisierele de configurare. Configuratia din dhcpd.conf este mai jos:
subnet 192.168.1.0 netmask 255.255.255.0 {
        range 192.168.1.100 192.168.1.107;
        option subnet-mask 255.255.255.0;
        option routers 192.168.1.1;
        option broadcast-address 192.168.1.255;
        option tftp-server-name  "tftp://
200.100.50.1/srv/tftp/spa$PSN.cfg";
}

spa$PSN.cfg se traduce prin "spa303.cfg" pentru telefonul Cisco SPA303 si respectiv "spa525G.cfg" pentru telefonul Cisco 525G. Nu uitati sa scrieti calea absoluta spre aceste fisiere, ca mai sus, mie mi-a luat ceva timp si nervi pana mi-am dat seama.

Pe serverul pe care ruleaza Asterisk avem instalat si un server TFTP care are calea absoluta "/srv/tftp" si in care am pus doua fisiere, cate unul pentru fiecare model de telefon. Continutul lor este acelasi si anume:


<flat-profile>
 <Resync_On_Reset>Yes</Resync_On_Reset>
 <Resync_Periodic>900</Resync_Periodic>
 <Profile_Rule>tftp://
200.100.50.1/srv/tftp/spa$MA.xml</Profile_Rule>
</flat-profile>



Practic, la fiecare 15 minute (900 secunde) telefonul isi va lua fisierul propriu de configurare, in format XML, de la serverul TFTP 200.100.50.1. In concluzie, daca aveti n telefoane model SPA303, va este necesar un singur fisier cu extensia "cfg".
spa$MAC.xml se traduce prin spa5475d02aadc6.xml daca adresa MAC a telefonului este 5475D02AADC6. Atentie, numele fisierului XML are litere mici in loc de literele mari din adresa MAC. Aici am mai pierdut ceva timp si nervi pana mi-am dat seama.
Dupa ce telefonul ia prin TFTP fisierul cu extensia "cfg" (de mai sus), dupa 15 minute incearca sa isi obtina fisierul propriu de configurare. In concluzie, daca aveti m telefoane este necesar sa aveti m fisiere cu extensia XML.
Eu am configurat o singura extensie (mai jos cel cu extensia 300 cu parola de autenficare 0003) pe fiecare telefon (desi pe fiecare se pot configura mai multe extensii) si astfel am obtinut fisierul XML de forma:
<flat-profile>
<Time_Zone group="Regional/Time">GMT+02:00</Time_Zone>
<Extension_1_ group="Phone/Line_Key_1">1</Extension_1_>
<Short_Name_1_ group="Phone/Line_Key_1">$USER</Short_Name_1_>
<Share_Call_Appearance_1_ group="Phone/Line_Key_1">private</Share_Call_Appearance_1_>
<Extended_Function_1_ group="Phone/Line_Key_1"/>
<Extension_2_ group="Phone/Line_Key_2">Disabled</Extension_2_>
<Short_Name_2_ group="Phone/Line_Key_2">$USER</Short_Name_2_>
<Share_Call_Appearance_2_ group="Phone/Line_Key_2">private</Share_Call_Appearance_2_>
<Extended_Function_2_ group="Phone/Line_Key_2"/>
<Extension_3_ group="Phone/Line_Key_3">Disabled</Extension_3_>
<Short_Name_3_ group="Phone/Line_Key_3">$USER</Short_Name_3_>
<Share_Call_Appearance_3_ group="Phone/Line_Key_3">private</Share_Call_Appearance_3_>
<Extended_Function_3_ group="Phone/Line_Key_3"/>
<Extension_4_ group="Phone/Line_Key_4">Disabled</Extension_4_>
<Short_Name_4_ group="Phone/Line_Key_4">$USER</Short_Name_4_>
<Share_Call_Appearance_4_ group="Phone/Line_Key_4">private</Share_Call_Appearance_4_>
<Extended_Function_4_ group="Phone/Line_Key_4"/>
<Extension_5_ group="Phone/Line_Key_5">Disabled</Extension_5_>
<Short_Name_5_ group="Phone/Line_Key_5">$USER</Short_Name_5_>
<Share_Call_Appearance_5_ group="Phone/Line_Key_5">private</Share_Call_Appearance_5_>
<Extended_Function_5_ group="Phone/Line_Key_5"/>
<Proxy_1_ group="Ext_1/Proxy_and_Registration">
200.100.50.1</Proxy_1_>
<User_ID_1_ group="Ext_1/Subscriber_Information">
300</User_ID_1_>
<Password_1_ group="Ext_1/Subscriber_Information">
0003</Password_1_>
<Preferred_Codec_1_ group="Ext_1/Audio_Configuration">G711a</Preferred_Codec_1_>
<Second_Preferred_Codec_1_ group="Ext_1/Audio_Configuration">G711u</Second_Preferred_Codec_1_>
<Dial_Plan_1_ group="Ext_1/Dial_Plan">(112S0|xxx.)</Dial_Plan_1_>
<Time_Format group="User/Supplementary_Services">24hr</Time_Format>
<Date_Format group="User/Supplementary_Services">day/month</Date_Format>
</flat-profile>



In fisierul "/etc/asterisk/sip.conf" avem urmatoarea configuratie pentru aceasta extensie



[netdesign](!)
context=netdesign
disallow=all
allow=alaw
type=friend
host=dynamic
nat=yes
qualify=2000
qualifyfreq=300
canreinvite=no
sendrpid=pai

[
300](netdesign)
secret=
0003
callerid=sales <300>

Modificand continutul fisierului cu extensia XML se pot configura telefoanele fara sa accesati pagina lor web de administrare.
Dupa cum spuneam si alta data, Linux ne ofera posibilitati de dezvoltare profesionala mult peste alte sisteme de operare. Va indemn sa va incepeti sa lucrati in acest sistem de operare, orice distributie va este accesibila/comoda.
Craciun fericit si mult spor la invatat!

miercuri, 12 decembrie 2012

Static Virtual Tunnel Interface with IPsec and centralized Internet access


De  multe ori incerc sa le spun oamenilor sa accepte si alte metode de configurare a tunelelor IPSec decat metoda clasica (totodata si invechita), cel putin pe routerele Cisco. Iata si problema:

calculatoarele din reteaua 192.168.1/24 trebuie sa comunice cu cele din reteaua 192.168.2/24, dar totodata trebuie sa aibe acces la Internet tot prin routerul de la HQ ( cel in care se conecteaza LAN-ul 192.168.2/24 ) pentru administrarea facila a politicilor de acces (filtrari de pachete, de porturi TCP/UDP etc). Daca routerul de la sediul central se configureaza prin metoda clasica apar problemele, anume pachetele din LAN 192.168.1/24 ajung, dupa ce sunt decapsulate din tunelul IPSec, pe o interfata de tip 'nat outside' in loc de una 'nat inside'. Rezolvarea devine simpla daca in loc de IPSec crypto-map se configureaza un tunel pe care il definim ca 'nat inside'

Am presupus ca routerul Branch nu este in administrarea aceluiasi admin ca cel de la sediul central, de ex. poate fi administrat de un ISP si din diverse motive configuratia este facuta in mod clasic



Configuratia IPSec de pe routerul HQ

interface <intf_wan>
 ip address <ip_public> <sm>
 ip nat outside

interface <intf_lan>
 ip address 192.168.2.1 255.255.255.0
 ip nat inside
 
crypto isakmp key <ceva_strong> address <ip_public_router_Branch>
crypto isakmp policy <index>
 authentication pre-share
  
crypto ipsec transform-set <id_set> esp-aes esp-sha-hmac
crypto ipsec profile <id_profile>
 set transform-set <id_set>

interface Tunnel <index>
 ip unnumbered  <intf_wan>
 tunnel source <intf_wan>
 tunnel destination <ip_public_router_Branch>
 tunnel mode ipsec ipv4
 tunnel protection ipsec profile <id_profile>
 ip nat inside

ip route 192.168.1.0 255.255.255.0 Tunnel <index> name <lan_Branch>
ip route 0.0.0.0 0.0.0.0 <intf_wan> name <toInet>

ip access-list extended NAT
 deny ip 192.168.2.0 0.0.0.255 192.168.1.0 0.0.0.255
 permit ip 192.168.1.0 0.0.0.255 any
 permit ip 192.168.2.0 0.0.0.255 any
 
ip nat inside source list NAT interface <intf_wan> overload

show crypto isakmp sa
show crypto ipsec sa

Obs: Comanda 'ip unnumbered  ...' se foloseste pentru ca interfata sa imprumute adresa IP a interfetei introdusa ca parametru al comenzii, efectul consta in aparitia in tabela de rutare a unei interfete fara ca aceasta sa aibe adresa IP proprie. In contextul nostru, routerul de la Branch are alt admin si acesta nu configureaza tunele, prin urmare nu poti agrea o adresa IP dedicata pentru tunel.

Configuratia IPSec de pe routerul Branch

interface <intf_wan>
 ip address <ip_public> <sm>
 crypto map <ipsec_map>
 
interface <intf_lan>
 ip address 192.168.1.1 255.255.255.0 

crypto isakmp key <ceva_strong> address <ip_public_router_HQ>
crypto isakmp policy <index>
 authentication pre-share

crypto ipsec transform-set <id_set> esp-aes esp-sha-hmac

ip access-list extended <ipsec_acl>
 permit ip  192.168.1.0 0.0.0.255 any

crypto map <ipsec_map> <index> ipsec-isakmp
 set peer <ip_public_router_HQ>
 set transform-set <id_set>
 match address <ipsec_acl>

ip route 0.0.0.0 0.0.0.0 <intf_wan> name <toInet>

show crypto isakmp sa
show crypto ipsec sa