Netzwerkschnittstellen ohne IP (war: zweifacher Reboot)

Bei einem Router (UniFi OutdoorAP+) ist es zuletzt zweimal vorgekommen, dass der Router nur noch bedingt erreichbar war. Ein Zugriff war noch über die link local-Adresse auf dem Mesh- bzw. Batman-Interface möglich. Nachdem ich das Gerät dann via SSH neu gestartet habe, war es komplett offline. Erst ein zweiter Reboot hat die Störung behoben.

Ohne jetzt die genaue Ursache finden zu müssen, würde es mir schon reichen, wenn ich beim Neustart über SSH dafür sorgen kann, dass das Gerät anschließend von alleine noch einmal neu startet. Wie kann man das am geschicktesten anstellen?

(Link zur Knotenstatistik)

  • erster Reboot 2017-10-19 13:50
  • zweiter Reboot 2017-10-20 16:30

Hmmm ich will ergaenzen, dass man das evtl auch als Bugreport fuer diesen gluon Port eintueten sollte. Die HW wird ja anscheinend ohne Powercycle nicht vollstaendig geruecksetzt. Allerdings will ich nicht ausschliessen, dass es Faelle gibt, wo das einfach nicht geht. Ein steuerbares Relais waere nett o.ae.

Zum zweifachen reboot faellt mir ein (mi)cron job ein, der eine state Variable in einem File hochzaehlt.
Man traegt selbst nur den Job als solchen ein. Der bootet dann zweimal und traegt sich selbst wieder aus. Dann ist das fire and forget. Simple state engine wie folgt:

if no state then state=new
case $state is
new: state=2ndreboot
reboot
2ndreboot: state=leaveagain
reboot
leaveagain: rm cronjob file …(oder so)

Zum start cronjob aktiv schalten, der o.a. jedes Mal aufruft
Prinzip sollte vor allem klar werden. Daher nicht gleich Shellcode.

1 Like

Auch den zweiten Reboot habe ich über SSH gemacht, dafür musste ich aber zum Router fahren und mich via WLAN verbinden. Es gab keinen ‚Powercycle‘.

Hehe hier steht im Loesungsquote aber bloederweise genau der falsche Absatz, der ja eher BTW war… :slight_smile:
(ich weiss aber nicht, ob man darauf Einfluss hat, ich habe das noch nie gemacht).

Klingt nach dem NetIf-Problem, das zuminst in OpenWRT-CC erhebliche Probleme bereiten kann.
Das ist dann so eine Art "LockIn-Syndrom: Knoten läuft, nur hat das BrClient (und auch einige andere Interfaces) keine normale IP bekommen, sondern nur FE80er-Linklocals.

Wir haben das mit packages/gluon-quickfix/files/lib/gluon/quickfix/quickfix.sh at v2016.2.x · eulenfunk/packages · GitHub gelöst.

Man könnte das auch anders lösen, aber „br-client-Switch keine ip aus dem Prefix der Firmware: definitiv was hinüber!“

# br-client without ipv6 in prefix-range
if [ "$(ip -6 addr show to "$(jsonfilter -i /lib/gluon/site.json -e '$.prefix6')" dev br-client | grep -c inet6)" == "0" ]; then
  now_reboot "br-client without ipv6 in prefix-range (probably none)"
fi
1 Like

Sollte es nicht für das Gerät in 2017 bzw. LEDE ein paar Stabilitätspatches geben? Bin da nicht auf dem Laufenden, weil ich selbst keinen Outdoor+ habe.

Ich habe keine Ahnung, was auf besagtem Knoten läuft.
Von daher: Ob Lede oder CC wird nur jemand vor Ort beantworten können.

Der läuft mit v2016.2.7 (ffmsd36-v2016.2.7+2.7.0). logread liefert:

