<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Linux - AHA</title>
	<atom:link href="http://linux-aha.de/wordpress/feed/" rel="self" type="application/rss+xml" />
	<link>http://linux-aha.de/wordpress</link>
	<description>Kleine und große Linux AHAs</description>
	<lastBuildDate>Thu, 03 May 2012 12:34:29 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3</generator>
		<item>
		<title>Asterisk Projekt: Season 12 – Snoms Registriert Euch!!! Jetzt!!!</title>
		<link>http://linux-aha.de/wordpress/2012/05/03/asterisk-projekt-season-12-snoms-registriert-euch-jetzt/</link>
		<comments>http://linux-aha.de/wordpress/2012/05/03/asterisk-projekt-season-12-snoms-registriert-euch-jetzt/#comments</comments>
		<pubDate>Thu, 03 May 2012 06:32:29 +0000</pubDate>
		<dc:creator>Ronny</dc:creator>
				<category><![CDATA[Asterisk]]></category>
		<category><![CDATA[bash]]></category>
		<category><![CDATA[Hints]]></category>
		<category><![CDATA[ubuntuusers.de]]></category>
		<category><![CDATA[asterisk]]></category>

		<guid isPermaLink="false">http://linux-aha.de/wordpress/2012/05/03/asterisk-projekt-season-12-snoms-registriert-euch-jetzt/</guid>
		<description><![CDATA[Folgendes Szenario: Der Asterisk Prozess schmiert aus irgendeinem Grund ab. Der Dienst wird wieder hochgefahren und die Telefone sind nicht mehr registriert. Was nun? Klar, nach einer gewissen Zeit erneuern die Geräte ihre Registrierung und sind wieder erreichbar. Aber bis dahin? Und wie lange dauert das? Kurz und dreckig &#8211; ich will dass sie das&#8230;]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><a href="http://linux-aha.de/wordpress/wp-content/uploads/2011/09/asterisk_project.png"><img class="size-full wp-image-1372 aligncenter" title="asterisk_project" src="http://linux-aha.de/wordpress/wp-content/uploads/2011/09/asterisk_project.png" alt="" width="157" height="99" /></a></p>
<p style="text-align: left;">Folgendes Szenario: Der Asterisk Prozess schmiert aus irgendeinem Grund ab. Der Dienst wird wieder hochgefahren und die Telefone sind nicht mehr registriert. Was nun? Klar, nach einer gewissen Zeit erneuern die Geräte ihre Registrierung und sind wieder erreichbar. Aber bis dahin? Und wie lange dauert das?</p>
<h2 style="text-align: left;">Kurz und dreckig &#8211; ich will dass sie das jetzt tun!</h2>
<p style="text-align: left;">Ok, wir sprechen hier über Snom Telefone. Diese können per Remote bedient werden und das machen wir uns zu Nutze. Wir simulieren einfach den Klick auf &#8220;Re-Registrieren&#8221; der Weboberfläche. Dazu nutzen wir wget.</p>
<p style="text-align: left;"><strong>Aber</strong></p>
<p style="text-align: left;">Normalerweise nutze ich um die Telefone anzusprechen die IP aus der Datenbank. Leider ist in dem Fall in der Datenbank auch kein IP Eintrag &#8211; Telefon ja nicht registriert <img src='http://linux-aha.de/wordpress/wp-content/plugins/tango-smilies/tango/face-smile.png' alt=':-)' class='wp-smiley' />  Also was anderes. Mir kam die Idee das ganze über den ARP Cache zu machen. OMG! Warum das denn?</p>
<p style="text-align: left;">Naja eigentlich ganz einfach. Anhand der MAC kann man Snom Geräte bestimmen. Damit ich dann wirklich nur Snom Geräte mit dem Befehl anspreche muss ich lediglich alle MAC Adressen nehmen die mit 00:04:13 beginnen. Damit hab ich alle IPs die ich ansprechen muss.</p>
<h2 style="text-align: left;">Das Script dazu</h2>
<pre class="brush: bash; title: ; notranslate">
#!/bin/bash
#
# Scan ARP Cache for Snom Devices and send a re-register to them
#
SNOM_USER=&quot;webloginUser&quot;
SNOM_PASSWORD=&quot;webloginpw&quot;

for IP in `grep &quot;00:04:13&quot; /proc/net/arp  | cut -f1 -d &quot; &quot;`&lt;/p&gt;
do
wget --no-proxy --post-data=&quot;REREGISTER:1=Re-Registrieren&quot; http://${SNOM_USER}:${SNOM_PASSWORD}@${IP}/line_login.html &gt;/dev/null 2&gt;&amp;1;
print &quot;Did ${IP}&quot;;
}
</pre>
<p>Nachdem das Script gelaufen ist sollten sich wieder alle Telefone am Asterisk Server angemeldet haben.</p>
]]></content:encoded>
			<wfw:commentRss>http://linux-aha.de/wordpress/2012/05/03/asterisk-projekt-season-12-snoms-registriert-euch-jetzt/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Asterisk Projekt: Season 11 – Asterisk  MySQL UTF8</title>
		<link>http://linux-aha.de/wordpress/2012/04/30/asterisk-projekt-season-11-asterisk-mysql-utf8/</link>
		<comments>http://linux-aha.de/wordpress/2012/04/30/asterisk-projekt-season-11-asterisk-mysql-utf8/#comments</comments>
		<pubDate>Mon, 30 Apr 2012 06:06:17 +0000</pubDate>
		<dc:creator>Ronny</dc:creator>
				<category><![CDATA[Asterisk]]></category>
		<category><![CDATA[bash]]></category>
		<category><![CDATA[Hints]]></category>
		<category><![CDATA[ubuntuusers.de]]></category>
		<category><![CDATA[asterisk]]></category>

		<guid isPermaLink="false">http://linux-aha.de/wordpress/2012/04/30/asterisk-projekt-season-11-asterisk-mysql-utf8/</guid>
		<description><![CDATA[Um unseren Asterisk möglichst flexibel zu halten wurde Asterisk mit MySQL Schnittstelle installiert. Das bringt uns in die Lage recht einfach Konfigurationsänderungen vorzunehmen &#8211; nämlich in der Datenbank und damit ohne Neustart des Dienstes. Nun leben wir in Deutschland und in Deutschland gibt es Umlaute. Umlaute sind immer so eine Sache in Datenbanken, Programmen, Scripten&#8230;]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><a href="http://linux-aha.de/wordpress/wp-content/uploads/2011/09/asterisk_project.png"><img class="size-full wp-image-1372 aligncenter" title="asterisk_project" src="http://linux-aha.de/wordpress/wp-content/uploads/2011/09/asterisk_project.png" alt="" width="157" height="99" /></a></p>
<p>Um unseren Asterisk möglichst flexibel zu halten wurde Asterisk mit MySQL Schnittstelle installiert. Das bringt uns in die Lage recht einfach Konfigurationsänderungen vorzunehmen &#8211; nämlich in der Datenbank und damit ohne Neustart des Dienstes. Nun leben wir in Deutschland und in Deutschland gibt es Umlaute. Umlaute sind immer so eine Sache in Datenbanken, Programmen, Scripten etc..</p>
<p>Auch unser Asterisk kann per Default nichts mit Umlauten anfangen &#8211; wenigstens nicht aus der Datenbank so wie wir sie aufgesetzt haben. Server als auch Client (MySQL &amp; Asterisk) müssen auf einen passenden Zeichensatz gebracht werden um ohne Verluste miteinander sprechen zu können &#8211; es empfiehlt sich UTF8.</p>
<p>Woran sieht man ob es überhaupt Probleme gibt? Naja, man lege eine Nebenstelle an. Die CallerID (Name) lautet &#8220;Max Müller&#8221;. Was kommt beim Angerufenen an? Ich schätze Sonderzeichen stehen im Display anstatt &#8220;Max Müller&#8221;. Das ganze ebenfalls bei der Queue &#8211; wenn man diese aus der Datenbank bedient. Schaut man sich dann die Mitglieder der Queue an und hat ein Mitglied mit Sonderzeichen im Namen, so ist das weniger hübsch <img src='http://linux-aha.de/wordpress/wp-content/plugins/tango-smilies/tango/face-wink.png' alt=';-)' class='wp-smiley' /> </p>
<h1>Wie wird das ganze korrigiert?</h1>
<p>Hat man nun einen Asterisk mit MySQL Anbindung in Betrieb, so kann man wie folgt vorgehen:</p>
<ol>
<li>Anpassen der MySQL Konfiguation</li>
<li>Dump der Datenbank(en)</li>
<li>Restart von MySQL</li>
<li>Anpassen des Dumps</li>
<li>einspielen des Dumps in die DB (ersetzen der alten DB)</li>
<li>Neustart von Asterisk</li>
</ol>
<h2>en Detail</h2>
<p><strong>Anpassen der MySQL Konfiguration (/etc/mysql/my.cnf oder /etc/my.cnf):</strong></p>
<p>im Bereich [Client] folgendes hinzufügen:</p>
<pre>default-character-set=utf8</pre>
<p>im Bereich [mysqld] dieses:</p>
<pre>default-character-set=utf8
default-collation=utf8_general_ci
character-set-server=utf8
collation-server=utf8_general_ci</pre>
<p><strong>mysqldump</strong></p>
<pre class="brush: bash; title: ; notranslate">
mysqldump -uroot -pasterisk -c -e --default-character-set=utf8 --single-transaction --skip-set-charset --add-drop-database -B asterisk_db &gt; /tmp/asterisk_db.sql
cp /tmp/asterisk_db.sql /tmp/asterisk_db_utf8.sq
</pre>
<p><strong>Anpassen des Dumps</strong></p>
<pre class="brush: bash; title: ; notranslate">
sed -i 's/DEFAULT CHARACTER SET latin1/DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci/' /tmp/asterisk_db_utf8.sql
sed -i 's/DEFAULT CHARSET=latin1/DEFAULT CHARSET=utf8/' /tmp/asterisk_db_utf8.sql
sed -i 's/CHARACTER SET latin1/CHARACTER SET utf8/' /tmp/asterisk_db_utf8.sql
</pre>
<p>Durch diese sed Befehle werden alle latin1 Character Sets durch UTF8 ersetzt. Dadurch wird beim Import für MySQL die Datenbank und alle Tabellen/Spalten auf UTF8 gesetzt.</p>
<p>Als Script sieht das ganze dann so aus:</p>
<pre class="brush: bash; title: ; notranslate">

#!/bin/bash

# Dump the DB
mysqldump -uroot -pasterisk -c -e --default-character-set=utf8 --single-transaction --skip-set-charset --add-drop-database -B asterisk_db &gt; /tmp/asterisk_db.sql
/etc/init.d/mysql restart
# make copy
cp /tmp/asterisk_db.sql /tmp/asterisk_db_utf8.sql

# update table and column definitions
sed -i 's/DEFAULT CHARACTER SET latin1/DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci/' /tmp/asterisk_db_utf8.sql
sed -i 's/DEFAULT CHARSET=latin1/DEFAULT CHARSET=utf8/' /tmp/asterisk_db_utf8.sql
sed -i 's/CHARACTER SET latin1/CHARACTER SET utf8/' /tmp/asterisk_db_utf8.sql

mysql -uroot -pasterisk &lt; /tmp/asterisk_db_utf8.sql
sleep 1
/etc/init.d/asterisk restart
</pre>
<h2>Wann durchführen?</h2>
<p>Da das Script quasi alles macht und die Datenbank im Normalfall nicht so wahnsinnig groß ist, kann man das &#8220;Zwischendurch&#8221; machen. Je nach Umgebung sollte natürlich eine Zeit gewählt werden, in der wenig bis gar nichts los ist. Das Script braucht nur wenige Sekunden. Bisschen Mut gehört dazu <img src='http://linux-aha.de/wordpress/wp-content/plugins/tango-smilies/tango/face-smile-big.png' alt=':D' class='wp-smiley' /> </p>
<p>Wichtig zu wissen ist, dass sich die Telefone neu registrieren müssen bevor sie wieder Gespräche annehmen können.</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://linux-aha.de/wordpress/2012/04/30/asterisk-projekt-season-11-asterisk-mysql-utf8/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Quickie: Leerzeilen mit VIM löschen</title>
		<link>http://linux-aha.de/wordpress/2012/04/25/quickie-leerzeilen-mit-vim-loschen/</link>
		<comments>http://linux-aha.de/wordpress/2012/04/25/quickie-leerzeilen-mit-vim-loschen/#comments</comments>
		<pubDate>Wed, 25 Apr 2012 06:01:33 +0000</pubDate>
		<dc:creator>Ronny</dc:creator>
				<category><![CDATA[bash]]></category>
		<category><![CDATA[einfachso]]></category>
		<category><![CDATA[Quickies]]></category>
		<category><![CDATA[ubuntuusers.de]]></category>
		<category><![CDATA[parameter]]></category>
		<category><![CDATA[tipps]]></category>

		<guid isPermaLink="false">http://linux-aha.de/wordpress/?p=1522</guid>
		<description><![CDATA[]]></description>
			<content:encoded><![CDATA[<p><a href="http://linux-aha.de/wordpress/wp-content/uploads/2011/01/aha_quickie.png"><img class="aligncenter size-full wp-image-1240" title="aha_quickie" src="http://linux-aha.de/wordpress/wp-content/uploads/2011/01/aha_quickie.png" alt="Linux AHA Quickie Logo" width="65" height="48" /></a></p>
<pre class="brush: bash; title: ; notranslate">
:g/^$/d
</pre>
]]></content:encoded>
			<wfw:commentRss>http://linux-aha.de/wordpress/2012/04/25/quickie-leerzeilen-mit-vim-loschen/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Asterisk Projekt: Season 10 – Hardwarekonfig Patton 4960 E1 (PMX) Gateway</title>
		<link>http://linux-aha.de/wordpress/2012/04/23/asterisk-projekt-season-10-hardwarekonfig-patton-4960-e1-pmx-gateway/</link>
		<comments>http://linux-aha.de/wordpress/2012/04/23/asterisk-projekt-season-10-hardwarekonfig-patton-4960-e1-pmx-gateway/#comments</comments>
		<pubDate>Mon, 23 Apr 2012 08:07:03 +0000</pubDate>
		<dc:creator>Ronny</dc:creator>
				<category><![CDATA[Asterisk]]></category>
		<category><![CDATA[ubuntuusers.de]]></category>
		<category><![CDATA[asterisk]]></category>

		<guid isPermaLink="false">http://linux-aha.de/wordpress/2011/12/23/asterisk-projekt-season-10-hardwarekonfig-patton-4960-e1-pmx-gateway/</guid>
		<description><![CDATA[Der nächste Hardware &#8220;Baustein&#8221; ist ein E1 (Primär Multiplex) Gateway. Wie in Season 3 bereits beschrieben werden die Geräte von Patton eingesetzt. Konfiguration Die Konfiguration für die 4960 ist vom handling her analog zur 4118. Von daher ist die Beschreibung der 4118 ein guter Anfang. Die 4960 ist relativ fett was die Funktionen angeht. Benötigt&#8230;]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><a href="http://linux-aha.de/wordpress/wp-content/uploads/2011/09/asterisk_project.png"><img class="size-full wp-image-1372 aligncenter" title="asterisk_project" src="http://linux-aha.de/wordpress/wp-content/uploads/2011/09/asterisk_project.png" alt="" width="157" height="99" /></a></p>
<p>Der nächste Hardware &#8220;Baustein&#8221; ist ein E1 (Primär Multiplex) Gateway. Wie in <a title="Asterisk Projekt: Season 3 – malen nach Zahlen" href="http://linux-aha.de/wordpress/2011/09/28/asterisk-projekt-season-3-malen-nach-zahlen/">Season 3</a> bereits beschrieben werden die Geräte von Patton eingesetzt.</p>
<p><a href="http://linux-aha.de/wordpress/wp-content/uploads/2011/12/patton_4960.jpg"><img class="aligncenter size-full wp-image-1496" title="patton_4960" src="http://linux-aha.de/wordpress/wp-content/uploads/2011/12/patton_4960.jpg" alt="" width="375" height="214" /></a></p>
<h2>Konfiguration</h2>
<p>Die Konfiguration für die 4960 ist vom handling her analog zur 4118. Von daher ist die <a title="Asterisk Projekt: Season 8 – Hardwarekonfig Patton 4118 Analog Gateway" href="http://linux-aha.de/wordpress/2011/12/21/asterisk-projekt-season-8-hardwarekonfig-patton-4118-analog-gateway/">Beschreibung</a> der 4118 ein guter Anfang. Die 4960 ist relativ fett was die Funktionen angeht. Benötigt man lediglich ein Gateway für die Verbindung zwischen Asterisk und E1/PMX Anschluss, so genügt auch die 4940 die um einiges günstiger ist. Bei uns hätte die auch genügt <img src='http://linux-aha.de/wordpress/wp-content/plugins/tango-smilies/tango/face-smile-big.png' alt=':D' class='wp-smiley' />  Von der Konfiguration her wird das aber keinen allzu großen Unterschied machen. Es werden wohl &#8211; verglichen zu meinem Beispiel &#8211; einfach ein paar Teile wegfallen.</p>
<h3><span style="line-height: 19px;">Konfigbeispiel</span></h3>
<p>Ich versuche das ganze durch Kommentare möglichst verständlich zu machen <img src='http://linux-aha.de/wordpress/wp-content/plugins/tango-smilies/tango/face-wink.png' alt=';-)' class='wp-smiley' /> </p>
<pre class="brush: bash; title: ; notranslate">

#----------------------------------------------------------------#
#                                                                #
# SN4960/1E30V                                                   #
# R5.8 2011-07-01 H323 RBS SIP                                   #
# 2012-04-22T09:29:44                                            #
# SN/00A0BA070FC4                                                #
# Generated configuration file                                   #
#                                                                #
#----------------------------------------------------------------#
# Die ersten Teile sind analog zur 4118
cli version 3.20
administrator admin password NR7Hh4jseumPf7xjTSemHQ== encrypted
clock local default-offset +02:00
dns-relay
webserver port 80 language en
snmp community nagios ro
snmp community configsave rw
snmp host 10.10.210.36 security-name monitoring
snmp host 10.10.210.36 security-name configsave
sntp-client
sntp-client server primary 10.10.210.201 port 123 version 4
system hostname pat01
system location Schrank1
system contact netzwerkmanagement@meinefirma.de
system
ic voice 0
system
# clock source ist extrem wichtig. Gerade fur den Faxempfang
clock-source 1 e1t1 0 0
profile r2 default
profile napt NAPT_WAN
profile ppp default
profile tone-set default
profile voip default
# preferierte Codecs
codec 1 g711alaw64k rx-length 30 tx-length 30
codec 2 g711ulaw64k rx-length 30 tx-length 30
codec 3 g729 rx-length 30 tx-length 30
rtp traffic-class local-default
dejitter-mode static
dejitter-max-delay 120
# Fax per T.38
fax transmission 1 relay t38-udp
# Modemkonfiguration, bspw. fuer Datentransfer etc.
modem transmission 1 bypass g711alaw64k rx-length 10 tx-length 10
modem dejitter-max-delay 60
no modem detection on-remote-fax-request
profile pstn default
profile sip default
no autonomous-transitioning
profile dhcp-server DHCPS_LAN
# die 4960 hat einen internen DHCP Server
# diesen nutzen wir allerdings nicht
# alternativ kann man auch eine Patton 4940
# nehmen, die hat weniger funktionen - wenn
# es rein um ein E1 Gateway geht.
network 192.168.1.0 255.255.255.0
include 1 192.168.1.10 192.168.1.99
lease 2 hours
default-router 1 192.168.1.1
profile aaa default
method 1 local
method 2 none
context ip router
interface WAN
ipaddress dhcp
use profile napt NAPT_WAN
tcp adjust-mss rx mtu
tcp adjust-mss tx mtu
interface LAN
# die IP des LAN Interfaces
ipaddress 10.31.2.13 255.255.255.0
tcp adjust-mss rx mtu
tcp adjust-mss tx mtu
context ip router
# Default gateway
route 0.0.0.0 0.0.0.0 10.31.2.201 0
context cs switch
# analog zum 4118 die Routing Tables
# RT_ISDN_IN
routing-table called-e164 RT_ISDN_IN
# Default Destination auf RT_LOCAL. Damit die Nummer
# intern zurueckgerufen werden kann, wird 00 vor die
# von der Telekom empfangene Nummer gesetzt.
# eine 0 fuers Amt und eine, da die Nummer ohne fuehrende
# 0 uebertragen wird.
route default dest-table RT_LOCAL MAP_ADD_PREFIX_00
#    route 0(.%) dest-interface IF_SIP_VOIPSERVER MAP_ADD_PREFIX_00
# die 501 ist die Nummer des Anschlusses und wird per
# MAP_REMOVE_PREFIX_401 entfernt, damit nur die Nummer
# der Nebenstelle als Ziel uebrig bleibt
route 501(.%) dest-table RT_ISDN_IN MAP_REMOVE_PREFIX_501
# das ist ein Spezialfall. Frueher wurde die 30 als Zentrale
# angerufen. Nun muss die 300 angerufen werden.
# Mit dieser Regel wird die 30 in 300 umgeschrieben
route 30$ dest-table RT_LOCAL CF_MAP30TO300
# Table RT_LOCAL
routing-table called-e164 RT_LOCAL
# Default zum Voipserver
route default dest-interface IF_SIP_VOIPSERVER
# 3 Stellen zum Voipserver
route ... dest-interface IF_SIP_VOIPSERVER
# Faxanschluesse zu der jeweiligen Patton
route 338 dest-interface IF_SIP_PAT03
route 341 dest-interface IF_SIP_PAT03
route 344 dest-interface IF_SIP_PAT03
route 345 dest-interface IF_SIP_PAT03
route 346 dest-interface IF_SIP_PAT03
route 350 dest-interface IF_SIP_PAT03
route 310 dest-interface IF_SIP_PAT02
route 318 dest-interface IF_SIP_PAT02
route 323 dest-interface IF_SIP_PAT02
route 9366 dest-interface IF_SIP_PAT02
route 332 dest-interface IF_SIP_PAT02
route 333 dest-interface IF_SIP_PAT02
route 334 dest-interface IF_SIP_PAT02
route 335 dest-interface IF_SIP_PAT02
# Table RT_SIP_IN, Anrufe von dem Voipserver initiiert
routing-table called-e164 RT_SIP_IN
# Default nach RT_LOCAL
route default dest-table RT_LOCAL
# Zielnummer beginnt mit 0? Dann nach extern, aber zuerst noch
# die Sendernummer anpassen (CF_CLIP_NO_SCREENING_501)
route 0(.%) dest-interface IF_ISDN_0_0 CF_CLIP_NO_SCREENING_501

mapping-table calling-type-of-number to calling-type-of-number MAP_TON_TO_NATIONAL
map default to national
# Mapping um zwei Nullen voran zu stellen
mapping-table calling-e164 to calling-e164 MAP_ADD_PREFIX_00
map (.%) to 00\1
# Mapping um eine Null am Anfang zu entfernen (die Amtsnull)
mapping-table called-e164 to called-e164 MAP_REMOVE_PREFIX_0
map 0(.%) to \1
# Mapping um die Anschlussnummer zu entfernen (Nebenstelle bleibt uebrig)
mapping-table called-e164 to called-e164 MAP_REMOVE_PREFIX_501
map 501(.%) to \1
# Mapping um die Anschlussnummer voran zu stellen
mapping-table calling-e164 to calling-e164 MAP_ADD_PREFIX_1234501
# Alle Nebenstellen die mit einer 3 beginnen bekommen diese Anschlussnummer
# vorangesetzt
map (3..)$ to 1234501\1

# Mapping um aus der 30 die 300 zu machen (s.o.)
mapping-table called-e164 to called-e164 MAP_30_TO_300
map 30 to 300
# Complex Functions (mehrere Mappings zusammengefasst)
# Diese werden oben aufgerufen innerhalb der Tables
complex-function CF_CLIP_NO_SCREENING_501
execute 1 MAP_ADD_PREFIX_1234501
execute 2 MAP_TON_TO_NATIONAL
execute 3 MAP_REMOVE_PREFIX_0
complex-function CF_MAP30TO300
execute 1 MAP_30_TO_300
execute 2 MAP_ADD_PREFIX_00
# Das Interface IF_ISDN_0_0
interface isdn IF_ISDN_0_0
# Destination Table
route call dest-table RT_ISDN_IN
# Definition der Patton Gateways (meist Fax)
# auf diese wird oben in der RT_LOCAL geroutet
interface sip IF_SIP_PAT02
bind context sip-gateway GW_SIP
route call dest-table RT_SIP_IN
remote 10.31.2.14
interface sip IF_SIP_PAT03
bind context sip-gateway GW_SIP
route call dest-table RT_SIP_IN
remote 10.31.2.15
# Der Voipserver
interface sip IF_SIP_VOIPSERVER
bind context sip-gateway GW_SIP
route call dest-table RT_SIP_IN
remote 10.31.2.10
context cs switch
no shutdown
context sip-gateway GW_SIP
interface GW_IF
bind interface LAN context router port 5060
context sip-gateway GW_SIP
no shutdown
# ethernet 0 0 ist das LAN Interface
port ethernet 0 0
medium auto
encapsulation ip
bind interface LAN router
no shutdown
# das zweite Interface nutzen wir nicht
port ethernet 0 1
medium auto
encapsulation ip
shutdown
# der Port e1t1 ist der PMX Port
port e1t1 0 0
port-type e1
clock slave
framing crc4
encapsulation q921
q921
uni-side auto
encapsulation q931
q931
protocol dss1
uni-side user
bchan-number-order ascending
encapsulation cc-isdn
# das Interface wird auf IF_ISDN_0_0 gebunden
bind interface IF_ISDN_0_0 switch
port e1t1 0 0
no shutdown
</pre>
<p>Dieses Konfiguarationsbeispiel sollte für viele Installationen ein guter Anfangspunkt sein. Wenn ihr sie anpasst und einspielt, dann könnt ihr über die Weboberfläche die Routing Tables ganz einfach administrieren (Nummern &lt;-&gt; Pattons (für Faxnummern)). Das sollte dann nach der Erstkonfiguration auch das sein, was man so im laufenden Betrieb machen muss. Bei Faxnummern oder generell bei Routing auf andere Patton Geräte daran denken, dass auch auf dem &#8220;ZielPatton&#8221; die Nebenstelle konfiguriert werden muss.</p>
<p>Übrigens: Um einen Eintrag zu ändern (gleiche Nummer, anderes Interface) legt man einfach einen neuen Eintrag mit der gleichen Nummer an <img src='http://linux-aha.de/wordpress/wp-content/plugins/tango-smilies/tango/face-wink.png' alt=';-)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://linux-aha.de/wordpress/2012/04/23/asterisk-projekt-season-10-hardwarekonfig-patton-4960-e1-pmx-gateway/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Simpler Zugang zum Netz, oder nicht? CaptivePortal in einfach</title>
		<link>http://linux-aha.de/wordpress/2012/02/23/simpler-zugang-zum-netz-oder-nicht-captiveportal-in-einfach/</link>
		<comments>http://linux-aha.de/wordpress/2012/02/23/simpler-zugang-zum-netz-oder-nicht-captiveportal-in-einfach/#comments</comments>
		<pubDate>Thu, 23 Feb 2012 08:02:48 +0000</pubDate>
		<dc:creator>Ronny</dc:creator>
				<category><![CDATA[einfachso]]></category>
		<category><![CDATA[Hints]]></category>
		<category><![CDATA[Monitoring]]></category>
		<category><![CDATA[perl]]></category>
		<category><![CDATA[Systemmanagement]]></category>
		<category><![CDATA[ubuntuusers.de]]></category>
		<category><![CDATA[administration]]></category>
		<category><![CDATA[aufzeichnen]]></category>
		<category><![CDATA[captivePortal]]></category>
		<category><![CDATA[daemon]]></category>
		<category><![CDATA[kleinigkeiten]]></category>
		<category><![CDATA[netzwerk]]></category>
		<category><![CDATA[script]]></category>
		<category><![CDATA[sicherheit]]></category>
		<category><![CDATA[tipps]]></category>

		<guid isPermaLink="false">http://linux-aha.de/wordpress/?p=1500</guid>
		<description><![CDATA[Viele kennen es aus Hotels, Bahnhöfen, Cafes oder öffentlichen Plätzen. Es gibt ein offenes WLAN zum Internet und wenn man sich damit verbindet landet man zuerst einmal auf einer speziellen Seite. Auf dieser muss man sich dann irgendwie registrieren oder halt bezahlen. Aber wie funktioniert sowas und macht das vielleicht auch Sinn für ein Unternehmen&#8230;]]></description>
			<content:encoded><![CDATA[<p><a href="http://linux-aha.de/wordpress/wp-content/uploads/2012/01/captivePortal_control.png"><img class="aligncenter size-medium wp-image-1501" title="captivePortal_control" src="http://linux-aha.de/wordpress/wp-content/uploads/2012/01/captivePortal_control-300x125.png" alt="" width="300" height="125" /></a></p>
<p>Viele kennen es aus Hotels, Bahnhöfen, Cafes oder öffentlichen Plätzen. Es gibt ein offenes WLAN zum Internet und wenn man sich damit verbindet landet man zuerst einmal auf einer speziellen Seite. Auf dieser muss man sich dann irgendwie registrieren oder halt bezahlen. Aber wie funktioniert sowas und macht das vielleicht auch Sinn für ein Unternehmen intern?</p>
<h2>Warum kann das unternehmensintern Sinn machen?</h2>
<p>Also hier geht es nicht um Provider oder Firmen die das ganze öffentlich anbieten. Es gibt beispielsweise die Anforderung in Unternehmen die Produktionsstraßen besitzen, Großraumhallen, Fertigungshallen oder ähnliches. Oft gibt es dort viele Geräte verschiedener Hersteller die gewartet werden (nur ein Beispiel). Es kommen also externe Dienstleister um Updates einzuspielen oder Support zu leisten. Diese müssen mittlerweile, um vernünftig arbeiten zu können, Kontakt mit Ihrer Firma haben. Das kann über 3G geschehen, ist allerdings schneller über WLAN. Für solche Dienstleister macht ein WLAN Zugang also Sinn. Das auch für einen &#8220;normalen&#8221; Besprechungs- oder Schulungsraum schon Sinn machen.</p>
<p>Nun hat man ein Problem. Das WLAN offen zu lassen ist quasi grob fahrlässig. Das WLAN schützen macht es umständlich &#8211; je nach Anzahl der verschiedenen Benutzer. Dann haben wir da noch den Aspekt des Loggings. Prinzipiell muss man die Verbindungsdaten mitloggen, da man je nach dem in die Beweispflicht genommen werden kann. Um zu loggen muss ich auch wissen wer zu welchem Gerät gehört, da mir ansonsten die Information nichts bringt. Das alles kann ich mit der Anmeldung quasi erledigen. Ich weiß wer zu welchem Gerät gehört und kann auch mitloggen. Bevor der Nutzer sich über das WLAN mit dem Internet verbindet, muss er einer entsprechenden Nutzungserklärung zustimmen (wegen logging etc.).</p>
<h2>Wie kann sich so was mit Linux darstellen?</h2>
<p>Diese Portale sind gar nicht so kompliziert wie man denkt. Um so etwas unter Linux zu realisieren kann man sich fertiger Software bedienen oder auch einfach das ganze selbst &#8211; relativ schnell &#8211; programmieren. Ein Projekt mit einer &#8220;CaptivePortal&#8221; Funktion ist beispielsweise <a title="pfsense.org" href="http://pfsense.org/">pfsense</a>. Die meisten CaptivePortal Funktionen befinden sich im Bundle mit Firewalls und bieten weit mehr als eine einfach Authentifizierung für einen Netzzugang.</p>
<p>Um so etwas mit Linux Mitteln darstellen zu können habe ich folgende Komponenten genutzt:</p>
<ul>
<li>einen Apache Webserver</li>
<li>MySQL Datenbank</li>
<li>iptables</li>
<li>DHCP Server (Standardkonfig mit Netz 192.168.199.0/24)</li>
</ul>
<p>Das ganze funktioniert nach folgendem Ablauf:</p>
<ol>
<li>Gerät verbindet sich mit dem Netz (dabei ist unerheblich ob per WLAN oder per Kabel)</li>
<li>das Gerät bekommt eine IP per DHCP</li>
<li>per Default werden alle Verbindungen geblockt, Verbindungen zu Port 80 (egal wohin) werden auf den Webserver des Gateways umgeleitet, bis das Device registriert ist</li>
</ol>
<p>Zur Registrierung benötigt man einen Schlüssel (5 Stellen, Alphanumerisch). Diesen kann man sich an eine interne Mailaddresse schicken lassen. Also können nur interne Accounts quasi den Zugriff genehmigen. Wenn man einen Schlüssel besitzt, dann kann man sich über das Portal registrieren (Name, Firma und Schlüssel werden abgefragt). Mit der Registrierung &#8211; richtiger Schlüssel vorausgesetzt &#8211; wird der Zugang für einen Tag freigegeben.</p>
<h2>Genauer??</h2>
<p>Der Client bekommt eine IP Adresse vom DHCP Server. Alle Zugriffe ins (bspw.) Internet werden erst einmal geblockt, außer Zugriffen auf Port 80 &#8211; diese werden umgeleitet auf den Webserver des Gatewyas &#8211; das CaptivePortal erscheint. Hat man noch keinen Schlüssel zum registrieren, so muss dieser angefordert werden. Man trägt eine eMail Adresse ein und sendet die Anfrage. Im Hintergrund wird per Perl Script geprüft ob die Empfängeradresse ok ist (bspw. interne Domain oder in einer Liste) und ein Schlüssel generiert. Dieser Schlüssel inkl. Mailadresse wird in der Datenbank hinterlegt und per Mail an den Empfänger geschickt.</p>
<p>Mit dem Schlüssel registriert sich der Client am Portal (inkl. Name, Firma). Mit dem Klicken des Buttons &#8220;registrieren&#8221; wird der Schlüssel geprüft und deaktiviert. MAC Adresse, Name und Firma des Anforderers werden in die Datenbank geschrieben. Danach wird ein iptables Befehl abgesetzt, der dem Client mit der betreffenden MAC Adresse den Zugriff zum Netz gewährt. Ebenfalls wird in der Datenbank ein Zeitstempel gespeichert, dadurch ist es möglich über ein iptables-update den Zugriff generell nur für eine gewisse Zeit freizugeben und dann automatisch wieder zu sperren. In der Datenbank gibt es ein Flag um zu definieren, ob dieser Eintrag überhaupt abläuft oder nicht (expires yes/no). Damit kann man also auch das ganze für interne Mitarbeiter statisch freigeben, damit diese sich nicht immer wieder neu registrieren müssen.</p>
<h2>Die Komponenten</h2>
<p>(Die Scripte liegen bei mir unter /opt/captivePortal &#8211; der Pfad ist in manchen Scripten zu finden)</p>
<h3>iptables</h3>
<p>iptables ist ja quasi auf jedem Linux System vorhanden und muss auch nicht groß konfiguriert werden.</p>
<p><strong>Script 1</strong> (Initiales iptables Script / iptables.sh):</p>
<pre class="brush: bash; title: ; notranslate">

#!/bin/bash
# Initial Iptables Script to enable captivePortal
#
# Ronny Becker, 02.2012

IPTABLES=/sbin/iptables
# the interface to authenticate
PORTAL_INT=eth2
# the interface where traffic goes through
OUTPUT_INT=eth0
# PortalIP (for captivePortal website)
PORTAL_IP=192.168.199.201

# clear all rules
iptables -F
iptables -X
iptables -t nat -F
iptables -t nat -X
iptables -t mangle -F
iptables -t mangle -X
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT

# Create captivePortal chain
$IPTABLES -N captivePortal -t mangle

# All traffic goes to this chain
$IPTABLES -t mangle -A PREROUTING -j captivePortal

###### captivePortal CHAIN ##########
# get allowed MACs out of the database (maybe persistent or in time)
/opt/captivePortal/iptablesFromDB.pl

# DNS is allowed for all
$IPTABLES -t mangle -A captivePortal -i $PORTAL_INT -p udp --dport 53 -j RETURN
# Mark packets that are not allowed till here
$IPTABLES -t mangle -A captivePortal -i $PORTAL_INT -j MARK --set-mark 99

# redirect port 80 to captivePortal
$IPTABLES -t nat -A PREROUTING -m mark --mark 99 -i $PORTAL_INT -p tcp --dport 80 -j DNAT --to-destination $PORTAL_IP

# drop all marked with 99
$IPTABLES -t filter -A FORWARD -m mark --mark 99 -j DROP

# masquerading (if needed)
iptables -t nat -A POSTROUTING -o $OUTPUT_INT -s 192.168.199.0/24            -j MASQUERADE
</pre>
<p><strong><span style="color: #ff9900;">Das iptables.sh Script muss bei jedem Systemstart ausgeführt werden. Des Weiteren muss ip_forward (/etc/sysctl.conf) gesetzt sein, damit der Server routen kann.</span></strong></p>
<p><strong>Script 2</strong> (Perl Script zum Auslesen der aktuellen Berechtigungen aus der Datenbank / iptablesFromDB.pl):</p>
<pre class="brush: perl; title: ; notranslate">

#!/usr/bin/perl

# captivePortal
# Script to get registered MACs out of DB
use DBI;

# get Config from central conf file
BEGIN { require &quot;/opt/captivePortal/captivePortal.conf&quot; };

# database connection
$connectionInfo=&quot;DBI:mysql:database=$db;$host:$port&quot;;
$dbi = DBI-&gt;connect($connectionInfo,$userid,$passwd);

# select datasets
$sql=&quot;select mac from registered where expires='no' or ((UNIX_TIMESTAMP()-timestamp) &lt; $tte)&quot;;
$sth = $dbi-&gt;prepare($sql);
$sth-&gt;execute() or die(&quot;Cannot get MACs&quot;);
$sth-&gt;bind_columns(undef, \$db_mac);
while ( $sth-&gt;fetch() ) {

# and run iptables
`/sbin/iptables -t mangle -A captivePortal -m mac --mac-source &quot;$db_mac&quot; -j RETURN`;
}

$sth-&gt;finish();

$dbi-&gt;disconnect();
</pre>
<p><strong>Config</strong> (Konfig für die Perl Scripte (s. Script 2 / captivePortal.conf):</p>
<pre class="brush: perl; title: ; notranslate">

# captivePortal - central config

# this conf file is used in perl scripts
use vars qw( $tte $db $host $port $userid $passwd $iptables_if );

# Time To Expire for dynamic subscriptions
$tte=&quot;86400&quot;;

# Database Information
$db=&quot;captivePortal&quot;;
$host=&quot;localhost&quot;;
$port=&quot;3306&quot;;
$userid=&quot;portal&quot;;
$passwd=&quot;captive&quot;;

# portal interface
$iptables_if=&quot;eth2&quot;;
</pre>
<p><strong>Script 3</strong> (Updatescript für iptables um abgelaufene Registrierungen zu löschen / iptables_update.sh):</p>
<pre class="brush: bash; title: ; notranslate">

#!/bin/bash

# captivePortal

# Update iptables rules to delete expired registrations
IPTABLES=/sbin/iptables

# the interface to authenticate
PORTAL_INT=eth2

# clear the chain
$IPTABLES -t mangle -F captivePortal
# run the rules out of the db

/opt/captivePortal/iptablesFromDB.pl

# add default rules (see iptables.sh)
$IPTABLES -t mangle -A captivePortal -i $PORTAL_INT -p udp --dport 53 -j RETURN
$IPTABLES -t mangle -A captivePortal -i $PORTAL_INT -j MARK --set-mark 99
</pre>
<p><strong><span style="color: #ff9900;">Das Update Script sollte per cron alle Xmin / Xstunden ausgeführt werden, damit abgelaufene Registrierungen den Zugriff verlieren. Wenn man den cronjob nicht gerade jede Minute laufen lässt, ist damit natürlich nicht gewährleistet dass eine Registrierung genau so lange gültig ist, wie es in der Konfiguration steht. In meinem Fall läuft das Script jede Stunde &#8211; das ist für meine Zwecke ausreichend.</span></strong></p>
<h3>MySQL</h3>
<p>Die Datenbank besteht aus zwei Tabellen -&gt; <a href="http://linux-aha.de/wordpress/wp-content/uploads/2012/02/captivePortal.sql_.gz">captivePortal.sql</a></p>
<h3>Apache</h3>
<p>Wir benötigen lediglich ein CGI Script. Auf dieses muss per Default umgeleitet werden sobald der Server eine Anfrage bekommt. Das kann man auf verschiedenste Weisen machen &#8211; also nicht schimpfen <img src='http://linux-aha.de/wordpress/wp-content/plugins/tango-smilies/tango/face-wink.png' alt=';-)' class='wp-smiley' /> </p>
<p><strong>Redirect</strong></p>
<p>Damit das ganze mit iPhone und Android funktioniert, habe ich folgende Apache config am Start:</p>
<pre class="brush: bash; title: ; notranslate">

&lt;VirtualHost 192.168.199.201:80&gt;
ServerAdmin webmaster@localhost
Servername captivePortal
DocumentRoot /var/www

Redirect /index.html http://192.168.199.201/cgi-bin/captivePortal.pl

&lt;Directory /&gt;
Options FollowSymLinks
AllowOverride None
&lt;/Directory&gt;
&lt;Directory /var/www/&gt;
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
allow from all
&lt;/Directory&gt;

ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
&lt;Directory &quot;/usr/lib/cgi-bin&quot;&gt;
AllowOverride None
Options +ExecCGI Indexes -MultiViews +SymLinksIfOwnerMatch
Order allow,deny
Allow from all
&lt;/Directory&gt;
&lt;IfModule mod_rewrite.c&gt;
RewriteEngine On
RewriteRule ^/$ http://192.168.199.201/cgi-bin/captivePortal.pl [L,R]
&lt;/IfModule&gt;

ErrorLog ${APACHE_LOG_DIR}/error.log

# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
LogLevel warn

CustomLog ${APACHE_LOG_DIR}/access.log combined

&lt;/VirtualHost&gt;
</pre>
<p>Dem entsprechend liegt das CGI (captivePortal.pl) unter /usr/lib/cgi-bin.</p>
<p><strong>Das CGI</strong></p>
<pre class="brush: perl; title: ; notranslate">

#!/usr/bin/perl
# captivePortal
#
# This is the cgi for the simple captivePortal
#
# Do not forget to change
#  line 51: valid domain to send regkey to
#  line 58: sender adress
#
#
#
# Ronny Becker, 02.2012

use CGI qw(:all);
use DBI;

# get Config from central conf file
BEGIN { require &quot;/opt/captivePortal/captivePortal.conf&quot; };

# connect to DB
$connectionInfo=&quot;DBI:mysql:database=$db;$host:$port&quot;;
$dbi = DBI-&gt;connect($connectionInfo,$userid,$passwd);

# params
$thisscript=$ENV{'SCRIPT_NAME'};

# cgi params
$para_req_sendto=param('req_sendto');
$para_req_submit=param('req_submit');
$para_reg_company=param('reg_company');
$para_reg_name=param('reg_name');
$para_reg_key=param('reg_key');
$para_reg_submit=param('reg_submit');

# print some headers
print &quot;Content-type: text/html\n\n&quot;;
print '
&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.01 Transitional//EN&quot; &quot;http://www.w3.org/TR/html4/loose.dtd&quot;&gt;
&lt;html&gt;
&lt;head&gt;
&lt;title&gt;WLAN Gastzugang&lt;/title&gt;
&lt;META HTTP-EQUIV=&quot;Content-Type&quot; CONTENT=&quot;text/html; charset=utf-8&quot;&gt;
&lt;/head&gt;
&lt;body style=&quot;font-family: courier,courier-new&quot;&gt;
&lt;h2&gt;WLAN Gastzugang&lt;/h2&gt;&lt;br&gt;';

# request for key
if ( $para_req_submit ) {
# address valid?
if ( $para_req_sendto ) {
if ( $para_req_sendto =~ /.*\@mydomain\.de/i || $para_req_sendto =~ /.*\@mydomain2\.de/ ) {
# generate a key
my @chars=('a'..'z','0'..'9');
foreach (1..5) {
$secret.=$chars[rand @chars];
}
# send key to recipient
$result=`export EMAIL=&quot;gastzugang\@mydomain.de&quot;; echo &quot;Der Registrierungsschluessel fuer Ihren Gast lautet: $secret&quot; | mail -s &quot;WLAN Gastzugang&quot; $para_req_sendto`;
print &quot;$result&quot;;
# Insert Key into DB
$sql=&quot;insert into regkeys(regkey,sendto,datetime) values('$secret','$para_req_sendto',NOW())&quot;;
$sth = $dbi-&gt;prepare($sql);
$sth-&gt;execute() or die(&quot;Fehler beim schreiben in die Datenbank&quot;);
$sth-&gt;finish();
print &quot;&lt;div style='background-color: green; color: white'&gt;&lt;p&gt;&lt;b&gt;Registrierungsschluessel wurde zugeschickt&lt;/b&gt;&lt;/p&gt;&lt;/div&gt;&quot;;
}
}
}

# request for registration
if ( $para_reg_submit ) {
# name given?
if ( length($para_reg_name) &lt;= 5 || length($para_reg_key) != 5 ) {
print &quot;&lt;div style='background-color: red; color: white'&gt;&lt;p&gt;&lt;b&gt;Sie muessen einen Namen und den Registrierungsschluessel angeben.&lt;/b&gt;&lt;/p&gt;&lt;/div&gt;&quot;;
} else {
# Check DB for regkey
$sql=&quot;select sendto from regkeys where regkey='$para_reg_key' and isActive='1'&quot;;
$sth = $dbi-&gt;prepare($sql);
$sth-&gt;execute() or die(&quot;DB: Cannot run select&quot;);
$sth-&gt;bind_columns(undef, \$db_sendto);
$sth-&gt;fetch();
$sth-&gt;finish();
if ( $db_sendto ) {
# disable key
$sql=&quot;update regkeys set isActive='0' where regkey='$para_reg_key'&quot;;
$sth = $dbi-&gt;prepare($sql);
$sth-&gt;execute() or die(&quot;DB: Cannot update&quot;);
$sth-&gt;finish();
# get MAC
open (ARP,&quot;&lt;/proc/net/arp&quot;);
while (&lt;ARP&gt;) {
$line = $_;
$line =~ s/  */;/g;
($arp_ip,undef,undef,$arp_mac,undef,undef) = split(&quot;;&quot;,$line);
if ( $arp_ip eq $ENV{'REMOTE_ADDR'} ) {
$mac=$arp_mac;
}
}
close ARP;
# write data into db
$sql=&quot;insert into registered(name,guestof,mac,timestamp,expires) values('$para_reg_name, $para_reg_company','$db_sendto','$mac',UNIX_TIMESTAMP(),'yes')&quot;;
$sth = $dbi-&gt;prepare($sql);
$sth-&gt;execute() or die(&quot;DB: Cannot insert&quot;);
$sth-&gt;finish();
$output=`sudo /sbin/iptables -I captivePortal 1 -t mangle -m mac --mac-source $mac -j RETURN`;
print &quot;&lt;div style='background-color: green; color: white'&gt;&lt;p&gt;&lt;b&gt;erfolgreich registriert&lt;/b&gt;&lt;br&gt;$output&lt;/p&gt;&lt;/div&gt;&quot;;
} else {
print &quot;&lt;div style='background-color: red; color: white'&gt;&lt;p&gt;&lt;b&gt;Registrierungsschluessel nicht gefunden&lt;/b&gt;&lt;/p&gt;&lt;/div&gt;&quot;;
}
}
}

# disconnect from DB
$dbi-&gt;disconnect();

# print form etc.
print '
&lt;form method=get action='.$thisscript.'&gt;
&lt;b&gt;Registrierungsschluessel anfragen&lt;/b&gt;&lt;br&gt;
senden an:&amp;nbsp;&lt;input type=text name=req_sendto size=40&gt;&amp;nbsp;&lt;input type=submit name=req_submit value=zusenden&gt;&lt;/form&gt;
&lt;hr&gt;&lt;br&gt;
&lt;form method=get action='.$thisscript.'&gt;
&lt;b&gt;Registrieren&lt;/b&gt;&lt;br&gt;
&lt;b&gt;&lt;u&gt;Achtung! Registrieren Sie sich mit dem Geraet, mit dem Sie Zugriff benoetigen&lt;/b&gt;&lt;/u&gt;&lt;br&gt;
&lt;table&gt;
&lt;tr&gt;&lt;td&gt;Name:&lt;/td&gt;&lt;td&gt;&lt;input type=text name=reg_name size=30&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Firma:&lt;/td&gt;&lt;td&gt;&lt;input type=text name=reg_company size=30&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Registrierungsschluessel:&lt;/td&gt;&lt;td&gt;&lt;input type=text name=reg_key size=10&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=2 align=center&gt;&lt;font color=red&gt;&lt;b&gt;&lt;u&gt;Nutzungsbedingungen:&lt;/u&gt;&lt;br&gt;
Mit klicken auf den Button &quot;registrieren&quot; stimmen Sie zu,dass die ihre Verbindungsdaten (Zeitpunkt und Dauer einer Verbindung, Addressierungsdaten) mitprotokolliert werden.
Dies dient lediglich zur Fehleranalyse und zur Sicherheitsueberpruefung.
Es werden keine Daten an dritte weitergegeben oder weiterverarbeitet.&lt;br&gt;&lt;br&gt;&lt;br&gt;
Sie haben (per Default) ab dem Zeitpunkt der registrierung Zugriff fuer 24 Stunden.
&lt;input type=submit name=reg_submit value=registrieren&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;
&lt;/form&gt;
&lt;/body&gt;
&lt;/html&gt;';
</pre>
<p>Das Webinterface ist recht einfach gehalten damit es auch mit mobilen Endgeräten keine Probleme gibt. Das ganze ist natürlich nach belieben anzupassen oder zu ändern <img src='http://linux-aha.de/wordpress/wp-content/plugins/tango-smilies/tango/face-wink.png' alt=';-)' class='wp-smiley' /> </p>
<p>Ich hoffe ich hab nix vergessen &#8211; falls doch einfach fragen.</p>
]]></content:encoded>
			<wfw:commentRss>http://linux-aha.de/wordpress/2012/02/23/simpler-zugang-zum-netz-oder-nicht-captiveportal-in-einfach/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Monitoring: Hardware, die Software braucht, um zu wissen, wie es der Hardware geht</title>
		<link>http://linux-aha.de/wordpress/2012/01/03/monitoring-hardware-die-software-braucht-um-zu-wissen-wie-es-der-hardware-geht/</link>
		<comments>http://linux-aha.de/wordpress/2012/01/03/monitoring-hardware-die-software-braucht-um-zu-wissen-wie-es-der-hardware-geht/#comments</comments>
		<pubDate>Tue, 03 Jan 2012 06:42:32 +0000</pubDate>
		<dc:creator>Ronny</dc:creator>
				<category><![CDATA[einfachso]]></category>
		<category><![CDATA[Hints]]></category>
		<category><![CDATA[Monitoring]]></category>
		<category><![CDATA[Systemmanagement]]></category>
		<category><![CDATA[ubuntuusers.de]]></category>
		<category><![CDATA[administration]]></category>
		<category><![CDATA[kleinigkeiten]]></category>
		<category><![CDATA[Nagios]]></category>
		<category><![CDATA[tipps]]></category>

		<guid isPermaLink="false">http://linux-aha.de/wordpress/?p=1488</guid>
		<description><![CDATA[Ein neuer HP Server DL380 G7. Die aktuelle Baureihe &#8211; tolles Teil. Mit einem kleinen &#8211; wie ich finde total unnötigen Schönheitsfehler. Hardware, die Software braucht, um zu wissen, wie es der Hardware geht? Hört sich komisch an &#8211; ist aber so. Was wollten wir tun? Wir wollten auf diese Maschinen einen VMware Server installieren.&#8230;]]></description>
			<content:encoded><![CDATA[<p><a href="http://linux-aha.de/wordpress/wp-content/uploads/2011/12/Server.png"><img class="aligncenter size-full wp-image-1489" title="ServerIcon" src="http://linux-aha.de/wordpress/wp-content/uploads/2011/12/Server.png" alt="" width="256" height="256" /></a></p>
<p>Ein neuer HP Server DL380 G7. Die aktuelle Baureihe &#8211; tolles Teil. Mit einem kleinen &#8211; wie ich finde total unnötigen Schönheitsfehler.</p>
<h2>Hardware, die Software braucht, um zu wissen, wie es der Hardware geht?</h2>
<p>Hört sich komisch an &#8211; ist aber so. Was wollten wir tun? Wir wollten auf diese Maschinen einen VMware Server installieren. Der neue VMware ESXi ist quasi eine freie Version des ESX Servers und wird direkt auf einem Server installiert, ohne dass ein Betriebssystem vorhanden sein muss (früher lief unter dem ESX ein RedHat, was heute darunter läuft weiß ich leider nicht).</p>
<p>Das ganze funktioniert auch mit der Hardware einwandfrei. Alles gut. Dann wollte ich die Maschine monitoren. Wie? Es gibt keine Agents für VMware. Also wollte ich das &#8220;Integrated Lights Out&#8221; (ILO) Board nutzen. Über diese Karte &#8211; mit separatem Netzwerkanschluss &#8211; kann man die Maschine remote administrieren (Konsole), bzw. auch direkt über die Hardware neu starten, Systeminfos einsehen (&#8230;). Unter anderem zeigt ILO auch das IML (Integrated Management Log) an. In diesem Log werden Systemmeldungen gespeichert wie z.B. Festplattenprobleme, ausgefallene Lüfter oder ähnliches.</p>
<p>Das ILO Interface kann über IPMI abgefragt werden (muss aktiviert werden). Damit lässt sich dann das Log auslesen, bzw. mit Hilfe des ipmievd das ganze auf Fehler beobachten. Der Befehl dazu lautet:</p>
<pre class="brush: bash; title: ; notranslate">

server01:~# ipmitool -I lanplus -U ilouser -H 10.10.200.98 -P &lt;password&gt; sel list
1 | 12/01/2011 | 15:10:13 | Power Supply #0x04 | Failure detected | Asserted
2 | 12/19/2011 | 07:16:21 | Power Supply #0x04 | Failure detected | Asserted
</pre>
<p>Das sah sehr gut aus. Nun sollte das mit einem Festplattenausfall getestet werden. Also eine Platte raus. Log abrufen &#8230;. nix. Keine Meldung. Hmmmm&#8230;. Bei den älteren Servern ging das.</p>
<p>Also alle Firmwarestände geprüft und am Ende mit HP in Kontakt getreten.</p>
<h3>Extrawurst</h3>
<p>Von HP haben wir dann erfahren, dass HP eine eigene Version (ich denke gepatcht mit Treibern/Modulen) des ESXi für ihre Hardware anbietet. Das ganze ist auch kostenfrei &#8211; nach Registrierung. Man benötigt diese Version, damit das ILO mitbekommt wenn eine Festplatte &#8211; oder möglicherweise auch andere Hardware &#8211; ausfällt, bzw. ein Problem hat. Verstehen muss ich das nicht, oder? Es muss auf dem System ein Agent/Modul/Treiber oder wie auch immer laufen, damit die eigene Hardware, in dem Fall eine Management Karte, den Status der Hardware mitbekommt.</p>
<p>Naja, wie dem auch sei. Nun funktioniert das ganze. Gut finde ich nicht, dass es eine solche Abhängigkeit gibt.</p>
]]></content:encoded>
			<wfw:commentRss>http://linux-aha.de/wordpress/2012/01/03/monitoring-hardware-die-software-braucht-um-zu-wissen-wie-es-der-hardware-geht/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Frohes Neues</title>
		<link>http://linux-aha.de/wordpress/2012/01/01/frohes-neues/</link>
		<comments>http://linux-aha.de/wordpress/2012/01/01/frohes-neues/#comments</comments>
		<pubDate>Sat, 31 Dec 2011 22:01:39 +0000</pubDate>
		<dc:creator>Ronny</dc:creator>
				<category><![CDATA[einfachso]]></category>

		<guid isPermaLink="false">http://linux-aha.de/wordpress/?p=1480</guid>
		<description><![CDATA[]]></description>
			<content:encoded><![CDATA[<p><a href="http://linux-aha.de/wordpress/wp-content/uploads/2011/12/tux-bonne-annee.jpg"><img class="aligncenter size-full wp-image-1481" title="tux-bonne-annee" src="http://linux-aha.de/wordpress/wp-content/uploads/2011/12/tux-bonne-annee.jpg" alt="" width="260" height="284" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://linux-aha.de/wordpress/2012/01/01/frohes-neues/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Asterisk Projekt: Season 9 – Sicherung der Patton Konfiguration</title>
		<link>http://linux-aha.de/wordpress/2011/12/27/asterisk-projekt-season-9-sicherung-der-patton-konfiguration/</link>
		<comments>http://linux-aha.de/wordpress/2011/12/27/asterisk-projekt-season-9-sicherung-der-patton-konfiguration/#comments</comments>
		<pubDate>Tue, 27 Dec 2011 06:22:23 +0000</pubDate>
		<dc:creator>Ronny</dc:creator>
				<category><![CDATA[Asterisk]]></category>
		<category><![CDATA[ubuntuusers.de]]></category>
		<category><![CDATA[asterisk]]></category>

		<guid isPermaLink="false">http://linux-aha.de/wordpress/2011/01/02/asterisk-projekt-season-9-sicherung-der-patton-konfiguration/</guid>
		<description><![CDATA[Die Konfiguration eines Patton 4118 wurde im letzten Artikel beschrieben. Damit nichts verloren geht, sollte man regelmäßig die Konfiguration sichern. Das ganze zu Fuß zu machen macht keinen Sinn also automatisch. Aber wie? Meine erste Idee Meine erste Idee war die Sicherung über Telnet. So hat man auch früher die Konfiguation von Cisco Switches gesichert.&#8230;]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><a href="http://linux-aha.de/wordpress/wp-content/uploads/2011/09/asterisk_project.png"><img class="size-full wp-image-1372 aligncenter" title="asterisk_project" src="http://linux-aha.de/wordpress/wp-content/uploads/2011/09/asterisk_project.png" alt="" width="157" height="99" /></a></p>
<p>Die Konfiguration eines Patton 4118 wurde im letzten Artikel beschrieben. Damit nichts verloren geht, sollte man regelmäßig die Konfiguration sichern. Das ganze zu Fuß zu machen macht keinen Sinn also automatisch. Aber wie?</p>
<h2>Meine erste Idee</h2>
<p>Meine erste Idee war die Sicherung über Telnet. So hat man auch früher die Konfiguation von Cisco Switches gesichert. Ein Script verbindet sich per Telnet auf das Gerät, listet die Konfiguration und sichert sie in einer Datei. Das würde mit den Pattons auch funktionieren. Allerdings gibt es eine bessere Möglichkeit.</p>
<h2>Besser ist &#8230;</h2>
<p>Es gibt die Möglichkeit die Konfiguration per TFTP zu sichern. Nicht als Cronjob auf dem Gerät selbst, sondern mit einem SNMP Aufruf (siehe SNMP Community zum schreiben im letzten Artikel). Dazu gibt es mehrere OIDs mit denen man</p>
<ol>
<li>den TFTP Server</li>
<li>den TFTP Pfad / Dateinamen</li>
</ol>
<p>setzen kann. Des Weiteren gibt es eine OID die die Sicherung ausführt und eine um den Erfolg zu prüfen.</p>
<h2>In ein Script gepackt &#8230;</h2>
<p>&#8230; sieht das ganze dann so aus:</p>
<pre class="brush: bash; title: ; notranslate">
#!/bin/bash
#
# Do Patton devices upload their current config via tftp
#  -&gt; for Backup
#
# .1.3.6.1.4.1.1768.100.3.1.1.0 = INTEGER: noOp(0)
#  -- configsave $CLIENT SMARTNODE-MIB::uploadExecute.0
# .1.3.6.1.4.1.1768.100.3.1.2.0 = STRING: &quot;10.21.3.10&quot;
#  -- SMARTNODE-MIB::uploadTftpServerAddress.0
# .1.3.6.1.4.1.1768.100.3.1.4.0 = STRING: &quot;moe-pat05_20110929.cfg&quot;
#  -- SMARTNODE-MIB::uploadTftpServerPath.0
# .1.3.6.1.4.1.1768.100.3.1.5.0 = INTEGER: success(1)
#  -- SMARTNODE-MIB::uploadStatus.0
UPLOAD_SERVER=&quot;10.21.3.10&quot;
UPLOAD_FILENAME=&quot;_`date +%Y%m%d`.cfg&quot;
UPLOAD_CLIENTS=&quot;patton01 patton02 patton03 patton04&quot;

for CLIENT in $UPLOAD_CLIENTS
 do
 snmpset -v 1 -c configsave $CLIENT .1.3.6.1.4.1.1768.100.3.1.2.0 s $UPLOAD_SERVER &gt;/dev/null
 snmpset -v 1 -c configsave $CLIENT .1.3.6.1.4.1.1768.100.3.1.4.0 s &quot;${CLIENT}${UPLOAD_FILENAME}&quot; &gt;/dev/null
 snmpset -v 1 -c configsave $CLIENT .1.3.6.1.4.1.1768.100.3.1.1.0 i 1 &gt;/dev/null
 sleep 3
 STATUS=`snmpget -v 1 -c nagios $CLIENT .1.3.6.1.4.1.1768.100.3.1.5.0`
 if [[ $STATUS =~ failed ]]
 then
 echo &quot;$CLIENT: tftp Backup via snmp failed&quot;
 fi
done
</pre>
<p>Damit liegen die Konfigurationen mit Namen patton01_20111217.cfg im TFTP Verzeichnis des &#8211; in meinem Fall &#8211; VoIP Servers. Das ganze hübsch in einen Cronjob verpackt und fertig ist die Sicherung.</p>
]]></content:encoded>
			<wfw:commentRss>http://linux-aha.de/wordpress/2011/12/27/asterisk-projekt-season-9-sicherung-der-patton-konfiguration/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Schöne Weihnachten</title>
		<link>http://linux-aha.de/wordpress/2011/12/24/schone-weihnachten/</link>
		<comments>http://linux-aha.de/wordpress/2011/12/24/schone-weihnachten/#comments</comments>
		<pubDate>Sat, 24 Dec 2011 16:00:43 +0000</pubDate>
		<dc:creator>Ronny</dc:creator>
				<category><![CDATA[einfachso]]></category>
		<category><![CDATA[xmas]]></category>

		<guid isPermaLink="false">http://linux-aha.de/wordpress/?p=1465</guid>
		<description><![CDATA[&#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; wünscht linux-aha &#160; &#160;]]></description>
			<content:encoded><![CDATA[<p>&nbsp;</p>
<p><a href="http://linux-aha.de/wordpress/wp-content/uploads/2011/12/santa.jpg"><img class="size-full wp-image-1476 alignleft" title="santa" src="http://linux-aha.de/wordpress/wp-content/uploads/2011/12/santa.jpg" alt="" width="651" height="800" /></a></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><a href="http://linux-aha.de/wordpress/wp-content/uploads/2011/12/Candle.png"><img class="aligncenter size-full wp-image-1471" title="Candle" src="http://linux-aha.de/wordpress/wp-content/uploads/2011/12/Candle.png" alt="" width="256" height="256" /></a></p>
<p>&nbsp;</p>
<h1 style="text-align: center;"><em>wünscht linux-aha</em></h1>
<p>&nbsp;</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://linux-aha.de/wordpress/2011/12/24/schone-weihnachten/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Asterisk Projekt: Season 8 – Hardwarekonfig Patton 4118 Analog Gateway</title>
		<link>http://linux-aha.de/wordpress/2011/12/21/asterisk-projekt-season-8-hardwarekonfig-patton-4118-analog-gateway/</link>
		<comments>http://linux-aha.de/wordpress/2011/12/21/asterisk-projekt-season-8-hardwarekonfig-patton-4118-analog-gateway/#comments</comments>
		<pubDate>Wed, 21 Dec 2011 05:55:27 +0000</pubDate>
		<dc:creator>Ronny</dc:creator>
				<category><![CDATA[Asterisk]]></category>
		<category><![CDATA[ubuntuusers.de]]></category>
		<category><![CDATA[asterisk]]></category>

		<guid isPermaLink="false">http://linux-aha.de/wordpress/2011/12/21/asterisk-projekt-season-8-hardwarekonfig-patton-4118-analog-gateway/</guid>
		<description><![CDATA[Der nächste Hardware &#8220;Baustein&#8221; ist ein Analog Gateway. Wie in Season 3 bereits beschrieben werden die Geräte von Patton eingesetzt. Konfiguration Die Patton Geräte sind von der Konfiguration her den Geräten von Cisco sehr ähnlich. Es gibt eine serielle Konsole, Zugriff per Telnet oder auch per Webfrontend. IP Adresse Zuerst einmal wäre eine IP Adresse&#8230;]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><a href="http://linux-aha.de/wordpress/wp-content/uploads/2011/09/asterisk_project.png"><img class="size-full wp-image-1372 aligncenter" title="asterisk_project" src="http://linux-aha.de/wordpress/wp-content/uploads/2011/09/asterisk_project.png" alt="" width="157" height="99" /></a></p>
<p>Der nächste Hardware &#8220;Baustein&#8221; ist ein Analog Gateway. Wie in <a title="Asterisk Projekt: Season 3 – malen nach Zahlen" href="http://linux-aha.de/wordpress/2011/09/28/asterisk-projekt-season-3-malen-nach-zahlen/">Season 3</a> bereits beschrieben werden die Geräte von Patton eingesetzt.</p>
<h2><a href="http://linux-aha.de/wordpress/wp-content/uploads/2011/12/4110_series_8.jpg"><img class="aligncenter size-medium wp-image-1431" title="Patton4118AnalogGateway" src="http://linux-aha.de/wordpress/wp-content/uploads/2011/12/4110_series_8-300x166.jpg" alt="" width="300" height="166" /></a>Konfiguration</h2>
<p>Die Patton Geräte sind von der Konfiguration her den Geräten von Cisco sehr ähnlich. Es gibt eine serielle Konsole, Zugriff per Telnet oder auch per Webfrontend.</p>
<h3>IP Adresse</h3>
<p>Zuerst einmal wäre eine IP Adresse hübsch. Also verbinden wir uns mit dem seriellen Kabel mit dem Gateway und nehmen das Terminalprogramm unseres Vertrauens (GtkTerm, minicom, &#8230;). Die Anmeldung geschieht mit Benutzernamen &#8220;admin&#8221; und Passwort &#8220;.&#8221;. Damit ist man angemeldet. Nun in den erweiterten Modus -&gt; enable &amp; configure.</p>
<p>IP Adresse und Default Gateway vergeben mit:</p>
<pre class="brush: bash; title: ; notranslate">
context ip router

  interface LAN
    ipaddress 10.21.3.122 255.255.255.0

context ip router
  route 0.0.0.0 0.0.0.0 10.21.3.201 0

port ethernet 0 0
  medium auto
  encapsulation ip
  bind interface LAN router
  no shutdown
</pre>
<p>Damit sollte das Gateway über die LAN Schnittstelle 0/0 über die IP 10.21.3.122 erreichbar sein.</p>
<h3>Telnet oder Web?</h3>
<p>Da das Gerät nun über das Netzwerk erreichbar ist, hat man nun die Qual der Wahl. Hat man die wirklich?? Ja hat man. Es geht prinzipiell alles über CLI als auch über das Webfrontend. Die Grundkonfiguration (oder Template) kann man &#8211; sobald ein Beispiel vorhanden ist &#8211; in einem Editor anpassen und dann einfach per Copy&amp;Paste im Terminalfenster an das Gateway weitergeben. Das geht um einiges einfacher als sich alles immer über das Webfrontend zusammen zu klicken.</p>
<p>Für andere Dinge (dazu kommen wir noch) ist das Webfrontend allerdings besser geeignet, bzw. einfacher.</p>
<h3>Die Logik</h3>
<p>Die Überschrift ist komisch &#8211; passt aber. Es ist eine eigene Logik die Patton innerhalb der Geräte anwendet. Es gibt verschiedene Contexte die auf verschiedene Interfaces gebunden werden (können) &#8211; das ganze läuft über Contexte und Bindings. Da die Konfiguration jedoch &#8211; so denke ich &#8211; bei fast allen recht gleich ist, sollte ein erklärtes Template den meisten eine gute Ausgangsbasis darstellen. Das gibt es gleich.</p>
<p><a href="http://linux-aha.de/wordpress/wp-content/uploads/2011/12/patton_call-router.png"><img class="aligncenter size-medium wp-image-1432" title="patton_call-router" src="http://linux-aha.de/wordpress/wp-content/uploads/2011/12/patton_call-router-300x89.png" alt="" width="300" height="89" /></a></p>
<p>Die Logik zum Routen der Calls sieht so aus, dass man alles über 3 &#8220;Tabellen&#8221; abhandelt (kann man bestimmt auch anders machen). Dadurch ist man flexibel für viele Anforderungen und hat trotzdem einen relativ kompakten überblick über die aktuelle Konfiguration (Nebenstellen &lt;-&gt; Ports). Ein Anruf von &#8220;Außen&#8221; (über LAN an das Gateway) kommt zuerst einmal in das Routing Table &#8220;RT_SIP_IN&#8221;. Dort kann beispielsweise die Nummer bearbeitet werden (nur ein Beispiel), bevor es dann weitergeht in die &#8220;RT_LOCAL&#8221;. Innerhalb der RT_LOCAL wird dann entschieden an welchen Port der Anruf weitergeleitet wird. Dazu wird einfach die Nummer der Nebenstelle direkt auf ein Interface gebunden. Damit ist der Anruf zugestellt.</p>
<p>Ein Anruf von einem analogen Port aus funktioniert vergleichbar. Der Anruf landet zuerst in der Routing Table &#8220;RT_FXS_IN&#8221;. Dort kann je nach dem die ein oder andere Funktion ausgeführt werden, bevor es dann weitergeht in die RT_LOCAL. Dort wird entschieden wohin der Anruf geht. Würde der Anruf in unserem Beispiel an die 10 gehen, so würde der Anruf innerhalb der RT_LOCAL direkt an das betreffende Interface weitergereicht. Der Anruf würde also innerhalb des Patton Gateways abgehandelt. Trifft jedoch die angerufene Nummer nicht auf eine der lokalen Nebenstellen, so wird der Anruf an den default Eintrag weitergeleitet. Also an das SIP Interface, welches auf ein zentrales Gateway oder auf die Asterisk zeigen sollte. In unserem Beispiel (siehe <a title="Asterisk Projekt: Season 3 – malen nach Zahlen" href="http://linux-aha.de/wordpress/2011/09/28/asterisk-projekt-season-3-malen-nach-zahlen/">Season 3</a>) gehen alle Anrufe der analogen Gateways über das zentrale Patton Gateway (E1 Gateway zum PSTN). Dadurch bleiben Analoge Anrufe komplett in der Hand der Gateways (also reine Hardware) ohne dass eine Modulation von Asterisk benötigt wird. Das ist gerade für Faxe oder Modems ein wichtiger Vorteil.</p>
<h4>Konfigbeispiel</h4>
<p>Ich versuche das ganze durch Kommentare möglichst verständlich zu machen <img src='http://linux-aha.de/wordpress/wp-content/plugins/tango-smilies/tango/face-wink.png' alt=';-)' class='wp-smiley' /> </p>
<pre class="brush: bash; title: ; notranslate">
#----------------------------------------------------------------#
#                                                                #
# SN4118/JS/EUI                                                  #
# R5.8 2011-07-01 H323 SIP FXS FXO                               #
# 2011-10-31T10:12:08                                            #
# SN/00A0BA052727                                                #
# Generated configuration file                                   #
#                                                                #
#----------------------------------------------------------------#

cli version 3.20
clock local default-offset +02:00
webserver port 80 language en
# die SNMP Community zum auslesen von Statusinfos
snmp community nagios ro
# die SNMP Community zu schreiben von Werten
# diese ist sehr interessant und wichtig zum sichern der Konfiguration!!
snmp community configsave rw
# nun folgend die Hosts die SNMP abfragen duerfen und welche Rechte sie haben
snmp host 10.10.210.36 security-name monitoring
snmp host 10.10.210.36 security-name configsave
snmp host 10.21.3.10 security-name configsave
# NTP, die richtige Zeit ist wichtig
sntp-client
sntp-client server primary 10.10.210.201 port 123 version 4
# Hostname nicht nur fuer SNMP
system hostname patton03
system location &quot;Schrank 1&quot;
system contact netzwerkmanagement@einefirma.de

system

  ic voice 0
    low-bitrate-codec g729

profile ppp default

profile tone-set default

profile voip default
  codec 1 g711alaw64k rx-length 20 tx-length 20
  codec 2 g711ulaw64k rx-length 20 tx-length 20
  rtp traffic-class local-default
  # folgend nun diverse Einstellungen fuer die Faxuebertragung
  # die sich bewaehrt haben
  fax transmission 1 relay t38-udp
  fax redundancy low-speed 2 high-speed 3
  fax dejitter-max-delay 60
  fax max-bit-rate 9600
  fax detection fax-frames
  # gleiches fuer Modems
  modem transmission 1 bypass g711alaw64k rx-length 10 tx-length 10
  modem dejitter-max-delay 60
  no modem detection on-remote-fax-request

profile pstn default

profile ringing-cadence default
  play 1 1000
  pause 2 4000

profile sip default
  no autonomous-transitioning

profile aaa default
  method 1 local
  method 2 none

context ip router

  interface LAN
    # IP Adresse des LAN Interfaces
    ipaddress 10.21.3.122 255.255.255.0

context ip router
  # Routen werden hier gesetzt, folgend die Default Route
  route 0.0.0.0 0.0.0.0 10.21.3.201 0

context cs switch
  digit-collection timeout 3

  # im folgenden werden die Routing Tables definiert
  # RT_SIP_IN
    routing-table called-e164 RT_SIP_IN
    route default dest-table RT_LOCAL

  # RT_LOCAL (die zentrale Tabelle)
  # inklusive einiger Portzuordnungen
  routing-table called-e164 RT_LOCAL
    route default dest-interface IF_SIP_patton01
    route 334 dest-interface IF_FXS0
    route 275 dest-interface IF_FXS1
    route 285 dest-interface IF_FXS2
    route 311 dest-interface IF_FXS4
    route 312 dest-interface IF_FXS5
    route 322 dest-interface IF_FXS7
    route 270 dest-interface IF_FXS3
    # der folgende Service ist eine &quot;Hunt-Group&quot;
    # dabei wird auf mehrere verteilt (round-robin like)
    route 310 dest-service DFUE_310

  # RT_FXS_IN (Verbindung von analog Ports ausgehend)
  routing-table called-e164 RT_FXS_IN
    route default dest-table RT_LOCAL
    route .T dest-table RT_LOCAL

  # das Interface zur zentralen Patton
  interface sip IF_SIP_patton01
    bind context sip-gateway GW_SIP
    # die Routing Table auf das Interface binden
    route call dest-table RT_SIP_IN
    # die IP des Gateways
    remote 10.21.3.120

  # nun kommen die einzelnen Interfaces
  interface fxs IF_FXS0
    # binden an die RT_FXS_IN
    route call dest-table RT_FXS_IN
    caller-id-presentation pre-ring
    # die Nummer (fuer CLI)
    subscriber-number 334

  # und so weiter, fuer jedes Interface
  interface fxs IF_FXS1
    route call dest-table RT_FXS_IN
    subscriber-number 275

  interface fxs IF_FXS2
    route call dest-table RT_FXS_IN
    subscriber-number 285

  interface fxs IF_FXS3
    route call dest-table RT_FXS_IN
    subscriber-number 270

  interface fxs IF_FXS4
    route call dest-table RT_FXS_IN
    subscriber-number 311

  interface fxs IF_FXS5
    route call dest-table RT_FXS_IN
    subscriber-number 312

  interface fxs IF_FXS6
    route call dest-table RT_FXS_IN
    subscriber-number 313

  interface fxs IF_FXS7
    route call dest-table RT_FXS_IN
    subscriber-number 322

  # Das ist die Hunt-Group
  # es wird nach quasi rr verteilt auf
  # zwei Ports (siehe weiter unten)
  service hunt-group DFUE_310
    cyclic
    drop-cause normal-unspecified
    drop-cause no-circuit-channel-available
    drop-cause network-out-of-order
    drop-cause temporary-failure
    drop-cause switching-equipment-congestion
    drop-cause access-info-discarded
    drop-cause circuit-channel-not-available
    drop-cause resources-unavailable
    drop-cause user-busy
    # diese beiden Ports spielen mit
    route call 1 dest-interface IF_FXS4
    route call 2 dest-interface IF_FXS5

context cs switch
  no shutdown

context sip-gateway GW_SIP
   # hier wird das lokale interface erstellt, welches
   # SIP Pakete entgegen nimmt
   interface GW_IF
    bind interface LAN context router port 5060

context sip-gateway GW_SIP
  no shutdown

port ethernet 0 0
  medium auto
  encapsulation ip
  bind interface LAN router
  no shutdown

# nun wird jeder Port konfiguriert
port fxs 0 0
  encapsulation cc-fxs
  # gebunden wird dieses Interface an den Context IF_FXS0 (s. oben)
  bind interface IF_FXS0 switch
  # aktivieren
  no shutdown

# und so weiter fuer jeden Port
port fxs 0 1
  encapsulation cc-fxs
  bind interface IF_FXS1 switch
  no shutdown

port fxs 0 2
  encapsulation cc-fxs
  bind interface IF_FXS2 switch
  no shutdown

port fxs 0 3
  encapsulation cc-fxs
  bind interface IF_FXS3 switch
  no shutdown

port fxs 0 4
  encapsulation cc-fxs
  bind interface IF_FXS4 switch
  no shutdown

port fxs 0 5
  encapsulation cc-fxs
  bind interface IF_FXS5 switch
  no shutdown

port fxs 0 6
  encapsulation cc-fxs
  bind interface IF_FXS6 switch
  no shutdown

port fxs 0 7
  encapsulation cc-fxs
  bind interface IF_FXS7 switch
  no shutdown
</pre>
<p>Dieses Konfiguarationsbeispiel sollte für viele Installationen ein guter Anfangspunkt sein. Wenn ihr sie anpasst und einspielt, dann könnt ihr über die Weboberfläche die Routing Tables ganz einfach administrieren (Nummern &lt;-&gt; Ports). Das sollte dann nach der Erstkonfiguration auch das sein, was man so im laufenden Betrieb machen muss.</p>
<p><a href="http://linux-aha.de/wordpress/wp-content/uploads/2011/12/Bildschirmfoto-am-2011-12-19-075921.png"><img class="aligncenter size-medium wp-image-1437" title="Patton_4118_WebRT" src="http://linux-aha.de/wordpress/wp-content/uploads/2011/12/Bildschirmfoto-am-2011-12-19-075921-300x226.png" alt="" width="300" height="226" /></a>Übrigens: Um einen Eintrag zu ändern (gleiche Nummer, anderes Interface) legt man einfach einen neuen Eintrag mit der gleichen Nummer an <img src='http://linux-aha.de/wordpress/wp-content/plugins/tango-smilies/tango/face-wink.png' alt=';-)' class='wp-smiley' /> </p>
<h4>Wichtig noch &#8230;</h4>
<p>Die Konfiguationsänderungen müssen &#8211; Cisco like &#8211; auf der CLI per</p>
<pre>copy running-config startup-config</pre>
<p>gesichert werden, bzw. auf dem Webinterface über &#8220;save&#8221;. Ansonsten sind die Änderungen bei einem Neustart verloren.</p>
<h3>Das war die simple Variante</h3>
<p>Was ich Euch hier gezeigt habe ist eine ganz simple Variante der Konfiguration. Man kann mit den Patton Gateways noch sehr viel mehr an Funktionen und allerhand Schweinereien treiben. Ein paar Funktionen werde ich noch zeigen, wenn es an das zentrale Gateway geht.</p>
]]></content:encoded>
			<wfw:commentRss>http://linux-aha.de/wordpress/2011/12/21/asterisk-projekt-season-8-hardwarekonfig-patton-4118-analog-gateway/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

