Zum Inhalt

OpenStack Networking Basics

OpenStack bietet die Möglichkeit Netzwerke nach Belieben zu erstellen. Dabei gibt es virtuelle Konstrukte, wie Network, Subnet, Ports und Router. Diese bilden die physische Struktur virtuell nach. Es können nahezu alle vorstellbaren Konstrukte der echten Welt, virtuell nachgebildet werden. Im Folgenden werden die wichtigsten Ressourcen dargestellt.

Network

In einem Netzwerk werden Ports und Subnets gebunden. Das IPv6 Protokoll sieht LinkLokale IP Adressen (fe80::/64) für direkte Erreichbarkeit auf einem Link vor. Daher würde dies bereits reichen, um die Erreichbarkeit mehrerer Server zu gewährleisten. Das ist in den allermeisten Fällen natürlich aber nicht genug, wodurch auf einem Netzwerk mindestens ein Subnet erstellt werden muss.

~ : openstack network create mynetwork
+---------------------------+--------------------------------------+
| Field                     | Value                                |
+---------------------------+--------------------------------------+
| admin_state_up            | UP                                   |
| availability_zone_hints   |                                      |
| availability_zones        |                                      |
| created_at                | 2025-04-08T13:56:11Z                 |
| description               |                                      |
| dns_domain                |                                      |
| id                        | 46d8a371-4243-4461-8e96-08a7f17d2ea8 |
| ipv4_address_scope        | None                                 |
| ipv6_address_scope        | None                                 |
| is_default                | False                                |
| is_vlan_transparent       | None                                 |
| mtu                       | 1500                                 |
| name                      | mynetwork                            |
| port_security_enabled     | True                                 |
| project_id                | f7f8ed8191a048248c38982cd4b3d240     |
| provider:physical_network | None                                 |
| provider:segmentation_id  | None                                 |
| qos_policy_id             | None                                 |
| revision_number           | 1                                    |
| router:external           | Internal                             |
| segments                  | None                                 |
| shared                    | False                                |
| status                    | ACTIVE                               |
| subnets                   |                                      |
| tags                      |                                      |
| tenant_id                 | f7f8ed8191a048248c38982cd4b3d240     |
| updated_at                | 2025-04-08T13:56:11Z                 |
+---------------------------+--------------------------------------+

Subnets

IPv6 Subnet

Die Einrichtung eines IPv6 Subnets unterscheidet sich ein wenig von IPv4, da IPv6 kein NAT vorsieht und das Subnetz somit aus einem global eindeutigen Präfix bedient werden muss. Wenn Du einen eigenen IPv6 Präfix besitzt und diesen in unserem OpenStack verwenden möchtest, kannst du dies gerne machen. Unser MyEngineer® ist gerne bereit, dabei zu unterstützen.

IPv6 kommt ohne NAT aus, ist deswegen aber nicht unsicherer als IPv4. Das Konzept von Floating IPs fällt somit weg, der Adressbereich von NWS (2a02:ed80::/29) ist aus dem Internet ohne Einschränkungen erreichbar.

Erreichbarkeit von IPv6 Adressen

Aufgrund der grundlegenden Erreichbarkeit des IPv6-Addressbereich von NWS (2a02:ed80::/29) empfehlen wir, durchgängig entsprechende Security Groups zu pflegen.

Für die korrekte Erreichbarkeit von Diensten über IPv4 und IPv6 muss man Einträge für beide Protokolle erstellen. Andernfalls kann es zu Problemen bei der Erreichbarkeit von Diensten kommen, insbesondere in Deutschland und vielen Teilen der EU, wo Verfügbarkeit und Verbreitung von IPv6 fortgeschritten sind.

Für interne Kommunikation kann man weiterhin den Link-Lokalen Adressbereich (fe80::/64) nutzen, jedoch sollte dieser niemals in öffentliche DNS Zonen eingetragen werden. Dies führt sonst bei einigen Nutzern zu Problemen bei der Erreichbarkeit, im schlimmsten Fall zu komplett unerreichbaren Services, da diese Adressen nicht geroutet werden.

