Diese Seite nutze ich um den neuen Aufbau auf der Hardhöhe zu planen.
Technik
Auf der Hardhöhe entsteht wie im FabLab ebenfalls eine eigene Hood.
Das Gateway wird ein wr1043 aufgebaut nach diesen Schema. An einen Port lassen wir das Hardhöhe Batman rausfallen, dort kommen drei miteinander durchgebrückte NSM2 dran die mit normaler Freifunkfirmware aber angepasster WLAN Parameter das Hardhöhe Batman durch die Gegend funken und einen offenen Accesspoint anbieten.
An 2 weitere Ports kommt jeweils eine LBE-5AC-16-120 die etwa alles Richtung Fürth, Nürnberg, Erlangen erreichen sollte, das Fürther Hinterland wird vorerst nicht montiert es wäre techn. aber kein Problem eine dritte LBE-5AC-16-120 hinaufzubauen.
WLAN Verbindungen
Die vorerst wichtigste Verbindung ist Hardhöhe <-> FabLab. Dazu wird auf dem FabLab eine LBE-5AC-23 montiert und per VLAN ID 10 das Olsr Netz zur Hardhöhe geschickt.
Falls die Hardware 80MHz Kanalbreite unterstützt werden etwa 370-540Mbit theoretische Datenrate erwartet. Sollten nur 40MHz gehen, halbieren sich diese Zahlen natürlich. Zusatz: Die 120° Sektor scheint als Master nur 40MHz zu können :(
Theoretische Werte laut Ubiquiti Airrechner: Auf der Hardhöhe etwa -76dBm (370Mbit) auf dem FabLab etwa -69dBm (540Mbit).
Eine weitere sinnvolle Verbindung wäre zu Uferterrassen da es dort schnelles Internet gibt. Genauere Informationen über die Gegenstelle fehlen hier noch.
Natürlich ist es auch möglich irgendwelche anderen Arten von Freifunktraffic einfach nur durchzubridgen.
Olsr vom FabLab
Über dieses VLAN kann auf dem Gateway ein eigenes Interface erzeugt werden, welches ins Olsr gehangen wird. Somit sollten über das FabLab die Routingdaten hereinkommen
Uferterrassen
Da noch nicht klar ist, ob wir hier Batman Fürth oder Olsr bekommen wurde für beides eine Idee angelegt:
Olsr
Es wird ganz normal wie beim Fablab ein VLAN mit Interface erzeugt und darüber kann Olsr dann routen
Batman Fürth
Es wird ein eigenes bat1 Interface erzeugt welches eine IP aus Fürth bekommt. Da vorerst vorrauszusehen ist, dass der meiste Traffic Internettraffic ist, wird das Olsr dyn_gw_plain Plugin verwendet um die default Route in der fff Tabelle auf das bat1 Interface zu lenken. Somit wird jeglicher Internettraffic auf das bat1 gelenkt, Freifunkinterner Traffic geht normal über das Olsr Routing zum FabLab. Durch das dyn_gw_plain Plugin wird sichergestellt, das bei Ausfall der Verbindung des Fürther Batmans Olsr diese Route entfernt und auf eine alternative Verbindung umbaut.
Achtung!
bat0 und bat1 dürfen keinesfalls in irgendeiner weiße miteinander verbunden werden, da sonst die Hoods verbunden sind!
Fernzugangsmöglichkeiten
Da der Zugang zur Hardhöhe sich etwas schwierig gestaltet und man nicht wegen jeder Kleinigkeit hoch kann, muss man sich Gedanken machen wie man dort alles (auch bei eventuellen Fehlkonfigurationen) erreichen kann. Ich halte es für sinnvoll jegliche Änderung die bei installierter Hardware gemacht wird, durch das 4 Augen Prinzip abzusichern.
w2ap auf 1043
auf dem 1043er wird auf jeden Fall ein verschlüsseltes WLAN aufgespannt in der Hoffnung das man dies von unten irgendwo gut erreichen kann und somit bei kompletter Fehlkonfiguration der Ethernetports noch auf den 1043er drauf kommt.
Nanostation M2
auch über die Nanostation M2 Verbindung sollte der wr1043 erreichbar sein
Zugang über 5GHz
auch hier muss sich überlegt werden ob mit einem extra VLAN eine Verbindung hergestellt werden kann
Remote reboot
sehr gut wäre, wenn Dk5ras die ganze Hardware per Funk neu booten könnte.
VLAN Konfig
Belegung der VLANs
- VLAN ID 1: untagged auf Port 1 2 3, hängt in der Clientbridge
- VLAN ID 2: WAN aktuell unbenutzt
- VLAN ID 3: untagged auf Port 4 für Batman
- VLAN ID 10: wird auf LBE durchgebridged und landet tagged am Gateway, ist in Olsr mit reingehangen für Verbindung zum FabLab
Für (Fürther) Batman ist folgende Grundidee vorgesehen falls benötigt:
Auf den LBE's wird jeweils eine Bridge erstellt in der alle VLANs die Batman Fürth hochschicken hineingesteckt werden. Es wird dazu ein tagged VLAN zum Gateway erstellt (LAN Kabel) worüber die Batmans zwischen den LBE's verbunden werden.
Aktuelle config
aktuelle config:
config interface 'loopback' option ifname 'lo' option proto 'static' option ipaddr '127.0.0.1' option netmask '255.0.0.0' config interface 'w2mesh' option mtu '1532' option proto 'batadv' option mesh 'bat0' config interface 'mesh' option type 'bridge' option auto '1' option macaddr '30:b5:c2:0e:c9:54' list ip6addr 'fdff:0::30b5:c20e:c954/64' list ip6addr 'fdff:0::1/64' list ip6addr 'fdff:0::32b5:c2ff:fe0e:c954/64' option ipaddr '10.50.130.1' option netmask '255.255.254.0' option proto 'static' option ifname 'eth0.1 bat0' config interface 'wan' option proto 'dhcp' option ifname 'eth0.2' config interface 'ethmesh' option mtu '1532' option proto 'batadv' option mesh 'bat0' option ifname 'eth0.3' config interface 'bat' option ifname 'bat0' option mtu '1500' config switch 'eth0' option name 'ag71xx-mdio.0' option enable '1' option reset '1' option enable_vlan '1' config switch_vlan 'eth0_1' option device 'ag71xx-mdio.0' option vlan '1' option ports '1 2 3 6t' config switch_vlan 'eth0_2' option device 'ag71xx-mdio.0' option vlan '2' option ports '5 6t' config switch_vlan 'eth0_3' option device 'ag71xx-mdio.0' option vlan '3' option ports '4 6t' config switch_vlan 'eth0_10' option device 'eth0' option vlan '10' option ports '2t 3t 6t' config interface 'fablabnbg' option ifname 'eth0.10' config globals 'globals' option ula_prefix 'fdff:0::/64'
/etc/network.tl-wr1043nd-v2
WANDEV=eth0 SWITCHDEV=eth0 CLIENT_PORTS="1 2 3 6t" WAN_PORTS="5 6t" BATMAN_PORTS="4 6t" CLIENTIF="eth0.1 w2ap" ETHMESHMAC= ROUTERMAC=eth1
Damit scheint das ganze grundsätzlich funktionieren, eth0.10 kommt auf Port 2 und 3 tagged herein und wird auf das Olsr gelegt. Über eth0.1 wird Port 2 und 3 untagged in die Clientbridge gesteckt und man kann auf die 5GHz Geräte per IP zugreifen (die Clientbridge hat bereits eine IP, wir brauchen dem Interface daher keine IP geben)
Planung, ungetestet und mit Kommentare
config interface 'loopback' option ifname 'lo' option proto 'static' option ipaddr '127.0.0.1' option netmask '255.0.0.0' config interface 'w2mesh' option mtu '1532' option proto 'batadv' option mesh 'bat0' config interface 'ethmesh' option mtu '1532' option proto 'batadv' option mesh 'bat0' option ifname 'eth0.2' # option macaddr 'c4:e9:84:ef:43:b7' config switch 'eth0' option name 'eth0' option enable '1' option reset '1' option enable_vlan '1' config switch_vlan 'eth0_1' # Port 1 reichen wir einfach zum Router als Configport, hiermit kommt man immer direkt auf den Router option device 'eth0' option vlan '1' option ports '1 6t' # irgendeine remote IP setzen womit man dann später den Router erreichen kann! Kann irgendeine priv. sein da hier nichts geroutet wird config switch_vlan 'eth0_3' # um den Port 4 am Router als Batman zu verwenden! Da fällt dann das Hood Hardhöhe Batman raus und man kann die 3 Nanostations per Batman dran pappen option device 'eth0' option vlan '3' option ports '4 6t' config switch_vlan 'eth0_5' #es entsteht eth0.5 für Client zur Config der 5GHz Geräte option device 'eth0' option vlan '5' option ports '2 3 6t' # untagged ist ok # werfen wir mit in die Clientbridge da haben wir bereits eine IP config switch_vlan 'eth0_10' #es entsteht eth0.10, hier kommt olsr rein und eth0.3.10 muss ans Olsr gebunden werden (Olsr config!)! option device 'eth0' option vlan '10' option ports '2t 3t 6t' # muss noch eine IP für Olsr bekommen! 10.50.252.X # ... für weitere Peerings weitere Interfaces anlegen config switch_vlan 'eth0_20' #es entsteht eth0.20, es muss mit in das Batman gehangen werden batctl -m bat if add eth0.20 option device 'eth0' option vlan '20' option ports '2t 3t 6t' config switch_vlan 'eth0_30' #es entsteht eth0.30, hier wird Batman Fürth einfach miteinander verbunden wenn das VLAN mehrere Leute verwenden, darf keinesfalls ins Hardhöhe Batman gehangen werden!! option device 'eth0' option vlan '30' option ports '2t 3t 6t'
irgendwo fehlt da noch das eth0_2 für WAN, ist eigentlich mit drinnen fehlt hier aber...
/etc/network.tl-wr1043nd-v2
WANDEV=eth0 SWITCHDEV=eth0 CLIENT_PORTS="1 6t" # war 1 2 6t WAN_PORTS="5 6t" BATMAN_PORTS="4 6t" # war 3 4 6t CLIENTIF="eth0.1 w2ap" ETHMESHMAC= ROUTERMAC=eth1
diverse config Dateien
Diverse Dateien die neben der Standartfirmware manuell angelegt oder verändert wurden, keine Garantie auf Vollständigkeit:
/etc/rc.local
... olsrd ip route add 10.50.130.0/23 dev br-mesh table fff ...
/etc/olsrd/olsrd.conf
# # olsr.org OLSR daemon config file # # Lines starting with a # are discarded # # This file was shipped with the debian olsrd package # # Debug level(0-9) # If set to 0 the daemon runs in the background DebugLevel 0 # the interface the mesh runs on is specified at run time using the -i flag Interface "fffgwcd1VPN" "eth0.10" "eth0.11" { # Olsrd can autodetect changes in NIC configurations (IP address # changes etc.). This is enabled by default and the interval to # poll for changes on is defined by NicChgsPollInt. This polling # can be disabled pr. NIC by setting AutoDetectChanges to no. #AutoDetectChanges no # IPv4 broadcast address to use. The # one usefull example would be 255.255.255.255 # If not defined the broadcastaddress # every card is configured with is used Ip4Broadcast 255.255.255.255 # IPv6 address scope to use. # Must be 'site-local' or 'global' #Ip6AddrType site-local # IPv6 multicast address to use when # using site-local addresses. # If not defined, ff05::15 is used #Ip6MulticastSite ff05::11 # IPv6 multicast address to use when # using global addresses # If not defined, ff0e::1 is used #Ip6MulticastGlobal ff0e::1 # Emission intervals. # If not defined, RFC proposed values will # be used in most cases. # Hello interval in seconds(float) HelloInterval 6.0 # HELLO validity time HelloValidityTime 600.0 # TC interval in seconds(float) TcInterval 0.5 # TC validity time TcValidityTime 300.0 # MID interval in seconds(float) MidInterval 10.0 # MID validity time MidValidityTime 300.0 # HNA interval in seconds(float) HnaInterval 10.0 # HNA validity time HnaValidityTime 300.0 # When multiple links exist between hosts # the weight of interface is used to determine # the link to use. Normally the weight is # automatically calculated by olsrd based # on the characteristics of the interface, # but here you can specify a fixed value. # Olsrd will choose links with the lowest value. #Weight 0 # If a certain route should be preferred # or ignored by the mesh, the Link Quality # value of a node can be multiplied with a factor # entered here. In the example the route # using 192.168.0.1 would rather be ignored. # A multiplier of 0.5 will result in a small # (bad) LinkQuality value and a high (bad) # ETX value. #NatThreshold 0.7 #LinkQualityMult 10.50.252.251 1.0 #LinkQualityMult 10.50.252.10 0.7 #LinkQualityMult default 0.5 #LinkQualityMult 192.168.0.1 0.5 # This multiplier applies to all other nodes # LinkQualityMult default 0.8 } #NatThreshold 0.7 #LinkQualityMult 10.50.252.250 0.8 #LinkQualityMult default 0.3 ## these settings should work for funkfeuer, freifunk, etc. # Fisheye mechanism for TC messages 0=off, 1=on LinkQualityFishEye 1 #LinkQualityAlgorithm "etx_ff" ## if using commotionwireless.net, comment the line above and uncomment these: #LinkQualityFishEye 0 #LinkQualityAlgorithm "etx_ffeth" # IP version to use (4 or 6) IpVersion 4 # Clear the screen each time the internal state changes ClearScreen yes # HNA IPv4 routes # syntax: netaddr netmask # Example Internet gateway: # 0.0.0.0 0.0.0.0 Hna4 { # Internet gateway: # 0.0.0.0 0.0.0.0 # more entries can be added: # 192.168.1.0 255.255.255.0 10.50.130.0/23 #10.50.48.0/21 #10.50.104.0/21 } # HNA IPv6 routes # syntax: netaddr prefix # Example Internet gateway: Hna6 { # Internet gateway: # :: 0 # more entries can be added: # fec0:2200:106:: 48 } # Should olsrd keep on running even if there are # no interfaces available? This is a good idea # for a PCMCIA/USB hotswap environment. # "yes" OR "no" AllowNoInt yes # TOS(type of service) value for # the IP header of control traffic. # If not set it will default to 16 #TosValue 16 # The fixed willingness to use(0-7) # If not set willingness will be calculated # dynamically based on battery/power status # if such information is available Willingness 3 # Allow processes like the GUI front-end # to connect to the daemon. IpcConnect { # Determines how many simultaneously # IPC connections that will be allowed # Setting this to 0 disables IPC MaxConnections 0 # By default only 127.0.0.1 is allowed # to connect. Here allowed hosts can # be added Host 127.0.0.1 #Host 10.0.0.5 # You can also specify entire net-ranges # that are allowed to connect. Multiple # entries are allowed #Net 192.168.1.0 255.255.255.0 } # Wether to use hysteresis or not # Hysteresis adds more robustness to the # link sensing but delays neighbor registration. # Used by default. 'yes' or 'no' # Do not use hysteresis with ETX! UseHysteresis no # Hysteresis parameters # Do not alter these unless you know # what you are doing! # Set to auto by default. Allowed # values are floating point values # in the interval 0,1 # THR_LOW must always be lower than # THR_HIGH. #HystScaling 0.50 #HystThrHigh 0.80 #HystThrLow 0.30 # Link quality level # 0 = do not use link quality # 1 = use link quality for MPR selection # 2 = use link quality for MPR selection and routing # Defaults to 0 LinkQualityLevel 2 # Polling rate in seconds(float). # Default value 0.05 sec Pollrate 0.1 # TC redundancy # Specifies how much neighbor info should # be sent in TC messages # Possible values are: # 0 - only send MPR selectors # 1 - send MPR selectors and MPRs # 2 - send all neighbors # # defaults to 0 TcRedundancy 2 # # MPR coverage # Specifies how many MPRs a node should # try select to reach every 2 hop neighbor # # Can be set to any integer >0 # # defaults to 1 MprCoverage 5 # Olsrd plugins to load # This must be the absolute path to the file # or the loader will use the following scheme: # - Try the paths in the LD_LIBRARY_PATH # environment variable. # - The list of libraries cached in /etc/ld.so.cache # - /lib, followed by /usr/lib # Configuration examples for plugins: # see /usr/share/doc/olsrd-plugins/ for some for documentation # these are loaded from LD_LIBRARY_PATH #LoadPlugin "olsrd_httpinfo.so.0.1" #{ # defaults to 1978 # PlParam "Port" "8080" # if you dont set these, the default is to listen only on the loopback device #PlParam "Host" "80.23.53.22" #PlParam "Net" "10.0.0.0 255.0.0.0" # PlParam "Net" "0.0.0.0 0.0.0.0" #PlParam "Host" "127.0.0.1" #} ## for more info: http://olsr.org/?q=txtinfo_plugin #LoadPlugin "olsrd_txtinfo.so.0.1" #{ # PlParam "port" "2006" # PlParam "accept" "0.0.0.0" #} ## for more info: http://olsr.org/?q=jsoninfo_plugin #LoadPlugin "olsrd_jsoninfo.so.0.0" #{ # PlParam "port" "9090" # PlParam "accept" "0.0.0.0" #} # useful if your machine has an uplink #LoadPlugin "olsrd_dyn_gw.so.0.5" #{ # Here parameters are set to be sent to the # plugin. Theese are on the form "key" "value". # Parameters ofcause, differs from plugin to plugin. # Consult the documentation of your plugin for details. # Example: dyn_gw params # how often to check for Internet connectivity # defaults to 5 secs # PlParam "Interval" "5" # if one or more IPv4 addresses are given, do a ping on these in # descending order to validate that there is not only an entry in # routing table, but also a real internet connection. If any of # these addresses could be pinged successfully, the test was # succesful, i.e. if the ping on the 1st address was successful,the # 2nd won't be pinged #PlParam "Ping" "8.8.8.8" #PlParam "Ping" "82.165.230.17" #PlParam "pingcmd" "ping -c 1 -q -I tun0 %s" #} #LoadPlugin "olsrd_nameservice.so.0.2" #{ #PlParam "name" "xxx" #PlParam "a.b.c.d" "xxx-eth" #PlParam "a.b.c.e" "xxx-bbb" #PlParam "a.b.c.f" "xxx-olsr" #PlParam "suffix" ".olsr" #} #LoadPlugin "olsrd_dot_draw.so.0.3" #{ # accept connection from IP: # default 127.0.0.1 (localhost) #PlParam "accept" "192.168.0.5" #PlParam "port" "2004" #} #LoadPlugin "olsrd_nameservice.so.0.3" #{ # PlParam "sighup-pid-file" "/var/run/dnsmasq.pid" # PlParam "interval" "30" # PlParam "timeout" "300" # PlParam "name-change-script" "touch /tmp/namechange" # PlParam "name" "fff-gw-cd1 " # PlParam "service" "http://fff-gw-cd1.fff.community:80|tcp|fff-gw-cd1 Statistik" #} # Specify the proto tag to be used for routes olsr inserts into kernel # currently only implemented for linux # valid values under linux are 1 .. 254 # 1 gets remapped by olsrd to 0 UNSPECIFIED (1 is reserved for ICMP redirects) # 2 KERNEL routes (not very wise to use) # 3 BOOT (should in fact not be used by routing daemons) # 4 STATIC # 8 .. 15 various routing daemons (gated, zebra, bird, & co) # (defaults to 0 which gets replaced by an OS-specific default value # under linux 3 (BOOT) (for backward compatibility) # RtProto 8 # # Specifies the routing Table olsr uses # RtTable is for host routes, RtTableDefault for the route to the default # internet gateway (2 in case of IPv6+NIIT) and RtTableTunnel is for # routes to the ipip tunnels, valid values are 1 to 254 # There is a special parameter "auto" (choose default below) # (with smartgw: default is 254/223/224) # (without smartgw: default is 254/254/254, linux main table) # RtTable 10 RtTableDefault 10 RtTableTunnel 10 # # Specifies the policy rule priorities for the three routing tables and # a special rule for smartgateway routing (see README-Olsr-Extensions) # Priorities can only be set if three different routing tables are set. # if set the values must obey to condition # RtTablePriority < RtTableDefaultOlsrPriority # < RtTableTunnelPriority < RtTableDefaultPriority. # There are two special parameters, "auto" (choose fitting to SmartGW # mode) and "none" (do not set policy rule) # (with smartgw: default is none/32776/32776/32796) # (without smartgw: default is none/none/none/none) # # RtTablePriority auto # RtTableDefaultOlsrPriority auto # RtTableTunnelPriority auto # RtTableDefaultPriority auto
/etc/iproute2/rt_tables
... 10 fff ...
/etc/dnsmasq.conf
dhcp-range=10.50.131.1,10.50.131.127,255.255.254.0,1h dhcp-option=3,10.50.130.1 dhcp-option=option:dns-server,10.50.252.250 log-queries
fastd ist für Hardhöhe nur optional und wird nicht verwendet!
/usr/lib/micron.d/fff-fastd
*/1 * * * * fastd -c /etc/fastd/fff/fffgwcd1
/etc/fastd/fff/fffgwcd1
log to syslog level warn; method "null"; mode tun; interface "fffgwcd1VPN"; mtu 1426; peer "fffgwcd1" { remote ipv4 "fff-gw-cd1.fff.community" port 1234; key "SECURE"; } secret "SECURE"; on up " ip link set up fffgwcd1VPN ip address add 10.50.252.251 dev fffgwcd1VPN ip rule add from 10.0.0.0/8 table fff prio 20 ip rule add to 10.0.0.0/8 table fff prio 20 ip route add 10.50.130.0/21 dev br-mesh table fff ##/etc/fastd/fff/up.sh "; secure handshakes no;
/etc/config/network
... config interface 'mesh' option type 'bridge' option auto '1' option macaddr '30:b5:c2:0e:c9:54' list ip6addr 'fdff:0::30b5:c20e:c954/64' list ip6addr 'fdff:0::1/64' list ip6addr 'fdff:0::32b5:c2ff:fe0e:c954/64' option ipaddr '10.50.130.1' option netmask '255.255.254.0' option proto 'static' option ifname 'eth0.1 bat0' ... config switch_vlan 'eth0_10' option device 'eth0' option vlan '10' option ports '2t 3t 6t' config interface 'fablabnbg' option ifname 'eth0.10' config switch_vlan 'eth0_11' option device 'eth0' option vlan '11' option ports '2t 3t 6t' config interface 'ws13' option ifname 'eth0.11' ...
/etc/network.tl-wr1043nd-v2
WANDEV=eth0 SWITCHDEV=eth0 CLIENT_PORTS="1 2 3 6t" WAN_PORTS="5 6t" BATMAN_PORTS="4 6t" CLIENTIF="eth0.1 w2ap" ETHMESHMAC= ROUTERMAC=eth1