Erweiterte Konfiguration: Unterschied zwischen den Versionen

Aus Freifunk Kiel
Zur Navigation springen Zur Suche springen
 
(Eine dazwischenliegende Version desselben Benutzers wird nicht angezeigt)
Zeile 107: Zeile 107:
 
Dort dann das alte Repository auskommentieren und das von OpenWRT einfügen.
 
Dort dann das alte Repository auskommentieren und das von OpenWRT einfügen.
 
<pre>
 
<pre>
# src/gz attitude_adjustment http://opkg.services.ffki/attitude_adjustment/12.09/ar71xx/generic/packages
+
# src/gz attitude_adjustment http://opkg.services.ffki/chaos_calmer/15.05.1/ar71xx/generic/packages/
src/gz attitude_adjustment http://downloads.openwrt.org/attitude_adjustment/12.09/ar71xx/generic/packages/
+
src/gz attitude_adjustment http://downloads.openwrt.org/chaos_calmer/15.05.1/ar71xx/generic/packages/
 
dest root /
 
dest root /
 
dest ram /tmp
 
dest ram /tmp

Aktuelle Version vom 1. November 2016, 22:41 Uhr

Erste Schritte nach dem Flashen

Du hast also deinen Freifunkrouter grade frisch geflashed und rudimentär konfiguriert. Glückwunsch!

Nun willst du wahrscheinlich wieder darauf zugreifen. Vielleicht einen Parameter ändern oder allgemein nur mal gucken.

Aus Platzgründen hat das Standard-Image leider keine weitergehende Weboberfläche. Viele der kleinen Router haben nicht genügend Flash-Ram, daher ist das Image möglichst klein gehalten. Konfiguration außerhalb des Configmode ist also nur über die SSH möglich.


Wo ist er denn?

Wenn der Router das erste mal konfiguriert wurde, deaktiviert er den Einrichtungsassistenten auf 192.168.1.1 auf dem LAN-Interface (die gelben Ports bei einem TP-Link) und auch die IP auf dem Interface.

Im normalen Betrieb ist der Freifunk-Router mit dem WAN-Interface (blau bei TP-Link Routern) am Uplink angeschlossen.

Dein Freifunkrouter ist dann auf folgende Art und Weise zu erreichen:


WAN IPv6

Die IPv6 Adresse für das WAN-Interface bekommt man heraus, indem man sich per SSH auf dem Freifunk-Router anmeldet oder mit einem IPv6 broadcast. Es gibt aber auch noch weitere Möglichkeiten sich auf den Router anzumelden, als über dieses Interface.

Wenn man denn erstmal per SSH angemeldet ist, heißt das Interface übrigends br-wan.

WAN IPv4

Der Freifunkrouter bezieht seine IPv4-Adresse für den Uplink per DHCP. Du wirfst also einen Blick in die Liste der IP, die dein Router/DHCP-Server verteilt hat.

Dort solltest du dann deinen Freifunk-Router finden und hast somit seine aktuelle IP-Adressse mit der du dich auf dem Gerät per SSH anmelden kannst.

Mit der dort gelisteten MAC-Adresse solltest du deinen Router/DHCP-Server dazu bringen können, dem Freifunk-Router immer dieselbe IP zu geben. Wie genau das geht, ist von Router zu Router und DHCP zu DHCP-Server unterschiedlich. Hier hilft ein Blick in entsprechende Tutorials.

WLAN

Als local-node ist jeder Freifunk-Router auf diesen beiden IPs zu erreichen:

IPv4:   10.116.254.254
IPv6:   fda1:384a:74de:4242::ffff

Zusätzlich hat er aber noch weitere IPs. Du bekommst sie über die Alfred JSON Status Knotenliste heraus. Schau nach deinem Node-namen, wenn du über ihn angemeldet bist. Es ist hier egal ob per WLAN oder LAN (gelbe Ports am TP-Link). Klickst du den Link des Freifunk-Routers an, bekommst du dann die Statusseite deines Routers angezeigt.

LAN

Die IPv6 Adresse bekommst du über Alfred JSON Status Knotenliste heraus. Oder per ssh und dann mit dem Befehl ifconfig. br-client heisst das Interface, nach dem du suchst.

