Hey netcup-Forum!
Ich habe mir vor kurzem LXC (nicht LXD!) auf Debian 10 eingerichtet und wollte nun neben dem IPv4 NAT (lxc-net) jedem Container eine eigene IPv6-Adresse aus dem "mitgeliefertem" /64 Subnetz zuweisen. Das ganze habe ich gelöst mit ndppd, da ich nach ausgiebigem durchforsten des netcup-Forums mehrfach gelesen habe, dass die inkludierten IPv6 Subnetze nicht geroutet sind und deshalb entweder ein zusätzliches IPv6 Subnetz oder ein Neighbor Discovery Proxy die Lösung sei (dazu später mehr). Das ganze hat auch geklappt, nach etwas rumprobieren und troubleshooting mit tcpdump habe ich schließlich eine IPv6-Adresse einem Container zuweisen können. Das Problem ist jedoch, dass beim anpingen des Containers von außen anfangs sehr viele Pakete verloren gehen (manche kommen jedoch vereinzelnt durch) und dann erst nach ca. 70 - 100 Paketen eine stabile Verbindung aufgebaut wird. Bricht man das pingen ab und versucht es nach nur ein paar Sekunden erneut, scheint die Route bereits aus dem Cache gelöscht wurden zu sein und das ganze geht von vorne los.
Hier mal ein Dump vom Ping:
PING 2a03:4000:2:XXXX:c0de::2(2a03:4000:2:XXXX:c0de::2) 56 data bytes
64 bytes from 2a03:4000:2:XXXX:c0de::2: icmp_seq=19 ttl=57 time=752 ms
64 bytes from 2a03:4000:2:XXXX:c0de::2: icmp_seq=42 ttl=57 time=15.4 ms
64 bytes from 2a03:4000:2:XXXX:c0de::2: icmp_seq=55 ttl=57 time=24.4 ms
64 bytes from 2a03:4000:2:XXXX:c0de::2: icmp_seq=69 ttl=57 time=15.6 ms
64 bytes from 2a03:4000:2:XXXX:c0de::2: icmp_seq=82 ttl=57 time=15.8 ms
64 bytes from 2a03:4000:2:XXXX:c0de::2: icmp_seq=96 ttl=57 time=15.5 ms
64 bytes from 2a03:4000:2:XXXX:c0de::2: icmp_seq=97 ttl=57 time=15.3 ms
64 bytes from 2a03:4000:2:XXXX:c0de::2: icmp_seq=98 ttl=57 time=15.5 ms
64 bytes from 2a03:4000:2:XXXX:c0de::2: icmp_seq=99 ttl=57 time=15.2 ms
64 bytes from 2a03:4000:2:XXXX:c0de::2: icmp_seq=100 ttl=57 time=15.4 ms
64 bytes from 2a03:4000:2:XXXX:c0de::2: icmp_seq=101 ttl=57 time=15.3 ms
64 bytes from 2a03:4000:2:XXXX:c0de::2: icmp_seq=102 ttl=57 time=15.1 ms
64 bytes from 2a03:4000:2:XXXX:c0de::2: icmp_seq=103 ttl=57 time=15.5 ms
64 bytes from 2a03:4000:2:XXXX:c0de::2: icmp_seq=104 ttl=57 time=15.5 ms
64 bytes from 2a03:4000:2:XXXX:c0de::2: icmp_seq=105 ttl=57 time=15.4 ms
64 bytes from 2a03:4000:2:XXXX:c0de::2: icmp_seq=106 ttl=57 time=15.4 ms
64 bytes from 2a03:4000:2:XXXX:c0de::2: icmp_seq=107 ttl=57 time=15.2 ms
64 bytes from 2a03:4000:2:XXXX:c0de::2: icmp_seq=108 ttl=57 time=15.7 ms
64 bytes from 2a03:4000:2:XXXX:c0de::2: icmp_seq=109 ttl=57 time=15.2 ms
64 bytes from 2a03:4000:2:XXXX:c0de::2: icmp_seq=110 ttl=57 time=15.9 ms
64 bytes from 2a03:4000:2:XXXX:c0de::2: icmp_seq=111 ttl=57 time=15.5 ms
--- 2a03:4000:2:XXXX:c0de::2 ping statistics ---
111 packets transmitted, 21 received, 81.0811% packet loss, time 111278ms
rtt min/avg/max/mdev = 15.134/50.924/751.691/156.707 ms
Alles anzeigen
Lustigerweise dauert es immer ca. 70 bis 100 Pakete, bis es dann stabil läuft. Pingt man den Container vom Host selbst läuft alles ohne Paketverlust.
Um euch mal ein paar Infos über mein System zu liefern, hier die Konfiguration vom Host. Jedoch noch vorweg: Da für mich IPv6 und Neighbor Discovery noch recht neu ist und ich mich erst die letzte Woche in die Thematik eingearbeitet habe, weist mich gerne auf mögliche Denkfehler hin!
source /etc/network/interfaces.d/*
# The loopback network interface
auto lo
iface lo inet loopback
# The primary network interface
#allow-hotplug ens3
auto br0
iface br0 inet static
address 46.38.XXX.XX
netmask 21
gateway 46.38.XXX.1
bridge_ports ens3
bridge_fd 0
bridge_maxwait 0
iface br0 inet6 static
address 2a03:4000:2:XXXX:c0de::1
netmask 64
gateway fe80::1
Alles anzeigen
net.ipv6.conf.default.accept_ra=0
net.ipv6.conf.default.autoconf=0
net.ipv6.conf.all.accept_ra=0
net.ipv6.conf.all.autoconf=0
net.ipv6.conf.all.forwarding=1
net.ipv6.conf.ens3.accept_ra=0
net.ipv6.conf.ens3.autoconf=0
#net.ipv6.conf.all.proxy_ndp=1 # <- Ich nehme an dieser Parameter muss nicht gesetzt sein, wenn man den user-space ND-Proxy benutzt (?)
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 state UNKNOWN qlen 1000
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
3: br0: <BROADCAST,MULTICAST,ALLMULTI,UP,LOWER_UP> mtu 1500 state UP qlen 1000
inet6 2a03:4000:2:XXXX:c0de::1/64 scope global
valid_lft forever preferred_lft forever
inet6 fe80::d415:e2ff:fe26:dc98/64 scope link
valid_lft forever preferred_lft forever
4: lxcbr0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 state UP qlen 1000
inet6 fe80::216:3eff:fe00:0/64 scope link
valid_lft forever preferred_lft forever
6: vethXR3CQN@if5: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 state UP qlen 1000
inet6 fe80::fc1e:1dff:fee3:869e/64 scope link
valid_lft forever preferred_lft forever
8: vethGK8VVL@if7: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 state UP qlen 1000
inet6 fe80::fc93:d6ff:fea8:e73b/64 scope link
valid_lft forever preferred_lft forever
10: veth0JMP47@if9: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 state UP qlen 1000
inet6 fe80::fc49:a0ff:fe2a:ce78/64 scope link
valid_lft forever preferred_lft forever
Alles anzeigen
route-ttl 30000
proxy br0 {
router no
timeout 500
ttl 30000
rule 2a03:4000:2:XXXX:c0de::2/128 {
iface br0
}
}
Alles anzeigen
Hier könnte ich natürlich auch z.B. das gesammte /80 Subnetz proxien, aber auf dem Server werden nur eine Hand voll Container laufen, deshalb spezifiziere ich die Adressen hier als /128. Vielleicht ändere ich das aber noch. Als Rule habe ich bereits iface br0, auto und static getestet, alles mit den gleichen Ergebnissen.
Es folgt die Konfiguration vom ipv6test-Container:
# The loopback network interface
auto lo
iface lo inet loopback
auto eth0
iface eth0 inet dhcp # <- Interface für das lxc-net NAT
auto eth1
iface eth1 inet6 static
address 2a03:4000:2:XXXX:c0de::2
netmask 80
gateway fe80::d415:e2ff:fe26:dc98 # <- Link local Adresse vom Host
#gateway 2a03:4000:2:XXXX:c0de::1
source /etc/network/interfaces.d/*
Alles anzeigen
EDIT: Achso, by the way, ::1 ist der Host und ::2 der Container, der restliche Prefix ist der Gleiche.
Nun noch einmal zum Thema /64 Subnetze: Ich habe leider noch nicht ganz verstanden in wie fern sich die inkludierten Subnetze von den zusätzlichen Subnetzen unterscheiden. Wenn nur die zusätzlichen Subnetze geroutet werden, wie werden dann die mitgelieferten Subnetze aufgeschaltet? Was ist der Grund, weshalb netcup diese unterschiedlich aufschaltet? Und vor allem, wenn der Fehler nicht bei mir liegt (was ich zwar stark hoffe, aber auf Grund von den zahlreichen anderen Threads bezüglich der mitgelieferten /64 Subnetze hier im Forum nicht glaube), was soll ich dann mit 18446744073709551616 IPv6-Adressen die man nicht ordentlich routen kann?
Ich hoffe mich kann jemand aufklären.
Vielen Dank schon mal im Voraus! Ich wünsche euch allen ein schönes Wochenende :)!