This section describes the following items:
Enabling a dual-stack network in OpenStack Networking simply requires
creating a subnet with the ip_version
field set to 6
, then the
IPv6 attributes (ipv6_ra_mode
and ipv6_address_mode
) set. The
ipv6_ra_mode
and ipv6_address_mode
will be described in detail in
the next section. Finally, the subnets cidr
needs to be provided.
This section does not include the following items:
Sebagaimana Juno, layanan OpenStack Networking (neutron) menyediakan dua atribut baru ke objek subnet, yang memungkinkan pengguna API untuk mengkonfigurasi subnet IPv6.
Ada dua atribut IPv6:
ipv6_ra_mode
ipv6_address_mode
Atribut ini dapat diatur untuk nilai berikut:
slaac
dhcpv6-stateful
dhcpv6-stateless
Atribut juga dapat dibiarkan tanpa disetel.
Atribut ipv6_address_mode
digunakan untuk mengontrol bagaimana pengalamatan ditangani oleh OpenStack. Ada sejumlah cara yang berbeda dimana guest instance dapat memperoleh alamat IPv6, dan atribut ini membuka (expose) pilihan ini untuk pengguna dari API Networking.
Atribut ipv6_ra_mode
digunakan untuk mengontrol penyiaran update dan perubahan router untuk subnet.
The IPv6 Protocol uses Internet Control Message Protocol packets (ICMPv6) as a way to distribute information about networking. ICMPv6 packets with the type flag set to 134 are called “Router Advertisement” packets, which contain information about the router and the route that can be used by guest instances to send network traffic.
The ipv6_ra_mode
is used to specify if the Networking service should
generate Router Advertisement packets for a subnet.
ipv6 ra mode | ipv6 address mode | radvd A,M,O | External Router A,M,O | Deskripsi |
---|---|---|---|---|
N/S | N/S | Off | Not Defined (tak terdefinisikan) | Kompatibilitas mundur dengan perilaku pra-Juno IPv6. |
N/S | slaac | Off | 1,0,0 | Guest instance memperoleh alamat IPv6 dari router non-OpenStack menggunakan SLAAC. |
N/S | dhcpv6-stateful | Off | 0,1,1 | Saat ini tidak dilaksanakan dalam implementasi referensi. |
N/S | dhcpv6-stateless | Off | 1,0,1 | Saat ini tidak dilaksanakan dalam implementasi referensi. |
slaac | N/S | 1,0,0 | Off | Saat ini tidak dilaksanakan dalam implementasi referensi. |
dhcpv6-stateful | N/S | 0,1,1 | Off | Saat ini tidak dilaksanakan dalam implementasi referensi. |
dhcpv6-stateless | N/S | 1,0,1 | Off | Saat ini tidak dilaksanakan dalam implementasi referensi. |
slaac | slaac | 1,0,0 | Off | Guest instance memperoleh alamat IPv6 dari OpenStack dikelola dengan radvd menggunakan SLAAC. |
dhcpv6-stateful | dhcpv6-stateful | 0,1,1 | Off | Guest instance memperoleh alamat IPv6 dari dnsmasq menggunakan DHCPv6 stateful dan info opsional dari dnsmasq menggunakan DHCPv6. |
dhcpv6-stateless | dhcpv6-stateless | 1,0,1 | Off | Guest instance memperoleh alamat IPv6 dari OpenStack dikelola dengan radvd menggunakan SLAAC dan info opsional dari dnsmasq menggunakan DHCPv6. |
slaac | dhcpv6-stateful | Invalid combination. | ||
slaac | dhcpv6-stateless | Invalid combination. | ||
dhcpv6-stateful | slaac | Invalid combination. | ||
dhcpv6-stateful | dhcpv6-stateless | Invalid combination. | ||
dhcpv6-stateless | slaac | Invalid combination. | ||
dhcpv6-stateless | dhcpv6-stateful | Invalid combination. |
Jembatan Linux dan modul dataplane Open vSwitch mendukung penerusan paket IPv6 di antara guest dan port router. Mirip dengan IPv4, tidak ada konfigurasi khusus atau pengaturan diperlukan untuk mengaktifkan dataplane untuk meneruskan paket dari sumber ke tujuan menggunakan IPv6. Perhatikan bahwa dataplanes ini akan meneruskan paket Link-local Address (LLA) antara host pada jaringan yang sama saja tanpa partisipasi atau setup oleh komponen OpenStack setelah port terhubung semua dan alamat MAC dipelajari.
There are three methods currently implemented for a subnet to get its
cidr
in OpenStack:
In the future, additional techniques could be used to allocate subnets to projects, for example, use of an external IPAM module.
Catatan
An external DHCPv6 server in theory could override the full address OpenStack assigns based on the EUI-64 address, but that would not be wise as it would not be consistent through the system.
IPv6 mendukung tiga skema pengalamatan yang berbeda untuk konfigurasi alamat dan untuk menyediakan informasi jaringan opsional.
OpenStack bisa diatur sedemikian rupa sehingga OpenStack Networking langsung memberikan RA, penyiaran DHCP dan alamat DHCPv6 dan informasi opsional untuk jaringan mereka atau hal ini dapat didelegasikan kepada router dan layanan eksternal didasarkan pada driver yang sedang digunakan. Ada atribut dua subnet neutron - `` ipv6_ra_mode`` dan `` ipv6_address_mode`` - yang menentukan bagaimana IPv6 dan informasi jaringan disediakan untuk instance proyek:
Ipv6_address_mode
: Menentukan bagaimana instance mendapatkan alamat IPv6, gateway default, atau informasi opsional.Untuk dua atribut di atas supaya menjadi efektif, enable_dhcp
dari objek subnet harus diatur ke True.
Bila menggunakan SLAAC, kombinasi didukung saat ini untuk ipv6_ra_mode
dan ipv6_address_mode
adalah sebagai berikut.
ipv6_ra_mode | ipv6_address_mode | Result |
---|---|---|
Tidak ditentukan. | SLAAC | Alamat ditugaskan penggunaan EUI-64, dan router eksternal akan digunakan untuk routing. |
SLAAC | SLAAC | Alamat ditugaskan penggunaan EUI-64, dan OpenStack Networking menyediakan routing. |
Pengaturan ipv6_ra_mode
untuk slaac
akan menghasilkan router OpenStack Networking yang dikonfigurasi untuk mengirim paket RA, ketika mereka diciptakan. Hal ini menyebabkan nilai berikut ditetapkan untuk flag konfigurasi alamat dalam pesan RA:
New or existing neutron networks that contain a SLAAC enabled IPv6 subnet will result in all neutron ports attached to the network receiving IPv6 addresses. This is because when RA broadcast messages are sent out on a neutron network, they are received by all IPv6 capable ports on the network, and each port will then configure an IPv6 address based on the information contained in the RA packet. In some cases, an IPv6 SLAAC address will be added to a port, in addition to other IPv4 and IPv6 addresses that the port already has been assigned.
For DHCPv6, the currently supported combinations are as follows:
ipv6_ra_mode | ipv6_address_mode | Result |
---|---|---|
DHCPv6-stateless | DHCPv6-stateless | Addresses are assigned through RAs (see SLAAC above) and optional information is delivered through DHCPv6. |
DHCPv6-stateful | DHCPv6-stateful | Alamat dan informasi opsional ditugaskan untuk penggunaan DHCPv6. |
Setting DHCPv6-stateless for ipv6_ra_mode
configures the neutron
router with radvd agent to send RAs. The list below captures the
values set for the address configuration flags in the RA packet in
this scenario. Similarly, setting DHCPv6-stateless for
ipv6_address_mode
configures neutron DHCP implementation to provide
the additional network information.
Setting DHCPv6-stateful for ipv6_ra_mode
configures the neutron
router with radvd agent to send RAs. The list below captures the
values set for the address configuration flags in the RA packet in
this scenario. Similarly, setting DHCPv6-stateful for
ipv6_address_mode
configures neutron DHCP implementation to provide
addresses and additional network information through DHCPv6.
The behavior of the neutron router for IPv6 is different than for IPv4 in a few ways.
Port router internal, yang bertindak sebagai port gateway default untuk jaringan, akan berbagi port umum untuk semua subnet IPv6 terkait dengan jaringan. Ini berarti bahwa akan ada sebuah antarmuka router internal yang IPv6 dengan beberapa alamat IPv6 dari masing-masing subnet IPv6 yang terkait dengan jaringan dan interface router internal IPv4 yang terpisah untuk subnet IPv4. Di sisi lain, port router eksternal diperbolehkan untuk memiliki konfigurasi dual-stack dengan IPv4 dan alamat IPv6 yang ditugaskan kepada mereka.
Jaringan proyek neutron yang ditugaskan di alamat dan prefiks Global Unicast Address (GUA) tidak memerlukan NAT pada gateway port eksternal router neutron untuk mengakses dunia luar. Sebagai konsekuensi dari kurangnya NAT port router eksternal tidak memerlukan GUA untuk mengirim dan menerima dengan jaringan eksternal. Ini berarti subnet prefix GUA IPv6 tidak selalu diperlukan untuk jaringan eksternal neutron. Secara default, LLA IPv6 terkait dengan port eksternal gateway dapat digunakan untuk tujuan routing. Untuk menangani skenario ini, pelaksanaan router-gateway-set API di neutron telah dimodifikasi sehingga suatu subnet IPv6 tidak diperlukan untuk jaringan eksternal yang berhubungan dengan router neutron. Alamat LLA dari router hulu dapat dipelajari dalam dua cara.
ilag ipv6_gateway
dapat diatur dengan LLA router gerbang eksternal dalam file konfigurasi neutron-l3-agent. Ini juga mensyaratkan bahwa tidak ada subnet dikaitkan dengan port tersebut.ipv6_gateway
tidak diatur.Secra efektif flag ipv6_gateway
diutamakan melalui RA yang diterima dari router hulu. Jika ini diinginkan untuk menggunakan GUA next hop yang dicapai dengan mengalokasikan subnet ke port router eksternal dan menempatkan alamat GUA router hulu sebagai gateway untuk subnet.
Catatan
It should be possible for projects to communicate with each other on an isolated network (a network without a router port) using LLA with little to no participation on the part of OpenStack. The authors of this section have not proven that to be true for all scenarios.
Catatan
Bila menggunakan neutron L3 agent dalam konfigurasi dimana itu adalah auto-configuring alamat IPv6 melalui SLAAC, dan agen sedang mempelajari rute IPv6 defaultnya dari ICMPv6 Router Advertisement, itu mungkin perlu untuk mengatur sysctl net.ipv6.conf . <physical_interface> .accept_ra
dengan nilai 2
agar routing berfungsi dengan benar. Untuk penjelasan lebih rinci, silakan lihat bug <https://bugs.launchpad.net/neutron/+bug/1616282> __.
IPv6 tidak bekerja ketika fungsi Distributed Virtual Router diaktifkan, tetapi semua lalu lintas masuk/keluar (ingress/egress) adalah melalui router terpusat (oleh karena itu, tidak didistribusikan). Banyak pekerjaan diperlukan untuk sepenuhnya mengaktifkan fungsi ini.
VPNaaS mendukung IPv6, namun dukungan di Kilo dan rilis sebelumnya akan memiliki beberapa bug yang mungkin membatasi bagaimana hal itu dapat digunakan. Lebih menyeluruh dan lengkap pengujian dan perbaikan bug telah dilakukan sebagai bagian dari rilis Liberty. IPv6 yang berbasis VPN-as-a-Service dikonfigurasi mirip dengan konfigurasi IPv4. Salah satu atau kedua peer_address
dan `` peer_cidr`` dapat ditetapkan sebagai alamat IPv6. Pilihan mode pengalamatan dan mode router dijelaskan di atas seharusnya tidak berdampak dukungan.
TODO
FWaaS memungkinkan penciptaan aturan berbasis IPv6.
At the current time OpenStack Networking does not provide any facility to support any flavor of NAT with IPv6. Unlike IPv4 there is no current embedded support for floating IPs with IPv6. It is assumed that the IPv6 addressing amongst the projects is using GUAs with no overlap across the projects.
OpenStack saat ini tidak mendukung ekstensi privasi yang didefinisikan oleh RFC 4941. Interface identifier dan DUID yang digunakan harus langsung berasal dari MAC seperti yang dijelaskan dalam RFC 2373. Host komputasi tidak harus mengatur untuk memanfaatkan ekstensi privasi saat membuat identifier interface identifier mereka .
There is no provisions for an IPv6-based metadata service similar to what is provided for IPv4. In the case of dual stacked guests though it is always possible to use the IPv4 metadata service instead.
Unlike IPv4 the MTU of a given network can be conveyed in the RA messages sent by the router as well as in the DHCP messages.
As of the Kilo release, considerable effort has gone in to ensuring the project network can handle dual stack IPv6 and IPv4 transport across the variety of configurations described above. OpenStack control network can be run in a dual stack configuration and OpenStack API endpoints can be accessed via an IPv6 network. At this time, Open vSwitch (OVS) tunnel types - STT, VXLAN, GRE, support both IPv4 and IPv6 endpoints.
Dari rilis Liberty dan seterusnya, OpenStack Networking mendukung IPv6 prefix delegation. Bagian ini menjelaskan langkah konfigurasi dan alur kerja yang diperlukan untuk menggunakan IPv6 prefix delegation untuk memberikan alokasi otomatis subnet CIDR. Hal ini memungkinkan Anda sebagai administrator OpenStack mengandalkan server DHCPv6 eksternal (ke layanan OpenStack Networking) untuk mengelola prefix jaringan proyek Anda.
Catatan
Prefix delegation menjadi tersedia dalam rilis Liberty, tidak tersedia dalam rilis Kilo. Router HA dan DVR saat ini tidak didukung oleh fitur ini.
Untuk mengaktifkan prefix delegation, edit file /etc/neutron/neutron.conf
. Jika Anda menjalankan OpenStack Liberty, buatlah perubahan berikut:
default_ipv6_subnet_pool = prefix_delegation
Sebaliknya jika Anda menjalankan OpenStack Mitaka, buatlah perubahan ini:
ipv6_pd_enabled = True
Catatan
Jika Anda tidak menggunakan driver berbasis dibbler default untuk prefix delegation, maka Anda juga perlu mengatur driver dalam /etc/neutron/neutron.conf
:
pd_dhcp_driver = <class path to driver>
Driver lain dari yang standar mungkin memerlukan konfigurasi tambahan, silakan lihat Konfigurasi tambahan
Ini memberitahu OpenStack Networking supaya menggunakan mekanisme prefix delegation untuk alokasi subnet ketika pengguna tidak menyediakan CIDR atau id kolam subnet saat membuat subnet.
Untuk menggunakan fitur ini, Anda perlu delegasi awalan (prefix delegation) yang mampu server DHCPv6 yang dicapai dari node OpenStack Networking Anda. Ini bisa menjadi perangkat lunak yang berjalan pada node OpenStack Networking atau di tempat lain, atau router fisik. Untuk tujuan panduan ini kita menggunakan Dibbler, open source Server DHCPv6. Dibbler tersedia di banyak manajer paket Linux, atau dari sumber di tomaszmrugalski/dibbler.
Bila menggunakan implementasi referensi dari driver prefix delegation OpenStack Networking, Dibbler juga harus diinstal pada node OpenStack Networking Anda untuk melayani sebagai klien DHCPv6. Versi 1.0.1 atau lebih tinggi diperlukan.
Panduan ini mengasumsikan bahwa Anda menjalankan server Dibbler pada node jaringan dimana jembatan jaringan eksternal ada. Jika Anda sudah memiliki server DHCPv6 yang mampu prefix delegation di tempat, maka anda dapat melewati (skip) bagian berikut.
Setelah menginstal Dibbler, edit file /etc/dibbler/server.conf
:
script "/var/lib/dibbler/pd-server.sh"
iface "br-ex" {
pd-class {
pd-pool 2001:db8:2222::/48
pd-length 64
}
}
Opsi yang digunakan dalam file konfigurasi di atas adalah:
script
, poin untuk script untuk dijalankan ketika awalan didelegasikan atau dilepaskan. Ini hanya diperlukan jika Anda ingin instance pada subnet Anda untuk memiliki akses jaringan eksternal. Lebih di bawah ini.pd-pool
, prefiks yang lebih besar dari mana Anda ingin prefiks Anda didelegasikan untuk datang. Contoh yang diberikan ini sudah cukup jika Anda tidak memerlukan akses jaringan eksternal, jika tidak prefix routable global yang unik ini diperlukan.Untuk menyediakan akses jaringan eksternal untuk instance Anda, server Dibbler Anda juga perlu membuat rute baru untuk setiap awalan yang didelegasikan. Hal ini dilakukan dengan menggunakan file script di dalam file konfigurasi di atas. Edit file /var/lib/dibbler/pd-server.sh
:
if [ "$PREFIX1" != "" ]; then
if [ "$1" == "add" ]; then
sudo ip -6 route add ${PREFIX1}/64 via $REMOTE_ADDR dev $IFACE
fi
if [ "$1" == "delete" ]; then
sudo ip -6 route del ${PREFIX1}/64 via $REMOTE_ADDR dev $IFACE
fi
fi
Variabel yang digunakan dalam file script di atas adalah:
$PREFIX1
, Awalan yang ditambahkan/dihapus oleh server Dibbler.$1
, Operasi yang dilakukan.$REMOTE_ADDR
Alamat IP dari klien Dibbler yang meminta.$IFACE
, Antarmuka jaringan dimana permintaan itu diterima.Hal di atas adalah semua hal yang Anda butuhkan untuk skenario ini, tetapi informasi lebih lanjut tentang instalasi, konfigurasi, dan mejalankan Dibbler tersedia di buku petunjuk Dibbler, di Dibbler – a portable DHCPv6.
Untuk memulai server Dibbler Anda, jalankan:
# dibbler-server run
Atau untuk berjalan dalam modus tanpa kepala (headless mode):
# dibbler-server start
Bila menggunakan DevStack, Hal ini penting untuk memulai server Anda setelah skrip stack.sh
telah selesai untuk memastikan bahwa antarmuka jaringan yang diperlukan telah dibuat.
Pertama, buat jaringan dan subnet IPv6:
$ openstack network create ipv6-pd
+---------------------------+--------------------------------------+
| Field | Value |
+---------------------------+--------------------------------------+
| admin_state_up | UP |
| availability_zone_hints | |
| availability_zones | |
| created_at | 2017-01-25T19:26:01Z |
| description | |
| headers | |
| id | 4b782725-6abe-4a2d-b061-763def1bb029 |
| ipv4_address_scope | None |
| ipv6_address_scope | None |
| mtu | 1450 |
| name | ipv6-pd |
| port_security_enabled | True |
| project_id | 61b7eba037fd41f29cfba757c010faff |
| provider:network_type | vxlan |
| provider:physical_network | None |
| provider:segmentation_id | 46 |
| revision_number | 3 |
| router:external | Internal |
| shared | False |
| status | ACTIVE |
| subnets | |
| tags | [] |
| updated_at | 2017-01-25T19:26:01Z |
+---------------------------+--------------------------------------+
$ openstack subnet create --ip-version 6 --ipv6-ra-mode slaac \
--ipv6-address-mode slaac --use-default-subnet-pool \
--network ipv6-pd ipv6-pd-1
+------------------------+--------------------------------------+
| Field | Value |
+------------------------+--------------------------------------+
| allocation_pools | ::2-::ffff:ffff:ffff:ffff |
| cidr | ::/64 |
| created_at | 2017-01-25T19:31:53Z |
| description | |
| dns_nameservers | |
| enable_dhcp | True |
| gateway_ip | ::1 |
| headers | |
| host_routes | |
| id | 1319510d-c92c-4532-bf5d-8bcf3da761a1 |
| ip_version | 6 |
| ipv6_address_mode | slaac |
| ipv6_ra_mode | slaac |
| name | ipv6-pd-1 |
| network_id | 4b782725-6abe-4a2d-b061-763def1bb029 |
| project_id | 61b7eba037fd41f29cfba757c010faff |
| revision_number | 2 |
| service_types | |
| subnetpool_id | prefix_delegation |
| updated_at | 2017-01-25T19:31:53Z |
| use_default_subnetpool | True |
+------------------------+--------------------------------------+
Subnet pada awalnya dibuat dengan CIDR sementara sebelum subnet dapat diberikan oleh prefix delegation. Jumlah subnet dengan CIDR sementara ini bisa eksis tanpa menimbulkan error tumpang tindih. subnetpool_id secara otomatis diatur untuk prefix_delegation
.
Untuk memicu proses prefix delegation, buat antarmuka router antara subnet ini dan router dengan interface yang aktif pada jaringan eksternal:
$ openstack router add subnet router1 ipv6-pd-1
Mekanisme prefix delegation kemudian mengirimkan permintaan melalui jaringan eksternal ke server prefix delegation Anda, yang menjawab dengan delegated prefix. Subnet tersebut kemudian diperbarui dengan prefix baru, termasuk menerbitkan alamat IP baru untuk semua port:
$ openstack subnet show ipv6-pd-1
+-------------------+--------------------------------------+
| Field | Value |
+-------------------+--------------------------------------+
| allocation_pools | 2001:db8:2222:6977::2-2001:db8:2222: |
| | 6977:ffff:ffff:ffff:ffff |
| cidr | 2001:db8:2222:6977::/64 |
| created_at | 2017-01-25T19:31:53Z |
| description | |
| dns_nameservers | |
| enable_dhcp | True |
| gateway_ip | 2001:db8:2222:6977::1 |
| host_routes | |
| id | 1319510d-c92c-4532-bf5d-8bcf3da761a1 |
| ip_version | 6 |
| ipv6_address_mode | slaac |
| ipv6_ra_mode | slaac |
| name | ipv6-pd-1 |
| network_id | 4b782725-6abe-4a2d-b061-763def1bb029 |
| project_id | 61b7eba037fd41f29cfba757c010faff |
| revision_number | 4 |
| service_types | |
| subnetpool_id | prefix_delegation |
| updated_at | 2017-01-25T19:35:26Z |
+-------------------+--------------------------------------+
Jika server prefix delegation dikonfigurasi untuk mendelegasikan prefiks routable global dan mengatur rute, maka setiap instance dengan port pada subnet ini sekarang harus memiliki akses jaringan eksternal.
Penghapusan antarmuka router menyebabkan subnet yang akan dikembalikan ke CIDR sementara, dan semua port memiliki IP yang diperbaruinya. Peminjaman prefiks dilepaskan dan diperpanjang secara otomatis bila diperlukan.
Link berikut memberikan langkah besar tutorial langkah demi langkah tentang pengaturan IPv6 dengan OpenStack: Tenant IPV6 deployment in OpenStack Kilo release.
Untuk mengaktifkan driver untuk ini dhcpv6_pd_agent, set pd_dhcp_driver dalam /etc/neutron/neutron.conf
:
pd_dhcp_driver = neutron_pd_agent
Untuk memungkinkan neutron-pd-agen untuk berkomunikasi dengan server prefix delegation, Anda harus mengatur jaringan yang antarmukanya digunakan untuk komunikasi eksternal. Dalam DevStack default untuk ini adalah br-ex
:
pd_interface = br-ex
Setelah Anda menumpuknya, jalankan perintah di bawah ini untuk memulai neutron-pd-agent:
neutron-pd-agent --config-file /etc/neutron/neutron.conf
Except where otherwise noted, this document is licensed under Creative Commons Attribution 3.0 License. See all OpenStack Legal Documents.