Mit einem LTE Modul, das über einen Adapter an dem Raspi angeschlossen werden kann, wird der Raspi zu einem LTE Router. Damit das auch alles im Dual-Stack Betrieb funktioniert, sind ein paar Skripte notwendig.
Zunächst werden mit apt install libqmi-utils die notwendigen Tools installiert.
Die Skripte werden zweckmäßigerweise unter /usr/local/sbin installiert.
#! /bin/sh
### BEGIN INIT INFO
# Provides: network-wwan
# Required-Start: mountkernfs $local_fs $syslog urandom
# Required-Stop:
# Default-Start: 2 3 4 5
# Default-Stop:
# Short-Description: bring wwan interface up when device is ready
# Description: This script brings up a wwan interface in dualstack
# mode with a D-Link DWM-222 LTE USB modem.
# It was tested with qmicli 1.20.0; it definitely does
# not work with qmicli 1.16.2 as provided by Debian 9.
### END INIT INFO
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/sbin:/bin:/usr/bin
LD_LIBRARY_PATH=/usr/local/lib
export LD_LIBRARY_PATH
. /lib/init/vars.sh
#PIN=1234
APN=internet
DEV=/dev/cdc-wdm0
SERIAL=/dev/ttyUSB3
DUALSTACK=yes
do_start () {
DEV="-d $DEV --device-open-qmi"
i=0
while [ ! -e /dev/cdc-wdm0 ]; do
echo "Waited $i seconds for device initialization"
i=$((i+1))
sleep 1
done
i=0
if [ ! -z "$PIN" ]; then
qmicli $DEV --dms-uim-verify-pin=PIN,$PIN
while ! qmicli $DEV --dms-uim-get-state | grep initialization-completed; do
echo "Waited $i seconds for network registration"
i=$((i+1))
sleep 1
done
sleep 1
fi
echo 'AT+CGDCONT=1,"IPV4V6","'$APN'"' >$SERIAL
QAR="$DEV --client-no-release-cid"
CID4=$(qmicli $QAR --wds-noop|awk -F\' '/CID/{print $2}')
qmicli $QAR --client-cid=$CID4 --wds-set-ip-family=4
qmicli $QAR --client-cid=$CID4 --wds-start-network=apn=$APN
qmicli $QAR --client-cid=$CID4 --wds-get-current-settings
echo CID4=$CID4 >/run/network-wwan.cid
if [ "$DUALSTACK" = yes ]; then
CID6=$(qmicli $QAR --wds-noop|awk -F\' '/CID/{print $2}')
qmicli $QAR --client-cid=$CID6 --wds-set-ip-family=6
qmicli $QAR --client-cid=$CID6 --wds-start-network=apn=$APN
qmicli $QAR --client-cid=$CID6 --wds-get-current-settings
echo CID6=$CID6 >>/run/network-wwan.cid
fi
ifup wwan0
}
case "$1" in
start)
do_start 2>&1 | tee /run/network-wwan.log &
;;
restart|reload|force-reload|status)
echo "Error: argument '$1' not supported" >&2
exit 3
;;
stop)
ifdown wwan0
. /run/network-wwan.cid
[ "$CID4" ] && qmicli -d $DEV --device-open-qmi --client-cid=$CID4 \
--wds-stop-network=disable-autoconnect
[ "$CID6" ] && qmicli -d $DEV --device-open-qmi --client-cid=$CID6 \
--wds-stop-network=disable-autoconnect
mv /run/network-wwan.cid /run/network-wwan.cid~
;;
*)
echo "Usage: $0 start|stop" >&2
exit 3
;;
esac
:
Damit steht fast alles zur Verfügung, um das LTE so zu konfigurieren, so dass es im Dual Stack Betrieb genutzt werden kann. Die Variablen
#PIN=1234
APN=internet
DEV=/dev/cdc-wdm0
SERIAL=/dev/ttyUSB2
DUALSTACK=yes
müssen auf jeden Fall gesetzt werden. Der APN im Beispiel funktioniert wahnscheinlich nur bei O₂ für andere Mobilfunkprovider muss der APN nach deren Spezifikation gesetzt werden.
In /etc/network/interfaces.d muss noch die Datei wwan0 erstellt werden.
iface wwan0 inet dhcp
pre-up ip link set wwan0 down
pre-up for _ in $(seq 1 10); do /usr/bin/test -c /dev/cdc-wdm0 && break; /bin/sleep 1; done
pre-up for _ in $(seq 1 10); do /usr/bin/qmicli -d /dev/cdc-wdm0 --nas-get-signal-strength && break; /bin/sleep 1; done
pre-up ip link set wwan0 down
pre-up echo 'Y' | sudo tee /sys/class/net/wwan0/qmi/raw_ip
pre-up ip link set wwan0 up
pre-up /usr/local/sbin/start-stop-wwan0 start
down /usr/local/sbin/start-stop-wwan0 stop
iface wwan0 inet6 auto
Nun gibt es ein neues Dual Stack Interface auf dem Raspi.
Damit der Raspi auch als Router arbeitet, müssen die Dateien
Ggf. muss noch eine Installation mit apt install iptables-persistent durchgeführt werden, damit die o.g. iptables Dateien vorhanden sind.