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 :(