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
Damit der Dienst „timesyncd“ nicht laufend eine Internet Verbindung aufbaut, muss der Service deaktiviert werden.
sudo systemctl stop systemd-timesyncd.service
sudo systemctl disable systemd-timesyncd.service
Wir können die Zeitsynchronisation manuell starten und stoppen:
sudo timedatectl set-ntp true
sudo timedatectl set-ntp false
Dass war es dann somit. Ich wünsche viel Spaß beim einrichten und installieren.
Falls es es Fragen hierzu gibt, einfach Kommentar unter dem Artikel hinterlassen.
Grüße , Joachim
Hallo Joachim, könntest du mir sagen, wie ich eine Mail mit dem Waveshare Board und eine Pi Zero verschicke. Mit ist nicht ganz klar, wie das genau funktioniert. Mit Wlan haut es hin, aber ich bringe den Zero nich nicht dazu, den HAT zu benutzen. Vielen Dank für Hilfe. Grüsse