[V] DLNA Server – Hostapd-asterisk

Hostapd Installation

Damit der fiese O2 Router verschwinden konnte, fehlte mir nur noch ein WLAN Access Point.

Das ist abgesehen von der recht spezifischen Hardware, die man dafür braucht recht einfach zu bewerkstelligen.

Dafür braucht man neben dem Backports Kernel mit ath9k Treiber nur das Programm hostapd.

EDIT: Mit Debian squeeze kann man den Standardkernel nehmen, da ist der ath9k schon drin

Kompilation

Die Homepage dazu ist http://hostap.epitest.fi und die Sourcen zieht man sich am besten über GIT, da das .tar.gz auf der Page immer etwas veraltet ist.

GIT ist bei uns bereits installiert und so kann man sich direkt ans ziehen machen.

mkdir /root/installation
cd /root/installation
git clone git://w1.fi/srv/git/hostap.git

Jetzt muss man in der Compiler config noch das Treiberinterface und 802.11n aktivieren.

Dafür muss man die mitgelieferte Datei defconfig nach .config kopieren und darin zwei Sachen aktivieren.

cd hostap/hostapd
cp defconfig .config
nano .config

Folgende Zeilen müssen aktiviert werden (Die Raute davor wegmachen):

# Driver interface for drivers using the nl80211 kernel interface
CONFIG_DRIVER_NL80211=y

# IEEE 802.11n (High Throughput) support
CONFIG_IEEE80211N=y

Danach nur noch “make” eintippen und das Programm kompiliert hoffentlich sauber durch.

Ggf. müsst Ihr libnl-dev installieren, ich habe das damals selbst kompiliert, daher sollte das bei euch fehlen.

apt-get install libnl-dev

Wenn die Kompilation durchläuft, habt Ihr eine “hostapd” Binary in dem Verzeichnis.

Die muss ins /usr/local/bin kopiert werden und fertig.

Konfiguration

Jetzt muss noch eine Konfigurationsdatei her, die nach /etc/hostapd/hostapd.conf muss.

Die sieht wie folgt aus:

interface=wlan0
driver=nl80211
ssid=netzname
country_code=DE
hw_mode=g
channel=6
ieee80211n=1
ht_capab=[HT40-][SHORT-GI-40][DSSS_CCK-40]

wpa=3
wpa_passphrase=passwort
wpa_key_mgmt=WPA-PSK
wpa_pairwise=TKIP
rsn_pairwise=CCMP

tx_queue_data3_aifs=7
tx_queue_data3_cwmin=15
tx_queue_data3_cwmax=1023
tx_queue_data3_burst=0
tx_queue_data2_aifs=3
tx_queue_data2_cwmin=15
tx_queue_data2_cwmax=63
tx_queue_data2_burst=0
tx_queue_data1_aifs=1
tx_queue_data1_cwmin=7
tx_queue_data1_cwmax=15
tx_queue_data1_burst=3.0
tx_queue_data0_aifs=1
tx_queue_data0_cwmin=3
tx_queue_data0_cwmax=7
tx_queue_data0_burst=1.5

wme_enabled=1
wme_ac_bk_cwmin=4
wme_ac_bk_cwmax=10
wme_ac_bk_aifs=7
wme_ac_bk_txop_limit=0
wme_ac_bk_acm=1
wme_ac_be_aifs=3
wme_ac_be_cwmin=4
wme_ac_be_cwmax=10
wme_ac_be_txop_limit=0
wme_ac_be_acm=1
wme_ac_vi_aifs=2
wme_ac_vi_cwmin=3
wme_ac_vi_cwmax=4
wme_ac_vi_txop_limit=94
wme_ac_vi_acm=1
wme_ac_vo_aifs=2
wme_ac_vo_cwmin=2
wme_ac_vo_cwmax=3
wme_ac_vo_txop_limit=47
wme_ac_vo_acm=1

Hier müsst Ihr die zwei Werte wpa_passphrase und ssid anpassen mit eurem Netzwerknamen und Passwort.

Eine komplett dokumentierte hostapd.conf gibts hier
http://hostap.epitest.fi/gitweb/gitweb.cgi?p=hostap.git;a=blob_plain;f=hostapd/hostapd.conf