IPv4 gibt es nur über die local-node Konfiguration.

SSH ?

Als du per Webinterface unter 192.168.1.1 deinen Freifunk-Router eingerichtet hast, konntest du unter "Erweitert" ein Passwort oder einen SSH-Key hinterlegen.

Hast du das nicht gemacht mußt du deinen Router wieder in den Configmodus versetzen.

Details findest du dazu hier: Configmode

Wie man SSH-Keys unter Linux/Unix/MacOS erstellt beschreibt etwas dieses Tutorial: - Secure SSH Tutorial Part 2: Identity/Pubkey Authentifizierung

Und hier wie man es unter Windows mit dem Putty-Paket macht: PuTTY key-basierte SSH Login

Solltest du ein Passwort verwenden, nutze keins, was du auch woanders benutzt.

Statusseite auch auf dem WAN Interface

Ich möchte die Statusseite meines Freifunk-Routers auch über dessen WAN-Interface (blau bei TP-Link) erreichen können.

Dafür muß man eigentlich nur der Firewall eine zusätzliche Regel verpassen:

cd /etc/config
vi firewall

Dort dann diese weitere Regel einfügen:

config rule 'wan_http'
        option dest_port '80'
        option src 'wan'
        option name 'wan_http'
        option target 'ACCEPT'
        option proto 'tcp'

Wie man in der Config des uhttpd sehen kann, muß man hier nichts mehr machen:

less /etc/config/uhttpd
        [...]
        list listen_http '0.0.0.0:80'
        list listen_http '[::]:80'
        [...]

Die Adresse 0.0.0.0 bindet den uhttpd-Daemon auf alle IPv4-Adressen. 80 steht für den Port. Die Adresse [::] ist das IPv6 Gegenstück zum 0.0.0.0 vom IPv4.

Und noch die Regeln neu laden:

/etc/init.d/firewall restart

Andere Pakete einspielen

Basis deines Freifunk-Routers ist die OpenWRT-Distribution. Diese enthält auch ein Paket-Management-Tool.

opkg

Dummerweise ist im Moment (02.01.2015) aber das Freifunk-Repository offline.

Hier kann man sich aber glücklicherweise mit dem OpenWRT-Repository behelfen.

cd /etc
vi opkg.conf

Dort dann das alte Repository auskommentieren und das von OpenWRT einfügen.

# src/gz attitude_adjustment http://opkg.services.ffki/chaos_calmer/15.05.1/ar71xx/generic/packages/
src/gz attitude_adjustment http://downloads.openwrt.org/chaos_calmer/15.05.1/ar71xx/generic/packages/
dest root /
dest ram /tmp
lists_dir ext /var/opkg-lists
option overlay_root /overlay

Nun noch das Repository aktualisieren:

opkg update

Suchen von Paketen mittels:

 
opkg find PacketName


Installieren von Paketen mittels:

 
opkg install PacketName

WICHTIG: Das ist nur eine Notlösung! Sowie das Freifunk-Repository wieder online ist, sollte man dieses Setting wieder ändern.


Der Editor joe

Dies ist mein Lieblingseditor auf der Konsole. Er kann deutlich mehr als nano, ist nicht so kryptisch wie vi (and in the middle of evil there is vi) und nicht so groß und komplex wie emacs (eight megabytes and continuously swapping).

opkg install joe

Zur Konfiguration braucht es noch zwei Dateien, die sich aber nicht im OpenWRT-Repository befinden.

Bedauerlicherweise kann man in dieses Wiki nur Icons und PDFs hochladen und nicht diese beiden Dateien. Daher hab ich dafuer eigene Wiki-Seiten erstellt.

Entweder als /root/.joerc als /etc/joe/joerc

Entweder als /root/.ftyperc oder als /etc/joe/ftyperc

Die beiden Dateien entstammen ursprünglich aus einer Linux-Ubuntu. In der Datei joerc muß man den Ort der ftyperc anpassen, wenn man die beiden Dateien ins Verzeichnis "/etc/joe/" legt. Ich hab sie unter /root liegen.

