Create and use IPv6 sub-prefixes
This page describes how to divide your IPv6 public delegated prefix into sub-prefixes that you can assign to resources in specific projects. When you create a sub-prefix, your configuration includes a prefix length and a mode that determines how the IP addresses can be used.
The following modes are supported:
For further delegation (
--mode=DELEGATION): Sub-prefixes that you can further divide into smaller sub-prefixes. The associated IP addresses can't be assigned to resources until you create a non-delegation mode sub-prefix.For forwarding rules (
--mode=EXTERNAL_IPV6_FORWARDING_RULE_CREATION): Sub-prefixes that you can use as a source of regional external global unicast address (GUA) ranges for forwarding rules. You choose a prefix length for the IPv6 addresses when you create the sub-prefix. The forwarding rules can only be used for external passthrough Network Load Balancers and external protocol forwarding. Sub-prefixes in this mode can't be further delegated.For external subnet ranges (
--mode=EXTERNAL_IPV6_SUBNETWORK_CREATION): Sub-prefixes that you can use as a source of GUAs for external subnet ranges. BYOIP-provided external subnet ranges can only be used by VM instances. Sub-prefixes in this mode can't be further delegated.For internal subnet ranges (
--mode=INTERNAL_IPV6_SUBNETWORK_CREATION): Sub-prefixes that you can use as a source of GUAs for internal subnet ranges. When assigned to an internal subnet range, GUAs are used privately and aren't advertised to the internet. Sub-prefixes in this mode can't be further delegated.
The different modes support different prefix sizes and IPv6 access types. For more information, see the following section.
Sub-prefix mode configuration
The following table describes the configuration settings and requirements for each sub-prefix mode.
| Sub-prefix mode or setting | Prefix length specifications | IPv6 access type |
|---|---|---|
Sub-prefix for delegation(--mode=DELEGATION)
|
Can be the same size or smaller (have a longer prefix length) than the parent public delegated prefix The difference between the prefix length of a sub-prefix and its parent public delegated prefix can't be greater than 24 Valid lengths: |
|
Sub-prefix for external forwarding rules(--mode=EXTERNAL_IPV6_FORWARDING_RULE_CREATION)
|
Can be the same size or smaller (have a longer prefix length) than the parent public delegated prefix The difference between the prefix length of a sub-prefix and its parent public delegated prefix can't be greater than 24 Valid lengths: |
|
|
Setting: External forwarding rule allocatable prefix length
Determines the prefix length for IPv6 address ranges that are used by external forwarding rules. Specified when creating an IPv6 sub-prefix for external forwarding rules. |
Must be smaller than the associated sub-prefix—the difference between the allocatable prefix length and the sub-prefix length must be at least 8, and can't be greater than 32 Valid lengths: Default lengths:
|
|
Sub-prefix for external subnet ranges(--mode=EXTERNAL_IPV6_SUBNETWORK_CREATION)
|
Can be the same size or smaller (have a longer prefix length) than the parent public delegated prefix The difference between the prefix length of a sub-prefix and its parent public delegated prefix can't be greater than 24 Valid lengths: |
|
Sub-prefix for internal subnet ranges(--mode=INTERNAL_IPV6_SUBNETWORK_CREATION)
|
Can be the same size or smaller (have a longer prefix length) than the parent public delegated prefix The difference between the prefix length of a sub-prefix and its parent public delegated prefix can't be greater than 24 Valid lengths: |
|
Sub-prefix delegation
IPv6 sub-prefixes that are in delegation mode can be sub-delegated into smaller sub-prefixes. This lets you assign the address blocks to different projects or regions. When you sub-delegate a sub-prefix, the following applies:
- A public delegated prefix can be sub-delegated up to three times from a public advertised prefix.
- IPv6 sub-prefixes can only be sub-delegated if they are in delegation mode.
- Public delegated prefixes and sub-prefixes inherit the access type that you specify when you create a parent public advertised prefix.
- The prefix length of a delegation mode sub-prefix affects the possible modes of its child sub-prefixes. This is because a child sub-prefix must have a prefix length that is valid for its mode, and the prefix length must be the same size as or smaller than its parent.
The following example demonstrates a multi-level delegation. Each step adheres
to the prefix length and mode restrictions that are detailed in the sub-prefix
mode table. If you have an external access public advertised prefix
with IP address range 2001:db8::/32, you might do the following:
From the parent public advertised prefix, you can create one or more top-level public delegated prefixes. A top-level public delegated prefix can be the same size or smaller than its parent public advertised prefix, and it must be in delegation mode. For this example, the entire IP address range of the parent prefix is delegated (
2001:db8::/32).From the top-level public delegated prefix, you can create one or more sub-prefixes. A sub-prefix can be the same size as or smaller than its parent public delegated prefix, and it can be in any mode that's compatible with its access type. For this example, another delegation mode sub-prefix is created with IP address range
2001:db8::/48.From the previous sub-prefix, you can create one or more sub-prefixes. To make the IP addresses available for resources, these prefixes must be in a non-delegation mode such as forwarding rule or subnet creation mode. For this example, two sub-prefixes are created: one for external subnet ranges with IP address range
2001:db8:0:0::/56and one for external forwarding rules with IP address range2001:db8:1:0::/64.
At this point, you can't further divide the sub-prefixes that use the
2001:db8:0:0::/56 or 2001:db8:1:0::/64 ranges. A sub-prefix can't be
divided if it's in a non-delegation mode or if it already has three levels
of delegation from its parent public advertised prefix. In this example,
both conditions are true.
Before you begin
- Create an IPv6 public advertised prefix.
- Create an IPv6 public delegated prefix.
Roles
To get the permissions that
you need to complete the tasks in this guide,
ask your administrator to grant you the
Compute Public IP Admin (roles/compute.publicIpAdmin)
IAM role on your project.
For more information about granting roles, see Manage access to projects, folders, and organizations.
You might also be able to get the required permissions through custom roles or other predefined roles.
Create IPv6 sub-prefixes
When you create an IPv6 sub-prefix, all IP addresses in the sub-prefix are made available; there is no reserved network address or broadcast address.
You can't change the mode of a sub-prefix. If needed, you can delete it and then recreate it. Before you can delete a sub-prefix, it must not be in use by any resources.
You can't edit a sub-prefix to change its name. As a best practice,
choose generic names that don't need to change—for example,
sub-2001-db8-0-0-0-0-0-0-40, where sub denotes the resource type and
2001-db8-0-0-0-0-0-0-40 denotes the specific prefix and prefix length.
Console
In the Google Cloud console, go to Bring your own IP.
Click the public delegated prefix that you want to subdivide.
Click Create sub-prefix.
Enter a name and optional description for the sub-prefix.
In the Prefix length list, select a prefix length for the sub-prefix.
Enter an IPv6 address range to assign to the sub-prefix.
In the How this PDP will be used section, do the following:
- To create a sub-prefix for further delegation, select Subdivide into smaller PDPs.
- To create a sub-prefix with addresses that you can assign to
resources, select Allocate IPv6 address ranges for use, and then
specify how you want to use the IP addresses:
- For external forwarding rules for external passthrough Network Load Balancers and external protocol forwarding, select External Network Load Balancer forwarding rule, and then select an Allocatable prefix length.
- For external subnet ranges that can only host VMs, select External subnet range for VMs.
- For internal subnet ranges, select Internal subnet range.
In the Project menu, select the project that you want to use the sub-prefix in.
Click Create.
gcloud
Use the
gcloud compute public-delegated-prefixes create command.
gcloud compute public-delegated-prefixes create SUB_PREFIX_NAME \
--range=SUB_PREFIX_RANGE \
--mode=MODE \
--public-delegated-prefix=PDP_NAME \
--region=PDP_REGION \
--project=PROJECT_ID \
[--allocatable-prefix-length=PREFIX_LENGTH]
Replace the following:
SUB_PREFIX_NAME: a name for this sub-prefixSUB_PREFIX_RANGE: the IP address range for this sub-prefix, in CIDR notationMODE: the mode for this sub-prefix, which must be one of the following:DELEGATIONEXTERNAL_IPV6_FORWARDING_RULE_CREATIONEXTERNAL_IPV6_SUBNETWORK_CREATIONINTERNAL_IPV6_SUBNETWORK_CREATION
The mode must be compatible with the access type of the parent public delegated prefix.
PDP_NAME: the parent public delegated prefix of this sub-prefixPDP_REGION: the region for this sub-prefixPROJECT_ID: the project to delegate the sub-prefix toIf the
--projectflag is omitted, the sub-prefix is created in the same project as the parent public delegated prefix.PREFIX_LENGTH: the prefix length for the IPv6 address ranges that are used by forwarding rulesOnly use this flag with
EXTERNAL_IPV6_FORWARDING_RULE_CREATIONmode. The default and possible values depend on the prefix length ofSUB_PREFIX_RANGE. For more information, see Allocatable prefix length for forwarding rules.
Assign IPv6 subnet ranges
You can assign external or internal IPv6 subnet ranges by using sub-prefixes. IPv6 subnet ranges that are created from a sub-prefix use global unicast addresses (GUAs). The way that you can use the assigned range depends on the access type and mode of the sub-prefix:
External subnet ranges are assigned from
EXTERNAL_IPV6_SUBNETWORK_CREATIONmode sub-prefixes. BYOIP-provided external subnet ranges can only be used to reserve static external IP addresses with theVMendpoint type and assign static or ephemeral external addresses to VM instances.Internal subnet ranges are assigned from
INTERNAL_IPV6_SUBNETWORK_CREATIONmode sub-prefixes. BYOIP-provided internal subnet ranges are configured with privately used GUAs aren't advertised to the internet. The addresses can be used in the same way as a Google-provided ULA internal subnet range.
Create subnets with IPv6 BYOIP ranges
When creating a new subnet, you can allocate an IPv6 address range from your sub-prefix.
Console
In the Google Cloud console, go to the VPC networks page.
To view the VPC network details page, click the name of a VPC network.
On the Subnets tab, click Add subnet. In the panel that appears:
- Provide a name.
- Select a region.
- For IP stack type, select either IPv4 and IPv6 (dual-stack) or IPv6 (single-stack).
- If you are creating a dual-stack subnet, enter an IPv4 range.
- For IPv6 access type, select the access type of the sub-prefix that you want to assign to the subnet.
- Select the From PDP checkbox.
- In the PDP list, select the sub-prefix to use for allocating IP addresses to the subnet.
- Optional: Enter a specific IPv6 CIDR range to assign to the subnet. To let Google Cloud automatically select an address block, skip this step.
- Click Add.
gcloud
Use the gcloud compute networks subnets create command.
gcloud compute networks subnets create SUBNET \
--network=NETWORK \
--stack-type=STACK_TYPE \
--ipv6-access-type=ACCESS_TYPE \
--region=REGION \
--ip-collection=PDP_NAME \
{--external-ipv6-prefix=EXTERNAL_IPV6_RANGE | --internal-ipv6-prefix=INTERNAL_IPV6_RANGE}
[--range=PRIMARY_IPv4_RANGE]
Replace the following:
SUBNET: a name for the new subnetNETWORK: the name of the VPC network that will contain the new subnetSTACK_TYPE: the subnet's stack typeThe stack type can be
IPV4_IPV6orIPV6_ONLY. If you useIPV4_IPV6, you must specify a primary IPv4 range by using the--rangeflag.ACCESS_TYPE: the access type of the sub-prefix that you're assigning to this subnet. EnterEXTERNALto assign the subnet an external GUA subnet range. EnterINTERNALto assign the subnet a privately used internal GUA subnet range.REGION: the Google Cloud region in which the new subnet will be created, which must be the same region as this subnet's sub-prefixPDP_NAME: the name of an IPv6 sub-prefix inEXTERNAL_IPV6_SUBNETWORK_CREATIONorINTERNAL_IPV6_SUBNETWORK_CREATIONmode to use for assigning IP addresses to this subnetEXTERNAL_IPV6_RANGEorINTERNAL_IPV6_RANGE: an optional/64IPv6 CIDR range to assign to this subnetThe range must be associated with the subnet's sub-prefix. If empty, Google Cloud assigns the subnet a random
/64range from the CIDR block of the associated sub-prefix.PRIMARY_IPv4_RANGE: for dual-stack subnets, the primary IPv4 range for the new subnet, in CIDR notation
Add an IPv6 BYOIP range to an IPv4-only subnet
You can change an IPv4-only subnet into a dual-stack subnet that uses an IPv6 address range from a sub-prefix.
Console
In the Google Cloud console, go to the VPC networks page.
Click the name of the VPC network that contains the subnet to update.
Click Subnets, and then click the name of the subnet to update.
Click Edit.
In the IP stack type section, select IPv4 and IPv6 (dual-stack).
For IPv6 access type, select the access type of the sub-prefix that you want to assign to the subnet.
Click the From PDP checkbox.
In the PDP list, select the sub-prefix to use for allocating IP addresses to the subnet.
Optional: Enter a specific IPv6 address range to assign to the subnet.
Click Save.
gcloud
Use the
gcloud compute networks subnets update command.
gcloud compute networks subnets update SUBNET \
--ipv6-access-type=ACCESS_TYPE \
--stack-type=IPV4_IPV6 \
--ip-collection=PDP_NAME \
--region=REGION \
{--external-ipv6-prefix=EXTERNAL_IPV6_RANGE | --internal-ipv6-prefix=INTERNAL_IPV6_RANGE}
Replace the following:
SUBNET: a name for the new subnetACCESS_TYPE: the access type of the sub-prefix that you're assigning to this subnet. EnterEXTERNALto assign the subnet an external GUA subnet range. EnterINTERNALto assign the subnet a privately used internal GUA subnet range.PDP_NAME: the name of an IPv6 sub-prefix inEXTERNAL_IPV6_SUBNETWORK_CREATIONorINTERNAL_IPV6_SUBNETWORK_CREATIONmode to use for assigning IP addresses to this subnetREGION: the Google Cloud region in which the new subnet will be created, which must be the same region as this subnet's sub-prefixEXTERNAL_IPV6_RANGEorINTERNAL_IPV6_RANGE: an optional/64IPv6 CIDR range to assign to this subnetThe range must be associated with the subnet's sub-prefix. If empty, Google Cloud assigns the subnet a random
/64range from the CIDR block of the associated sub-prefix.
Deploy resources in subnets with IPv6 BYOIP ranges
After you create or update a subnet with a BYOIP-provided range, you can deploy resources that use the range's IP addresses.
For general information about assigning static and ephemeral IPv6 addresses to instances, see Configure IPv6 addresses for instances.
For information about assigning static external IPv6 addresses to VM instances, see the following:
For information about assigning internal IPv6 addresses to VM instances or forwarding rules, see the following:
- Internal forwarding rules
- Reserve static internal IPv6 addresses
- Configure static internal IPv6 addresses
Create external forwarding rules
You can use a sub-prefix that is in EXTERNAL_IPV6_FORWARDING_RULE_CREATION
mode to create forwarding rules with regional external IPv6 address ranges.
The forwarding rules can only be used for
external passthrough Network Load Balancers and
external protocol forwarding.
For more information, see the following:
- Create a BYOIP forwarding rule for an external passthrough Network Load Balancer with a backend service
- Create a BYOIP forwarding rule for an external passthrough Network Load Balancer for multiple IP protocols
- Create a BYOIP forwarding rule for an external passthrough Network Load Balancer with zonal NEGs
List prefixes
You can list all public advertised prefixes and public delegated prefixes (including sub-prefixes) in a project.
Console
In the Google Cloud console, go to Bring your own IP.
All public advertised prefixes, public delegated prefixes, and sub-prefixes are displayed.
gcloud
To list public delegated prefixes, including sub-prefixes, use the
public-delegated-prefixes list
command.
gcloud compute public-delegated-prefixes list