Die Kanäle

Zum 300mbit WLAN ist folgendes zu sagen:

Damit Ihr die vollen 300mbit bekommt, muss der Luftraum bei euch frei sein.

Das System braucht 4 freie Kanäle, für 300mbit.

Das ist das “HT40+”, damit wird der aktuelle Kanal und 3 Kanäle darüber gesichert für euer Netz.
Bei HT40- wären es die drei Kanäle darunter.

Das funktioniert übrigens nur bei den Kanälen 1-9.

Ich komme hier mit den 4 anderen Netzwerken im Haus mit HT40+ auf 5mb/s Übertragung auf den Samba Server und mit HT40- auf 7mb/s.

Da muss man etwas experimentieren.

Jedenfalls sind 5mb und 7mb schonmal weitaus mehr als mit nem 54mbit Netzwerk.

Am besten geht Ihr mit einem Netzwerkscanner durch eure Bude und guckt welcher Kanal am besten für euch geeignet ist.

Ich mach das bei mir mit dem Programm “Wifi Analyzer” für mein Android Telefon. Gibts im Market.

Unter Windows kann man mit “Netstumbler” ganz gut Netzwerke scannen, unter Linux mit “kismet” und auf dem Mac mit “kismac”.

Bei mir war der Kanal 6 als einziger im Haus gar nicht genutzt, also habe ichs mal mit HT40- auf Kanal 6 versucht.

Nutzte nichts, ich krieg hier keine vollen 300mbit hin.

Ich hab lange gebraucht um rauszufinden, was überhaupt das Problem war.

Im Debugmode sieht man was passiert:

hostapd -d /etc/hostapd/hostapd.conf

Dann wird das Programm im Vordergrund gestartet und man sieht kurz nach dem Start so etwas wie “zuwenig Kanäle frei für HT40, benutze statt dessen nur normale 54mbit”.

Initscript

Damit der Daemon gestartet werden kann, brauchen wir jetzt noch ein Initscript.

Meins sieht so aus:

#!/bin/sh

### BEGIN INIT INFO
# Provides: hostapd
# Required-Start: $remote_fs
# Required-Stop: $remote_fs
# Should-Start: $network
# Should-Stop:
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Advanced IEEE 802.11 management daemon
# Description: Userspace IEEE 802.11 AP and IEEE 802.1X/WPA/WPA2/EAP
# Authenticator

### END INIT INFO

PATH=/sbin:/bin:/usr/sbin:/usr/bin
DAEMON=/usr/local/bin/hostapd
NAME=hostapd
DESC=”advanced IEEE 802.11 management”
PIDFILE=/var/run/hostapd.pid

test -x $DAEMON || exit 0

if [ -s /etc/default/hostapd ] ; then
. /etc/default/hostapd
fi

if [ -z “$DAEMON_CONF” ]; then
DAEMON_CONF=/etc/hostapd/hostapd.conf
fi

DAEMON_OPTS=”-B -P $PIDFILE $DAEMON_OPTS $DAEMON_CONF”

. /lib/lsb/init-functions

case “$1” in

start)
log_daemon_msg “Starting $DESC”
if [ “$RUN_DAEMON” != “yes” ]; then
log_progress_msg “disabled via /etc/default/hostapd”
log_end_msg 0
exit 0
fi
log_progress_msg “$NAME”
start-stop-daemon –start –oknodo –quiet \
–exec $DAEMON –pidfile $PIDFILE — $DAEMON_OPTS > /dev/null
log_end_msg “$?”
;;

stop)
log_daemon_msg “Stopping $DESC”
log_progress_msg “$NAME”
start-stop-daemon –stop –oknodo –quiet \
–exec $DAEMON –pidfile $PIDFILE
log_end_msg “$?”
;;

reload)
log_daemon_msg “Reloading $DESC”
log_progress_msg “$NAME”
start-stop-daemon –stop –signal HUP \
–exec $DAEMON –pidfile $PIDFILE
log_end_msg “$?”
;;

restart|force-reload)
$0 stop
sleep 8
$0 start
;;

*)
N=/etc/init.d/$NAME
echo “Usage: $N {start|stop|restart|force-reload}” >&2
exit 1
;;

esac

exit 0

