firmware:babel

Dies ist eine alte Version des Dokuments!


Freifunk mit babel

Wir haben mit den Integrationsarbeiten für den Gluon Babel Masterplan begonnen.

Die aktuelle frankfurter babel-Firmware gibt es hier (development), hier (test) und hier (stable). Die dazugehörige Map ist hier zu finden: Babel Map - Freifunk Frankfurt a.M.

Status

Man kann sich verbinden, roamen und das Netz nutzen. Man hat 25% mehr Durchsatz als mit Batman unter gleichen Funkbedingungen.

Im Detail heißt das:

  • Ein Client kann sich mit einem Node verbinden und es ist Kommunikation zwischen diesen beiden Geräten möglich.
  • Ein Client kann sich mit einem Node verbinden und erreicht über das Mesh einen anderen Node.
  • Zwei Clients an unterschiedlichen Mesh-Nodes können miteinander kommunizieren.
  • Zwei Clients verbinden sich mit einem Node und können kommunizieren. (Jeweils switch-port, beide per wifi und wechselseitig kabel/wifi)
  • Routing ins Internet für einen Client funktioniert für IPv6 und IPv4.
  • Internetzugang an mesh-only-node funktioniert.
  • Babel-Nodes erscheinen neben Batman-Nodes auf der Babel-Map.
  • DNS funktioniert mit dem durch das Babel-Projekt in gluon eingeführten DNS-Cache.
  • Roaming eines Clients geht.
  • Es gibt eine funktionierende Firewall.
  • Auf einem Socket sind verschieden l3roamd-Operationen möglich.
  • Folgenden Pakete wurden angepasst, sodass die benötigten Komponenten in der Firmware eingebaut ist und per ifup auch gestartet werden können.
    • gluon-mesh-babel
    • gluon-l3roamd
    • mmfd
    • gluon-mesh-vpn-fastd
    • babeld >1.8 (master von März 2018)

Bitte erfasst Probleme in unserer Todo-Liste.

Entwicklung

Changelog

Debugging

Das Babel-Netz ist ein Testnetz. Niemand weiß wie man Layer 3-Netze mit Roaming aufbaut - wir sind die ersten. Es kann also durchaus passieren, dass etwas nicht glatt läuft. In so einem Fall ist man mit generellen Debugging-Hinweisen gut beraten. Wichtig ist meist die Ausgabe von:

  • logread
  • nodeinfo
  • echo get_clients | socat - /var/run/l3roamd.sock
  • ip -6 r s
  • Die Erzeugung von core-Files auf dem openwrt-Gerät aktivieren:

``` touch /.init_enable_core sysctl -w "kernel.core_pattern=/tmp/%e.%p.%s.%t.core" ulimit -c unlimited ```

  • Den zu beobachtenden Prozess direkt von busybox aus starten, den Absturz provizieren. Das das core-file liegt dann in /tmp.
  • Die unstripped binaries liegen auf dem Build-System in staging_dir/target-*/root-*
  • mit dem gdb für den build das binary aus dem build-tree und dem core-file vom router laden:

``` cd /var/lib/jenkins/workspace/gluon_christf_next_musl/lede ./build_dir/toolchain-mips_24kc_gcc-5.4.0_musl-1.1.16/gdb-8.0.1/gdb/gdb ./staging_dir/target-mips_24kc_musl-1.1.16/root-ar71xx/usr/sbin/l3roamd /tmp/l3roamd.1516492435.7730.11.core ```

Infrastruktur

  • 2a06:8187:fbab:2::1 next-node Adresse (löst auch im Netz als nextnode auf)
  • 2a06:8187:fb00:53::53 DNS
  • 2a06:8187:fb00:123::123 ntp
  • 2a06:8187:fbab::/48
    • 2a06:8187:fbab:1::/64 Node Netz
      • 2a06:8187:fbab:1::9000:xxxx Infrastrukturbereich im Node Netz
    • 2a06:8187:fbab:2::/64 Client Netz
    • 2a06:8187:fb00:1::/96 Netz für nat64

Die Komponenten des Netzes sind hier beschrieben.

Serverseitig kann man loslegen, wenn man als post-up script folgendes ausführt:

#!/bin/bash
IFACE=eth2
exec >/tmp/ff-log 2>&1
cat >/tmp/babeld.conf<<EOF
ipv6-subtrees true
reflect-kernel-metric true
export-table 10
import-table 11
import-table 12
local-port-readwrite 33123
interface ens6 type wired rxcost 10 update-interval 60
interface babel-vpn-1374 type tunnel link-quality true update-interval 300

default enable-timestamps true
default max-rtt-penalty 96
default rtt-min 25
out ip 2a06:8187:fbab:2::1/128 deny
redistribute ip 2a06:8187:fbab:2::1/128 deny
redistribute ip 2a06:8187:fbab:2::/64 eq 128  allow
redistribute ip 2a06:8187:fbab:1::/64 eq 128  allow
redistribute ip 2a06:8187:fbab:3::/64 eq 96 allow
redistribute src-prefix 2a06:8187:fb00::/40 ip 2000::/3 allow
redistribute ip ::/0 allow
redistribute ip 2000::/3 allow
redistribute local deny
redistribute src-prefix 2a06:8187:fbab:2::/64 if eth1 metric 256
EOF
localnode=$(ipv6calc --action prefixmac2ipv6 --in prefix+mac --out ipv6addr 2a06:8187:fbab:1:: $( ip a s dev eth0|grep link/ether|awk '{print $2}'))
/sbin/ip -6 a add $localnode dev lo

# infrastruktur und client-netz über babel-table routen.
/sbin/ip -6 ru add prio 10 to 2a06:8187:fbab:2::/64 lookup 10
/sbin/ip -6 ru add prio 10 to 2a06:8187:fbab:1::/64 lookup 10

/usr/local/bin/babeld -D -s -I /var/run/babeld.pid  -G 33123 -c /tmp/babeld.conf

sleep 1

/usr/local/bin/l3roamd -p 2a06:8187:fbab:2::/64 -m $IFACE -t 11 -a 2a06:8187:fbff:2::2 &
disown
/usr/local/bin/mmfd -v &
disown
sleep 2
/sbin/ip a add fe80::ff:3fff:fe10:7d02/64 dev mmfd0
#/sbin/ip a add 2a06:8187:fb00:2::4/128 dev mmfd0
/sbin/ip a add 2a06:8187:fbab:1:383b:9ff:fed5:9f53/128 dev mmfd0
/sbin/ip r add ff05::2:1001/128 dev mmfd0 table local # (reicht auf dem Server wo yanic läuft, muss nicht auf gateways sein)
/sbin/ip link set dev mmfd0 up
/sbin/ip -6 r a 2a06:8187:fbab:2::/64 dev l3roam0 t 10


#add route to icvpn - all other freifunk networks
/sbin/ip route flush cache

Auf dem Gateway läuft fastd und bringt die mmfd/l3roamd mit dem obigen script (einzige AUsnahme: ff05-route wird nicht gesetzt) hoch. bird6 schreibt auf dem gateway seine default-route in Routing Tabelle 10.

Salt-states für Gateways haben wir auch - leider aktuell noch nicht öffentlich.

  • firmware/babel.1521762516.txt.gz
  • Zuletzt geändert: 22.03.2018 23:48
  • von jason