Installation GPRS – GSM Modem für Things Mobile SIM-Karte

Die Tage hatte ich über die SIM-Karten von Things Mobile hier im Blog berichtet. Nun machen wir uns an die Einrichtung als Modem für das Internet via Mobilfunk Netzwerk.

Hinweis: Die Einrichtung und Konfiguration gilt nur für die abgebildete SIM-Karte. Für Konfiguration von anderen SIM-Karten von anderen Provider kann ich hier nicht weiterhelfen.

Zum Einsatz kommt das GSM/GPSR/GNSS HAT von Waveshare.

SIM-Karte für Internet der Dinge

Das Modem ist schnell eingerichtet. Dazu rufen wir „sudo raspi-config“ auf und erweitern die serielle Schnittstelle wie angezeigt und deaktivieren das Login via serielle Schnittstelle.

Nun installieren wir noch ein paar Software Pakete.

  • PPP brauchen wir für die Einwahl beim Provider als Modem
  • Supervisor brauchen wir damit der PPP automatisch gestartet wird
  • TCPDUMP benötigen wir um eventuelle Datenpakete zu analysieren
  • UFW ist eine sehr einfache Firewall die mit iptables arbeitet
sudo apt install supervisor ppp
sudo apt install tcpdump
sudo apt install ufw

Einrichtung PPP-Einwahl:

Nun starten wir mit der Konfiguration der PPP-Einwahl für das Modem

sudo cp /etc/ppp/peers/provider /etc/ppp/peers/gprs

Edit: /etc/ppp/peers/gprs

connect "/usr/sbin/chat -v -f /etc/chatscripts/gprs"

# Serial device to which the modem is connected.
# Für Raspberry 3
/dev/ttyS0
# Für Raspberry Pi Zero
# /dev/ttyAMA0

# Speed of the serial line.
115200

debug

nocrtscts

nodetach

ipcp-accept-local
ipcp-accept-remote


# Assumes that your IP address is allocated dynamically by the ISP.
noipdefault
# Try to get the name server addresses from the ISP.
usepeerdns
# Use this connection as the default route.
defaultroute

# Makes pppd "dial again" when the connection is lost.
persist

# Do not ask the remote to authenticate.
noauth

Dann benötigen wir ein CHAT Script für die Einwahl via PPP. Dieses finden wir unter
/etc/chatscripts/gprs“ was folgende Parameter benötigt:

# You can use this script unmodified to connect to cellular networks.
# The APN is specified in the peers file as the argument of the -T command
# line option of chat(8).

# For details about the AT commands involved please consult the relevant
# standard: 3GPP TS 27.007 - AT command set for User Equipment (UE).
# (http://www.3gpp.org/ftp/Specs/html-info/27007.htm)

ABORT		BUSY
ABORT		VOICE
ABORT		"NO CARRIER"
ABORT		"NO DIALTONE"
ABORT		"NO DIAL TONE"
ABORT		"NO ANSWER"
ABORT		"DELAYED"
ABORT		"ERROR"

# cease if the modem is not attached to the network yet
ABORT		"+CGATT: 0"

""		AT
TIMEOUT		12
OK		ATH
OK		ATE1

# +CPIN provides the SIM card PIN
#OK		"AT+CPIN=1234"

# +CFUN may allow to configure the handset to limit operations to
# GPRS/EDGE/UMTS/etc to save power, but the arguments are not standard
# except for 1 which means "full functionality".
#OK		AT+CFUN=1

OK		AT+CGDCONT=1,"IP","\TM","",0,0
OK		ATD*99#
TIMEOUT		22
CONNECT		""

Hinweis: Es ist ganz wichtig dass hier String für die Einwahl das APN-Profile mit dem Namen „TM“ enthalten ist. Wenn es nicht vorhanden ist oder falsch eingetragen, funktioniert die Einwahl NICHT!

OK AT+CGDCONT=1,“IP“,“\TM„,““,0,0

