OVH Community, your new community space.

OpenVZ IPv6


adlerweb
28.12.10, 02:37
Finally… Ich habs…

Also sollte wer per Suche drauf stoßen hier die nötigen Schritte. Ich verwende feste IPv6-Adressen für Host und Gäste, das Routing läuft über den Host (Also nicht die virtuellen MAC-Adressen, die es inzwischen gibt). Für den Host gilt: eth0=OVH-Netz,br0=Netz mit den Gästen. Ich schreibe nur die nötigen Befehle - da die Config je nach Linux-Distri verschieden sind überlasse ich euch das übersetzen selbst (bei mir tuts aus Faulheit die rc.local). Wie man IPv6-Abkürzt (führende 0en weglassen, kürzen per : erklärt bei Bedarf google.

Host:
Als erstes benötigt der Host natürlich eine feste Adresse. Hierzu geht ihr in den OVH-Manager und sucht euer IPv6-Subnet (Steht bei Interfaces in der Server-Übersicht). Ich gehe hier von 2001:41D0:F0F0:F0F0::/64 aus. Das bedeutet, dass euch die IPs 2001:41D0:F0F0:F0F0:0000:0000:0000:0001 bis 2001:41D0:F0F0:F0F0:FFFF:FFFF:FFFF:FFFE gehören - genug Platz. Der Einfachheit halber nummeriere ich nur die letzte Zahl durch - ist aber natürlich keine Pflicht.

Als erstes erhält der Host auf beiden(!) Interfaces eine IP:
Code:
ifconfig eth0 inet6 add 2001:41D0:F0F0:F0F0::1/64
ifconfig br0 inet6 add 2001:41D0:F0F0:F0F0::99/64
Zudem benötigen wir ein Routing. Teilweise erhält der Server bereits über die IPv6-Autokonfiguration die korrekten Routen von OVH. Dummerweise unterstützen einige Switche bei OVH kein IPv6 und blockieren diese Autokonfiguration, daher funktioniert es nicht bei jeden. Da es nichts schadet die Route fest einzutragen werden wir das tun. Die Router-IP ermittelt sich wie folgt:
Zitat Zitat von OVH-Hilfe
Der Router (Standardgateway) für jede IPv6 befindet sich immer auf IP:v:6:FF:FF:FF:FF:FF

Ein Beispiel:

Die IPv6 des Servers: 2001:41D0:1:46e::/64 wird zu 2001:41D0:1:4 + 5 Mal FF.
IPv6 Gateway: 2001:41D0:1:4FF:FF:FF:FF:FF

Die IPv6 des Servers: 2001:41d0:1:209::/64 wird also zu 2001:41d0:1:2 + 5 Mal FF.
IPv6 Gateway: 2001:41d0:1:2FF:FF:FF:FF:FF
In unserem Beispiel ergibt sich also der Router 2001:41D0:F0F0:F0FF:FF:FF:FF:FF. Die Route setzen wir mit

Code:
route -A inet6 add 2000::/3 gw 2001:41D0:F0F0:F0FF:FF:FF:FF:FF
Da wir zudem den Host als Router verwenden wollen benötigen wir Forwarding, das schalten wir mit diesem Befehl ein:
Code:
sysctl -w net.ipv6.conf.all.forwarding=1
(alternativ mit dem bekannten echo)

Um auch zu wissen wo die Gäste hin sollen tragen wir hier entsprechende Routen ein. Ich habe es pro Host gemacht, sollte aber auch blockweise funktionieren:

Code:
route -A inet6 add 2001:41D0:F0F0:F0F0::10 dev br0
route -A inet6 add 2001:41D0:F0F0:F0F0::11 dev br0
Zum Schluss folgt dann der IPv6-Fubar, der meine Probleme auslöste: Ich nenns mal das IPv6-NAT. Die komplette Erklärung was und warum das nötig ist ("Proxy the neighbors") habe ich am Ende verlinkt.

Code:
sysctl -w net.ipv6.conf.all.proxy_ndp=1
ip -6 neigh add proxy 2001:41D0:F0F0:F0F0::10 dev eth0
ip -6 neigh add proxy 2001:41D0:F0F0:F0F0::11 dev eth0
Wichtig hierbei: Das eth0 ist kein Typo! Die Zeile bedeutet, dass der Host auf dem Interface eth0 bekannt geben soll, dass er für die genannte IP eine passende Route kennt.

Auf dem Gast sind dann nur analog zu oben die IPs einzurichten, die IP des Host-Interface br0 spielt dabei den Router:

Code:
ifconfig eth0 inet6 add 2001:41D0:F0F0:F0F0::10/64
route -A inet6 add 2000::/3 gw 2001:41D0:F0F0:F0F0::99
Weitere Ressourcen:

adlerweb
27.12.10, 16:35
*Ausgrab*

Hallo,

habe (soweit ich das sehe) das selbe Problem mit KVM statt OpenVZ…

Interfaces auf dem Host:
Code:
br0… (Hier hängen alle VMs drin)
          inet6 addr: 2001:41d0:2:79xx::99/64 Scope:Global (zum Test)
…
eth0      … (ins öffentliche OVH-Netz)
          inet6 addr: 2001:41d0:2:7981::beef:1/64 Scope:Global
Host hat folgende config:

Code:
ifconfig eth0 inet6 add 2001:41d0:2:79xx::1/64
route -A inet6 add 2000::/3 gw 2001:41d0:2:79ff:ff:ff:ff:ff (Router OVH)
route -A inet6 add 2001:41d0:2:7981::2 dev br0 (IP des Gastes auf br0)

echo 1 > /proc/sys/net/ipv6/conf/all/forwarding
Gäste:
Code:
ifconfig eth0 inet6 add 2001:41d0:2:79xx::2/64
route -A inet6 add 2000::/3 gw 2001:41d0:2:79xx::1 (99 auch versucht)
Vom Host funktioniert alles problemlos - ping aufs Gateway, Google und die Gäste funktioniert. Vom Gast kann ich andere Gäste und die IP von br0 des Hosts erreichen, alles was daruber hinaus geht jedoch nicht (also als ob forwarding aus wäre).

Update: Wie ich grade merke sind nur Verbindungen Gast -> Außen betroffen - von einem externen IPv6-Anschluss kann ich den Gast problemlos anpingen, andersrum kommt jedoch nichts durch.

No.1
28.10.10, 14:54
Ich hab mal ne andere Frage, ich habe das System über die Konsole konfiguriert, sprich die Netzwerkeinstellungen mit befehlen konfiguriert, d.h. alle Einstellungen befinden sich im temporären Speicher und nicht in der /etc/network/interface Datei.

Nach dem /etc/init.d/networking restart, gehen alle Einstellungen verloren, ist ja auch logisch, da diese vorher temporär gespeichert waren. Kann ich aber irgendwie diese Einstellungen dauerhaft speichern, ohne das ich alles neu in die /etc/network/interface Datei eintragen muss?

No.1
27.10.10, 14:50
Hallo,

ich habe einen Debian-Server mit OpenVZ aufgesetzt. Versuche nun seit einiger Zeit, IPv6 auf den Containern zum laufen zu bekommen.

Von der eth0 kann ich problemlos über IPv6 nach außen pingen, zwischen den VEs kann ich problemlos pingen und das Gateway (2001:645:404:xxxx::1) kann ich auch anpingen aber aus einem VE ins Internet, klappt es leider noch nicht.

/etc/sysctl.conf
net.ipv4.conf.default.forwarding=1
net.ipv4.conf.default.proxy_arp = 0
net.ipv4.ip_forward=1
kernel.sysrq = 1
net.ipv4.conf.default.send_redirects = 1
net.ipv4.conf.all.send_redirects = 0

# IPv6 Packet Forwarding and Proxy NDP
net.ipv6.conf.default.forwarding = 1
net.ipv6.conf.all.forwarding = 1
net.ipv6.conf.default.proxy_ndp = 1
net.ipv6.conf.all.proxy_ndp = 1


route -A inet6 add 2001:645:404:xxxx::1/64 dev eth0
route -A inet6 add ::/0 gw 2001:645:404:xxxx::1 dev eth0
route -A inet6 add ::/0 dev venet0
ip -6 neigh add proxy 2001:645:404:xxxx::225 dev venet0

Code:
root@VE1:/# ifconfig 
lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:38 errors:0 dropped:0 overruns:0 frame:0
          TX packets:38 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:3456 (3.4 KB)  TX bytes:3456 (3.4 KB)

venet0    Link encap:UNSPEC  HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00  
          inet6 addr: 2001:645:404:xxxx::225/128 Scope:Global
          UP BROADCAST POINTOPOINT RUNNING NOARP  MTU:1500  Metric:1
          RX packets:580 errors:0 dropped:0 overruns:0 frame:0
          TX packets:559 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:105628 (105.6 KB)  TX bytes:55993 (55.9 KB)

Code:
root@VE1:/# route -6
Kernel IPv6 routing table
Destination                    Next Hop                   Flag Met Ref Use If
2001:645:404:xxxx::225/128     ::                         U    256 0     0 venet0
2001:645:404:xxxx::/64         ::                         U    1024 0     1 venet0
fe80::/64                      ::                         U    256 0     0 venet0
::/0                           ::                         U    1024 0     1 venet0
::/0                           ::                         !n   -1  1   527 lo
::1/128                        ::                         Un   0   1     5 lo
2001:645:404:xxxx::225/128     ::                         Un   0   1   241 lo
ff00::/8                       ::                         U    256 0     0 venet0
::/0                           ::                         !n   -1  1   527 lo
Code:
serv:/# route -6
Kernel-IPv6-Routentabelle
Destination                    Next Hop                   Flag Met Ref Use If
2001:645:404:xxxx::225/128     ::                         U    1024 0     0 venet0
2001:645:404:xxxx::/64         ::                         U    1   0     1 eth0
2001:645:404:xxxx::/64         ::                         U    256 0     0 eth0
fe80::1/128                    ::                         U    256 0     0 venet0
fe80::/64                      ::                         U    256 0     0 eth0
fe80::/64                      ::                         U    256 0     0 venet0
::/0                           2001:645:404:xxxx::1       UG   1   0    53 eth0
::/0                           ::                         U    1   0     0 venet0
::/0                           ::                         !n   -1  1  1896 lo
::1/128                        ::                         Un   0   1    40 lo
2001:645:404:xxxx::/128        ::                         Un   0   1     0 lo
2001:645:404:xxxx::222/128     ::                         Un   0   1    48 lo
fe80::/128                     ::                         Un   0   1     0 lo
fe80::1/128                    ::                         Un   0   1     0 lo
fe80::21b:21ff:fe06:2f8/128    ::                         Un   0   1    40 lo
ff00::/8                       ::                         U    256 0     0 eth0
ff00::/8                       ::                         U    256 0     0 venet0
::/0                           ::                         !n   -1  1  1896 lo
root@VE1:/# ping6 ipv6.google.com
PING ipv6.google.com(2a00:1450:8002::68) 56 data bytes
--- ipv6.google.com ping statistics ---
10 packets transmitted, 0 received, 100% packet loss, time 9013ms


Hoffe das mir jemand nen Tipp geben kann woran es liegen könnte, warum ich aus einem VE nicht ins Internet pingen kann.

Vielen Dank!