Danach muss das Script noch in die rc*.d Ordner.

Das geht per

update-rc.d hostapd defaults

Zusätzlich braucht man noch die Datei /etc/default/hostapd:

# Defaults for hostapd initscript
# See /usr/share/doc/hostapd/README.Debian for information
# about alternative methods of managing hostapd.
# Uncomment the following line to run hostapd on startup
# WARNING! Depending on your configuration,
#          you may lose access via your wireless interface.
#
RUN_DAEMON=”yes”

# Uncomment the following line, and provide the absolute
# path to one or more configuration files to be used by the
# hostapd daemon. If left commented, the daemon will use
# /etc/hostapd/hostapd.conf
#

#DAEMON_CONF=”/etc/hostapd/hostapd.conf”

# Additional daemon options
#       -d   show more debug messages (-dd for even more)
#       -K   include key data in debug messages
#       -t   include timestamps in some debug messages
#
#DAEMON_OPTS=”-dd”

Jetzt sollte der hostapd per “/etc/init.d/hostapd start” startbar sein und Ihr solltet euch per WLAN verbinden können mit dem WPA-PSK.

Surfen sollte auch drin sein.

Nach dem Start taucht übrigens im ifconfig das neue Interface “mon.wlan0” auf.

Daran sieht man auch, dass der Hostapd funktioniert.

Loggen tut er übrigens ins /var/log/syslog

Asterisk Installation

Damit ich telefonieren konnte, brauchte ich einen Asterisk Server und ein passendes Telefon.

Der O2 Router hatte einen analogen Telefonanschluss, in den ich mein Telefon hier gesteckt hab.

Da der Router und die ganze Telefonkabelei weg musste, brauchte ich einen VoIP Server und ein WLAN fähiges Handy.

SIP Handy

Meine Wahl fiel auf das T-COM T-One TC300. Das gibts blöderweise nicht mehr im Handel, aber auf eBay gibts die ab und zu.

Ich hab meins da für nur 30eur ersteigert, dafür kann mans nicht selber machen…

Das schöne ist, dass in dem Handy zusätzlich eine normale SIM Karte steckt, somit hatte ich auch einen Platz für meine alte Handynummer.

Das Teil ist baugleich mit dem Arcor Twintel und basiert auf dem Pirelli DP-L10.

Falls ihr von den drei Telefonen also eins findet, zugreifen!

Es geht natürlich auch jedes andere VoIP Telefon oder eine SIP Client Software auf Rechner oder Smartphone.

Die neuen Nokia Handys haben alle einen SIP Client und WLAN eingebaut.

Unter Android ist das beste, was man kriegen kann “SIPDroid”, das funzte aber leider nicht auf meinem SonyEricsson X10.

Asterisk

Die  Installation des VoIP Servers asterisk ist jetzt mal eine ganz andere Hausnummer, es gibt wohl kaum ein Programm auf diesem Planeten, was noch komplizierter zu konfigurieren ist als asterisk.

Die Konfigurationsdateien sind ein völlig unüberschaubares Durcheinander von gotos, includes und Sections in die aus dem nichts reingesprungen wird.

Daher biete ich euch hier auch einfach nur meine Configs zum Download an und bespreche die kurz.

Ich verstehe es selber noch nicht so ganz 🙂

Meine Configs gibts hier:

http://www.myangelone.de/files/asterisk.tar.gz

Die Dateien müssen entpackt werden und nach /etc/asterisk

Den Ordner “muell” braucht Ihr nicht, aber der “manager.d” muss mit.

Ich benutze mein asterisk mit einem Account von sipgate.de der ist umsonst (solange man nicht raustelefoniert) und funktioniert grandios.

Wenn Ihr einen anderen Anbieter habt, müsst Ihr in Erfahrung bringen wie die Connection Strings dafür sind.

Eventuell gehen auch die von Sipgate, wenn Ihr Benutzer und Passwort in sip.conf anpasst.

O2 VoIP geht übrigens nicht so einfach mit asterisk.

Die erwarten, dass man über einen zweiten ATM Kanal zu deren VoIP Netzwerk connected und die Verbindung zum VoIP Server über diesen zweiten Kanal aufbaut.

