Raspberry Pi mit Linux plötzlich nicht mehr erreicht bar

PaulAtreides

Well-Known Member
Ich habe ein Problem mit einem Raspberry Pi mit LTE-Modem. Seit ein paar Wochen kann ich das Gerät nicht mehr erreichen. Die Internetverbindung vom Gerät nach draußen funktioniert einwandfrei. Eingehende Verbindungen sind jedoch nicht mehr möglich, weder Ping noch SSH. Die Firewall ist aus.


Die Internetverbindung läuft über 1nce. Mit der SIM-Karte gelangt man vom Gerät in ein privates IP-Netz, welches man durch Einwahl über einen OpenVPN-Client bei 1nce erreichen kann.

Ich habe versucht, die gleiche Konfiguration auf einem lokalen Gerät nachzubilden. Dort läuft alles einwandfrei. Andere Geräte kann ich auch erreichen. Irgendwo muss ein Fehler sein. Ich war schon zweimal beim Kunden, konnte das Problem aber nicht beheben. Leider waren weder ChatGPT noch die Google KI eine Hilfe.

vom Gerät aus:
ping „IP VPN CLIENT“ – geht
ping www.google.de – geht

ip route get VPN_CLIENT_IP
VPN_CLIENT_IP via 10.XXX.XXX.1 dev wwan0 arc DEVICE_IP uid 1001
geht auch

vom VPN Client
ping DEVICE_IP - geht nicht
ssh DEVICE_IP - geht nicht
 
So Ad-Hoc weiß ich da auch nichts, aber kannst du ein zweites Gerät reinhängen um zu schauen ob es am Berry liegt?

Was nutzt du da als Client (OS/VPN?)
 
läuft über 1nce. Mit der SIM-Karte
Hast du die Möglichkeit, eine andere SIM-Karte testweise zu benutzen? Ich hatte das Pech, dass mein Provider mit 1&1 plötzlich im Bett lag und damit waren meine SIM-Karten bzw. die config bei denen vermurkst. Mit neuer SIM bzw. Providerwechsel wieder ins "alte" Netz, plötzlich geht wieder alles. Auch wenn das jetzt tatsächlich nach nem Firewall/VPN-Problem ausschaut, wäre das noch so ne Idee. Aber ich hab nicht geschaut mit wem 1nce im Bett liegt. (Die 1 ist verräterisch!) :rolleyes:
 
Kannst du mit TCPDUMP gucken, ob Packete am normalen Interface, bzw. am VPN Interface ankommen wärend du Pingst?
 
Als ich heute beim Gerät war habe ich aus Verzweiflung ein autossh installier. Der baut die Verbindung zum OpenVPN client auf wo ich einen ssh server aufgesetzt habe, aber jede Nachricht zurück wird gefressen.

20:19:57.572081 IP IP_CLIENT.49982 > IP_SERVER.22: Flags , seq 1184425233, win 64240, options [mss 1361,sackOK,TS val 1955429531 ecr 0,nop,wscale 7], length 0
20:19:57.572413 IP IP_SERVER.22 > IP_CLIENT.49982: Flags [S.], seq 4190990266, ack 1184425234, win 65535, options [mss 1160,nop,wscale 6,nop,nop,TS val 1651902176 ecr 1955429531,sackOK,eol], length 0

# ... Wiederholung (Retransmission) nach ca. 1 Sekunde ...

20:19:58.490378 IP IP_CLIENT.49982 > IP_SERVER.22: Flags , seq 1184425233, win 64240, options [mss 1361,sackOK,TS val 1955430596 ecr 0,nop,wscale 7], length 0
20:19:58.490486 IP IP_SERVER.22 > IP_CLIENT.49982: Flags [S.], seq 4190990266, ack 1184425234, win 65535, options [mss 1160,nop,wscale 6,nop,nop,TS val 1651903095 ecr 1955430596,sackOK,eol], length 0
 
Hast du die Möglichkeit, eine andere SIM-Karte testweise zu benutzen? Ich hatte das Pech, dass mein Provider mit 1&1 plötzlich im Bett lag und damit waren meine SIM-Karten bzw. die config bei denen vermurkst. Mit neuer SIM bzw. Providerwechsel wieder ins "alte" Netz, plötzlich geht wieder alles. Auch wenn das jetzt tatsächlich nach nem Firewall/VPN-Problem ausschaut, wäre das noch so ne Idee. Aber ich hab nicht geschaut mit wem 1nce im Bett liegt. (Die 1 ist verräterisch!) :rolleyes:
1nce wählt den Netzanbieter mit der besten Sende- und Empfangsleistung. Mal ist es Telekom, mal 1&1, mal O2 usw
 