Mon Oct  9 21:35:27 2017 kern.emerg kernel: [82768.510000] unregister_netdevice: waiting for bat0 to become free. Usage count = 4
Mon Oct  9 21:35:27 2017 kern.emerg kernel: [82768.780000] unregister_netdevice: waiting for local-node to become free. Usage count = 1
Mon Oct  9 21:35:27 2017 kern.emerg kernel: [82768.820000] unregister_netdevice: waiting for primary0 to become free. Usage count = 1
Mon Oct  9 21:35:37 2017 kern.emerg kernel: [82778.650000] unregister_netdevice: waiting for bat0 to become free. Usage count = 4
Mon Oct  9 21:35:37 2017 kern.emerg kernel: [82778.920000] unregister_netdevice: waiting for local-node to become free. Usage count = 1
Mon Oct  9 21:35:37 2017 kern.emerg kernel: [82778.960000] unregister_netdevice: waiting for primary0 to become free. Usage count = 1
Mon Oct  9 21:35:37 2017 user.notice tunneldiger-watchdog: No neighbours on mesh-vpn interface, restarted tunneldigger.
Mon Oct  9 21:35:37 2017 daemon.info td-client: Performing broker selection...
Mon Oct  9 21:35:37 2017 daemon.err td-client: Failed to resolve hostname 'domaene36-a.servers.freifunk-muensterland.de'.
Mon Oct  9 21:35:37 2017 daemon.err td-client: Failed to resolve hostname 'domaene36-b.servers.freifunk-muensterland.de'.
Mon Oct  9 21:35:37 2017 daemon.err td-client: Failed to resolve hostname 'domaene36-b.servers.freifunk-muensterland.net'.
Mon Oct  9 21:35:37 2017 daemon.err td-client: Failed to resolve hostname 'domaene36-a.servers.freifunk-muensterland.net'.
Mon Oct  9 21:35:47 2017 kern.emerg kernel: [82788.790000] unregister_netdevice: waiting for bat0 to become free. Usage count = 4
Mon Oct  9 21:35:47 2017 kern.emerg kernel: [82789.060000] unregister_netdevice: waiting for local-node to become free. Usage count = 1
Mon Oct  9 21:35:47 2017 kern.emerg kernel: [82789.100000] unregister_netdevice: waiting for primary0 to become free. Usage count = 1
Mon Oct  9 21:35:53 2017 daemon.info td-client: Reinitializing tunnel context.
Mon Oct  9 21:35:53 2017 daemon.info td-client: Reinitializing tunnel context.
Mon Oct  9 21:35:53 2017 daemon.info td-client: Reinitializing tunnel context.
Mon Oct  9 21:35:53 2017 daemon.info td-client: Reinitializing tunnel context.
Mon Oct  9 21:35:53 2017 daemon.err td-client: Failed to resolve hostname 'domaene36-a.servers.freifunk-muensterland.de'.
Mon Oct  9 21:35:53 2017 daemon.err td-client: Failed to resolve hostname 'domaene36-b.servers.freifunk-muensterland.de'.
Mon Oct  9 21:35:53 2017 daemon.err td-client: Failed to resolve hostname 'domaene36-a.servers.freifunk-muensterland.net'.
Mon Oct  9 21:35:53 2017 daemon.err td-client: Failed to resolve hostname 'domaene36-b.servers.freifunk-muensterland.net'.
Mon Oct  9 21:35:57 2017 kern.emerg kernel: [82798.930000] unregister_netdevice: waiting for bat0 to become free. Usage count = 4
Mon Oct  9 21:35:57 2017 kern.emerg kernel: [82799.200000] unregister_netdevice: waiting for local-node to become free. Usage count = 1
Mon Oct  9 21:35:57 2017 kern.emerg kernel: [82799.240000] unregister_netdevice: waiting for primary0 to become free. Usage count = 1

usw.

Wir haben keine IPs mehr in der Firmware, da läuft was mit der DNS-Auflösung schief.

Grüße
Matthias

