0x1b - ESCAPE
HTML PDF Postscript
 Multihomed 
IPv6 Geschrieben von Beat Rubischon (Link) am Samstag, 17. November 2007, 23:32
aus dem *big-setup* dept.

Wie reagieren Hosts, wenn plötzlich zwei IPv6 Prefixes in einem LAN announct werden? Eine interessante Frage, auf die es nur eine Antwort gibt: Ausprobieren!

Nebst meinem nativen IPv6 Uplink über PPPoA habe ich mir einen Tunnel bei SixXS eingerichtet. So standen mir auf dem Router die beiden Prefixes 2001:8e0:1006::/48 und 2001:7b8:3c1::/48 zur Verfügung. Laut Dokumentation sollte der Router IPv6 Policy Based Routing beherrschen.

Ich machte folgende Anpassungen. Erst einmal beide Defaultrouten eintragen, damit das ipv6 verify unicast reverse-path noch funktioniert:
ipv6 route ::/0 Tunnel0 80
ipv6 route ::/0 Dialer1
Für eine Route Map braucht es erst einmal eine Access Liste, damit ich bestimmen kann, für welche Pakete sie gilt. Das Folgende ist nicht der erste Entwurf - eher das Resultat mehrerer Pings und Traceroutes:
ipv6 access-list altuplink
 remark Alternative IPv6 Range
 deny ipv6 any 2001:8E0:1006::/48
 deny ipv6 any 2002::/16
 permit ipv6 2001:7B8:3C1::/48 any
Alle Pakete, die eine Absenderadresse aus dem SixXS Prefix haben, aber nicht zum Interway Prefix oder zu einer 6to4 Adresse gehen, sollen matchen. Diese ACL kommt nun in einer Route Map zum Zug:
route-map altuplink permit 10
 description Alternative IPv6 Range
 match ipv6 address altuplink
 set interface Tunnel0
Damit die Pakete auch in diese Regeln fallen, muss das Policy based Routing auf den Ethernet Interfaces aktiviert werden:
interface Ethernet0
 ipv6 policy route-map altuplink
!
interface Ethernet2
 ipv6 policy route-map altuplink
Das war es schon. Damit weiss der Router, dass die beiden Uplinks aufgrund der Quellenip geroutet werden sollen. Das soll übrigens so auch unter IPv4 gehen, habe ich aber nicht ausprobiert.

Nun muss der neue Prefix noch announct werden. Die Adresse zu den Interfaces hinzufügen ist eigentlich schon genug, ich schraube aber noch etwas am Router Advertisement herum:
interface Ethernet0
 ipv6 address 2001:7B8:3C1::/64 eui-64
 ipv6 address 2001:8E0:1006::/64 eui-64
 ipv6 nd suppress-ra
!
interface Ethernet2
 ipv6 address 2001:7B8:3C1:1::/64 eui-64
 ipv6 address 2001:8E0:1006:1::/64 eui-64
 ipv6 nd prefix 2001:7B8:3C1:1::/64 3600 900
 ipv6 nd prefix 2001:8E0:1006:1::/64 3600 900
Noch bevor die Konfig im NVRAM war, hatte meine melone bereits zwei IPv6 Adressen:
en1: flags=8863 mtu 1500
        inet6 fe80::211:24ff:fea8:6b9%en1 prefixlen 64 scopeid 0x5 
        inet6 2001:7b8:3c1:1:211:24ff:fea8:6b9 prefixlen 64 autoconf
        inet6 2001:8e0:1006:1:211:24ff:fea8:6b9 prefixlen 64 autoconf
Nun begann der Spass! Schnell stellte sich heraus, das "benachbarte" Ranges bevorzugt werden. So gehen Verbindungen zu Interway eher über 2001:8e0:1006::/48 raus, Verbindungen zur Switch oder dem FreeBSD FTP Server über 2001:7b8:3c1::/48. Ganz ähnlich verhaltet sich auch aktuelle Linux 2.6er Kernels - RFC 3484, welches dieses Verhalten definiert, ist weitgehenst implementiert. Im Gegensatz dazu macht der 2.4er Kernel ein stures die letzte Adresse zählt.

