Up&Running – Again

Dall’acquisto del server nuovo passato un sacco di tempo, moltissimi eventi mi hanno ulteriormente allontanato da esso…non per ultima, la “vaga” non-voglia di rimettermi a configurare mille cose.

…poi, inaspettatamente, ieri morto il server vecchio (e dire che l’avevo vantata da Gianfranco e Chiara, quella incredibile durata…).

In una notte di lavoro ho rimesso in funzione miracolosamente TUTTO…7 VM, ognuna con un compito quanto piu’ specifico possibile, tutte con ArchLinux (il mio ultimo amore).

Ho colto l’occasione per sistemare il sistema voip (dopo il passaggio alla Voice VLAN avvenuto ad ottobre circa).

Adesso asterisk sfrutta mysql (Asterisk Realtime) per buona parte della configurazione “dinamica” (peering, dialplan), i telefoni Cisco hanno il mio nuovo loghetto :P .

…si, decisamente non un post “dal cuore romantico” :)

 

Iniziano gli esperimenti con Xen

Finalmente, dopo qualche perplessit?, ieri ho montato il nuovo “futuro” serverino di casa. Hw di tutto rispetto:

  • Processore Intel Core 2 Quad Q6600 (VT)
  • 8Gb di Ram
  • 2×160 Gb Maxtor HDD (questi avevo…)
  • MoBo Asus P5K/EPU

Ieri ho installato Xen Server 5.5 ed ora sono alle prese con la prima guest machine (archlinux), cui poi verranno affiancate altre 8 macchine…bello sforzo !

Vediamo come va a finire :)

 

Buon Natale 2009

HappyHolydays

Buon Natale a tutti!

P.S.: L’immagine non mia, l’ho presa dal blog di Marco Rizzi

 

VLAN Linux Trunking

Oggi ho deciso di sperimentare linux come vlan router, collegando una scheda di rete ad una trunking port di un Catalyst 2950. L’esperimento ha dato ottimi frutti, permettendomi di pensare a modi interessanti per implementare sicurezza L2 nella mia rete casalinga.

Linux Kernel & Software

Dal punto di vista di linux, importante aver caricato il modulo 8021q mediante il solito comando


modprobe 8021q

In questo modo, la nostra interfaccia sar? in grado di trattare i 4 bytes in eccesso dell’incapsulazione IEEE 802.1Q. Il secondo passo consiste nell’installare la suite iproute2 e vconfig. La prima l’interfaccia “sostitutiva” di ifconfig allo stack ip di linux, mentre il secondo un programma che permette di gestire le vlan configurate.

Per permettere il routing, inoltre necessario permettere il packet forwarding con il comando


echo 1 > /proc/sys/net/ipv4/conf/all/forwarding

Linux Configuration

Nel mio caso, la eth0 connessa alla trunk port del Catalyst, su di lei andranno configurate le subinterfaces. La eth0 non dovr? avere alcun ip. Da essa verranno derivate le subinterfaces che gestiranno le vlans. Ipotizziamo di creare le vlan 2,3,4 (la vlan 1 presente di default in ogni switch).


[root@quasher ashura]# vconfig add eth0 2
Added VLAN with VID == 2 to IF -:eth0:-
[root@quasher ashura]# vconfig add eth0 3
Added VLAN with VID == 3 to IF -:eth0:-
[root@quasher ashura]# vconfig add eth0 4
Added VLAN with VID == 4 to IF -:eth0:-

A questo punto avremo la possibilit? di vedere le nuove interfacce:


2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000 link/ether 00:1f:c6:00:00:fe brd ff:ff:ff:ff:ff:ff
4: eth0.2@eth0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN link/ether 00:1f:c6:00:00:fe brd ff:ff:ff:ff:ff:ff
5: eth0.3@eth0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN link/ether 00:1f:c6:00:00:fe brd ff:ff:ff:ff:ff:ff
6: eth0.4@eth0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN link/ether 00:1f:c6:00:00:fe brd ff:ff:ff:ff:ff:ff

Tutte quante le interfacce virtuali sono DOWN, attiviamole e diamo loro degli ip:


[root@quasher ashura]# ip addr add 192.168.4.1/29 dev eth0.2
[root@quasher ashura]# ip addr add 192.168.4.9/29 dev eth0.3
[root@quasher ashura]# ip addr add 192.168.4.17/29 dev eth0.4