In der ftyperc habe ich für allgemeine Dateien folgende Anpassungen vorgenommen:

*
--wordwrap
-nobackups
-asis

* Der Stern steht als Platzhalter, für jede Datei, deren Endung nicht weiter unten in der Datei ftyperc angegeben wird.

--wordwrap Verhindert den automatischen Wordwarp. Bei Texten hilfreich. Bei Configdateien eher nicht.

-nobackups Verhindert die automatischen Backups. Speziell in Verzeichnissen mit init-Skripten kann das sonst gruselig werden.

-asis Sorgt dafür das die Charaktercodes über 127 genauso behandelt werden, wie sie sind und nicht irgendwie interpretiert werden. Andernfalls kann man eine Menge Spass mit Backticks und anderen Sonderzeichen haben.


https aktivieren

Ums kurz zu machen: Funktioniert aktuell nicht!

Theoretisch kann der uhttpd das.

Hier die Schritte, die eigentlich zum Ziel führen sollten:

opkg install uhttpd-mod-tls
opkg install px5g

Änderungen in der: /etc/config/uhttpd

config uhttpd 'main'
        option rfc1918_filter '1'
        option max_requests '3'
        option cert '/etc/uhttpd.crt'
        option key '/etc/uhttpd.key'
        option cgi_prefix '/cgi-bin'
        option script_timeout '60'
        option network_timeout '30'
        option tcp_keepalive '1'
        option home '/lib/gluon/status-page/www'
        list listen_http '0.0.0.0:80'
        list listen_http '[::]:80'
        list listen_https '0.0.0.0:443'
        list listen_https '[::]:443'

Einträge für die /etc/config/firewall

config rule 'wan_https'
        option dest_port '443'
        option src 'wan'
        option name 'wan_http'
        option target 'ACCEPT'
        option proto 'tcp'

Die Freiwall neu starten:

/etc/init.d/firewall restart

Und dann noch den uhttpd neu starten:

/etc/init.d/uhttpd restart

Greift man nun per https auf den Freifunk-Router zu, bekommt man eine Fehlermeldung, das die byte-Länge des Zertifikats zu lang sei.

Testweise hatte ich die Zertifikate per openssl auf einem Linux-Server neu erzeugt und auf den Router kopiert. Das hat das Problem aber nicht gelöst.

WAN IPv6 statt LAN IPv6 für den Link in der Alfred JSON Status Knotenliste

Wenn man nicht auf seinem Node eingelogt ist, dann funktioniert der Link nicht, den man in der Alfred JSON Status Knotenliste für den Freifunk-Router hat.

Theoretisch könnte ich mein lokales Netzwerk in das Freifunk-Netzwerk einbinden. Aktuell möchte ich das aber nicht.

Statt dessen möchte ich an der Stelle der LAN IPv6-Adresse die des WAN-Interfaces haben. Da es eine globale IPv6 ist, sollte damit die Statusseite des Freifunk-Routers auch von extern erreichbar sein. Vorrausgesetzt das meine Firewall diese Adresse erreichbar macht.

Die Daten, die an Alfred geschickt werden, werden von einem Lua-Skript erzeugt:

/lib/gluon/announce/announce.lua nodeinfo

Für die Adressen ist folgendes Skript zuständig:

/lib/gluon/announce/nodeinfo.d/network/addresses

Um die Adresse des WAN Interfaces zu bekommen muß man lediglich das Interface ändern. Das Originale Skript ändert man "br-client"

local ip = util.exec('ip -o -6 addr show dev br-client')

local addresses = {}
for _, line in ipairs(util.split(ip)) do
        table.insert(addresses, line:match('inet6 ([%x:]+)/'))
end

return addresses

zum Interface "br-wan":

local ip = util.exec('ip -o -6 addr show dev br-wan')

local addresses = {}
for _, line in ipairs(util.split(ip)) do
        table.insert(addresses, line:match('inet6 ([%x:]+)/'))
end

return addresses


WICHTIG: Dieses Vorgehen ist nicht empfohlen und kann eventuell auch problematisch sein! Es stellt lediglich die Lösung für meine Router zu meiner Bequemlichkeit da.