VoIP Recept

= Egy lehetséges Asterisk recept, avagy hozzávalók sok személyre =

Debain Alaprendszer
Először is rakjunk fel egy Debian (Lenny) alap install


 * Érdemes megfontolni a HW környezet kialakításánál:
 * redundáns tápegység
 * két hálózati kártya (redundáns hálózati kapcsolat miatt)
 * két merevlemez (raid miatt)

Javasolt Particionálás (RAID 1 + LVM)
két partíció(software raid):
 * 1) az egyik a /boot-nak 300-400M
 * 2) a másik raid azaz többi pedig az LVM és aztán ezt már lehet tovább szabdalni.... erre lehet tenni a swap-et.

Alap install után érdemes a nem kellő csomagokat törölni és netfilter(iptables)-el megvédeni a gépet
például
 * NETFILTER(iptables) védelmét a számítógépnek mindenki alakítsa ki saját szája íze szerint.
 * ami nem kell azt szedjük ne hallgasson semmi feleslegesen

aptitude purge pidentd,nfs-common,portmap aptitude install ssh

Redundáns hálózat azaz hálózati interface bonding beállítása
Kép:debian_bonding.png

Kép:ip_softswitch.png

aptitude install vlan ifenslave-2.6
 * Csomagok installálása

alias bond0 bonding options bonding mode=active-backup updelay=4000 downdelay=1 miimon=10 primary=eth0
 * cat > /etc/modprobe.d/bonding
 * Az /etc/network/interfaces file-t ezen minta alapján írjuk át.
 * Itt több vlan-ra van a példa de értelemszerűen, ha csak egy vlan van akkor csak a 10-es VLAN-t kell csak átírni a többit lehet törölni. Azért érdemes így csinálni még akkor is ha csak egy VLAN-unk van, mert bármikor később a több VLAN kezelése hasznos lehet.

auto lo iface lo inet loopback auto bond0 iface bond0 inet manual up ifconfig bond0 0.0.0.0 up       slaves eth1 eth0 auto vlan10 iface vlan10 inet static address 10.10.10.12 netmask 255.255.0.0 network 10.10.0.0 broadcast 10.10.255.255 vlan-raw-device bond0 gateway 10.10.0.1 # dns-* options are implemented by the resolvconf package, if installed dns-search voip.niif.hu       dns-nameservers 10.10.0.2 auto vlan20 iface vlan20 inet static address 10.20.10.12 netmask 255.255.0.0 network 10.20.0.0 broadcast 10.20.255.255 vlan-raw-device bond0 auto vlan30 iface vlan30 inet static address 10.30.10.12 netmask 255.255.0.0 network 10.30.0.0 broadcast 10.30.255.255 vlan-raw-device bond0 interface GigabitEthernet1/2 description eht0 switchport switchport trunk encapsulation dot1q switchport trunk allowed vlan 10,20,30 switchport mode trunk no ip address no cdp enable spanning-tree portfast trunk
 * 1) The loopback network interface
 * 1) The primary network interface
 * Ha a Másik oldal cisco eszköz akkor egy lehetséges minta konfiguráció.

Több ip címre STUN protokoll miatt mindenképp szükségünk lesz. Az STUN-hoz 2 darab ipv4 cím szükséges! Ha ezentúl külön ip címre akarjuk rakni a szolgáltatást akkor ezzel is számolnunk kell.
 * Több ip cím felhúzása egy interface-re:

auto eth0 iface eth0 inet static address 19.111.158.110 netmask 255.255.255.0 broadcast 19.111.158.255 gateway 19.111.158.1 post-up for last in `seq 111 114`; do ip addr add 19.111.158.$last/32 dev $IFACE; done || true

Ha már van alap OS-ünk redundáns tápunk/merevlemez/hálózatunk és ha mindezt le is teszteltük, akkor bele is kezdhetünk az érdemi telepítésekbe.

Ajánlott csomagok telepítése
aptitude update aptitude upgrade aptitude install atftpd dhcp3-server mysql-server mysql-client ntp aptitude install asterisk asterisk-config asterisk-mp3 asterisk-sounds-extra asterisk-sounds-main asterisk-mysql

dahdi dahdi_dummy
A dahdi_dummy-ra az időzítésekhez lehet szükség, bár vannak 1.6.x asteriskben több mindent tud időzítőként használni. Timer source-ra főleg a MeetMe alkalmazásnak és az IAX protokolnak van szüksége. aptitude install dahdi-source m-a a-i dahdi

További csomagok

 * Természetesen még ízlés szerint telpíthető
 * monitorozáshoz: nagios-nrpe-server,munin-node,munin-plugins-extra
 * mentéshez: bacula-fd ajánlott

NTP beállítása
Ezt a sort a /etc/ntp.conf-ban cseréljük le kedvenc lokális ntp szerverünkre. pl. server 172.20.0.1
 * 1) server ntp.your-provider.example

MySQL root jelszó beállítása
mysql root jelszó megváltoztatása mysqladmin -u root -p password titok A kényelem miatt, hogy ne kelljen begépelnünk a a jelszót: cat > /root/.my.cnf [client] user=root password=titok

Hálózati kialakítás / konfiguráció
REINVITE vagy No REINVITE ez itt a kérdés? Mindkettőnek megvannak az előnyei és hátrányai.