Für die globalen Präfixe gibt es sogenannte SubnetPools. Diese werden bei der Anlage von Subnets referenziert und beziehen aus dem Pool ein /64-Subnetz. Die Adressierung der Server kann über dhcpv6-stateful, dhcpv6-stateless oder slaac geschehen. Die gängigste Art der Adressierung ist dabei slaac. Es gilt dabei zu beachten, dass per slaac leider aktuell kein Nameserver ausgeliefert werden kann. Dafür ist es notwendig den IPv6 Address Mode und RA Mode auf dhcpv6-stateless zu setzen.

~ : subnetpool=$(openstack subnet pool list -f value -c ID)
~ : openstack subnet create mynet6 \
      --network mynetwork \
      --ip-version 6 \
      --subnet-pool "$subnetpool" \
      --ipv6-address-mode slaac --ipv6-ra-mode slaac
+----------------------+----------------------------------------------------------+
| Field                | Value                                                    |
+----------------------+----------------------------------------------------------+
| allocation_pools     | 2a02:ed80:80:101::2-2a02:ed80:80:101:ffff:ffff:ffff:ffff |
| cidr                 | 2a02:ed80:80:101::/64                                    |
| created_at           | 2025-04-08T13:59:56Z                                     |
| description          |                                                          |
| dns_nameservers      |                                                          |
| dns_publish_fixed_ip | None                                                     |
| enable_dhcp          | True                                                     |
| gateway_ip           | 2a02:ed80:80:101::1                                      |
| host_routes          |                                                          |
| id                   | eba3de1d-831f-423b-96bd-7d593ef36bf2                     |
| ip_version           | 6                                                        |
| ipv6_address_mode    | slaac                                                    |
| ipv6_ra_mode         | slaac                                                    |
| name                 | mynet6                                                   |
| network_id           | 46d8a371-4243-4461-8e96-08a7f17d2ea8                     |
| project_id           | f7f8ed8191a048248c38982cd4b3d240                         |
| revision_number      | 0                                                        |
| segment_id           | None                                                     |
| service_types        |                                                          |
| subnetpool_id        | 21661540-2488-44b2-807d-34a2ab6ab59f                     |
| tags                 |                                                          |
| updated_at           | 2025-04-08T13:59:56Z                                     |
+----------------------+----------------------------------------------------------+

IPv4 subnet

Das Provisionieren eines IPv4 Subnets gestaltet sich ähnlich wie bei IPv6, jedoch muss ein konkretes Subnetz angegeben werden. Aus diesem erhalten dann zukünftige Server ihre IP. Die Nutzung eines SubnetPools ist dennoch möglich und kann das Verwalten von vielen Subnetzen vereinfachen.

~ : openstack subnet create mynet \
      --network mynetwork \
      --dns-nameserver 8.8.8.8
      --subnet-range 192.168.199.0/24 \
+----------------------+--------------------------------------+
| Field                | Value                                |
+----------------------+--------------------------------------+
| allocation_pools     | 192.168.199.2-192.168.199.254        |
| cidr                 | 192.168.199.0/24                     |
| created_at           | 2025-04-08T13:58:05Z                 |
| description          |                                      |
| dns_nameservers      | 8.8.8.8                              |
| dns_publish_fixed_ip | None                                 |
| enable_dhcp          | True                                 |
| gateway_ip           | 192.168.199.1                        |
| host_routes          |                                      |
| id                   | 85ba3173-4f53-4bda-9919-d39ff33f347b |
| ip_version           | 4                                    |
| ipv6_address_mode    | None                                 |
| ipv6_ra_mode         | None                                 |
| name                 | mynet                                |
| network_id           | 46d8a371-4243-4461-8e96-08a7f17d2ea8 |
| project_id           | f7f8ed8191a048248c38982cd4b3d240     |
| revision_number      | 0                                    |
| segment_id           | None                                 |
| service_types        |                                      |
| subnetpool_id        | None                                 |
| tags                 |                                      |
| updated_at           | 2025-04-08T13:58:05Z                 |
+----------------------+--------------------------------------+