[root@quasher ashura]# ip link set eth0.2 up
[root@quasher ashura]# ip link set eth0.3 up
[root@quasher ashura]# ip link set eth0.4 up

Adesso abbiamo le nostre interfacce up e con ip delle relative subnets.

Cisco Catalyst configuration

Sullo switch sufficiente mettere la porta connessa a linux in trunking, definire le vlans ed eventuale security, configurare le access ports in portfast ed appartenenti alle relative vlans.

Non ho il supporto a ISL, ma non credo che sia implementato in linux, quindi converrebbe sempre utilizzare


encapsulation dot1q

nella trunking interface dello switch.

 

Cisco IP Phone 7940 con Asterisk

Nuova aquisizione in casa: due splendenti telefoni voip cisco 7940 che andranno ad aumentare il mio desiderio di voip domestico integrato :D

Appena arrivati, la domanda stata ovvia: come farli andare? Un rapido giro al sito cisco, seguito da uno su google e sono riuscito ad arrivare ad una soluzione.

Fase 1: Firmware

I telefoni Cisco 7940 possono operare in due modalit?: SCCP (o Skinny protocol) nel caso figli di CUCM o SIP nel caso di altri centralini. Innanzitutto bisogna prendere il Firmware adeguato per il telefono (serve l’abbonamento Cisco Smart Net o simili).

L’archivio comprender?:? (solo i files per noi vitali)

  • P0S3-8-12-00.loads
  • P0S3-8-12-00.sb2
  • P003-8-12-00.bin
  • P003-8-12-00.sbn
  • OS79XX.TXT

Nel mio caso, ho dovuto usare il firmware P0S, ossia quello per il protocollo SIP (P00 Skinny).

Fase 2: Server DHCP

Questa fase piuttosto semplice, dato che gi? utilizzo ISC Dhcpd per l’autoconfigurazione di tutto quello che posso attaccare alla mia rete. Nel caso specifico, bisogna aggiungere le voci necessarie a far riconoscere ai telefoni l’indirizzo del server TFTP da usare per il provisioning di firmware e configurazione (nel mio caso, 10.0.1.1).

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
option option-150  code 150 = ip-address;
 
subnet 10.0.1.0 netmask 255.255.255.0 {
    option ntp-servers time.ien.it;
    option subnet-mask 255.255.255.0;
    option routers 10.0.1.1;
    option broadcast-address 10.0.1.255;
    option domain-name-servers 10.0.1.1;
    option ip-forwarding off;
    default-lease-time 86400;
    max-lease-time 86400;
    deny unknown-clients;
 
    next-server 10.0.1.1;
 
    range dynamic-bootp 10.0.1.1 10.0.1.254;
 
    host phone01 {
        hardware ethernet 00:AA:AA:AA:AA:AA;
        fixed-address 10.0.1.2;
    }
 
    host phone02 {
        hardware ethernet 00:AA:AA:AA:AA:AA;
        fixed-address 10.0.1.3;
    }
 
    host phone03 {
        hardware ethernet 00:AA:AA:AA:AA:AA;
        fixed-address 10.0.1.4;
    }
 
    host cisco7940-1 {
        hardware ethernet 00:AA:AA:AA:AA:AA;
        fixed-address 10.0.1.5;
    }
 
    host cisco7940-2 {
        hardware ethernet 00:AA:AA:AA:AA:AA;
        fixed-address 10.0.1.6;
    }
}

Fase 3: Server TFTP

Anche in questo caso, mi andata piuttosto bene, dato che gi? me lo trovo pronto e configurato per il backup della mia roba cisco. Nella fattispecie, ho configurato tftpd-hpa per esporre /var/tftpboot.

Qualunque sia la directory esposta, dovremmo copiarvi all’interno i files estratti dall’archivio del firmware e dovremmo aggiungervi anche i files di provisioning della configurazione:

  • SIPDefault.cnf (configurazione di default per i telefoni non specificati)
  • SIPMACADDRESS.cnf (per ogni telefono da configurare, sostituendo MACADDRESS con il mac del proprio telefono, senza separatore)

