IPv6 Routing Probleme

classic Classic list List threaded Threaded
3 messages Options
Reply | Threaded
Open this post in threaded view
|

IPv6 Routing Probleme

gentoo
Hallo,

ich habe das Gefühl, dass ich den Wald vor lauter Bäume nicht mehr sehe und
hoffe das mir jemand einen erhellenden Hinweis liefern kann.
Da der Tunnelbroker Sixxs den Dienst eingestellt hat, möchte ich nun IPv6 von
der Telekom nutzen. Dies funktioniert aber leider nur halbwegs.

Folgend mein Netzwerkaufbau

                 Internet
                    ^
                    |
                    v
                 ppp100
               Router (R1)
         eth0.103 eth0.102 eth0.104
             /     |        \
            /      |         \
           /      eth1        \
        Gäste   Gentoo (R2)   DMZ
                  eth0
                   |
                   |
                Lokales Lan --> Notebook

Auf R1 erhalte ich von der Telekom fürs PPP-Device eine IPv6-Adresse.
Auch erhalte ich per DHCPv6 ein entsprechend geroutetes /56-Netz, woraus ich
mir ein /60 nehme.

Auf R1 sind folgende IPv6 -Adressen und Routen vergeben:
IPs
ppp100 : 2003:d0:33bf:275b:36ee:995e:6dd7:1a2b/64
eth0.102 : 2003:d0:33f8:5000::1/60
eth0.102 : fe80::1/64

Routen
2003:d0:33bf:275b::/64 dev ppp100
2003:d0:33f8:5000::/60 dev eth0.102
default via fe80::100:100:3e9b:f606 dev ppp100


Auf R2 sind folgende IPv6-Adresse vergeben:
eth1 : 2003:d0:33f8:5000:280:c9ff:fe00:3ef/64
eth0 : 2003:d0:33f8:500e::1/64
eth0 : fe80::1/64

Routen
2003:d0:33f8:5000::/64 dev eth1
2003:d0:33f8:500e::/64 dev eth0
default via fe80::1 dev eth1


Auf R2 wird per per dnsmasq das entsprechende IPv6 bekannt gemacht und die
Geräte erhalten auch entsprechende IPv6-Adressen:

z.B. Linux-Notebook
IPs
eth0 : 2003:d0:33f8:500e:11fc:60db:35f2:5582/64

Routen:
2003:d0:33f8:500e::/64 dev eth0
default via fe80::1 dev eth0


Von R1 und R2 komme ich ohne Probleme per IPv6 ins Internet,
z.B. per: ping6 heise.de
Ich kann auch die IPs von R1 und R2 von einem Server im Internet aus
erreichen:
ping6 2003:d0:33bf:275b:36ee:995e:6dd7:1a2b
ping6 2003:d0:33f8:5000::1
und
ping6 2003:d0:33f8:5000:280:c9ff:fe00:3ef
sind erfolgreich.


Was jetzt NICHT geht ist, dass ich die Adresse 2003:d0:33f8:500e::1 von R1 aus
anpingen kann; auch kann ich aus dem lokalen LAN keine IPv6-Adresse hinter
eth1 (von R2) erreichen.
Es sieht so aus als würde kein Routing auf R2 gemacht werden, aber in /proc
ist es entsprechend aktiviert:
cat /proc/sys/net/ipv6/conf/{all,eth0,eth1}/forwarding --> 1, 1, 1

Lasse ich während ich vom Notebook aus eine externe Adresse anpinge ein
tcpdump auf R1 laufen, sehe ich, dass dort versucht wird die Adresse des
Notebooks per neighbor solicitation zu ermitteln, was aber ins leere zu laufen
scheint. Ein ip -6 neigh zeigt an:
2003:d0:33f8:500e:11fc:60db:35f2:5582 dev eth0.102  FAILED

Firewall-Regeln sind auf R2 keine eingerichtet und auf R1 nur rudimentär auf
ppp100.

Also irgendwie ist da er Wurm drin und ich würde mich freuen, wenn mir jemand
einen Tipp geben könnte ;)


Danke und Grüße,
Stephan


PS: Alle IP-Adressen sind rein exemplarisch ;)


Reply | Threaded
Open this post in threaded view
|

