Snom 320 og 380 på TDC IP Scale platformen
På min arbejdsplads havde vi 40 Snom apparater kørende hos en anden udbyder.
Telefonerne er placeret på 7 lokationer, spredt rundt omkring indenfor
kommunegrænsen. Infrastrukturen havde vi allerede via nogle routede VLANS rundt
på lokationerne.
Da vi skulle skifte til TDC IP Scale ville vi gerne genbruge Snom apparaterne. Både for at spare penge, men også forbrugernes skyld, der havde vænnet sig til telefonerne. Desuden kan Snom lave elektronisk rørløft når man bruger headset, og ikke som LG der kræver en ”løft af” mekanik installeret.
Snom er ikke godkendt på Scale platformen. Dog er Broadsoft, som er motoren under Scales motorhjelm, kompatibel med Snom apparaterne. Efter en hurtig test af et enkelt apparat kunne vi se at de godt kunne fungere på platformen – dog uden fuldautomatisk udrulning af konfigurationen.
Som gammel Perl haj anså jeg det som en spændende opgave. Og
Snom har et veldokumenteret og ”scripting”-venligt produkt.
TDC mente at vi skulle rundt og håndkonfigurere alle apparaterne, men jeg var
af en anden overbevisning.
Efter lidt test frem og tilbage nåede jeg i mål med 3 scripts der kunne klare
opgaven.
1. Kørte script der scannede 7 TELE IP ranges for aktive Snom apparater og trak IP, MAC og telefonnummer ud.
a. Denne master liste er vigtig da den indeholder mapping mellem MAC og telefonnummer!
2. Kørte script der lavede factory reset på min liste af aktive Snom apparater.
a. Efter dette genstarter telefonerne og ryger på DATA netværket.
3. Kørte script der scannede 7 DATA IP ranges for aktive Snom apparater og trak IP og MAC.
4. Rekonfigurere 7 Cisco switche, så ”VOICE” VLAN blev ændret fra unikt lokations-bestemt ID til same nye ID for alle lokationer.
5. Kørte script der rekonfigurerede telefonerne til TDC Scale.
a. Export 2 listen blev brugt til at finde ud af hvilke IP’er der skulle kontaktes.
b. Export 1 (master) listen blev brugt til at mappe MAC med telefonnummer og SIP konto.
c. Scriptet sluttede af med at genstarte hver telefon.
6. Telefonerne startede op og trak IP’er fra det nye TELE VLAN, og fangede derefter TDC IP Scale serveren.
”Phone Home” på Snom
Snom er indstillet til meget insisterende at ringe hjem til hovedkvarteret.
Konceptet er smart men man skal lige huske at det kan genere ens arbejde.
De ringer hjem, og ud fra deres MAC adresse kan Snom hovedkvarteret enten sige ”det
må du selv om” eller ”du skal lige spørge udbyder XXX”
Altså – de spørger efter:
http://provisioning.snom.com/snom320/snom320.php?mac=000413000001
Og hos os var svaret:
setting_server: http:// provisioning.den-tidligere-udbyder.dk/snom/{mac}
Og derefter trækker telefonen automatisk konfiguration derfra – hvilket drillede mig lidt – men kun i testen indtil jeg fandt ud af hvad problemet var.
Løsningen er at kontakte sin udbyder og få dem til at trække registreringen hos Snom tilbage for samtlige af ens telefoner.
VLAN overblik
· Unik VLAN til DATA(100, 101, …, 106) på hver lokation
· Unik VLAN til TELE(200, 201, …, 206) på hver lokation – udfases efter migreringen
· Fælles VLAN til TELE(1000) til TDC
Script A – ScanForSnom.pl – Brugt til punkt 1 og 3
use strict;
use LWP::Simple qw($ua get);
my $filename = "scanlist_" . time() . ".txt";
open (OUTFILE, ">>$filename");
$ua->timeout(1);
my @ip_scopes = (
'10.99.0.', # IP scopes ændres til den sekundære scanning
'10.99.1.',
'10.99.2.',
'10.99.3.',
'10.99.4.',
'10.99.5.',
'10.99.6.',
);
my $ip_start = 1;
my $ip_end = 254;
foreach my $ip_scope (@ip_scopes) {
my $i = $ip_start;
while ($i <= $ip_end) {
my $ip = $ip_scope . $i;
print "IP: $ip\n";
my $url = "http://$ip/settings.htm";
my $content = "";
unless (defined ($content = get $url)) {
print "\tNo response!\n";
} else {
my $tagA = '<pre>';
my $tagB = '</pre>';
if ($content =~ /$tagA(.*)$tagB/igs) {
$content = $1;
} else {
print "\tNo settings returned!\n";
$content = "";
}
if ($content) {
my $mac = "";
my $no = "";
my $fw = "";
if ($content =~ /mac&: (\w*)/) {
$mac = $1;
print "\t\tMac: $mac\n";
}
if ($content =~ /user_realname1&: (\w*)/) {
$no = $1;
print "\t\tNo : $no\n";
}
if ($content =~ /firmware_version!: (.*)/) {
$fw = $1;
$fw =~ s/;/-/;
$fw =~ s/\r\n//;
$fw =~ s/\n//;
$fw =~ s/\r//;
print "\t\tFw: $fw\n";
}
print OUTFILE "$ip;$mac;$no;$fw\n";
}
}
$i++;
}
}
close (OUTFILE);
Script B – FactoryReset.pl – Brugt til punkt 2
use strict;
use LWP::Simple;
my $result = "";
my $message = "";
my $ipfile = 'scanlist_ACTIVE-IP-MAC_LATEST.txt';
open FILE, "<$ipfile" or die $!;
while (my $line = <FILE>) {
$line =~ s/\r\n//;
$line =~ s/\n//;
$line =~ s/\r//;
my ($ip, $mac, $no, $fw) = split(/;/, $line);
print "IP: $ip\n";
my $content = "";
my $url = "http://$ip/advanced_network.htm?reset=Reset";
$content = get $url;
if (length($content) > 1000) {
print "\tAccepted - Rebooting\n";
}
}
close FILE;
Script C – ConfigureToScale.pl – Brugt til punkt 5
use strict;
use LWP::Simple;
my $result = "";
my $message = "";
my $ipfile = 'scanlist_ACTIVE-IP-MAC_LATEST.txt';
my $macnumberfile = 'scanlist_MAC-NUMBER-MASTER.txt';
my $scalefile = 'scale_accounts.txt';
my %scale_accounts = ();
my %scale_passwords = ();
my %mac_numbers = ();
my $scale_domain = "vk999999.hvoip.dk";
my $scale_proxy = "87.48.131.54";
open MACNUMBERFILE, "<$macnumberfile" or die $!;
while (my $line = <MACNUMBERFILE>) {
$line =~ s/\r\n//;
$line =~ s/\n//;
$line =~ s/\r//;
my ($ip, $mac, $no, $fw) = split(/;/, $line);
$mac_numbers{$mac} = $no;
}
close MACNUMBERFILE;
open SCALEFILE, "<$scalefile" or die $!;
while (my $line = <SCALEFILE>) {
$line =~ s/\r\n//;
$line =~ s/\n//;
$line =~ s/\r//;
my ($no, $account, $pw) = split(/\t/, $line);
$scale_accounts{$no} = $account;
$scale_passwords{$no} = $pw;
}
close SCALEFILE;
open FILE, "<$ipfile" or die $!;
while (my $line = <FILE>) {
$line =~ s/\r\n//;
$line =~ s/\n//;
$line =~ s/\r//;
my ($ip, $mac, $bad_no, $fw) = split(/;/, $line);
print "IP: $ip - $bad_no(no number)\n";
my $no = $mac_numbers{$mac};
if ($no) {
print "\tCorrect number for this MAC is: $no\n";
} else {
print "\tNO NUMBER FOUND!!!\n";
next();
}
my $scale_sip_login_short = $scale_accounts{$no};
my $scale_sip_password = $scale_passwords{$no};
if ($scale_sip_login_short && $scale_sip_password) {
print "\tAccount: $scale_sip_login_short\n";
} else {
print "\tCANNOT FIND LOGIN INFO FOR $no\n";
next();
}
my $vlan_pc = "";
# Da telefonerne har udgangsstik til PC, er det vigtigt at de ved
# hvilket VLAN at DATA skal køre på, på den pågældende lokation.
if ($ip =~ /10\.88\.0\./) {
$vlan_pc = "100";
} elsif ($ip =~ /10\.88\.1\./) {
$vlan_pc = "101";
} elsif ($ip =~ /10\.88\.2\./) {
$vlan_pc = "102";
} elsif ($ip =~ /10\.88\.3\./) {
$vlan_pc = "103";
} elsif ($ip =~ /10\.88\.4\./) {
$vlan_pc = "104";
} elsif ($ip =~ /10\.88\.5\./) {
$vlan_pc = "105";
} elsif ($ip =~ /10\.88\.6\./) {
$vlan_pc = "106";
}
my $content = "";
my $parameter = "vlan";
my $value = "1000 7"; # TELE VLAN = 1000 og 7 er en prioritet
my $url = "http://$ip/dummy.htm?settings=save&$parameter=$value";
# Vlan settings
$url .= "&vlan_net_id=$vlan_pc";
$url .= "&vlan_net_priority=6";
# Scale IP Login settings
$url .= "&user_realname1=$no"; # Kan ændres til at indeholde navnet!
$url .= "&user_idle_text1=$no";
$url .= "&user_name1=$scale_sip_login_short";
$url .= "&user_host1=$scale_domain";
$url .= "&user_pname1=$scale_sip_login_short" . '@' . "$scale_domain";
$url .= "&user_pass1=$scale_sip_password";
$url .= "&user_outbound1=$scale_proxy";
# Diverse settings
$url .= "&pnp_config=off";
$url .= "&subscribe_config=false";
$url .= "&update_policy=never_update";
$url .= "&utc_offset=3600";
$url .= "&dst=3600 03.13.07 02:00:00 10.43.07 03:00:00";
$url .= "&timezone=DNK%2B1"; # DNK+1 med HTTP encoding
$url .= "&date_us_format=off";
$url .= "&time_24_format=on";
$url .= "&ntp_server=193.162.159.194";
$url .= "&tone_scheme=DNK";
$url .= "&language=Dansk";
$url .= "&web_language=Dansk";
$url .= "&challenge_response=off";
$url .= "&logon_wizard=off";
$url .= "&ignore_security_warning=on";
$url .= "&call_join_xfer=on";
# Scale settings
$url .= "&fkey10=speed *300"; # Indmeld
$url .= "&fkey11=speed *301"; # Udmeld
$content = get $url;
if (length($content) > 10) {
print "\tAccepted\n";
my $url = "http://$ip/advanced_update.htm?reboot=Reboot";
$content = get $url;
if (length($content) > 1000) {
print "\t\tAccepted - Rebooting\n";
}
}
}
close FILE;
Fileksempel – Scaleaccounts.txt (tabulator separeret)
Indhold: Telefonnummer, sip-login-prefix, sip-password
80808022 sip022 123456
80808023 sip023 123456
80808024 sip024 123456
Fileksempel – SnomMasterList.txt
Indhold: IP før, MAC, Telefonnummer, model+firmware
10.99.0.2;000413000001;80808050;snom370-SIP -7.3.30
10.99.0.3;000413000002;80808077;snom320-SIP -7.3.30
10.99.0.5;000413000003;80808044;snom320-SIP -7.3.30
Fileksempel – SnomBlankPhonesList.txt
Indhold: IP midlertidig, MAC, (Ingen telefonnummer), model+firmware
10.55.0.57;000413000001;?;snom370-SIP -7.3.30
10.55.0.58;000413000002;?;snom320-SIP -7.3.30
10.55.0.59;000413000003;?;snom320-SIP -7.3.30
Cisco switch konfiguration
Alle user interfaces blev rekonfigureret – Men kun VOICE VLAN blev ændret.
Før:
interface FastEthernet0/1
switchport access vlan 101
switchport trunk encapsulation dot1q
switchport mode access
switchport voice vlan 201
!
Efter:
interface FastEthernet0/1
switchport access vlan 101
switchport trunk encapsulation dot1q
switchport mode access
switchport voice vlan 1000
!
Jeg håber du fik noget ud af ovenstående. Jeg synes det var
vigtigt at fortælle om den gode oplevelse med Snom på TDC IP Scale. Indlægget
er skrevet på eget initiativ og uden TDC stående bagved.
Det var genialt at jeg ved at lave lidt forarbejde kunne lave hele migreringen
på en time – i stedet for at have kørt rundt til 7 forskellige steder og tastet
løs på 40 telefoner.
Jeg fandt også ud af hvordan man uploader en opdateret adressebog til 40 telefoner på 2 minutter! Det kommer nok i en anden guide engang.