Solltest Du bei Things Mobile eine feste IP-Adresse beantragt haben dann muss der String wie folgt aussehen:
OK AT+CGDCONT=1,“IP“,“\JTFIXEDPUBLIC„,““,0,0

Einrichtung lokales Netzwerk eth0

Nun ändern wir die ETH0 Schnittstelle, damit das Default Routing und Gateway via DHCP und Ethernet deaktiviert ist. Dies ist nötig da wir sonst keine Antwort aus dem Internet bekommen, wenn wir via PPP und Mobilfunk eingewählt sind. In diesem Fall nehmen wir zum Zweck der Dokumentation die IP-Adresse 192.168.1.100 für den Raspberry und dem GSM HAT. Du kannst es entsprechend Deiner Netzwerkinfrastruktur ändern wie Du es benötigst. Am besten schau in die Fritzbox und siehe nach, welches IP-Netzwerk du eingerichtet hast.

auto eth0
allow-hotplug eth0
iface eth0 inet static
address 192.168.1.100
netmask 255.255.255.0
#gateway 192.168.1.1
dns-nameservers 192.168.1.1

Einrichtung Supervisor:

Nun erstellen wir ein Script für Supervisor, welches die PPP-Einwahl automatisch startet wenn der Raspberry Pi eingeschaltet wird. Ja ich weiß, man könnte das in auch in rc.local eintragen.

Nein das machen wir nicht, da Supervisor ein paar tolle Features hat wie z.B.
http://192.168.1.100:9001 aufrufen und damit kann man den PPP manuell stoppen und starten.
Außerdem kann man den Zugang über eine Benutzeranmeldung mit Passwort schützen, dazu gleich mehr.

Edit: /etc/supervisor/conf.d/ppp.conf

[program:ppp]
command=/usr/sbin/pppd call gprs
numprocs=1
directory=/tmp
umask=022
priority=999
autostart=true
autorestart=unexpected
startsecs=10
startretries=3
exitcodes=0,2
stopsignal=TERM
stopwaitsecs=10
stopasgroup=false
killasgroup=false
user=pi

Edit : /etc/supervisor/supervisord.conf

Die Parameter „username/password“ können natürlich entsprechender Paranoia angepasst werden 🙂

[inet_http_server]
port = 0.0.0.0:9001
username = raspberry
password = GeheimesPasswort

Abschließend ändern wir den SSH-Port 22 auf Port 2220 damit nicht permanent Hackangriffe auf den Standard Port 22 erfolgen.

Edit : /etc/ssh/sshd_config

Port 2220
ListenAddress 0.0.0.0

Einrichtung Firewall:

Damit schützen wir den Raspberry Pi vor Angriffen aus dem Internet.
Wer möchte, kann den Zugriff 9001 nur via Lokales Netzwerk freigeben.

sudo ufw allow 2220
sudo ufw allow 9001
sudo ufw enable
sudo ufw status

Nun können wir den Raspberry Pi einmal neu starten, damit die statische IP-Adresse geladen wird und der PPP Prozess für die Einwahl gestartet wird.

Wie wir wissen geht jetzt „ssh raspberrypi“ nicht mehr weil ? Wir haben ja den SSH-Port geändert:

Es klappt nur mit „ssh raspberrypi -p 2220“ aus dem lokalem Netzwerk. Wenn die PPP-Einwahl funktioniert hat sollte ein entsprechendes Device vorhanden sein, welches mit „ifconfig“ angezeigt wird.