Das funktioniert nur, wenn man ein internes DSL Modem im Rechner hat. Über pppoe kann man keine zwei Kanäle aufbauen.

Versucht mans trotzdem über die normale Internet Leitung, bekommt man zwar einen Connect zum Server aber man hört den angerufenen nicht.

Anpassen der Konfigdateien

Im Prinzip müsst Ihr jetzt nur 3 Konfigurationsdateien anpassen:

/etc/asterisk/sip.conf

Hier muss oben in der 6. Zeile der register String angepasst werden.

Hier muss username und passwort sowie das @servername rein für euren Provider.

das /sipgate_nummer ist die Bezeichnung dieser Verbindung, die brauchen wir später in der extensions.conf

Weiter unten werden Endgeräte und Leitungen konfiguriert.

Endgeräte haben “type=friend” und Leitungen “type=peer”, in den Klammern oben stehen die dazugehörigen Namen und “secret” ist das Passwort mit dem man sich verbindet.

Das tc300 Telefon ist selbsterklärend, aber die Sipgate Section darunter ist komplizierter.

Hier wird im Prinzip nochmal die selbe Verbindung wie oben im register String beschrieben, aber mit mehr Parametern.

Manche Provider brauchen andere Einstellungen, wie zum Beispiel “caninvite=yes”.

Wichtig ist, dass in den Klammern die komplette Sipgate Telefonnummer steht, inklusive Vorwahl.

Dann muss noch Kundennummer und Passwort eingegeben und es geht weiter zur nächsten Konfigurationsdatei.

/etc/asterisk/voicemail.conf

Hier muss nur in Zeile 232 die Anrufbeantworter-Pin angepasst werden.

Dann müsst noch die Mailadresse ändern, an die die neuen Nachrichten geschickt werden.

Auch könnt Ihr hier den Namen des Anrufbeantworters ändern, ich habe den tc300 genannt.

/etc/asterisk/extensions.conf

Das ist die Datei, in der sich eigentlich alles abspielt.

Hier wird das gesamte Verhalten der Telefonanlage beschrieben, was wann getan werden soll.

Wir fangen an, indem wir oben in der zweiten Zeile den Namen des Haupttelefons anpassen.

Das ist das, was in sip.conf über dem ersten Telefon in den Klammern steht.

Dann wird in Zeile 9 die interne Nummer dieses Telefons beschrieben, in dem Fall die 99.

Ext 1 bis 5 sind erstmal uninteressant.

Wichtig ist jetzt wieder Zeile 48, hier wird definiert, was passiert, wenn wir raustelefonieren.

Hier muss die komplette Telefonnummer mit Vorwahl eingegeben werden.

In Zeile 49 auch.

Wenn ihr nicht wollt, dass man beim raustelefonieren eure Nummer sieht, lasst Ihr das SetCallerId weg:

; my dialplan
; Normal über Sipgate raus
; exten => _X.,1,SetCallerId,sipgate-telefonnummer-mit-worwahl
exten => _X.,1,Dial(SIP/${EXTEN}@sipgate-telefonnummer-mit-worwahl)
exten => _X.,n,Hangup

Hier sieht man, dass so Sections durchnummeriert sind.

Es muss immer einen Schritt 1 geben, die Schritte danach müssen durchnummeriert sein oder statt einer Nummer ein “n” haben.

Beim Dial muss die Nummer übrigens rein, damit der Asterisk weiss, über welche Leitung es raus gehen soll.

Das ist genau genommen der Text in den Klammern der Sipgate Leitung in sip.conf

Wenn ihr die Leitung da [humpf] genannt habt, muss hier ein

exten => _X.,1,Dial(SIP/${EXTEN}@humpf)

hin.

In Zeile 73 wirds jetzt auch wieder interessant.

Hier springt der asterisk hin, wenn ein Anruf über Sipgate rein kommt.

Wenn man genau hinsieht, steht hier nämlich das “sipgate_nummer” das wir in sip.conf hinter dem register String oben hatten.

Angepasst werden muss hier nichts.

Das sind dann auch alle Einstellungen, die Ihr machen müsst um übern asterisk angerufen werden zu können und um raustelefonieren zu können.

Die Funktionen

Kommen wir zunächst zurück zu den Ext1-5 von eben.