Il contenuto di SIPDefault.cnf (case sensitive, su linux…) il seguente

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
image_version: P0S3-8-12-00
proxy1_address: "10.0.1.1"            ; Can be dotted IP or FQDN
proxy2_address: ""              ; Can be dotted IP or FQDN
proxy3_address: ""              ; Can be dotted IP or FQDN
proxy4_address: ""              ; Can be dotted IP or FQDN
proxy5_address: ""              ; Can be dotted IP or FQDN
proxy6_address: ""              ; Can be dotted IP or FQDN
proxy_register: 1
messages_uri:   "1"
phone_password: "cisco" ; Limited to 31 characters (Default - cisco)
sntp_mode: unicast
sntp_server: "time.ien.it"
time_zone: "GMT" ; assuming you're in GMT
time_format_24hr: 1 ; to show the time in 24hour format
date_format: "Y/M/D"  ; format you would like the date in
dial_template: dialplan

In generale, qui basta modificare l’indirizzo dei vari proxy utilizzabili.

Contenuto di SIPMACADDRESS.cnf

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
# SIP Configuration Generic File (start)
 
# Proxy Server
proxy1_address: "10.0.1.1"
proxy2_address: "10.0.1.1"
proxy3_address: "10.0.0.129"
proxy4_address: "10.0.0.1"
proxy5_address: "10.0.0.1"
proxy6_address: "10.0.0.1"
 
# Line 1 Settings
line1_name: "1007"                     ; Line 1 Extension\User ID
line1_displayname: "1007"           ; Line 1 Display Name
line1_authname: "1007"         ; Line 1 Registration Authentication
line1_password: "password"         ; Line 1 Registration Password
 
# Line 2 Settings
line2_name: "1008"                          ; Line 2 Extension\User ID
line2_displayname: "1008"                   ; Line 2 Display Name
line2_authname: "1008"         ; Line 2 Registration Authentication
line2_password: "password"         ; Line 2 Registration Password
 
# Emergency Proxy info
proxy_emergency: ""
proxy_emergency_port: "5060"
 
# Backup Proxy info
proxy_backup: ""
proxy_backup_port: "5060"
 
# Outbound Proxy info
outbound_proxy: ""
outbound_proxy_port: "5060"
 
# NAT/Firewall Traversal
nat_enable: "1"
nat_address: ""
voip_control_port: "5060"
start_media_port: "16384"
end_media_port:  "32766"
nat_received_processing: "1"
 
# Phone Label (Text desired to be displayed in upper right corner)
phone_label: "Ash-terisk 2"            ; Has no effect on SIP messaging
 
#preferred_codec: "g711alaw"
 
# Time Zone phone will reside in
time_zone: "GMT"
 
# Telnet Level (enable or disable the ability to telnet into this phone
telnet_level: "1"      ; 0-Disabled (default), 1-Enabled, 2-Privileged
 
# Phone prompt/password for telnet/console session
phone_prompt: "Go Away"                              ; Telnet/Console Prompt
phone_password: "baco"                          ; Telnet/Console Password
 
# Enable_VAD (1-enabled, 0-disabled)
enable_vad: "0"
 
# Network Media Type (auto, full100, full10, half100, half10)
network_media_type: "auto"
user_info: phone
# URL for external Directory location
logo_url: "http://10.0.1.1/asterisk-tux.bmp"                    ; URL for branding logo to be used on phone display
 
# SIP Configuration Generic File (stop)

Questo conterr? attualmente TUTTA la reale configurazione offerta ai telefoni ed andr? modificata in accordo a quella che la nostra configurazione su asterisk.

 

Oh Mr Chuuuck

Rapidissimo passaggio solo per…?Oh Mr Chuuuck <—- YEAH!

In formato suoneria, leggerissimo!

Non potr? fare il pilota di caccia!!!

 

Linked!

Da oggi sono anche su Linkedin!

 

New rules!

E’ un bel p che non posto nulla di nuovo, ma ho delle motivazioni per questo :)

A maggio ho iniziato il mio processo di certificazione Cisco, studiando da solo, con la prima certificazione, CCENT…la certificazione Entry Level!

Adesso mi sto preparando per avanzare (anche se lentamente), lungo il percorso che mi interessa maggiormente…anche se sono indeciso tra voice e security…vedremo quale costa di meno :P

