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.

start-stop-wwan0

#! /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.

wwan0

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.

Router

Damit der Raspi auch als Router arbeitet, müssen die Dateien

  • /etc/sysctl.conf
  • /etc/iptables/rules.v4
  • /etc/iptables/rules.v6

Ggf. muss noch eine Installation mit apt install iptables-persistent durchgeführt werden, damit die o.g. iptables Dateien vorhanden sind.