Das sind Kurzwahlen, die man wählen kann, woraufhin die Telefonanlage irgendwas macht.

Wenn man die 1 wählt, kommt man in das Anrufbeantwortermenü.

Das Voicemenü da funktioniert bei mir irgendwie nicht so richtig, ich nehme an, dass es an meinem Telefon liegt.

Is aber auch egal, neue Nachrichten gibts ja eh per Mail.

Wenn man die 2 wählt, kommt man in das Echotest Programm, da kann man sich selber was erzählen und hört dann wie es um die Sprachqualität steht.

3 ist auch ein Testprogramm, bei dem man seine eigene Telefonnummer vorgelesen bekommt.

Bei Kurzwahl 4 wird einem die aktuelle Uhrzeit vorgesagt.

5 ist jetzt wieder interessanter, das ist das DND Makro.

Hiermit kann man den DND Mode aktivieren oder deaktivieren.

Wenn man im DND Mode ist, werden ankommende Anrufe direkt an den Anrufbeantworter weitergegeben und das Telefon klingelt nicht mehr.

Ansonsten ist noch zu sagen, dass wenn man grade spricht oder das Endgerät nicht erreichbar ist (weil der Akku leer ist oder man aus der WLAN Reichweite ist) der asterisk neue Anrufe direkt an die Mailbox weitergibt.

Ihr könnt den asterisk jetzt per “/etc/init.d/asterisk restart” neustarten und alles sollte laufen.

Wenn irgendwas nicht stimmt, könnt Ihr das gut in der asterisk Konsole nachvollziehen.

Da rein kommt man als root per

asterisk -r

Und dann kann man per “set verbose 3” und “module reload” die Verbosity hochsetzen und die Konfiguration neu laden.

Hier sieht man jetzt z.B. alle paar Minuten, wie die Telefone sich neu registrieren und Verbindungsfehler mit Sipgate sollte man so auch mitbekommen.

Per “sip show peers” sieht man, ob man bei Sipgate eingeloggt ist und ob die Telefone registriert sind.

Wenn man irgendwas macht, z.B. die 1 anwählen sieht man hier jeden Schritt, den die Telefonanlage durchführt.

Wenn man etwas falsch konfiguriert hat und die ankommenden anrufe im Nirvana landen, sollte einem verbose3 auch Anhaltspunkte geben, wo diese einschlagen.

Man kann jetzt in einer zweiten Session die Konfigurationsdateien anpassen und mit “module reload” neuladen ohne den Dienst beenden zu müssen.

Bevor man die Konsole mit “quit” verlässt, sollte man per “set verbose 0” den Debug Mode wieder ausschalten.

Per “help” kann man sich alle möglichen Befehle anzeigen lassen.

Spielt hier einfach etwas rum, ich verstehe es wie gesagt auch noch nicht so richtig, aber meine aktuelle Konfiguration reicht für mich zur Zeit.

…zu Teil fünf

Comments on this post

  1. klasse gemacht !! Tolles Projekt!!
    Warte schon auf ps3mediasevrer-Teil …

    Nur so eine Idee: kann man nicht ein Modem-mit durchgeschliffener Phone-Line als Ausgang hinter dem Asterix nutzen ?

  2. Moin,
    das geht auch, ist aber komplizierter und sicherlich unschön.
    Du brauchst nur ein altes PCI Softwaremodem mit Intel MD 537 oder Motorola 62802 Chipsatz.
    Mit dem Zaptel Treiber erkennt das Asterisk das Teil dann als Leitung und du kannst es nutzen.
    Such auf Ebay nach “intel modem” und nimm das billigste was du kriegen kannst 🙂

    http://cgi.ebay.de/DELL-56K-V-92-PCI-Modem-Intel-537EPG-P-N-Y2677-/390250341117

    Die gibts wie Sand am Meer.

    http://www.alternate.de/html/shop/productDetails.html?artno=O1NK01
    Das sollt auch gehen.

    Mit dem nächsten Teil sagste was.
    Hab ich verplant bisher 🙂
    Ich guck, dass ich den jetzt mal fertig schreib.

Leave a Reply

Your email address will not be published. Required fields are marked *

Time limit is exhausted. Please reload CAPTCHA.