ppp0: flags=4305<UP,POINTOPOINT,RUNNING,NOARP,MULTICAST>  mtu 1500
        inet 10.21.56.90  netmask 255.255.255.255  destination 192.168.254.254
        ppp  txqueuelen 3  (Point-to-Point Protocol)
        RX packets 237  bytes 17786 (17.3 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 203  bytes 13326 (13.0 KiB)
        TX errors 0  dropped 11 overruns 0  carrier 0  collisions 0

Wenn alles richtig konfiguriert wurde, können wir testen ob die Verbindung ins Internet richtig funktioniert.

  • ping 8.8.8.8 – damit testen wir ob die PPP-Einwahl funktioniert hat
  • traceroute 8.8.8.8 – damit testen wir ob der Default Gateway funktioniert und über das richtige Gerät ppp0 geroutet wird. Es sollte wie unten abgebildet aussehen.
traceroute to 8.8.8.8 (8.8.8.8), 30 hops max, 60 byte packets
 1  172.26.7.75 (172.26.7.75)  4937.258 ms * *
 2  * * *
 3  * * *
 4  * * *
 5  * * *
 6  * 120.160.35.5.jtglobal.com (5.35.160.120)  886.928 ms  901.372 ms
 7  16.160.35.5.jtglobal.com (5.35.160.16)  916.331 ms  931.331 ms  985.596 ms
 8  133.160.35.5.jtglobal.com (5.35.160.133)  1087.953 ms  1146.714 ms  1224.915 ms
 9  135.160.35.5.jtglobal.com (5.35.160.135)  1285.288 ms  1362.309 ms  1422.396 ms
10  128.160.35.5.jtglobal.com (5.35.160.128)  1482.273 ms  1543.223 ms  1583.553 ms
11  117.160.35.5.jtglobal.com (5.35.160.117)  1637.226 ms  1660.113 ms  478.557 ms
12  * * *
13  108.170.246.161 (108.170.246.161)  616.061 ms 108.170.246.129 (108.170.246.129)  656.893 ms 74.125.242.65 (74.125.242.65)  693.589 ms
14  72.14.234.153 (72.14.234.153)  734.835 ms 74.125.37.163 (74.125.37.163)  777.320 ms 216.239.48.213 (216.239.48.213)  813.744 ms
15  google-public-dns-a.google.com (8.8.8.8)  854.712 ms  894.814 ms  931.923 ms

Zusätzliche Konfiguration:


Nun kommt noch ein kleines Highlight: Wie wäre es wenn die Einwahl per PPP nur dann aktiv ist wenn der Raspberry Pi Daten ins Netzwerk sendet? Dh. die IP-Verbindung ist nur dann aktiv wenn wirklich nötig. Warum sollte man das machen ?

Hintergrund: Wenn der Raspberry permanent am Internet hängt, besteht die Gefahr dass ewig irgendwelche Hacker versuchen auf den Raspberry zu kommen. Dies ist natürlich nur notwendig, wenn du eine feste IP-Adresse bei Things Mobile beauftragt hast. Mit „tcpdump -i ppp0“ siehst was alles für Spacken auf das Gerät zugreifen wollen. Ja richtig wir haben „ufw“ installiert , ABER ….

Es geht hier nicht um Sicherheit sondern um Kosten. Kosten ?
Ja weil jedes Datenpaket das die Hacker-Spacken an deine feste IP-Adresse sendet Du bezahlen musst und es auf Dein Datentraffic geht. Deshalb machen wir es so, die Einwahl wird nach 60 Sekunden beendet wird. Das heißt aber NICHT dass der PPP-Prozess beendet wird. 

Es wird einfach die Verbindung via Dial on Demand aufgebaut und wieder abgebaut, dies schützt uns vor hohen Kosten und Traffic der nicht erwünscht ist.

Der Parameter „Idle“ ist auf 60 Sekunden eingestellt. Tests haben ergeben dass eine höhere Idle Time Traffic von Hackers die Verbindung dann doch sehr viel länger aufrecht erhält. Die Werte kannst Du aber selbst experimentell ermitteln mit „tcpdump“, da siehst den eingehenden Traffic.

Edit: /etc/ppp/options


asyncmap 0
auth
crtscts
lock
hide-password
modem
lcp-echo-interval 30
lcp-echo-failure 4
noipx
demand
idle 60
holdoff 15
connect-delay 5


Kommentar hinterlassen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.