Re: IPv6 Routing Probleme

Kai Krakow
Am Sat, 17 Jun 2017 17:35:38 +0200
schrieb [hidden email]:

> Hallo,
>
> ich habe das Gefühl, dass ich den Wald vor lauter Bäume nicht mehr
> sehe und hoffe das mir jemand einen erhellenden Hinweis liefern kann.
> Da der Tunnelbroker Sixxs den Dienst eingestellt hat, möchte ich nun
> IPv6 von der Telekom nutzen. Dies funktioniert aber leider nur
> halbwegs.
>
> Folgend mein Netzwerkaufbau
>
>                  Internet
>                     ^
>                     |
>                     v
>                  ppp100
>                Router (R1)
>          eth0.103 eth0.102 eth0.104
>              /     |        \
>             /      |         \
>            /      eth1        \
>         Gäste   Gentoo (R2)   DMZ
>                   eth0
>                    |
>                    |
>                 Lokales Lan --> Notebook
>
> Auf R1 erhalte ich von der Telekom fürs PPP-Device eine IPv6-Adresse.
> Auch erhalte ich per DHCPv6 ein entsprechend geroutetes /56-Netz,
> woraus ich mir ein /60 nehme.

Müsstest du dir nicht für jedes VLAN ein 60er Subnetz auf dem 56er
Subnetz nehmen? Oder geht es nur um das VLAN 102, das mit IPv6 versorgt
werden soll?

Ich bin mit IPv6 Subnetz-Routing noch nicht viel unterwegs, aber wenn
ich das einigermaßen richtig verstanden habe, dann meine Gedanken dazu:


> Auf R1 sind folgende IPv6 -Adressen und Routen vergeben:
> IPs
> ppp100 : 2003:d0:33bf:275b:36ee:995e:6dd7:1a2b/64
> eth0.102 : 2003:d0:33f8:5000::1/60
> eth0.102 : fe80::1/64

ppp100 und eth0.102 befinden sich in verschiedenen Netzwerk-Segmenten
(laut Präfix). Ich würde erwarten, dass die 60-Bit-Präfixe identisch
sind, unterscheiden sich aber bereits bei 33bf vs. 33f8. Außerdem hat
ppp100 ja bereits ein 64er-Subnetz, kein 56er...

Deine unteren Netze (laut Schaubild) sollten also alle ein 64er-Präfix
"2003:d0:33bf:275b" haben. Dann würdest du das Präfix weiter
unterteilen, z.B. indem du ein Nibble (4 Bit) dazu nimmst und somit 16
weitere Subnetze erhältst. Das Subnetz "3" wäre dann durch ppp0 bereits
belegt. Die restlichen könntest du verteilen:

eth0.102: 2003:d0:33f8:275b:4000::1/68
                            ^
                            +-- Subnetzkennung (64+4 = 68)
         [-----------------]
                 ^
                 +------- Präfix des Uplinks (64)

> Routen
> 2003:d0:33bf:275b::/64 dev ppp100
> 2003:d0:33f8:5000::/60 dev eth0.102
> default via fe80::100:100:3e9b:f606 dev ppp100

Das Routing ergibt sich dann eigentlich von allein, da du Richtung
Uplink in fremde Netze gehst und Richtung Downlink nur in kleinere
Subnetze innerhalb des selben (übergeordneten) Präfix.

Auch für die weiter unten angesiedelten Subnetze ist es dann das
gleiche Bild: Übergeordnete Router befinden sich in fremden Subnetzen.

IPv6 sollte eigentlich ein wenig zurückbringen, was Subnetze eigentlich
wirklich bedeuten. Bei IPv4 hat man das inzwischen meist anders
gehandhabt.

Theoretisch zum Beispiel müsstest du auch mit IPv4 eine Konstellation
wie diese aufbauen können:

ppp0 = 192.168.0.1/16    
eth0.102 = 192.168.102.1/24
eth0.103 = 192.168.103.1/24
eth0.104 = 192.168.104.1/24

Das stellt eigentlich keinen Konflikt dar. Die Interface-Routen für die
eth0-Interfaces ist spezifischer und wiegt damit mehr und stellt keinen
Routing-Konflikt mit 192.168.0.0/16 dar.