Inoltre, sto preparando alcuni articoli che riguardano i concetti coinvolti nella certificazione Cisco di base, spero possano aiutare qualcuno ;)

 

Gestione della chiamata in Asterisk

Questa volta il taglio “vagamente” tecnico, riporto infatti le informazioni per poter in qualche modo gestire lo stato di una chiamata con asterisk (intendo il DIALSTATUS).

E’ infatti buona regola definire in modo piu’ o meno grezzo il comportamento del nostro PBX all’insorgere di problemi. Il mio, in particolare, era di gestire lo stato CHANUNAVAIL, che si ha quando non possibile realizzare un canale Zap o si staturato il limite di chiamate concorrenti su un trunk sip/iax.

L’approccio semplice: successivamente alla chiamata DIAL(), prende valore la variabile $DIALSTATUS contenente, appunto uno dei seguenti:

  • CHANUNAVAIL
  • CONGESTION
  • NOANSWER
  • BUSY
  • ANSWER
  • CANCEL
  • DONTCALL
  • TORTURE
  • INVALIDARGS

Quindi, valorizzando $DIALSTATUS, possiamo sfruttare GOTO() per passare ad una nuova exten del nostro contesto, che contenga la logica per gestire l’evento.

Ecco il codice che uso io:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
[outbound]
exten => _9.,1,Dial(SIP/${EXTEN:1}@voip.eutelia.it)
exten => _9.,n,GOTO(ext-${DIALSTATUS},1);
 
[internal]
exten => _1XXX,1,Dial(SIP/1${EXTEN:1})
 
exten => 333,1,Set(CHANNEL(language)=it)
exten => 333,n,VoiceMailMain(1000@asheticmail)
 
exten => ext-BUSY,1,Busy()
exten => ext-CHANUNAVAIL,1,AGI(error_handler.php)
exten => ext-NOANSWER,1,Hangup()
exten => ext-CONGESTION,1,Congestion()
exten => ext-CANCEL,1,Hangup()
 
include => outbound

La spiegazione semplice.
I miei telefoni, usano il context [internal], che a sua volte, include [outbound].

La linea 2 viene utilizzata per chiamare le destinazioni non interne tramite il mio provider sip
La linea 3 redirige la chiamata all’estensione data dalla valorizzazione della variabile $DIALSTATUS (righe 11-15). Questa il cuore dell’articolo, in pratica :)

La linea 6 indica che per i numeri 1xxx, il call routing interno (i miei interni sono da 1000 a 1999).
Le linee 8 e 9, sono per l’attivazione della Voicemail generale.
Le linee 11-15 sono quelle cui si giunge con la linea 3
La linea 17 include (append) il contxt [outbound]

Molto semplice da implementare. Come si puo’ vedere alla riga 12, ogni volta che si giunge ad un CHANUNAVAIL, viene chiamato uno script AGI che si occupa di inserire l’evento nel database ed avvisarmi per email dei dettagli (lo script non incluso in asterisk, ma comunque molto semplice da realizzare).

 

Cisco status update

Settimana intensa quella che si conclude oggi. Giovedi’ sono arrivati i due routers che ho ordinato su ebay, Cisco c877 e c837.

La stessa sera, dopo i primi “inconsci” e pressoch ansiosi smanettamenti con le mie (bassissimeeee) conoscenze, decido di chiamare Rick che, da bravo rick, mi offre la configurazione “pappa pronta” di base.

Il morale della favola che, alle 23 circa, ero up-n-running con il c877 come gateway.

Altrettanto ovviamente, non ho ancora smesso di smanettarci con piena soddisfazione. Devo dire che robusto come una roccia (ed sopravvissuto alle mie foll?e!!!).

Fin ora ho messo su il secondo pvc con cui faro’ esperimenti con l’iptv di alice, la prossima settimana dovrei avere abbastanza tempo libero per sperimentare abbondantemente.

Ho gia una discreta quantit? di configurazioni di backup sul mio server ssh :D

Soddisfazioni…

Ulteriori esperimenti saranno la vpn pptp con l’universit? di palermo e poi…chiss?…devo pur sfruttare entrambi i pargoli :)

Il prossimo acquisto sono libri di testo seri per ccna dato che, a quanto pare, mi toccher? fare tutto da solo :(