Én a konfigurációkban mindenütt a 172.20.0.0/16 tartományt használom, de mindenkit bátorítanék aki csak megteheti, hogy használjon nyilvános címeket. Szűréssel könnyen csökkenthető a támadási felület és a media közvetlenül tud folyni. Azért is hogy maga a media reinvite esetén ne menjen át szükségszerűen semmilyen NAT-on, vagy RTP media proxy-n ami bottleneck lehet és ha kiesik akkor visz magával a hívást. Persze a másik oldal, hogy a bottleneck csökkenti a támadási felületet. De a támadási felület jól konfigurált router ACL-el is elérhető, sőt ezt javaslom.

A példa itt most egy egyszerű sin topológiát használ.

Kép:voip_pleda.png

DHCP szerver
A DHCP szerver default configjához képest ezeket kell értelem szerűen megváltoztatni illetve a subnet részt hozzáadni.

option domain-name "tartomány.hu"; option domain-name-servers 193.6.10.1, 193.225.13.113;

authoritative;

subnet 172.20.0.0 netmask 255.255.0.0 { range 172.20.0.10 172.20.255.254; option routers 172.20.0.1; }

TFTP
A tftp a telefonok frissítésére és a konfigurációjuknak a mentésére szolgál. Az atftpd TFTP szerver a /var/lib/tftpboot könyvtárból szolgál ki, így minden konfigurációs állományt és firmware-t ebbe a jegyzékbe másolunk majd be. Érdemes a NETFILTER/(iptables) szabályokat úgy készíteni, hogy csak a helyi telefonok férhessenek hozzá.

Kis Takarítás
Először is mozgassuk el az összes példa konfigurációs file-t a saját home könyvtárunkba, és utána kezdjük el a minták fokozatos visszamásolgatását és átírását.

agents.conf asterisk.conf  extconfig.conf   features.conf  iax.conf	  modules.conf	    rtp.conf	     udptl.conf alsa.conf   cdr.conf	    extensions.ael   followme.conf  manager.conf  musiconhold.conf  sip.conf	     users.conf amd.conf    enum.conf	    extensions.conf  http.conf	    manager.d	  res_snmp.conf     sip_notify.conf  voicemail.conf
 * másoljuk vissza a következő fileokat és a manager.d könyvtárt

cp /usr/share/doc/asterisk-mysql/examples/cdr_mysql.conf.sample /etc/asterisk/cdr_mysql.conf cp /usr/share/doc/asterisk-mysql/examples/res_mysql.conf.sample /etc/asterisk/res_mysql.conf

modules.conf
Ezután egy kis nyesegetéssel ilyen csinos formára hozzuk a modules.conf-ot
 * Asterisk configuration file
 * Module Loader configuration file
 * Module Loader configuration file
 * Module Loader configuration file

[modules] autoload=yes

load => res_musiconhold.so
 * load


 * noload

noload => chan_alsa.so noload => chan_oss.so noload => chan_capi.so noload => chan_skinny.so noload => chan_zap.so noload => chan_mgcp.so noload => chan_vpb.so noload => chan_phone.so noload => chan_gtalk.so noload => chan_modem.so noload => chan_modem_aopen.so noload => chan_modem_bestdata.so noload => chan_modem_i4l.so noload => res_jabber.so noload => res_odbc.so noload => res_smdi.so noload => res_config_odbc.so noload => res_config_pgsql.so noload => func_odbc.so noload => pbx_dundi.so noload => pbx_gtkconsole.so noload => pbx_kdeconsole.so noload => cdr_sqlite.so noload => cdr_custom.so noload => cdr_manager.so noload => cdr_pgsql.so noload => app_festival.so noload => app_zapras.so noload => app_zapbarge.so noload => app_zapscan.so noload => app_talkdetect.so noload => app_alarmreceiver.so noload => app_image.so noload => app_directory_odbc.so noload => app_voicemail_odbc.so noload => app_voicemail_imap.so noload => app_intercom.so [global]
 * chan
 * res
 * func
 * pbx
 * cdr
 * app
 * Module names listed in "global" section will have symbols globally
 * exported to modules loaded after them.

Indication
[general] country=hu
 * indication.conf

[hu] description = Hungary ringcadance = 1000,4000 dial = 425 busy = 425/500,0/500 ring = 440/1000,0/4000 ; is what I heard via an analogue GSM adaptor... congestion = 425/300,0/300 callwaiting = 425/40,0/1960 dialrecall = 350+440 record = 425/250,0/250 info = !950/330,!1400/330,!1800/330,!0/1000,!950/330,!1400/330,!1800/330,!0/1000,!950/330,!1400/330,!1800/330,!0/1000,0
 * ring = 440+480/2000,0/4000 ; is what I heard on an ISDN line... looks like NA ring.
 * Dialrecall not used in Hungary, use standard (using UK standard)
 * Record tone is not used in Hungary, use busy tone
 * Forrás: http://www.voip-info.org/wiki/view/Asterisk+indications+Hungary

Teszt eszközök
aptitude install sip-tester sipsak sofia-sip-bin

xml alapú config sip teszt eseteket lehet vele készíteni és tesztelni
 * SIPP

egyszerű sip teszt tool hívás tesztre, options üzenet küldésére
 * sipsak

NOKIA sip stack LGPL pl. dns feloldást lehet tesztelni vele /usr/bin/addrinfo /usr/bin/localinfo /usr/bin/sip-date /usr/bin/sip-dig /usr/bin/sip-options /usr/bin/stunc
 * sofia sip