IPv6 - Route festlegen [message #36001] |
Mon, 11 May 2009 17:14 |
Sven
Messages: 2 Registered: May 2009
|
Junior Member |
|
|
Hi there!
Ich hätt' da gern mal ein Problem
Das Grundproblem ist, dass keine IPv6-Routen beim hochfahren der einzelnen Container gesetzt werden, zumindest nicht bei mir.
Ich definiere die statische IPv6-Adresse in der config des containers, die Adresse wird auch zugeteilt, aber es werden keinerlei routen gesetzt.
Aktuell umgehe ich das Problem, indem ich auf dem Hostsystem nach dem hochfahren folgendes kleines script starte:
#! /bin/bash
for i in `seq 101 114`; do
echo "Lege IPv6-Route in $i an..."
/usr/sbin/vzctl exec $i /sbin/ip -6 route add ::/0 dev venet0
done Finde das nur ein wenig unelegant, habe aber keine Möglichkeit gefunden, das Script sinnvoll in dem container starten zu lassen, da die IPv6-Adresse recht spät zugewiesen wird, und ich das somit nicht über das initsystem machen kann.
Gibts keine Möglichkeit die routen im Startvorgang der container anlegen zu können?
Dann habe ich das Problem, dass die conntrack-engine für die VPS ein wenig strubbelig zu sein scheint.
Zum grundsätzlichen Aufbau des Rulesets:
Ich werfe alles anhand des Eingans-Interfaces in verschiedene Chains und filtere dort weiter.
Pakete im Zustand RELATED und ESTABLISHED erlaube ich sehr früh (quasi als erstes, davor habe ich nur eine Chain um den Traffic zu zählen).
Die relevanten Teile meines ip6table-scriptes einmal:
# Accounting
$IPT -N ACCOUNTING
$IPT -A INPUT -j ACCOUNTING
$IPT -A OUTPUT -j ACCOUNTING
$IPT -A FORWARD -j ACCOUNTING
# aufgebaute erlauben
$IPT -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPT -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
[...]
# Chains fuer die einzelnen If
$IPT -N REDIN
$IPT -A INPUT -i $RED -j REDIN
$IPT -A FORWARD -i $RED -j REDIN
[...]
$IPT -N VPSIN
$IPT -A INPUT -i $VPS -j VPSIN
$IPT -A FORWARD -i $VPS -j VPSIN
Zur weiteren Verdeutlichung:
# ip6tables -vnxL FORWARD
Chain FORWARD (policy DROP 21 packets, 22255 bytes)
pkts bytes target prot opt in out source destination
4691726 3882606596 ACCOUNTING all * * ::/0 ::/0
4655337 3879276130 ACCEPT all * * ::/0 ::/0 state RELATED,ESTABLISHED
[...]
32764 3046910 VPSIN all venet0 * ::/0 ::/0
Das Problem ist nun folgendes:
ip6tables erlaubt auf dem WAN-If ($RED) die Pakete im Zustand RELATED,ESTABLISHED. Problem ist - der Zustand ist auf dem Eingang des If venet0 scheinbar wieder unbekannt und wird dort verworfen. Der Kernel scheint diese als völlig neue Pakete zu behandeln (im Log werden diese als Eingangs- und Ausgangsinterface venet0 gelogt) - ich muss in der Chain für das If venet0 also auch alle Pakete mit der source-ip !$EIGENES_NETZ erlauben. Auch wenn ich in der Chain für venet0 nochmals alle Pakete im Zustand RELATED oder ESTABLISHED erlaube matchen diese nicht darauf; für die conntrack-engine sind es zu diesem Zeitpunkt Pakete im Zustand NEW, auch wenn die in den vorherigen Chains (Eingang auf dem WAN-If) richtig zugeordnet wurden.
Falls von Interesse:
Auf dem Hostsystem läuft der amd64 Debiankernel (2.6.26-2-openvz-amd64 #1 SMP Fri Mar 27 05:10:50 UTC 2009 x86_64 GNU/Linux), alle Gastsysteme sind Debian-lenny Systeme.
Keine Backports oder sonstige Fremdpakete installiert.
Das System selbst ist allerdings schon ein bissel älter (damals aufgesetzt unter woody und linux-vserver, dann "irgendwann" mal zu openvz migriert, da lief aber schon etch), falls das von Interesse sein sollte.
|
|
|
|
Re: IPv6 - Route festlegen [message #36327 is a reply to message #36324] |
Wed, 10 June 2009 14:32 |
Sven
Messages: 2 Registered: May 2009
|
Junior Member |
|
|
Moin!
Sixtus wrote on Wed, 10 June 2009 08:05 | ip -6 route add ::/0 via $IPv6_ADRESSE_DES_ROUTERS dev venet0
|
Das mache ich jetzt ja auch (allerdings vom Hostsystem aus - siehe das erste kleine bash-script). Die IPv6-Konnektivität ansich bekomme ich ja auch hin.
Quote: | Das ganze kann man ja gepflegt noch in /etc/network/interfaces eintragen (das ist jedoch bei mir noch ungetestet).
|
Eben das funktioniert ja nicht, da die IPv6-Adresse erst nach dem Abarbeiten der Startscripte zugewiesen wird.
Man könnte nun etwas crudes schreiben (beispielsweise ne while schleife, in der geprüft wird, ob die oder eine IPv6-Adresse zugewiesen wurde, und dann die Route anlegen) - aber elegant sieht anders aus
Ich suche deshalb den Teil im Startscript der Container, der die IPv6-Adresse zuweist - dort müsste man direkt im Anschluß die Route einpflegen lassen.
Leider bin ich ganz augenscheinlich zu deppert, diese zu finden
In meinen Augen ist das auch ein kleiner Bug - was nützt es eine Adresse zuzuweisen, wenn keine entsprechenden Routen dazu angelegt werden (können)? So wie es jetzt (zumindest in den Debian-Paketen) ist, sind IPv6-Adressen ja exakt nutzlos.
BTW:
Hast du auch ein ähnliches Problem bei der conntrack-engine?
Pakete über venet0 werden bei mir immer als neu erkannt, bzw. der Zustand wird nicht erkannt.
Gruß und Dank
Sven
|
|
|