Routing

Damit ein angeschlossener Server nun auch das Internet erreichen kann, muss ein Router erstellt und mit dem Netzwerk verbunden werden. Ein Router ist dabei immer an alle Subnetze anzuschließen.

Provisionierung von Routern

~ : openstack router create --external-gateway public-network myrouter
+-------------------------+------------------------------------------------------------------------------------------------------------------------------+
| Field                   | Value                                                                                                                        |
+-------------------------+------------------------------------------------------------------------------------------------------------------------------+
| admin_state_up          | UP                                                                                                                           |
| availability_zone_hints |                                                                                                                              |
| availability_zones      |                                                                                                                              |
| created_at              | 2025-04-09T04:49:31Z                                                                                                         |
| description             |                                                                                                                              |
| enable_ndp_proxy        | None                                                                                                                         |
| external_gateway_info   | {"network_id": "6f740510-e841-4e8e-8695-23e2e25c8c3d", "external_fixed_ips": [{"subnet_id":                                  |
|                         | "2bda200d-c066-4e96-a25e-20e9739f8f4b", "ip_address": "185.11.253.52"}, {"subnet_id": "2df4fb3d-1ee5-47f7-b1aa-8aec963aec73",|
|                         | "ip_address": "2a02:ed80:80:0:f816:3eff:fe91:f845"}], "enable_snat": true}                                                   |
| flavor_id               | None                                                                                                                         |
| id                      | 1e50fbab-5982-43f8-9b83-8c152e5147f8                                                                                         |
| name                    | myrouter                                                                                                                     |
| project_id              | f7f8ed8191a048248c38982cd4b3d240                                                                                             |
| revision_number         | 3                                                                                                                            |
| routes                  |                                                                                                                              |
| status                  | ACTIVE                                                                                                                       |
| tags                    |                                                                                                                              |
| tenant_id               | f7f8ed8191a048248c38982cd4b3d240                                                                                             |
| updated_at              | 2025-04-09T04:49:34Z                                                                                                         |
+-------------------------+------------------------------------------------------------------------------------------------------------------------------+

Subnet Attachments

~ : openstack network list --long -c ID -c Name -c Subnets
+--------------------------------------+---------------------------+----------------------------------------------------------------------------+
| ID                                   | Name                      | Subnets                                                                    |
+--------------------------------------+---------------------------+----------------------------------------------------------------------------+
| 46d8a371-4243-4461-8e96-08a7f17d2ea8 | mynetwork                 | 85ba3173-4f53-4bda-9919-d39ff33f347b, eba3de1d-831f-423b-96bd-7d593ef36bf2 |
+--------------------------------------+---------------------------+----------------------------------------------------------------------------+
~ : openstack router add subnet 1e50fbab-5982-43f8-9b83-8c152e5147f8 85ba3173-4f53-4bda-9919-d39ff33f347b
~ : openstack router add subnet 1e50fbab-5982-43f8-9b83-8c152e5147f8 eba3de1d-831f-423b-96bd-7d593ef36bf2

Aktuelle Einschränkungen

Reines IPv6 Netzwerk

Es ist möglich, ein reines IPv6 Netzwerk ohne IPv4 Subnets zu erstellen, jedoch gibt es dabei eine Einschränkung:

  • Die Option Config-Drive muss aktiviert sein, da der Metadaten-Dienst (169.254.169.254) derzeit nur IPv4 unterstützt.
  • Sollte die Option nicht aktiviert sein, ist cloud-init nicht in der Lage, Server korrekt zu provisionieren und hinterlässt sie schlimmstenfalls in einem unbrauchbaren Zustand.

Geroutete IPv6 Subnets

Wegen des NWS-internen Routings sowie DDoS-Filtering ist es derzeit nicht möglich, mehr als eine einzige Adresse (/128) auf einen Server zu routen.

Falls man Container, Overlay-Netzwerke, VPN, etc. betreiben möchte, muss man momentan auf NAT66, Host-Networking oder bspw. passt setzen.