[Freifunk-Bonn] ip6 diversa: uplinks / collectd / ULA routing / routing an fastd3
Rougu
freifunk at hallo-diet.de
Do Jan 15 14:29:47 CET 2015
Hallo,
zum Teil zu nicht mehr ganz taufrischen Themen (und entschuldigt den
länglichen Beitrag):
---------------------------------------------------------------------
Erreichbarkeit von collectd
Ältere Firmware hat collectd.conf mit hostname
"collectd.kbu.freifunk.net" und AAAA-rec zeigt auf eine öffentliche
ip6-addr (ein HE 6in4-tunnel, wie's scheint), die aber öffentlich nicht
erreichbar ist.
Aktuelle fw hat eine freifunk ULA für collectd: :-)
Vorschlag:
public DNS:
collectd.kbu.freifunk.net AAAA 2001:470:780f:1::6 -> löschen
ff-DNS (fdd3:5d16:b5dd::2):
collectd.kbu.freifunk.net AAAA fdd3:5d16:b5dd:3::6
Auf diese Weise würden auch Nodes mit alter Firmware bei collectd wieder
zuverlässiger abliefern können, oder?
Weiter verbessern (z. B. falls IPv6 an br-wan):
Wenn IPv6-Resourcen nur innerhalb des Freifunk-Netzes erreichbar sind
und vom FF-Router erreicht werden müssen, könnte das Source-Interface
auf br-freifunk gesetzt werden.
Bei collectd.conf ist das möglich (kleine semantische Variation der
bestehenden Einträge)
LoadPlugin ping
<Plugin ping>
TTL 127
Interval 30
Device "br-freifunk"
Host "fdd3:5d16:b5dd:3::6"
</Plugin>
LoadPlugin network
<Plugin network>
Forward false
<Server "fdd3:5d16:b5dd:3::6" "25827">
Interface "br-freifunk"
</Server>
</Plugin>
Das funktioniert bei mir im Moment, aber weil offentlich die Route über
das zu verwendende src-if entscheidet, ist die Stabilität erstmal
fraglich (siehe auch weiter unten).
Prüfen der Absende-IP
(br-wan hat ipv6 uplink, nach neustart von collectd)
ping:
# tcpdump -i br-freifunk 'icmp6 and ip6[40]=128'
08:50:41.062389 IP6 2001:67c:20a0:b107:b248:7aff:febe:d4fa >
fdd3:5d16:b5dd:3::6: ICMP6, echo request, seq 9, length 64
und Daten abliefern:
# tcpdump -i br-freifunk 'port 25827'
08:56:41.046875 IP6 2001:67c:20a0:b107:b248:7aff:febe:d4fa.46786 >
fdd3:5d16:b5dd:3::6.25827: UDP, length 873
qed.
---------------------------------------------------------------------
IPv6-Uplinks
Das interne ff-routing für ip6 bricht, wenn if br-wan default-Route für
ip6 hat und diese an erster Stelle der ip6-default-Routen steht.
Soweit klar.
a) wg möglicher Routen/Src-Addr-Konflikte ipv6 auf br-wan abschalten?
Der vorgeschlagene Workaround
(https://github.com/ff-kbu/fff/commit/9cfe567771a5ddaabf84a345a207399a1d594f17#diff-64e2d6ea7bb6f6c907fd641221ea303d)
ist IMHO ohne Wirkung:
sysctl wird in rc.d mit S11 gestartet, also noch vor networking.
"net.ipv6.conf.br-wan.disable_ipv6=1" greift da noch nicht.
Statt dessen hilft:
/etc/rc.local
# echo 0
# No IPv6 on uplink
echo "1" > /proc/sys/net/ipv6/conf/br-wan/disable_ipv6
b) ipv6-Uplink doch nutzen?
***
Wenn IPv6 an br-wan nicht abgeschaltet sondern genutzt würde, wären die
FF-Router konsistent für IPv4 und IPv6 konfiguriert: der direkte Uplink
wird für Zugriffe des FF-Routers auf das öffentliche Internet genutzt.
***
Das ist wohl schon länger Konsens.
Ein paar Überlegungen zur möglichen Nutzung vorhandener ip4+ip6-Uplinks:
Konkreter Fall: Uplink mit
- ip4, mit Netcologne-Multikabel als Gateway -> public ip4-Internet,
- ip6, mit HurricaneElectric 6in4-Tunnel -> public ip6-Internet.
Zugriffe via def rt laufen über br-wan.
Erreichbar wären trotzdem alle direkt verbundenen ip6-Netze
2001:67c:20a0:b10X::/64, weil die
Zusätzlich erreichbar muss das ff-ULA-Netz (/48 !) sein, also
behelfsweise über zwei Supernodes zwingen (primär und fallback):
/etc/config/network
config route6
option interface 'freifunk'
option target 'fdd3:5d16:b5dd::/48'
option gateway 'fe80::c434:84ff:fe23:46d5'
option metric '1024'
config route6
option interface 'freifunk'
option target 'fdd3:5d16:b5dd::/48'
option gateway 'fe80::905b:d1ff:fe31:b00a'
option metric '1280'
Damit sollten interne FF-Resourcen korrekt erreicht werden, Zugriffe
nach aussen, z. B. für fastd via ip6 (irgendwann) aber über br-wan
laufen. So ist es dann auch (bei mir).
Ausblick:
(ref: http://wiki.openwrt.org/doc/uci/network)
"Since OpenWrt Barrier Breaker, netifd supports IP rule declarations
which are required to implement policy routing."
Schauen wir also voraus zum nächsten Major Release unserer fw.
Unter anderem wegen:
https://lists.debian.org/debian-ipv6/2014/11/msg00004.html warte ich
erstmal ab, was für die zukünftige IPv6-Konfiguration der Supernodes in
petto ist:
Die Supernodes verteilen jetzt schon Kenntnis zu Routen zu
fdd3:5d16:b5dd::/64, was aber derzeit anscheinend nicht verwertet werden
kann.
17:14:36.490258 IP6 (hlim 255, next-header ICMPv6 (58) payload length:
88) fe80::88cd:84ff:feb4:33bc > ff02::1: [icmp6 sum ok] ICMP6, router
advertisement, length 88
hop limit 64, Flags [other stateful], pref medium, router
lifetime 90s, reachable time 0s, retrans time 0s
prefix info option (3), length 32 (4):
2001:67c:20a0:b103::/64, Flags [onlink, auto, router], valid time
86400s, pref. time 14400s
0x0000: 40e0 0001 5180 0000 3840 0000 0000 2001
0x0010: 067c 20a0 b103 0000 0000 0000 0000
prefix info option (3), length 32 (4): fdd3:5d16:b5dd::/64,
Flags [router], valid time 86400s, pref. time 14400s
0x0000: 4020 0001 5180 0000 3840 0000 0000 fdd3
0x0010: 5d16 b5dd 0000 0000 0000 0000 0000
mtu option (5), length 8 (1): 1350
0x0000: 0000 0000 0546
A propos policy routing:
Vielleicht ist es zu schaffen, die dynamisch über br-freifunk
eintreffenden "prefix info options" in aktive Routingeinträge zu
übersetzen, die nur für eine Rule "freifunk" gelten und nicht global
gesetzt werden.
Die globale Routingtabelle des ff-Routers wäre dann per Default nur mit
Uplink-Routing bestückt.
--------------------------------------------------------------------------
Problem im IPv6-Routing?
Für ip6 kommt von jedem Supernode eine default route:
default via fe80::fc89:77ff:fe72:bd9d dev br-freifunk
default via fe80::1891:a2ff:fe61:febb dev br-freifunk
default via fe80::c434:84ff:fe23:46d5 dev br-freifunk
default via fe80::cb3:b4ff:fe70:aec4 dev br-freifunk
default via fe80::88cd:84ff:feb4:33bc dev br-freifunk
default via fe80::905b:d1ff:fe31:b00a dev br-freifunk
***
Beliebige IPv6-Ziele sind NICHT erreichbar, wenn
fe80::fc89:77ff:fe72:bd9d das tatsächlich genutzte default-gw ist, also
mit src addr aus 2001:67c:20a0:b101::/64 geroutet wird.
***
Hier bricht die Route am 1. Hop ins öffentliche Netz aus und führt zu
immer demselben Node bei Hetzner. Das betrifft dann auch alle lokalen
Clients des jeweiligen Nodes, für die IPv6 dann temporär nicht mehr
funktioniert.
Beispiel: (hier zu ipv6.google.com [2a00:1450:4005:809::1002])
# traceroute -6 2a00:1450:4005:809::1002
traceroute to 2a00:1450:4005:809::1002 (2a00:1450:4005:809::1002), 30
hops max, 16 byte packets
1 2001:67c:20a0:b104::1 (2001:67c:20a0:b104::1) 55.460 ms 25.290 ms
24.346 ms
2 www3.jluehr.de (2a01:4f8:120:7012::2) 47.039 ms 47.300 ms 47.059 ms
3 www3.jluehr.de (2a01:4f8:120:7012::2) 45.294 ms 46.082 ms 47.855 ms
Mit Hostroute über eines der anderen Default-Gateways/Supernodes (alle
getestet):
ip route add 2a00:1450:4005:809::1002 via fe80::905b:d1ff:fe31:b00a dev
br-freifunk
führt der Weg über das Exit-Gateway beim CCC zum Ziel, wie's wohl
gedacht ist.
# traceroute to 2a00:1450:4005:809::1002 (2a00:1450:4005:809::1002), 30
hops max, 16 byte packets
1 2001:67c:20a0:b101::1 (2001:67c:20a0:b101::1) 25.311 ms 24.571 ms
24.489 ms
2 fdd3:5d16:b5dd:3::3 (fdd3:5d16:b5dd:3::3) 48.713 ms 97.352 ms
97.800 ms
3 2001:67c:20a0:a::1 (2001:67c:20a0:a::1) 62.362 ms 49.001 ms
48.166 ms
4 de-cix20.net.google.com (2001:7f8::3b41:0:2) 65.540 ms 66.050 ms
64.980 ms
5 2001:4860::1:0:70c3 (2001:4860::1:0:70c3) 66.509 ms 136.522 ms
65.300 ms
6 2001:4860::8:0:5038 (2001:4860::8:0:5038) 68.060 ms 67.606 ms
67.296 ms
7 2001:4860::8:0:67ec (2001:4860::8:0:67ec) 65.025 ms 70.960 ms
63.523 ms
8 2001:4860::1:0:fbc (2001:4860::1:0:fbc) 119.497 ms 97.842 ms
132.885 ms
9 2001:4860:0:1::6b5 (2001:4860:0:1::6b5) 64.455 ms 79.474 ms
120.083 ms
10 2a00:1450:4005:809::a (2a00:1450:4005:809::a) 104.579 ms 68.390 ms
67.306 ms
Frage:
- Was ist bei 2001:67c:20a0:b104::1 (fastd3?) los?
-------------------------------------------------------------------
Overhead zu nicht erreichbarem Ziel?
mit "tcpdump -i br-freifunk 'icmp6'
findet man in ruhigen ff-Zeiten gefühlte 20-40 % Anteil an ICMP6
neighbor solicitations:
05:59:36.391601 IP6 fe80::c434:84ff:fe23:46d5 > ff02::1:ff00:4: ICMP6,
neighbor solicitation, who has 2001:67c:20a0:b100::4, length 32
Konkret: Alle Supernodes fragen ständig nach 2001:67c:20a0:b100::4,
wobei dieses Ziel aber nicht auffindbar zu sein scheint.
???
-------------------------------------------------------------------
Ergebnis (erstmal für mich):
- ff-Router hat ip4 und ip6 Uplink für Zugriffe aufs öffentliche
Internet und funktioniert mit ein paar Workarounds.
- collectd wird über erzwungenes Quell-Interface erreicht
- ULA-Netz wird über statische IPv6-Route erreicht: damit funktioniert
der Zugriff auf IPv6-Freifunk-DNS.
These:
- policy routing ist im Moment nicht nötig um ipv6 am Uplink zu nutzen.
Gruß,
rougu
Am 02.12.14 um 09:11 schrieb Jan Lühr:
> Hallo,
>
> args - das ist ein known-issue. IPv6 Uplinks kann unsere Firmware leider
> (noch - siehe IPv6-Diskussion hier vor einigen Tagen) nicht.
>
> Bis zur Umstellung von collectd ist diese Auswirkung niemandem aufgefallen.
> Bitte wende
> https://github.com/ff-kbu/fff/commit/9cfe567771a5ddaabf84a345a207399a1d594f17#diff-64e2d6ea7bb6f6c907fd641221ea303d
>
> an.
>
> Sorry, Gruß Jan
>
>
> Am 12/01/2014 11:46 PM, schrieb Nunatak:
>> Hi,
>>
>> ein TP-Link 841N mit Firmware 1.2.1b hatte unmittelbar nach der Ergänzung
>> eines eigenen Uplinks plötzlich keine collectd-Statistik geliefert.
>> Fand ich erst nicht soo wichtig, aber
>>
>> # ip -6 route show
>>
>> zeigte dann 6 default-Routen, wobei die erste folgende war:
>>
>> default via fe80::a96:.... dev br-wan metric 1024 expires 0sec
>>
>> Alle nachfolgend aufgeführten ipv6-"default"-Routen liefen wie sonst (bei den
>> von mir betreuten Routern) üblich über dev br-freifunk .
>> Gruß,
>> Nunatak
Mehr Informationen über die Mailingliste Freifunk-Bonn