Automatische Netzwerkkonfiguration mit IPv6 in OpenStack

18.03.2021 | Sebastian Biedler in howto

Wo liegt der Unterschied?

Zum besseren Verständnis werfen wir zuerst einen Blick auf die Unterschiede zwischen IPv4 zu IPv6 im OpenStack-Umfeld. Wie schon im Protokollstandard definiert ist, existiert bei IPv6 kein NAT (Network Adress Translation). Auch OpenStack sieht für seine Router kein NAT vor. Das heißt, dass die VMs direkt über ihre IPv6-Adresse von außen erreichbar sind und das alte System von Fixed-IP und Floating-IP nicht mehr zur Anwendung kommt.

Generell nimmt OpenStack an, dass es sich bei der verwendeten IPv6 Adresse um eine Global Unicast Adresse handelt, also eine im Internet routbare Adresse aus dem 2000::/3 Bereich. Theoretisch ist auch das Nutzen von Unique Local Adressen aus dem FC00::/7 Bereich möglich, allerdings sind diese Adressen nicht von außerhalb der Cloud erreichbar.

Beim Routing müssen einige Dinge beachtet werden. Da es keine Floating IPs mehr gibt, ändert sich besonders bei einem DVR-Setup (Distributed Virtual Router) das Routingverhalten. Der gesamte Verkehr aus dem Internet zur VM und zurück wird über den zentralen SNAT-Namespace des Routers geleitet. Somit entspricht der Verkehrsfluss dem eines Legacy-Aufbaus.

Auch in OpenStack ist es möglich, einen Dual-Stack-Betrieb zu realisieren – eine VM kann also eine IPv4- sowie eine IPv6-Adresse besitzen und somit beide Welten miteinander kombinieren.

Präfix-Delegation – der bequeme Weg zur Netzwerkkonfiguration

Mit dem Feature der Präfix-Delegation wurde in IPv6 ein Weg geschaffen, einfach per DHCPv6 ganze Netzwerkbereiche zu konfigurieren. OpenStack setzt hier per Default auf die Zusammenarbeit mit dem DHCPv6 Server Dibbler. Bevor wir uns das im Detail anschauen, muss ich noch auf eine Schattenseite hinweisen. Präfix-Delegation funktioniert nur mit einem Legacy-Setup, aktuell wird kein DVR oder Router-HA unterstützt. Um die Präfix-Delegation generell in OpenStack einzuschalten, muss in der Neutron.conf in der DEFAULT Sektion folgender Wert gesetzt werden.

ipv6_pd_enabled = True

Der Parameter pd_dhcp_driver bleibt unangetastet, da wir hier den Default Wert, sprich den Dibbler-Server verwenden. Dibbler ist ein portabler DHCPv6-Server und kann normalerweise aus den Paketquellen der verwendeten Linux-Distribution installiert werden. In dem hier gezeigten Beispiel wurde ein Ubuntu 20.04 verwendet. Der Dibbler-Server läuft auf dem Network Node der OpenStack-Installation. Der Dibbler-Client wird bei unserer OpenStack-Installation per Kolla-Ansible schon in dem neutron_l3_agent Container mitgeliefert.

Im ersten Schritt muss der Server eingerichtet werden. Hierzu kann man einfach die server.conf im /etc/dibbler Ordner bearbeitet. Hier die Konfiguration für unser Beispiel

preference 0 

iface "br-ex" { 

pd-class { 
    pd-pool 2001:db8:2222::/48 
    pd-length 64 
}

}

Es gibt noch mehr Optionen, etwa die DNS-Option, die per Präfix-Delegation übergeben werden können. In diesem einfachen Beispiel reicht uns allerdings die Präfix-Delegation für das Subnetzwerk. Die pd-length von 64 ist nötig, da die Präfix-Delegation in OpenStack im Moment nur mit solchen Längen funktioniert.

dibbler-server start

Wir legen uns einen Router an.

openstack router create ipv6-router

Danach verbinden wir unseren Router mit dem einen externen Netzwerkbereich:

openstack router set --external-gateway  ipv6-extern  ipv6-router

Nun legen wir das Projektnetzwerk für unsere VMs an.

openstack network create ipv6-pd-test

Sowie das passende subnet.

openstack subnet create --ip-version 6 --ipv6-ra-mode slaac --ipv6-address-mode slaac --use-default-subnet-pool --gateway ::1 --network ipv6-pd-test ipv6-test

Als ra-mode wird slaac gewählt. Slaac steht für Stateless Address Autoconfiguration. Das ist der Modus, über den dann die VMs ihre IP beziehen. Das Gateway ::1 dient als Dummy, damit wir das Subnet mit dem Router verbinden können.

openstack router add subnet ipv6-router ipv6-test. 

Danach sollte das Subnet seine vollständige Konfiguration per Präfix-Delegation erhalten.

Zum Abschluss unseres kleinen Beispiels noch der Test mit einer Test-VM in OpenStack.

Fazit

Die Präfix-Delegation mit dem Dibbler-Server ist sehr schnell eingerichtet. Somit kann auch ein IPv6 Netzwerkbereich, der von einem externen Internet Service Provider zugewiesen wurde, im nachgelagerten OpenStack Netzwerk effektiv verwaltet werden. Allerdings ist zu beachten, dass aktuell keine HA Lösung für den OpenStack-Projektrouter existiert.

Sebastian Biedler
Sebastian Biedler
Sebastian Biedler ist seit 2015 bei der B1 Systems GmbH als Linux Consultant und Trainer beschäftigt. Er befasst sich seit über sechs Jahren mit dem Thema Cloud und insbesondere mit OpenStack, sowie mit Software-defined Networking und Network Function Virtualization.

 


Haben Sie Anmerkungen oder Nachfragen? Melden Sie sich unter blog%b1-systems.de
Col 2