RaumrouterPi
Der RaumrouterPi ist ein Raspberry 3B+ mit einer 340GB Festplatte, der folgende Funktionen übernimmt:
- Raum-Gateway (Default-GW 10.23.42.1) und Natting ins Telekomrouternetz 192.168.2.0/24
- DNS-Server für den Raum
- DHCP-Server für den Raum
- Asterisk Telefonanlage
- Dateiablage (geplant)
Installation
Der RaumrouterPI läuft unter einem Standard Raspbian von www.raspberrypi.org. Die Besonderheit ist, dass der RaumrouterPI direkt von der Festplatte (WD Pidrive) bootet und nicht von einer SD-Karte bootet. Dieses Setup wurde gewählt, da zum einen damit gleich ein Dateiablagesystem realisiert werden kann und zum anderen auch Logfiles persistent gespeichert werden können, ohne dass durch ständige Zugriffe auf gleiche Speicherbereiche eine SD-Karte zerstört wird. Für die Installation auf dem Pidrive muss dieses zunächst an einem PC oder MAC mit FAT formatiert werden (MBR, nicht GPT). Dann sind die Installationsfiles aus dem Noobs-Download auf die Platte zu kopieren und diese mit dem RaspberryPi zu verbinden. Die Installation läuft genauso ab, wie man es von einer SD-Karte gewohnt ist. Einzige Ausnahme: Bis der RaspberryPI vom Pidrive beginnt zu booten, vergeht laaaaange Zeit (mehrere Minuten). Dies ist glücklicherweise aber nur bei der Installation der Fall.
Setup als Raum-Gateway
Damit der RaumrouterPi als Gateway arbeitet, ist zum einen IP-Routing zu aktivieren und zum anderen NAT einzuschalten. Zunächst bekommt der Router aber mal zwei IP-Adressen:
# Anpassung von /etc/network/interfaces # The primary network interface auto eth0 eth0 iface eth0 inet static address 10.23.42.1 netmask 255.255.254.0 iface eth0 inet static address 192.168.2.3/24 gateway 192.168.2.1
Aktivierung Routing:
#IP-Forwarding aktivieren in Datei /etc/sysctl.conf net.ipv4.ip_forward=1 #NAT aktivieren sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE #Installation iptables-persistent sudo apt-get install iptables-persistent
DNS und DHCP-Server
Um für den Raum als DNS- und DHCP-Server zu dienen wird dnsmasq eingesetzt:
#Installation dnsmasq sudo apt-get install dnsmasq
- Editieren der Datei /etc/dnsmasq.conf
#Telekom Speedport Hybrid als Upstream DNS-Server: server 192.168.2.1^ #DHCP-Range: dhcp-range=10.23.43.1,10.23.43.254,255.255.254.0,12h #DHCP-Option 150 (TFTP-Server für die Cisco-IP-Phones dhcp-option=150,10.23.42.1 #TFTP-Server aktivieren: enable-tftp tftp-root=/var/tftp tftp-no-fail
- Setzen einiger statischer DNS-Namen (einfach über die /etc/hosts -> wird von dnsmasq beachtet)
10.23.42.1 asterisk 10.23.42.10 bigbrother 10.23.42.12 lampi 10.23.42.30 phone-central 10.23.42.31 phone-lounge 10.23.42.32 phone-workshop 10.23.42.20 scx-4623fn 10.23.42.21 calculator
Asterisk
Notwendige Anpassungen im Speedport
Damit Telefonie von einem nachgeschalteten SIP-Device über den Speedport Hybrid funktioniert, ist es auch irgendwelchen unbekannten Gründen notwendig, einge Ports fest der DSL-Schnittstelle zuzuordnen. Dies kann im Webinterface des Speedport Hybrid erledigt werden, siehe Screenshot:
Für die Telefonie-Funktionen muss auf dem RaspberryPI Asterisk installiert werden:
sudo apt-get install asterisk
Die Konfiguration erfolgt komplett über Files im Ordner /etc/asterisk
Angepasst werden müssen aber nur zwei Dateien:
Teilnehmer und PSTN-Anschluss
Die internen Teilnehmer, wie auch der Telekom-Festnetzzugang werden in der sip.conf definiert:
[general] allowguest=no ;bindport = 5060 ;bindaddr = 10.23.42.10 qualify = yes ;disable = all allow = alaw ;allow = ulaw videosupport = no dtmfmode = rfc2833 srvlookup = yes ;localnet=10.23.42.0/255.255.254.0 register => 062112285323:<telekom-passwort>:<telekom-teilnehmernummer>-0001@tel.t-online.de@tel.t-online.de/062112285323~480 directmedia=no [630] permit=10.23.42.0/255.255.254.0 type=friend context=phones host=dynamic secret=XXXX [620] description=Zentrale permit=10.23.42.0/255.255.254.0 type=friend context=phones host=dynamic secret=XXXX nat=no canreinvite=no callerid="Zentrale <620>" dtmfmode=rfc2833 [621] description=Sitzecke permit=10.23.42.0/255.255.254.0 type=friend context=phones host=dynamic secret=XXXX nat=no canreinvite=no callerid="Sitzecke <621>" dtmfmode=rfc2833 [622] description=Werkstatt permit=10.23.42.0/255.255.254.0 type=friend context=phones host=dynamic secret=XXXX nat=no canreinvite=no callerid="Werkstatt <622>" dtmfmode=rfc2833 [DTAG-IP] defaultuser=<telekom-teilnehmernummer>-0001@tel.t-online.de authuser=<telekom-teilnehmernummer>-0001@tel.t-online.de secret=<telekom-passwort> host=tel.t-online.de fromdomain=tel.t-online.de qualify=yes context=tkom-in type=friend insecure=port,invite allow=alaw,g722 dtmfmode=rfc2833 call-limit=7 nat=force_rport,comedia
Dialplan
Der Raum hat eien Festnetz-Flatrate. Der Dialplan soll daher die Anwahl von deutschen (nichtHandy-)Rufnummern und Notrufe zulassen. Gebührenpflichte Rufnummern sollen nicht erreichbar sein. Für die Wahl ins Amt muss eine "0" vorgewählt werden. Ausserdem soll im +E164-Format gewählt werden können. Der Dialplan wird in der extensions.conf definiert
globals] [general] [internal] exten => _XXX,1,Dial(SIP/${EXTEN}) [phones] include => internal include => tkom_out_eigen [tkom-in] ;exten => 062112285323,1,Answer() exten => 062112285323,1,Dial(SIP/630&SIP/620&SIP/621&SIP/622,180,r,t,) exten => 062112285323,n,hangup [tkom_out_eigen] ;Notrufe exten => _11[02],1,Set(CALLERID(num)=062112285323) exten => _11[02],n,Set(CALLERID(name)=062112285323) exten => _11[02],n,Dial(SIP/${EXTEN}@DTAG-IP,180,tr) exten => _11[02],n,Hangup() exten => _011[02],1,Set(CALLERID(num)=062112285323) exten => _011[02],n,Set(CALLERID(name)=062112285323) exten => _011[02],n,Dial(SIP/${EXTEN:1}@DTAG-IP,180,tr) exten => _011[02],n,Hangup() exten => _00700.,n,Hangup() exten => _+49700.,n,Hangup() exten => _00[2-8].,1,Set(CALLERID(num)=062112285323) exten => _00[2-8].,n,Set(CALLERID(name)=062112285323) exten => _00[2-8].,n,Dial(SIP/${EXTEN:1}@DTAG-IP,180,tr) exten => _00[2-8].,n,Hangup() exten => _0Z.,1,Set(CALLERID(num)=062112285323) exten => _0Z.,n,Set(CALLERID(name)=062112285323) exten => _0Z.,n,Dial(SIP/${EXTEN:1}@DTAG-IP,180,tr) exten => _0Z.,n,Hangup() exten => _+49[2-8].,1,Set(CALLERID(num)=062112285323) exten => _+49[2-8].,n,Set(CALLERID(name)=062112285323) exten => _+49[2-8].,n,Dial(SIP/0${EXTEN:3}@DTAG-IP,180,tr) exten => _+49[2-8].,n,Hangup()