Ich würde allerdings der Übersichtlichkeit halber vermeiden, auf einem
Downlink "192.168.0.0/24" zu nutzen, so wie oben für IPv6 ja auch
angedeutet.

Die Default-Route (wenn kein Präfix passt) geht dann auf ppp0.

Bei IPv6 hast du nun statt lokalen 192.168er Adressen eben öffentliche
Präfixe - aber das ist nicht wirklich anders.

Der unterschied ist hier nur das Scoping: Je nach Scope können Pakete
einen Boundary passieren oder nicht. Es gibt link-local (quasi alles am
gleichen Switch bzw. Subnetz), site-local (alles unterhalb von ppp0)
sowie global. Die ersten Stellen der IPv6-Adresse unterscheiden das:
2003 ist z.B. global, fe80 ist link-local.

Bei IPv6 haben Interfaces deshalb auch immer mehrere Adressen,
mindestens eine pro Scope, jeweils ausgestattet mit einer
Gültigkeitsdauer (die such überschneiden, so dass dynamische IP-Wechsel
ohne Verbindungsabbrüche möglich sind).

Deine Default-Routen kannst du jeweils immer auf die fe80-Adresse
setzen, da du die gleich lassen kannst, während das RA dir neue Public
Prefixes durch deine Subnetze schicken kann.

Um site-local mit festen IPs zu adressieren, kannst du site scope
Adressen verwenden und so zwischen deinen VLANs kommunizieren (aber
natürlich auch mit den global scope Adressen, die aber je nach Provider
nicht immer gleich bleiben müssen).


> Auf R2 sind folgende IPv6-Adresse vergeben:
> eth1 : 2003:d0:33f8:5000:280:c9ff:fe00:3ef/64
> eth0 : 2003:d0:33f8:500e::1/64
> eth0 : fe80::1/64
                 ^^^^^^^^^
Wieder andere Präfixes. Dies sind potentiell andere Rechner oberhalb
des Uplinks.

> Routen
> 2003:d0:33f8:5000::/64 dev eth1
> 2003:d0:33f8:500e::/64 dev eth0
> default via fe80::1 dev eth1
          ^^^^^^^^^
Wieder nicht dein global scope Subnetz.


> Auf R2 wird per per dnsmasq das entsprechende IPv6 bekannt gemacht
> und die Geräte erhalten auch entsprechende IPv6-Adressen:

Du musst nach unten die größeren Prefixes verteilen, deren von oben
geerbtes Prefix aber immer gleich sein muss (also der 64er Teil
identisch, und nach unten ein 68er Subnetz verteilen).

Leider ist ein 64er-Präfix vom Provider eigentlich schon zu klein, um
stateless IP Vergabe zu nutzen, dafür wäre ein 48er-Subnetz besser, wie
es das von SixXS gab. Denn der stateless Modus erstellt automatisch
eine global scope IP aus dem vorgegebenen Präfix und nutzt die
48-Bit-MAC, um sich daraus eine 64-Bit-Host-Adresse zu basteln.
Zusammen mit dem 64-Bit-Präfix sind das dann schon die 128 Bit. Du
wirst also die Downlink-Subnetze mit DHCPv6 versorgen müssen.


> z.B. Linux-Notebook
> IPs
> eth0 : 2003:d0:33f8:500e:11fc:60db:35f2:5582/64
>
> Routen:
> 2003:d0:33f8:500e::/64 dev eth0
> default via fe80::1 dev eth0
>
>
> Von R1 und R2 komme ich ohne Probleme per IPv6 ins Internet,
> z.B. per: ping6 heise.de
> Ich kann auch die IPs von R1 und R2 von einem Server im Internet aus
> erreichen:
> ping6 2003:d0:33bf:275b:36ee:995e:6dd7:1a2b
> ping6 2003:d0:33f8:5000::1
> und
> ping6 2003:d0:33f8:5000:280:c9ff:fe00:3ef
> sind erfolgreich.

Ja, nur erreichst du keinen öffentlichen Rechner mit dem Präfix
2003:d0:33f8:5000 mehr - das gehört ja nicht dir.