zweifache Rebooten? das klingt seltsam, vielleicht ist das auch kein Gluonn sondern Openwrt/LEDE Bug? Bitte verlinkt mal das vermutete „NetIf-Problem“.

Workarounds mit Veränderung von Dateien sind prinzipiell problematisch, da sie den Flash-Speicher belasten.

Mal wieder das Problem: Das bat0-Interface hat gar keine IP und br-client auch nicht.

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel master br-wan qlen 1000
    link/ether 44:d9:e7:ac:e2:23 brd ff:ff:ff:ff:ff:ff
3: eth1: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc fq_codel master br-mesh_lan qlen 1000
    link/ether 46:d9:e7:ac:e2:23 brd ff:ff:ff:ff:ff:ff
4: dummy0: <BROADCAST,NOARP> mtu 1500 qdisc noop 
    link/ether 9a:16:9e:bb:d3:8e brd ff:ff:ff:ff:ff:ff
5: teql0: <NOARP> mtu 1500 qdisc noop qlen 100
    link/void 
7: br-mesh_lan: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue 
    link/ether a6:e8:de:d9:d9:5c brd ff:ff:ff:ff:ff:ff
    inet6 fe80::a4e8:deff:fed9:d95c/64 scope link 
       valid_lft forever preferred_lft forever
8: br-wan: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue 
    link/ether a6:e8:de:d9:d9:58 brd ff:ff:ff:ff:ff:ff
    inet 192.168.0.241/24 brd 192.168.0.255 scope global br-wan
       valid_lft forever preferred_lft forever
    inet6 2a02:908:d512:xxxx:xxxx:xxxx:xxxx:xxxx/64 scope global dynamic 
       valid_lft 398961sec preferred_lft 96561sec
    inet6 2a02:908:d512:xxxx:xxxx:xxxx:xxxx:xxxx/128 scope global dynamic 
       valid_lft 442504sec preferred_lft 140104sec
    inet6 fe80::a4e8:deff:fed9:d958/64 scope link 
       valid_lft forever preferred_lft forever
13: mesh0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1532 qdisc mq master bat0 qlen 1000
    link/ether a6:e8:de:d9:d9:59 brd ff:ff:ff:ff:ff:ff
    inet6 fe80::a4e8:deff:fed9:d959/64 scope link 
       valid_lft forever preferred_lft forever
14: client0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq master br-client qlen 1000
    link/ether 44:d9:e7:ad:e2:23 brd ff:ff:ff:ff:ff:ff
    inet6 fe80::46d9:e7ff:fead:e223/64 scope link 
       valid_lft forever preferred_lft forever
15: br-client: <BROADCAST,MULTICAST> mtu 1500 qdisc noop 
    link/ether fa:d7:f7:37:d1:b6 brd ff:ff:ff:ff:ff:ff
16: primary0: <BROADCAST,NOARP,UP,LOWER_UP> mtu 1532 qdisc noqueue master bat0 
    link/ether a6:e8:de:d9:d9:5b brd ff:ff:ff:ff:ff:ff
17: bat0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue 
    link/ether 44:d9:e7:ac:e2:23 brd ff:ff:ff:ff:ff:ff
18: mesh-vpn: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1364 qdisc tbf master bat0 qlen 1000
    link/ether d2:93:01:ff:2d:74 brd ff:ff:ff:ff:ff:ff
    inet6 fe80::d093:1ff:feff:2d74/64 scope link 
       valid_lft forever preferred_lft forever

Dafür ist der Knoten dieses Mal nach dem ersten Reboot direkt wieder angelaufen, allerdings mit vorherigem Neustart des Netzwerkdienstes:

# sleep 60 && reboot &
# /etc/init.d/network restart

diese Fehlermeldung kommt mir bekannt vor: Teilweise verhinderte batman-adv das Neustarten des Gerätes. Probier mal „reboot -f“ anstelle „reboot“.

2 Likes