iptables, IPv6 und Virtualisierung

Phate

New Member
Hallo,

ich habe einen Effekt bei der Konfiguration von IPv6 iptables Regeln im Rahmen des Routings zu den virtuellen Maschinen, den ich nicht verstehe. Zunächst muss ich das Setup und die Netzwerktopoligie erklären. Der Host hat ein zugewiesenen /64er Subnetz, welches ich in kleiner Subnetzer (112) an die VMs verteilen möchte. Das Routing funktioniert super, bis ich anfange die iptables Regeln zu konfigurieren.

Der Host hat folgende IP Konfig, pro VM gibt es ein Bridge-Device.
Code:
iface enp4s0 inet6 static
  address 2a01:4f8:151:xxxx::2
  netmask 128
  gateway fe80::1

iface br26 inet6 static
        address 2a01:4f8:151:xxxx::26:1
        netmask 112

Die VMs haben folgende Config:
Code:
iface ens3 inet6 static
  address 2a01:4f8:151:xxxx::24:2
  netmask 112
  gateway 2a01:4f8:151:xxxx::24:1

Das funktioniert bis ich folgende iptables Regeln definiere:
Code:
VM_IP="2a01:4f8:151:xxxx::26:0/112"
MAIN_IP="2a01:4f8:151:xxxx::2"
HOST_INTERFACE="enp4s0"

-P INPUT DROP
-P FORWARD DROP

# allow established connections
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
# allow echo requests (ping)
-A INPUT -p icmpv6 -m state --state NEW -j ACCEPT
# allow lo
-A INPUT -i lo -j ACCEPT

# Forward rules
# Packets belonging to existing connections
-A FORWARD -m state --state RELATED,ESTABLISHED      -j ACCEPT
# VMs --> internet
-A FORWARD -i br26 -o $HOST_INTERFACE -s $VM_IP              -j ACCEPT
# Internet --> VMs
-A FORWARD -i $HOST_INTERFACE -o br26 -d $VM_IP              -j ACCEPT

Nach meinem Verständniss sollte das so gehen, liege damit aber wohl falsch. Kann mir jemand erklären, wo mein Denkfehler liegt?

Wenn ich folgende Regel hinzufüge dann geht es. Das erlaubt aber vollen Zugriff auf den Host von den VMs aus und ist deshalb unerwünscht.
Code:
-A INPUT -i br26 -s $VM_IP -j ACCEPT

Ich danke schon mal für Tipps und Ratschläge.
 

Phate

New Member
Hallo,

Ich kann das nach einem Nachdenken und Rückbesinnen zu IPv6 Grundlagen selbst beantworten. Der Fehler lag im Kopieren und Umschreiben der Regeln von IPv4.

ICMPv6 ist stateless weshalb die Regel
Code:
-A INPUT -p icmpv6 -m state --state NEW -j ACCEPT
Mist ist.

Es funtioniert mit
Code:
-A INPUT -p icmpv6 -j ACCEPT

Wobei es sinnvoller wäre hier etwas feiner zu granulieren und Rate Limits zu definieren. Hat hier jemand gute Vorschläge?

Ohne ICMP funktioniert IPv6 nun mal nicht. Keine MAC Adressen über NDP -> keine Kommunikation.
 
Top