Nächster Test war noch die Reaktion der typischen Adress Verifikationsroutinen. Die libwrap macht beispielsweise erst eine Anfrage welcher Name gehört zu dieser Adresse und anschliessend eine Anfrage welche Adresse gehört zu diesem Namen bevor ein eingetragener Name akzeptiert wird. Und tatsächlich kommt die libwrap mit mehreren Adressen zurecht.

Dummerweise befinden sich beide Prefixes am "oberen Ende" des derzeitigen Internets. Der native Uplink ist zudem noch etwas höher als der Tunnel - damit werden überdurchschnittlich viele Verbindungen über den Tunnel geroutet. Eigentlich nicht das, was man sich als Besitzer eines "echten" IPv6 Uplinkes wünscht - entsprechend habe ich mir den Prefix wieder aus dem Announcement genommen:
interface Ethernet2
 ipv6 nd prefix 2001:7B8:3C1:1::/64 no-advertise
 ipv6 nd prefix 2001:8E0:1006:1::/64 3600 900
Beim statischen Routing mag es etwas anders aussehen. ip -6 route add hat die nette Option src, mit welcher sich die Absenderadresse setzen lässt. Doch habe ich (noch) nur einen 2.4er Kernel da, wo ich statische IPs einsetze - und der nimmt stur die letzte globale IP Adresse als Quelle.

Zum Schluss noch zwei Traceroutes. Erst die Switch:
max:~# traceroute6 mirror.switch.ch
traceroute to moon.switch.ch
  from 2001:8e0:1006::2, 30 hops max, 16 byte packets
 1  rt-1.0x1b.ch 1.771 ms  2.165 ms  1.991 ms
 2  2001:8e0:0:ffff::b 20.681 ms  17.019 ms  19.452 ms
 3  f0-0.zelja.zh.ipv6.as8758.net 16.935 ms  94.324 ms  21.046 ms
 4  2001:7f8:24::34 21.01 ms  19.35 ms  19.507 ms
 5  swiEZ2-10GE-5-4.switch.ch 21.546 ms  19.127 ms  20.426 ms
 6  swiCS3-10GE-1-1.switch.ch 22.412 ms  17.54 ms  19.832 ms
 7  moon.switch.ch 19.965 ms  19.443 ms  19.977 ms

max:~# traceroute6 -s 2001:7b8:3c1::2 mirror.switch.ch
traceroute to moon.switch.ch
  from 2001:7b8:3c1::2, 30 hops max, 16 byte packets
 1  rt-1.0x1b.ch 3.743 ms  2.714 ms  2.453 ms
 2  gw-379.ede-01.nl.sixxs.net 30.458 ms  35.206 ms  35.084 ms
 3  sixxs-gw.ipv6.network.bit.nl 34.648 ms  35.378 ms  35.422 ms
 4  2001:7b8::219:e200:10c:3000 35.236 ms  35.17 ms  30.89 ms
 5  zpr2.amt.cw.net 36.611 ms  34.256 ms  35.966 ms
 6  so-0-0-0-dcr2.fra.cw.net 47.124 ms  46.856 ms  49.945 ms
 7  so-5-0-0-bcr2.fra.cw.net 47.663 ms  46.326 ms  48.157 ms
 8  ge-1-3-0-iar1.fra.cw.net 49.979 ms  49.998 ms  52.214 ms
 9  2001:5001:200:6::2 74.304 ms  71.91 ms  72.185 ms
