RaumrouterPi

Aus C3MAWiki
Version vom 6. April 2018, 19:19 Uhr von Fzahn (Diskussion | Beiträge)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
Zur Navigation springenZur Suche springen

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
  1. 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
  1. 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()