> Was jetzt NICHT geht ist, dass ich die Adresse 2003:d0:33f8:500e::1
> von R1 aus anpingen kann; auch kann ich aus dem lokalen LAN keine
> IPv6-Adresse hinter eth1 (von R2) erreichen.

So funktioniert das Routing bei IPv6 eigentlich auch nicht. Bzw. dir
fehlen vermutlich Routen. Ich würde lieber erstmal echte Subnetze
probieren (also größere Präfixe je weiter unten im Diagramm).

> Es sieht so aus als würde kein Routing auf R2 gemacht werden, aber
> in /proc ist es entsprechend aktiviert:
> cat /proc/sys/net/ipv6/conf/{all,eth0,eth1}/forwarding --> 1, 1, 1
>
> Lasse ich während ich vom Notebook aus eine externe Adresse anpinge
> ein tcpdump auf R1 laufen, sehe ich, dass dort versucht wird die
> Adresse des Notebooks per neighbor solicitation zu ermitteln, was
> aber ins leere zu laufen scheint. Ein ip -6 neigh zeigt an:
> 2003:d0:33f8:500e:11fc:60db:35f2:5582 dev eth0.102  FAILED
>
> Firewall-Regeln sind auf R2 keine eingerichtet und auf R1 nur
> rudimentär auf ppp100.
>
> Also irgendwie ist da er Wurm drin und ich würde mich freuen, wenn
> mir jemand einen Tipp geben könnte ;)

Wie eingangs erwähnt: Nur meine Gedanken dazu... Ich habe das bisher
nur in der Theorie gemacht. ;-)

Feedback und Gedanken dazu sind willkommen.


--
Regards,
Kai

Replies to list-only preferred.



Reply | Threaded
Open this post in threaded view
|

Re: IPv6 Routing Probleme

gentoo
Hallo,

ich habe meinen Fehler gefunden: Ich habe einfach vergessen auf R1  das
Gateway für die auf R2 gerouteten Netze noch festzulegen.

Nach dem ich dies nachgeholt habe geht alles.

Grüße und noch einen schönen Sonntag,
Stephan



Am Samstag, 17. Juni 2017, 20:30:18 schrieb Kai Krakow:

