OLSR mit Linux

Aus wiki.freifunk.net
Zur Navigation springenZur Suche springen

OLSRd installieren

OLSRd ist in vielen Distributionen im Paketmanagementsystem verfügbar. Wenn nicht oder falls diese Versionen veraltet sind dann hilft ein selber kompilieren von OLSRd (siehe OLSR Readme).

OLSRd konfigurieren

OLSRd verwendet eine Konfigurationsdatei, die in der Regel in /etc/olsrd.conf gespeichert ist. Hat man sich von der olsrd-Webseite einen Tarball mit dem Quellcode heruntergeladen und ausgepackt, befinden sich Beispielkonfigurationen im Verzeichnis files.

Eine Minimalkonfiguration zum schnellen Testen lautet

DebugLevel 1
Interface "wlan0"
{
}

Zum Dauerbetrieb sollte man diese Konfiguration jedoch nicht verwenden, weil es sich empfiehlt, einige von olsrd mitgelieferte Plugins zu laden. Eine mit olsrd 0.6.1 getestete Konfigurationsdatei, wie sie auch bei der ImageBuilder-Firmware generiert wird, ist folgende:

# Allgemeine Einstellungen
DebugLevel 1    # zum Testen auf 1-9 setzen, im Betrieb dann auf 0 setzen
IpVersion 4     # IPv4 ist Standard, man kann die Datei auch an IPv6 anpassen und separat speichern

# Plugins laden

# In großen Netzen folgendes Plugin aktivieren:
#LoadPlugin "olsrd_arprefresh.so.0.1"
#{
#}

LoadPlugin "olsrd_txtinfo.so.0.1"
{
        #bei IPv6 folgende Zeile auslassen
        PlParam "accept" "0.0.0.0"
}

LoadPlugin "olsrd_watchdog.so.0.1"
{
        PlParam "interval" "30"
        PlParam "file" "/var/run/olsrd.watchdog"
}

# Besitzt man einen Internetzugang, kann man ihn aktivieren, indem man die Rauten entfernt:
#LoadPlugin "olsrd_dyn_gw_plain.so.0.4"
#{
#}

# Das Nameservice Plugin verbreitet mit den OLSR-Broadcasts gleichzeitig einige Informationen über sich selbst,
# z.B. den eigenen Domainnamen im Mesh, die Geokoordinaten oder verfügbare Dienste.
LoadPlugin "olsrd_nameservice.so.0.3"
{
       PlParam "name" "olsr-test-laptop" # Hostname im Mesh: Anpassen! Beachte Konventionen/Reservierungen der Community
       PlParam "lat" "50.77900" # Breitengrad: Anpassen!
       PlParam "lon" "6.05399" # Längengrad: Anpassen!
       PlParam "suffix" ".olsr" # Domainendung die im Mesh verwendet wird: Durch Communitysuffix ersetzen
       PlParam "latlon-file" "/var/run/latlon.js" # Speicherort für Geoinfoamtionen über andere Nodes: So lassen
       PlParam "hosts-file" "/etc/hosts.olsr" # Hier werden die Hostnamen anderer Nodes gespeichert. Einfach so lassen
       PlParam "services-file" "/var/run/services_olsr" # Diese Datei enthält Informationen über Dienste im Netz. So lassen.
}

InterfaceDefaults
{
}

# Hier werden Interfaces konfiguriert, die OLSR verwenden soll. Lautet das Interface anders (ath0, eth1, ...) einfach wlan0 ersetzen.
# Mehrere Interfaces kann man hier hintereinander schreiben: "wlan0" "wlan1", oder man erstellt einen eigenen Eintrag und nutzt auch 
# InterfaceDefaults für gemeinsame Parameter.
Interface "wlan0"
{
       # Bei IPv6 folgende Zeile auslassen
       Ip4Broadcast 255.255.255.255
}

Es empfiehlt sich, für lokal verwendete Konfigurationsdateien die Homepage der eigenen Freifunk Community zu besuchen. Eine ausführliche Beispielkonfiguration für OLSRd ist hier zu finden. Weitere Informationen findet man auch in den manpages zu olsrd und olsrd.conf, sowie in /usr/share/doc/olsrd*/

Netzwerkkarte konfigurieren

Bevor olsrd gestartet werden kann, muss das WLAN-Interface noch passend eingestellt werden, sonst erhält man eine "No interfaces detected"-Fehlermeldung: Die Karte muss im Ad-Hoc Modus betrieben werden, den richtigen Channel und die richtige ESSID der Form community.freifunk.net haben. Desweiteren muss die Karte eine gültige IP+Subnetzmaske der Freifunkcommunity bekommen. Das Interface muss UP sein und BROADCAST erlauben.

Manuelle Beispielkonfiguration zur Veranschaulichung; dringend an eigene Community anzupassen:

iwconfig wlan0 mode Ad-Hoc
iwconfig wlan0 essid aachen.freifunk.net channel 1
ifconfig wlan0 10.90.0.47/16 up

Firewall

Es ist unbedingt sicherzustellen, dass eine eventuell vorhandene Firewall keinen Traffic der aus dem Freifunknetz kommt und ins Freifunknetz weitergeleitet werden soll blockiert, sonst stört man den Datenverkehr im Netz. Ausserdem muss, sofern eine Firewall engehenden Verkehr filtert, Port 698 udp erlaubt werden.

Da jeder Mesh-Teilnehmer mit olsrd ein Router ist, muss man Paket-Forwarding einschalten, damit mehr als zwei Teilnehmer in dem Mesh kommunizieren können. Dazu gibt man als root folgende Kommandos ein (ist noch zu verifizieren):

echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -I FORWARD -j ACCEPT
iptables -I INPUT -p udp --dport 698 -j ACCEPT

Trägt man in der /etc/sysctl.conf die Zeile

net.ipv4.ip_forward = 1

ein, so ist nach dem Kommando sysctl -p oder einem Reboot das erste Kommando nicht mehr nötig und man muss nur noch die beiden iptables-Kommandos zu den Firewalleinstellungen seiner Linux-Distribution hinzufügen. Die FORWARD-Regel sollte man idealerweise noch einschränken auf Interfaces, die für Freifunk/OLSR konfiguriert wurden, z.B:

iptables -I FORWARD -i wlan0 -o wlan0 -j ACCEPT

Dies erlaubt nur FORWARDING von Paketen, die über wlan0 hereinkommen und über wlan0 auch wieder rausgehen.

OLSRd starten

OLSRd muss als root gestartet werden. Dies kann entweder über die Initskripte der Distribution (/etc/init.d/olsrd start) oder auf der Kommandzeile mit "olsrd -f /etc/olsrd.conf" bewerkstelligt werden.

Tips zur Fehlersuche

  • Ist das Interface richtig konfiguriert? Einstellungen mit ifconfig und iwconfig nachsehen
  • Läuft OLSRd? -> "ps ax |grep olsr"
  • olsrd mit "-d 1" bis "-d 9" starten, dann erhält man Debugausgaben
  • Werden Routen eingetragen? Nachschauen mit "ip r"
  • Werden OLSRd-Pakete empfangen und verschickt? -> "tcpdump -i <interface> port 698"

Links

OLSRd Homepage