IPv6 und Multicasting
Aus Gentoo Linux Wiki
| Installationsmethoden • LiveCDs • Kernel & Hardware • Laptops & Notebooks • Portage • System • Netzwerke & Services • X • Software • Anderes • alphabetischer HOWTO Index |
Inhaltsverzeichnis |
[Bearbeiten] Vorwort
Nachdem ich nun schon seit über einer Woche dabei bin IPv6 und vor allem Multicast einzurichten (IPv6 funkioniert jetzt :), habe ich mich entschlossen, kurz - zumindest in Stichpunkten - aufzuzeigen, was man machen muß, um IPv6 bzw. Multicast zum Laufen zu bekommen. Der Multicastabschnitt ist logischerweise nicht vollständig - sonst würde es bei mir ja laufen :)
[Bearbeiten] IPv6
[Bearbeiten] Kerneleinstellungen für IPv6
Für IPv6 müssen die folgenden Optionen im Kernel aktiv sein. Wie man Kerneloptionen ändert und den Kernel neu übersetzt wird hier erklärt:
--> Networking options
[Y/M] The IPv6 protocol
[Y/M] IP: tunneling
Stellen Sie M ein, brauchen Sie den Rechner nicht neu zu starten, müssen aber ggf. per Hand via modprobe die Module nachladen. Mein Vorschlag: M einstellen, Kernel übersetzen und installerien, Module laden, danach Y einstellen, und Kernel erneut übersetzen und installieren. Ggf. LILO einrichten nicht vergessen. Bevor sie damit anfangen: Wir sind noch nicht fertig :)
Bei einem Kernel vor 2.4.5 müssen zusätzlich noch die hier eingeschaltet sein:
--> Networking options
[Y] IPv6: enable EUI-64 token format
[Y] IPv6: disable provider based address
Weil wir nachher ggf. noch Multicast einrichten wollen, sollten wir die entsprechenden Einstellungen auch gleich vornehmen, sonst müssen wir nachher den Kernel schon wieder neu übersetzen. Wenn Sie kein Multicast wollen/brauchen, schadet es nichts, die Einstellungen trotzdem zu machen, falls aber Ihr Kernel IPv6 schon eingestellt hatte, können Sie sich auch das Neuübersetzen des Kernels sparen.
--> Networking options
[Y] IP: multicasting
[Y] IP: IP: multicast routing
[Y] IP: PIM-SM version 1 support
[Y] IP: PIM-SM version 2 support
Update 2005-03-02: Irgendwie reicht das nicht für Multicast, da muß noch mindestens eine weitere Option hinzu, oder aber IPv4 Multicast ist in 2.4.26 kaputt. Tatsache ist, daß ich mit dem selben Testprogramm und gleichen Parametern bei zwei unabhängigen Systemen mit genau diesen Einstellungen ein »Protocol not supported« erhalte, wenn ich versuche eine IGMPv3 Multicast Gruppe zu joinen. Ein 2.4.23er kernel macht dies mit diesen Einstellungen aber perfekt. Leider unterscheiden sich die Konfigurationen trotzdem extrem voneinander.
So, jetzt den Kernel neu übersetzen.
[Bearbeiten] Pakete auf IPv6 umstellen
Während dies passiert, ggf. schonmal die make.conf anpassen, also ipv6 in die USE-Flags übernehmen:
# $EDITOR /etc/make.conf
USE="${USE} ipv6"
Ist dies geschehen, können Sie (nachdem die kernelinstallation erfolgreich war) ein
# emerge --newuse world
machen, um alle Pakete, die von IPv6 profitieren neu zu übersetzen.
[Bearbeiten] IPv6 Tunnel einrichten
Wenn wir IPv6 Unterstützung haben, stehen wir im Allgemeinen relativ alleine da, weil die meisten ISPs ihrerseits keine IPv6 Unterstützung haben. Es gibt nun mehrere Möglichkeiten, Ihren Rechner mit der IPv6-Welt zu verbinden. Die erste Möglichkeit ist es, das 6to4 Protokoll zu benutzen. Dies funktioniert aber nicht hinter einer Firewall mit NAT. Wenn die Firewall selber IPv6 kann, kann die routen, wenn aber die Firewall ihrerseits keine IPv6 Anbindung hat/haben soll, können wir 6to4 nicht nutzen. Die zweite Möglichkeit ist ein Tunnel, was i.A. auch durch eine Firewall funktioniert. Einige bieten eigene Tunnel an, einige bieten dies über andere Provider an, und dann gibt es da auch noch die ganz freien Tunnel. M'Net hatte mich z.B. auf Sixxs verwiesen, und eigentlich wäre das für mich Ideal gewesen, da aber Sixxs irgendwas gegen GMX hat, mußte ich auf einen anderen Tunnelprovider ausweichen, ich ging also nach FreeNet6
[Bearbeiten] IPv6 Pakete via 6to4 Protokoll versenden
Wenn Sie das 6to4 Protokoll verwenden wollen, benötigen Sie ein kleines Skript, das den Tunnel aufsetzt (hinweis: nicht vergessen iproute2 zu mergen):
# Das wird gebraucht, um Ihre IP Adresse zu ermitteln, und
# letztenendes auch, um zu entscheiden, wo die IPv6 Pakete
# rausgeknüppelt werden sollen
IP4IF=ppp0
# Theoretisch frei wählbarer name. Unter diesem Namen wird der
# Tunnel dann erreichbar sein (z.B. via ifconfig, tcpdump usw.)
TUN6TO4=tun6to4
# Dies hier hier eine Anycast Adresse für 6to4 Gateways. Dahinter
# gehen konkrete Systeme, je nach Ort, wie z.B. die Uni Leipzig
# unter 139.18.38.73. Zu Debuggingzwecken kann man hier auch mal
# solch eine IP eintragen, aber im Prinzip sollte die Anycast
# Adresse optimal sein, weil Sie so (automatisch) den dichtesten
# Gateway erreichen.
GATEWAY=192.88.99.1
# Wir ermitteln die lokale IP Adresse
ipv4=`ip addr show dev $IP4IF | grep 'inet\>' | tr "/" " " | awk '{print $2}'`
# Wir basteln daraus unsere eigene IPv4 in IPv6 Adresse.
ipv6=$(printf "2002:%02x%02x:%02x%02x::1" `echo $ipv4 | tr "." " "`)
# Falls bereits ein Tunnel besteht, machen wir den jetzt erstmal kaputt
# Nötig btw. sinnvoll ist dies vor allem, wenn Sie hinter einer Dialup
# Leitung sitzen, und bei jeder Einwahl eine neue IP bekommen. Dann müssen
# Sie auch den Tunnel immer wieder neu aufbauen.
ip -6 route flush dev $TUN6TO4 2>/dev/null
ip link set dev $TUN6TO4 down 2>/dev/null
ip tunnel del $TUN6TO4 2>/dev/null
# mit Argument stop kann der Tunnel geschlossen werden, ohne daß er
# gleich wieder neu aufgebaut wird
if test ${1:-start} = stop; then exit 0; fi
# Hier wird der eigentliche Tunnel aufgebaut.
ip tunnel add $TUN6TO4 mode sit ttl 64 remote any local $ipv4
ip link set $TUN6TO4 up
ip -6 addr add $ipv6/16 dev $TUN6TO4
ip -6 route add 2000::/3 via ::$GATEWAY dev $TUN6TO4 metric 1
Das Skipt jetzt einfach mal starten, und dann mit ifconfig vergewissern, daß es funktioniert.
# ifconfig
[...]
tun6to4 Link encap:IPv6-in-IPv4
inet6 addr: ::1.2.3.4/128 Scope:Compat
inet6 addr: 2002:0102:0304::1/16 Scope:Global
UP RUNNING NOARP MTU:1480 Metric:1
RX packets:16386 errors:0 dropped:0 overruns:0 frame:0
TX packets:16695 errors:1 dropped:0 overruns:0 carrier:1
collisions:0 txqueuelen:0
RX bytes:1708107 (1.6 Mb) TX bytes:2069947 (1.9 Mb)
Strike. Wir sind fertig, weiter bei Abschnit #Verbindung überprüfen, ansonsten haben Sie noch eine zweite Chance via FreeNet6. Auf jeden Fall bitte einen Fehlerreport an mich (bothie@gmx.de) schicken, in dem Sie schreiben, was exakt Sie gemacht haben, damit ich ggf. Fehler in dieser Anleitung korrigeren kann bzw. auf Fallen aufmerksam machen kann.
[Bearbeiten] Einen Tunnel via FreeNet6 einrichten
Besuchen sie die FreeNet6 Homepage, klicken Sie auf "Get IPv6 in 3 steps" füllen Sie mindestens die drei orange markierten Felder mit Ihrem Namen, einer frei wählbaren Benutzerkennung und Ihrer E-Mail-Adresse aus. Im Gegensatz zu Sixxs kann man hier z.b. auch GMX oder andere Freemail Adressen verwenden. Ganz unten dann auf "Create Account" klicken. Es wird eine Email an Sie geschickt. Das war's schon, die weiteren von Hexago angekündigten Schritte können Sie übersprungen, das machen wir hier eh anders. Wir müssen jetzt freenet6 emergen:
# emerge freenet6
Haben wir den, geht's an die Konfigurationsdatei:
# $EDITOR /etc/freenet6/tspc.conf userid=SIEHE_EMAIL passwd=SIEHE_EMAIL template=gentoo server=broker.freenet6.net
Haben Sie das, kommt tspc in den defaultrunlevel, und wird für jetzt schonmal per Hand gestartet.
# /etc/init.d/tspc start # rc-update add tspc default
Kontrollieren wir, ob der Tunnel steht:
# ifconfig
[...]
tun6to4 Link encap:Point-to-Point Protocol
inet6 addr: 2001:5c0:8fff:fffe::1234/128 Scope:Global
UP PPOINTOPOINT RUNNING NOARP MULTICAST MTU:1500 Metric:1
RX packets:5 errors:0 dropped:0 overruns:0 frame:0
TX packets:3 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:10
RX bytes:384 (384.0 b) TX bytes:240 (240.0 b)
Die IP-Adressen hier ist gefaked, und sehen bei Ihnen (hoffentlich) anders aus. Wenn Sie prinzipiell genau dieses Ergebnis haben, sind sie fertig. Sonst bitte einen Fehlerreport an mich (bothie@gmx.de) schicken, in dem Sie schreiben, was exakt Sie gemacht haben, damit ich ggf. Fehler in dieser Anleitung korrigeren kann bzw. auf Fallen aufmerksam machen kann.
[Bearbeiten] Verbindung überprüfen
Wenn das funktionniert, versuchen Sie doch einfach mal, einen IPv6 Rechner anzupingen:
$ ping6 -c 3 www.6bone.net PING www.6bone.net (2001:5c0:0:2::24): 56 data bytes 64 bytes from 2001:5c0:0:2::24: icmp_seq=0 ttl=59 time=207.565 ms 64 bytes from 2001:5c0:0:2::24: icmp_seq=1 ttl=59 time=157.662 ms 64 bytes from 2001:5c0:0:2::24: icmp_seq=2 ttl=59 time=208.941 ms --- www.6bone.net ping statistics --- 3 packets transmitted, 3 packets received, 0% packet loss round-trip min/avg/max = 157.662/191.389/208.941 ms
Strike! Wir sind fertig. Falls es bei Ihnen nicht funktioniert, bitte einen Fehlerreport an mich (bothie@gmx.de) schicken, in dem Sie schreiben, was exakt Sie gemacht haben, damit ich ggf. Fehler in dieser Anleitung korrigeren kann bzw. auf Fallen aufmerksam machen kann.
[Bearbeiten] Multicast
[Bearbeiten] Probleme, die einem einfach zur Verzweiflung treiben können
Ich habe bereits festgestellt, daß man Probleme bekommt, Multicastpakete zu senden, wenn man keine IPv6 Verbindung "nach draußen" hat. (Dies trifft auf IPv4 nicht unbedingt zu, da ich aber unser LAN nicht einfach mal vom Netz trennen kann, kann ich es leider nicht testen.) Bevor Sie also versuchen, mit Multicast herumzuspielen, bauen Sie erstmal einen IPv6 Tunnel nach der oben gezeigten Anleitung auf.
[Bearbeiten] Beispiel
Senden von Paketen an die Multicast Adresse ff3e:irgendwas funktioniert nicht, wenn man keine IPv6 Verbindung hat. Eigentlich funktioniert garnichts außer ff01:irgendwas und ff02:irgendwas. Update: Ich wollte es gerade rekonstruieren, konnte aber dieses Problem nicht mehr reporduzieren. Eventuell reicht es auch, zu irgendeinem Zeitpunkt mal einen Tunnel eingerichtet gehabt zu haben.
[Bearbeiten] Konsequenz
[Bearbeiten] Kerneleinstellungen für Multicast
Hier verweise ich jetzt einfach mal auf #Kerneleinstellungen für IPv6, weil dort das Thema bereits abgehandelt wurde.
[Bearbeiten] ungeordnete und noch nicht überprüfte Linksammlung zu Multicast
Da ich selbst Multicast noch nicht vollständig zum Laufen gebracht habe, hier erstmal kommentarlos ein paar Links, die ich mir noch zu Gemüte führen werde.
- http://puck.nether.net/lists/juniper-nsp/1281.html
- http://www.multicasttech.com/?main=mt/index2002.php3
- http://www.google.de/search?hl=de&ie=ISO-8859-1&q=mgen&meta=
- http://dast.nlanr.net/Projects/Beacon/
- RealServer Basic downloaden, Multicast aktivieren, ein simulierten Broadcast einer .rm Datei machen, und versuchen diese im LAN mittels RealPlayer empfangen.