> Am Sat, 17 Jun 2017 17:35:38 +0200
>
> schrieb [hidden email]:
> > Hallo,
> >
> > ich habe das Gefühl, dass ich den Wald vor lauter Bäume nicht mehr
> > sehe und hoffe das mir jemand einen erhellenden Hinweis liefern kann.
> > Da der Tunnelbroker Sixxs den Dienst eingestellt hat, möchte ich nun
> > IPv6 von der Telekom nutzen. Dies funktioniert aber leider nur
> > halbwegs.
> >
> > Folgend mein Netzwerkaufbau
> >
> >                  Internet
> >                  
> >                     ^
> >                    
> >                     v
> >                  
> >                  ppp100
> >                
> >                Router (R1)
> >          
> >          eth0.103 eth0.102 eth0.104
> >          
> >              /     |        \
> >            
> >             /      |         \
> >            
> >            /      eth1        \
> >        
> >         Gäste   Gentoo (R2)   DMZ
> >        
> >                   eth0
> >                
> >                 Lokales Lan --> Notebook
> >
> > Auf R1 erhalte ich von der Telekom fürs PPP-Device eine IPv6-Adresse.
> > Auch erhalte ich per DHCPv6 ein entsprechend geroutetes /56-Netz,
> > woraus ich mir ein /60 nehme.
>
> Müsstest du dir nicht für jedes VLAN ein 60er Subnetz auf dem 56er
> Subnetz nehmen? Oder geht es nur um das VLAN 102, das mit IPv6 versorgt
> werden soll?
>
> Ich bin mit IPv6 Subnetz-Routing noch nicht viel unterwegs, aber wenn
>
> ich das einigermaßen richtig verstanden habe, dann meine Gedanken dazu:
> > Auf R1 sind folgende IPv6 -Adressen und Routen vergeben:
> > IPs
> > ppp100 : 2003:d0:33bf:275b:36ee:995e:6dd7:1a2b/64
> > eth0.102 : 2003:d0:33f8:5000::1/60
> > eth0.102 : fe80::1/64
>
> ppp100 und eth0.102 befinden sich in verschiedenen Netzwerk-Segmenten
> (laut Präfix). Ich würde erwarten, dass die 60-Bit-Präfixe identisch
> sind, unterscheiden sich aber bereits bei 33bf vs. 33f8. Außerdem hat
> ppp100 ja bereits ein 64er-Subnetz, kein 56er...
>
> Deine unteren Netze (laut Schaubild) sollten also alle ein 64er-Präfix
> "2003:d0:33bf:275b" haben. Dann würdest du das Präfix weiter
> unterteilen, z.B. indem du ein Nibble (4 Bit) dazu nimmst und somit 16
> weitere Subnetze erhältst. Das Subnetz "3" wäre dann durch ppp0 bereits
> belegt. Die restlichen könntest du verteilen:
>
> eth0.102: 2003:d0:33f8:275b:4000::1/68
>                             ^
>                             +-- Subnetzkennung (64+4 = 68)
>          [-----------------]
>                  ^
>                  +------- Präfix des Uplinks (64)
>
> > Routen
> > 2003:d0:33bf:275b::/64 dev ppp100
> > 2003:d0:33f8:5000::/60 dev eth0.102
> > default via fe80::100:100:3e9b:f606 dev ppp100
>
> Das Routing ergibt sich dann eigentlich von allein, da du Richtung
> Uplink in fremde Netze gehst und Richtung Downlink nur in kleinere
> Subnetze innerhalb des selben (übergeordneten) Präfix.
>
> Auch für die weiter unten angesiedelten Subnetze ist es dann das
> gleiche Bild: Übergeordnete Router befinden sich in fremden Subnetzen.
>
> IPv6 sollte eigentlich ein wenig zurückbringen, was Subnetze eigentlich
> wirklich bedeuten. Bei IPv4 hat man das inzwischen meist anders
> gehandhabt.
>
> Theoretisch zum Beispiel müsstest du auch mit IPv4 eine Konstellation
> wie diese aufbauen können:
>
> ppp0 = 192.168.0.1/16
> eth0.102 = 192.168.102.1/24
> eth0.103 = 192.168.103.1/24
> eth0.104 = 192.168.104.1/24
>
> Das stellt eigentlich keinen Konflikt dar. Die Interface-Routen für die
> eth0-Interfaces ist spezifischer und wiegt damit mehr und stellt keinen
> Routing-Konflikt mit 192.168.0.0/16 dar.
>
> Ich würde allerdings der Übersichtlichkeit halber vermeiden, auf einem
> Downlink "192.168.0.0/24" zu nutzen, so wie oben für IPv6 ja auch
> angedeutet.
>
> Die Default-Route (wenn kein Präfix passt) geht dann auf ppp0.
>
> Bei IPv6 hast du nun statt lokalen 192.168er Adressen eben öffentliche
> Präfixe - aber das ist nicht wirklich anders.
>
> Der unterschied ist hier nur das Scoping: Je nach Scope können Pakete
> einen Boundary passieren oder nicht. Es gibt link-local (quasi alles am
> gleichen Switch bzw. Subnetz), site-local (alles unterhalb von ppp0)
> sowie global. Die ersten Stellen der IPv6-Adresse unterscheiden das:
> 2003 ist z.B. global, fe80 ist link-local.
>
> Bei IPv6 haben Interfaces deshalb auch immer mehrere Adressen,
> mindestens eine pro Scope, jeweils ausgestattet mit einer
> Gültigkeitsdauer (die such überschneiden, so dass dynamische IP-Wechsel
> ohne Verbindungsabbrüche möglich sind).
>
> Deine Default-Routen kannst du jeweils immer auf die fe80-Adresse
> setzen, da du die gleich lassen kannst, während das RA dir neue Public
> Prefixes durch deine Subnetze schicken kann.
>
> Um site-local mit festen IPs zu adressieren, kannst du site scope
> Adressen verwenden und so zwischen deinen VLANs kommunizieren (aber
> natürlich auch mit den global scope Adressen, die aber je nach Provider
> nicht immer gleich bleiben müssen).
>
> > Auf R2 sind folgende IPv6-Adresse vergeben:
> > eth1 : 2003:d0:33f8:5000:280:c9ff:fe00:3ef/64
> > eth0 : 2003:d0:33f8:500e::1/64
> > eth0 : fe80::1/64
>
>                  ^^^^^^^^^
> Wieder andere Präfixes. Dies sind potentiell andere Rechner oberhalb
> des Uplinks.
>
> > Routen
> > 2003:d0:33f8:5000::/64 dev eth1
> > 2003:d0:33f8:500e::/64 dev eth0
> > default via fe80::1 dev eth1
>
>           ^^^^^^^^^
> Wieder nicht dein global scope Subnetz.
>
> > Auf R2 wird per per dnsmasq das entsprechende IPv6 bekannt gemacht
>
> > und die Geräte erhalten auch entsprechende IPv6-Adressen:
> Du musst nach unten die größeren Prefixes verteilen, deren von oben
> geerbtes Prefix aber immer gleich sein muss (also der 64er Teil
> identisch, und nach unten ein 68er Subnetz verteilen).
>
> Leider ist ein 64er-Präfix vom Provider eigentlich schon zu klein, um
> stateless IP Vergabe zu nutzen, dafür wäre ein 48er-Subnetz besser, wie
> es das von SixXS gab. Denn der stateless Modus erstellt automatisch
> eine global scope IP aus dem vorgegebenen Präfix und nutzt die
> 48-Bit-MAC, um sich daraus eine 64-Bit-Host-Adresse zu basteln.
> Zusammen mit dem 64-Bit-Präfix sind das dann schon die 128 Bit. Du
> wirst also die Downlink-Subnetze mit DHCPv6 versorgen müssen.
>
> > z.B. Linux-Notebook
> > IPs
> > eth0 : 2003:d0:33f8:500e:11fc:60db:35f2:5582/64
> >
> > Routen:
> > 2003:d0:33f8:500e::/64 dev eth0
> > default via fe80::1 dev eth0
> >
> >
> > Von R1 und R2 komme ich ohne Probleme per IPv6 ins Internet,
> > z.B. per: ping6 heise.de
> > Ich kann auch die IPs von R1 und R2 von einem Server im Internet aus
> > erreichen:
> > ping6 2003:d0:33bf:275b:36ee:995e:6dd7:1a2b
> > ping6 2003:d0:33f8:5000::1
> > und
> > ping6 2003:d0:33f8:5000:280:c9ff:fe00:3ef
> > sind erfolgreich.
>
> Ja, nur erreichst du keinen öffentlichen Rechner mit dem Präfix
> 2003:d0:33f8:5000 mehr - das gehört ja nicht dir.
>
> > Was jetzt NICHT geht ist, dass ich die Adresse 2003:d0:33f8:500e::1
> > von R1 aus anpingen kann; auch kann ich aus dem lokalen LAN keine
> > IPv6-Adresse hinter eth1 (von R2) erreichen.
>
> So funktioniert das Routing bei IPv6 eigentlich auch nicht. Bzw. dir
> fehlen vermutlich Routen. Ich würde lieber erstmal echte Subnetze
> probieren (also größere Präfixe je weiter unten im Diagramm).
>
> > Es sieht so aus als würde kein Routing auf R2 gemacht werden, aber
> > in /proc ist es entsprechend aktiviert:
> > cat /proc/sys/net/ipv6/conf/{all,eth0,eth1}/forwarding --> 1, 1, 1
> >
> > Lasse ich während ich vom Notebook aus eine externe Adresse anpinge
> > ein tcpdump auf R1 laufen, sehe ich, dass dort versucht wird die
> > Adresse des Notebooks per neighbor solicitation zu ermitteln, was
> > aber ins leere zu laufen scheint. Ein ip -6 neigh zeigt an:
> > 2003:d0:33f8:500e:11fc:60db:35f2:5582 dev eth0.102  FAILED
> >
> > Firewall-Regeln sind auf R2 keine eingerichtet und auf R1 nur
> > rudimentär auf ppp100.
> >
> > Also irgendwie ist da er Wurm drin und ich würde mich freuen, wenn
> > mir jemand einen Tipp geben könnte ;)
>
> Wie eingangs erwähnt: Nur meine Gedanken dazu... Ich habe das bisher
> nur in der Theorie gemacht. ;-)
>
> Feedback und Gedanken dazu sind willkommen.