10  2001:2000:3010::2 72.277 ms  77.523 ms  72.393 ms
11  telia-v6.rt1.lon.uk.geant2.net 72.951 ms  73.368 ms  73.335 ms
12  so-4-0-0.rt1.par.fr.geant2.net 83.242 ms  83.708 ms  80.576 ms
13  so-7-3-0.rt1.gen.ch.geant2.net 96.833 ms  96.142 ms  98.408 ms
14  switch-gw.rt1.gen.ch.geant2.net 88.909 ms  85.221 ms  83.386 ms
15  swiLS2-10GE-1-3.switch.ch 90.269 ms  89.326 ms  85.736 ms
16  swiEZ2-10GE-1-1.switch.ch 88.625 ms  91.027 ms  91.521 ms
17  swiCS3-10GE-1-1.switch.ch 91.756 ms  89.214 ms  89.788 ms
18  moon.switch.ch 92.795 ms  90.335 ms  90.322 ms
Und der FreeBSD FTP Server:
max:~# traceroute6 ftp.freebsd.org
traceroute to ftp.freebsd.org
  from 2001:8e0:1006::2, 30 hops max, 16 byte packets
 1  rt-1.0x1b.ch 3.876 ms  3.243 ms  2.369 ms
 2  2001:8e0:0:ffff::b 20.404 ms  20.453 ms  18.976 ms
 3  eth0-1-1.ghayda.glb.ipv6.as8758.net 22.501 ms  19.403 ms  20.195 ms
 4  f0-0.zelja.zh.ipv6.as8758.net 20.483 ms  18.974 ms  20.379 ms
 5  2001:7f8:c:8235:194:42:48:75 22.014 ms  21.601 ms  31.528 ms
 6  ip-1-3-0-2.sltnxj2.inet6.tele.dk 71.97 ms  67.454 ms  69.908 ms
 7  tun6.r149.ipv6.opa.tdk.net 72.713 ms  67.234 ms  71.038 ms
 8  tun6.r149.ipv6.opa.tdk.net 72.013 ms !S  68.89 ms !S  72.982 ms !S

max:~# traceroute6 -s 2001:7b8:3c1::2 ftp.freebsd.org
traceroute to ftp.freebsd.org
  from 2001:7b8:3c1::2, 30 hops max, 16 byte packets
 1  rt-1.0x1b.ch 4.009 ms  2.468 ms  2.652 ms
 2  gw-379.ede-01.nl.sixxs.net 32.567 ms  31.771 ms  32.975 ms
 3  sixxs-gw.ipv6.network.bit.nl 32.152 ms  35.341 ms  34.24 ms
 4  2001:7b8::219:e200:10c:3000 35.332 ms  32.719 ms  35.909 ms
 5  ge-1-11.r01.amstnl02.nl.bb.gin.ntt.net 36.127 ms  33.545 ms  34.841 ms
 6  xe-2-0-0.r23.amstnl02.nl.bb.gin.ntt.net 35.392 ms  36.284 ms  37.362 ms
 7  xe-0-2-0.r22.amstnl02.nl.bb.gin.ntt.net 34.932 ms  32.751 ms  34.986 ms
 8  p64-2-0-0.r23.londen03.uk.bb.gin.ntt.net 61.91 ms  43.137 ms  43.772 ms
 9  xe-4-4.r00.londen03.uk.bb.gin.ntt.net 40.801 ms  42.865 ms *
10  fa-0-0.r00.londen03.uk.b6.gin.ntt.net 44.61 ms  42.978 ms  42.978 ms
11  tu-0.teledanmark.londen03.uk.b6.gin.ntt.net 82.333 ms  79.32 ms  81 ms
12  fe0-0-460.100M.sltnxt99.ip.tele.dk 77.322 ms  78.773 ms  84.295 ms
13  tun6.r149.ipv6.opa.tdk.net 77.073 ms  81.013 ms  79.339 ms
14  tun6.r149.ipv6.opa.tdk.net 79.753 ms !S  77.683 ms !S  81.528 ms !S
Beides wunderbare Beispiele, die aufgrund der RFC3484 Entscheidung über den "teureren" Link gehen.

Vielleicht eben doch "richtiges" Multihoming, wie wir es von IPv4 kennen? Dafür ist es wahrscheinlich schon zu spät. Ein /48 gilt als Micro Allocation und ist bis auf wenige Ausnahmen nicht mehr legitim.

Permalink

Das Kleingedruckte: Der Besitzer der folgenden Kommentare ist wer immer sie eingeschickt hat. Wir sind in keiner Weise für sie verantwortlich.

  • beat@0x1b.ch Re: Multihomed
    Geschrieben von Beat Rubischon (Link) am Donnerstag, 22. November 2007, 09:19

    Beim Googlen noch gefunden: Ein SixXS Forum Posting und ein Readme wie Source IP based Routing unter Linux konfiguriert werden kann.