Ich vermute das Modem hat sich aufgehängt. Ich habe mein Verbindungsscript neu überarbeitet:

Bash:
#!/bin/bash

DEVICE="/dev/cdc-wdm0"
INTERFACE="wwan0"


hard_reset() {

  echo "[INFO] Führe Hard Reset (DMS) am Modem durch..."
  # Modem komplett resetten
  qmicli -d "$DEVICE" --dms-set-operating-mode='reset' >/dev/null 2>&1

}

prepare_modem() {

  echo "[INFO] Bereite Modem vor (NAS/WDA / Attach Repair)..."
  qmicli -d "$DEVICE" --dms-set-operating-mode='online' >/dev/null 2>&1
  qmicli -d "$DEVICE" --nas-set-system-selection-preference='network-selection-preference=automatic' >/dev/null 2>&1
  qmicli -d "$DEVICE" --wda-set-data-format='raw-ip' >/dev/null 2>&1
  if [ -f "/sys/class/net/$INTERFACE/qmi/raw_ip" ]; then
      echo Y > "/sys/class/net/$INTERFACE/qmi/raw_ip"
  fi

}


check_modem_status() {

  echo "[INFO] Prüfe Netzwerk-Registrierung..."
  NAS_STATE=$(qmicli -d "$DEVICE" --nas-get-serving-system)
 
  if [[ "$NAS_STATE" =~ "registration-state: 'registered'" ]]; then
      echo "[INFO] Modem ist im Netz registriert."
  else
      echo "[WARN] Nicht registriert oder VLR purged. Modem vorbereiten..."
      prepare_modem
      sleep 5
  fi

}


wait_for_ip() {
  echo "[INFO] Warte auf IP-Adresse für $INTERFACE..."
  for i in {1..10}; do
    IP=$(ip -4 addr show "$INTERFACE" | grep -oP '(?<=inet\s)\d+(\.\d+){3}')
    if [[ -n "$IP" ]]; then
      echo "[INFO] IP-Adresse erhalten: $IP"
      return 0
    fi
    sleep 1
  done
  echo "[ERROR] Keine IP-Adresse erhalten"
  return 1
}

stop_conn() {
  echo "[INFO] Stoppe Mobilfunkverbindung..."
  killall -q udhcpc || true
  qmi-network-raw "$DEVICE" stop
  ip link set "$INTERFACE" down
}


connect() {

  try=$1

  echo "[INFO] Soft Reconnect Versuch $try..."
  check_modem_status

  qmi-network-raw "$DEVICE" start >/dev/null 2>&1
  sleep 5
 
  ip link set "$INTERFACE" up
  sleep 1

  udhcpc -b -i "$INTERFACE" -R &

  if wait_for_ip; then
    echo "[INFO] IP erfolgreich erhalten nach Soft Reconnect"
    return 0
  else
    echo "[WARN] IP nicht erhalten nach Versuch $try"
    stop_conn
    sleep 2
  fi

}

wait_for_device() {
  echo "[INFO] Warte auf Device $DEVICE..."
  for i in {1..30}; do
    if [ -c "$DEVICE" ]; then return 0; fi
    sleep 1
  done
  echo "[ERROR] Device $DEVICE nicht gefunden!"
  return 1
}

start_conn() {

  echo "[INFO] Starte Mobilfunkverbindung..."
  stop_conn
  sleep 2


  # Maximal 3 Versuche Soft Reconnect
  for try in {1..3}; do
    if connect "$try"; then
        return 0  # sofort abbrechen, wenn IP erfolgreich
    fi
  done

  hard_reset
  echo "[INFO] Hard Reset abgeschlossen."

  wait_for_device || return 1

  # Ein letzter Versuch nach Hard Reset
  prepare_modem
  sleep 5

  # Letzter Versuch
  if ! connect "Final"; then
    echo "[ERROR] Auch nach Hard Reset kein Erfolg."
    return 1
  fi

}

case "$1" in
  start)
    start_conn
    ;;
  stop)
    stop_conn
    ;;
  restart)
    stop_conn
    sleep 2
    start_conn
    ;;
  *)
    echo "Benutzung: $0 {start|stop|restart}"
    exit 1
    ;;
esac
 
Zurück
Oben