Amazon Virtual Private Cloud
用户指南
AWS 服务或AWS文档中描述的功能,可能因地区/位置而异。点 击 Getting Started with Amazon AWS to see specific differences applicable to the China (Beijing) Region.

迁移到 IPv6

如果您的现有 VPC 仅支持 IPv4 并且您的子网中的资源配置为仅使用 IPv4,则可为您的 VPC 和资源启用 IPv6 支持。您的 VPC 可在双堆栈模式下运行 - 您的资源可通过 IPv4 和/或 IPv6 进行通信。IPv4 和 IPv6 通信彼此独立。

您不能为 VPC 和子网禁用 IPv4 支持;这是 Amazon VPC 和 Amazon EC2 的默认 IP 寻址系统。

注意

本主题假定,您的现有 VPC 具有公有和私有子网。如果您查找有关设置新的 VPC 以用于 IPv6 的信息,请参阅适用于 Amazon VPC 的 IPv6 入门

下表概述了让您的 VPC 和子网使用 IPv6 的步骤。

步骤 备注
步骤 1:将 IPv6 CIDR 块与您的 VPC 和子网关联 将 Amazon 提供的 IPv6 CIDR 块与您的 VPC 和您的子网关联。
步骤 2:为私有子网创建并配置仅出口 Internet 网关 如果您在私有子网中使用 NAT 设备,则它不支持 IPv6 流量。因此,请为您的私有子网创建一个仅出口 Internet 网关,以启用通过 IPv6 到 Internet 的出站通信并禁止入站通信。仅出口 Internet 网关仅支持 IPv6 流量。
步骤 3:更新路由表 更新路由表以路由 IPv6 流量。对于公有子网,请创建一个将所有 IPv6 流量都从该子网路由到 Internet 网关的路由。对于私有子网,请创建一个将所有发送到 Internet 的 IPv6 流量都从该子网路由到仅出口 Internet 网关的路由。
步骤 4:更新安全组规则 将安全组规则更新为包括 IPv6 地址规则。这样,使 IPv6 流量可以流入和流出您的实例。如果您已创建自定义网络 ACL 规则来控制出入子网的流量,则必须包括 IPv6 流量规则。
步骤 5:更改实例类型 如果您的实例类型不支持 IPv6,则更改实例类型。
步骤 6:为实例分配 IPv6 地址 将 IPv6 地址分配到您的子网的 IPv6 地址范围中的实例。
(可选) 在实例中配置 IPv6 如果从未配置为使用 DHCPv6 的 AMI 中启动实例,则必须对实例进行手动配置,使其识别为实例分配的 IPv6 地址。

在迁移到使用 IPv6 之前,请确保您已了解 Amazon VPC 的 IPv6 寻址的功能:IPv4 和 IPv6 特性与限制

示例:在具有公有和私有子网的 VPC 内启用 IPv6

在此示例中,您的 VPC 有公有和私有子网。私有子网中有一个数据库实例,该实例通过 VPC 中的 NAT 网关与 Internet 进行出站通信。公有子网中有一个面向公众的 Web 服务器,它通过 Internet 网关访问 Internet。下图表示您的 VPC 架构。

 具有公有和私有子网的 VPC

您的 Web 服务器的安全组 (sg-11aa22bb) 具有以下入站规则:

Type 协议 端口范围 评论
所有流量 全部 全部 sg-33cc44dd 允许与 33cc44dd 关联的实例 (数据库实例) 的所有流量进行入站访问。
HTTP TCP 80 0.0.0.0/0 允许通过 HTTP 的 Internet 的入站流量。
HTTPS TCP 443 0.0.0.0/0 允许通过 HTTPS 的 Internet 入站流量。
SSH TCP 22 203.0.113.123/32 允许从您的本地计算机进行入站 SSH 访问;例如,在需要连接您的实例来执行管理任务时。

数据库实例的安全组 (sg-33cc44dd) 具有以下入站规则:

Type 协议 端口范围 评论
MySQL TCP 3306 sg-11aa22bb 允许与 sg-11aa22bb 关联的实例 (Web 服务器实例) 的 MySQL 流量进行入站访问。

两个安全组都有允许所有出站 IPv4 流量的默认出站规则,没有其他出站规则。

您的 Web 服务器是 t2.medium 实例类型。您的数据库服务器是 m3.large

您希望面向 IPv6 启用 VPC 和资源,需要它们在双堆栈模式下运行;换句话说,需要在 VPC 资源与 Internet 资源之间同时使用 IPv6 和 IPv4 寻址。

完成这些步骤之后,您的 VPC 将具有以下配置。

 具有公有和私有子网的 VPC

步骤 1:将 IPv6 CIDR 块与您的 VPC 和子网关联

您可将 IPv6 CIDR 块与 VPC 关联,然后将该范围内的一个 /64 CIDR 块与每个子网关联。

将 IPv6 CIDR 块与 VPC 关联

  1. 打开 Amazon VPC 控制台 https://console.amazonaws.cn/vpc/

  2. 在导航窗格中,选择 Your VPCs

  3. 选择您的 VPC,然后选择 ActionsEdit CIDRs

  4. 选择 Add IPv6 CIDR。添加 IPv6 CIDR 块之后,选择 Close

将 IPv6 CIDR 块与子网关联

  1. 打开 Amazon VPC 控制台 https://console.amazonaws.cn/vpc/

  2. 在导航窗格中,选择 Subnets

  3. 选择您的子网,选择 Subnet ActionsEdit IPv6 CIDR

  4. 选择 Add IPv6 CIDR。为子网指定十六进制对 (例如,00) 并通过选择对勾图标来确认该条目。

  5. 选择 Close。对 VPC 中的其他子网重复上述步骤。

有关更多信息,请参阅 针对 IPv6 的 VPC 和子网大小调整

步骤 2:为私有子网创建并配置仅出口 Internet 网关

仅出口 Internet 网关可通过 IPv6 实现到 Internet 的出站通信,并禁止入站通信。

创建仅出口 Internet 网关

  1. 打开 Amazon VPC 控制台 https://console.amazonaws.cn/vpc/

  2. 在导航窗格中,选择 Egress Only Internet GatewaysCreate Egress Only Internet Gateway

  3. 选择要在其中创建仅出口 Internet 网关的 VPC。选择 Create

有关更多信息,请参阅 仅出口 Internet 网关

步骤 3:更新路由表

对于公有子网,您必须更新自定义路由表,以使实例 (例如 Web 服务器) 能对 IPv6 流量使用 Internet 网关。如果您没有 Internet 网关,请参阅创建并附加 Internet 网关

对于私有子网,您必须更新自定义路由表,以使实例 (例如数据库实例) 能对 IPv6 流量使用仅出口 Internet 网关。

为公有子网更新您的路由表

  1. 打开 Amazon VPC 控制台 https://console.amazonaws.cn/vpc/

  2. 在导航窗格中,选择 Route Tables 并选择与共有子网关联的路由表。

  3. Routes 选项卡上,选择 Edit

  4. 选择 Add another route。为 Destination 指定 ::/0,为 Target 选择 Internet 网关 ID,然后选择 Save

为私有子网更新您的路由表

  1. 打开 Amazon VPC 控制台 https://console.amazonaws.cn/vpc/

  2. 在导航窗格中,选择 Route Tables 并选择与私有子网关联的路由表。

  3. Routes 选项卡上,选择 Edit

  4. 选择 Add another route。为 Destination 指定 ::/0,为 Target 选择仅出口 Internet 网关 ID,然后选择 Save

有关更多信息,请参阅 路由选项

步骤 4:更新安全组规则

对于上述示例,您的 Web 服务器安全组 (sg-11aa22bb) 允许从 IPv4 地址通过特定端口进行入站访问。您必须添加规则,以允许来自 IPv6 地址的入站访问,即来自所有 IPv6 地址的 HTTP 和 HTTPS 访问,以及来自特定 IPv6 地址的 SSH 访问 (如果适用)。您不需要对数据库安全组的入站规则进行任何更改;默认情况下,允许来自 sg-11aa22bb 的所有通信的规则包括 IPv6 通信。

更新安全组规则

  1. 打开 Amazon VPC 控制台 https://console.amazonaws.cn/vpc/

  2. 在导航窗格中,选择 Security Groups,并选择您的 Web 服务器安全组。

  3. Inbound Rules 选项卡中,选择 Edit

  4. 对于每个规则,选择 Add another rule,完成下面的操作后选择 Save

    • 对于 Type,选择 HTTP。对于 Source,输入 ::/0

    • 对于 Type,选择 HTTPS。对于 Source,输入 ::/0

    • 对于 Type,选择 SSH。对于 Source,输入本地计算机的 IPv6 地址或本地网络的地址范围。

在此方案中,当您将 IPv6 CIDR 块与 VPC 关联时,会自动向安全组添加一条允许所有 IPv6 流量的出站规则。但是,如果您修改了安全组的原始出站规则,则不会自动添加此规则,您必须为 IPv6 流量添加等效的出站规则。有关更多信息,请参阅 您的 VPC 的安全组

更新您的网络 ACL 规则

如果您将一个 IPv6 CIDR 块与您的 VPC 关联,则我们会自动向默认网络 ACL 添加规则以允许 IPv6 流量,前提是您未修改其默认规则。如果您修改了默认网络 ACL,或者使用可控制出入子网的流量的规则创建了自定义网络 ACL,则必须手动添加 IPv6 流量规则。有关包含私有和公有子网的 VPC 的推荐网络 ACL 规则的更多信息,请参阅场景 2 的推荐规则

步骤 5:更改实例类型

在此示例中,Web 服务器实例是 t2.medium 实例类型,该实例类型支持 IPv6。数据库实例是 m3.large 实例类型,该实例类型不支持 IPv6。您必须将实例大小调整为受支持的实例类型,例如 m4.large。有关更多信息,请参阅 Instance Types

要调整实例大小,请注意兼容性限制。有关更多信息,请参阅 Amazon EC2 用户指南(适用于 Linux 实例) 中的调整大小的实例的兼容性。在此方案中,如果数据库实例从使用 HVM 虚拟化的 AMI 中启动,则可使用以下步骤将其大小调整为 m4.large 实例类型。

重要

要调整实例大小,您必须先停止该实例。停止并启动实例会更改该实例的公有 IPv4 地址 (如果有)。如果实例存储卷中存储了任何数据,这些数据会被擦除。

调整实例大小

  1. 打开 Amazon EC2 控制台 https://console.amazonaws.cn/ec2/

  2. 在导航窗格中,选择 Instances,然后选择数据库实例。

  3. 依次选择 ActionsInstance StateStop

  4. 在确认对话框中,选择 Yes, Stop

  5. 在实例处于选中状态时,依次选择 ActionsInstance SettingsChange Instance Type

  6. 对于 Instance Type,选择 m4.large,然后选择 Apply

  7. 要重启已停止的实例,请选择该实例,然后依次选择 ActionsInstance StateStart。在确认对话框中,选择 Yes, Start

如果实例是由实例存储支持的 AMI,则无法使用前面的步骤调整实例大小。这种情况下,可从您的实例中创建一个实例存储支持的 AMI,然后使用新实例类型从您的 AMI 中启动新实例。有关更多信息,请参阅 Amazon EC2 用户指南(适用于 Linux 实例) 中的创建实例存储支持的 Linux AMIAmazon EC2 用户指南(适用于 Windows 实例) 中的创建实例存储支持的 Windows AMI

如果有兼容性限制,您可能无法迁移到新实例类型。例如,如果从使用 PV 虚拟化的 AMI 中启动实例,只有 C3 既支持 PV 虚拟化又支持 IPv6。此实例类型可能不适合您的需要。这种情况下,您可能必须在基础 HVM AMI 上重新安装软件,然后启动新实例。

如果从新 AMI 中启动实例,可在启动过程中为实例分配 IPv6 地址。

步骤 6:为实例分配 IPv6 地址

在确认实例类型支持 IPv6 后,可使用 Amazon EC2 控制台为实例分配 IPv6 地址。该 IPv6 地址将分配给实例的主网络接口 (eth0)。

为实例分配 IPv6 地址

  1. 打开 Amazon EC2 控制台 https://console.amazonaws.cn/ec2/

  2. 在导航窗格中,选择 Instances

  3. 选择您的实例,然后依次选择 ActionsNetworkingManage IP Addresses

  4. IPv6 Addresses下,选择 Assign new IP。您可以输入子网范围内的特定 IPv6 地址,也可以保留默认的 Auto-Assign 值,让 Amazon 为您选择一个地址。

  5. 选择 Yes, Update

或者,如果启动替代实例 (例如,如果无法调整实例大小,而是创建一个新 AMI),则可在启动过程中分配 IPv6 地址。

在启动过程中为实例分配 IPv6 地址

  1. 打开 Amazon EC2 控制台 https://console.amazonaws.cn/ec2/

  2. 选择您的 AMI 和 IPv6 兼容实例类型,然后选择 Next: Configure Instance Details

  3. Configure Instance Details 页面上,为 Network 选择一个 VPC,为 Subnet 选择一个子网。对于 Auto-assign IPv6 IP,选择 Enable

  4. 遵循向导中的剩余步骤来启动您的实例。

(可选) 在实例中配置 IPv6

如果使用 Amazon Linux 2016.09.0 或更高版本、Windows Server 2008 R2 或更高版本启动实例,则已经为 IPv6 配置实例,无需执行其他步骤。

如果从另一 AMI 中启动实例,则可能未针对 DHCPv6 进行配置,这意味着您为该实例分配的任何 IPv6 地址在主网络接口中均无法自动识别。要验证是否在您的网络接口上配置了 IPv6 地址,请在 Linux 上使用 ifconfig 命令,或在 Windows 上使用 ipconfig 命令。

可使用以下步骤配置您的实例。您需要使用公有 IPv4 地址连接到您的实例。有关更多信息,请参阅 Amazon EC2 用户指南(适用于 Linux 实例) 中的连接到您的 Linux 实例,以及 Amazon EC2 用户指南(适用于 Windows 实例) 中的连接到您的 Windows 实例

Amazon Linux

在 Amazon Linux 上配置 DHCPv6

  1. 使用实例的公有 IPv4 地址连接到您的实例。

  2. 为您的实例获取最新软件包:

    Copy
    sudo yum update -y
  3. 使用您所选的文本编辑器打开 /etc/sysconfig/network-scripts/ifcfg-eth0,找到下面这一行:

    Copy
    IPV6INIT=no

    用以下内容替换此行:

    Copy
    IPV6INIT=yes

    添加以下两行,保存更改:

    Copy
    DHCPV6C=yes DHCPV6C_OPTIONS=-nw
  4. 打开 /etc/sysconfig/network,删除下面这几行,保存更改:

    Copy
    NETWORKING_IPV6=no IPV6INIT=no IPV6_ROUTER=no IPV6_AUTOCONF=no IPV6FORWARDING=no IPV6TO4INIT=no IPV6_CONTROL_RADVD=no
  5. 打开 /etc/hosts,用下面的内容替换相关内容,保存更改:

    Copy
    127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost6 localhost6.localdomain6
  6. 重新启动您的实例。重新连接到您的实例,并使用 ifconfig 命令验证主网络接口是否可识别 IPv6 地址。

Ubuntu

您可以将 Ubuntu 实例配置为动态识别已分配给网络接口的任何 IPv6 地址。如果您的实例没有 IPv6 地址,则此配置可能会导致实例的启动时间延长多达 5 分钟。

必须作为根用户执行这些步骤。

Ubuntu Server 16

在正在运行的 Ubuntu Server 16 实例上配置 IPv6

  1. 使用实例的公有 IPv4 地址连接到您的实例。

  2. 查看 /etc/network/interfaces.d/50-cloud-init.cfg 文件的内容:

    Copy
    cat /etc/network/interfaces.d/50-cloud-init.cfg
    # This file is generated from information provided by
    # the datasource.  Changes to it will not persist across an instance.
    # To disable cloud-init's network configuration capabilities, write a file
    # /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg with the following:
    # network: {config: disabled}
    auto lo
    iface lo inet loopback
    
    auto eth0
    iface eth0 inet dhcp               

    确认已配置回环网络设备 (lo),记下网络接口的名称。在此示例中,网络接口名称为 eth0;根据实例类型,此名称可能不同。

  3. 创建文件 /etc/network/interfaces.d/60-default-with-ipv6.cfg 并添加以下行。如果需要,将 eth0 替换为在上一步中检索到的网络接口的名称。

    Copy
    iface eth0 inet6 dhcp
  4. 重启您的实例,或者通过运行以下命令重新启动网络接口。如果需要,将 eth0 替换为您的网络接口的名称。

    Copy
    sudo ifdown eth0 ; sudo ifup eth0
  5. 重新连接到您的实例,并使用 ifconfig 命令验证网络接口上是否配置了 IPv6 地址。

使用用户数据配置 IPv6

  • 您可以启动一个新的 Ubuntu 实例,并通过在启动期间指定以下用户数据来确保分配给该实例的任何 IPv6 地址在网络接口上自动进行配置。

    Copy
    #!/bin/bash echo "iface eth0 inet6 dhcp" >> /etc/network/interfaces.d/60-default-with-ipv6.cfg dhclient -6

    在这种情况下,您无需连接到该实例来配置 IPv6 地址。

    有关更多信息,请参阅 Amazon EC2 用户指南(适用于 Linux 实例) 中的启动时在 Linux 实例上运行命令

Ubuntu Server 14

如果您使用 Ubuntu Server 14,则必须提供针对在重启双堆栈网络接口时发生的已知问题的解决方法 (重启导致超时延长,在此期间无法访问您的实例)。

必须作为根用户执行这些步骤。

在正在运行的 Ubuntu Server 14 实例上配置 IPv6

  1. 使用实例的公有 IPv4 地址连接到您的实例。

  2. 编辑 /etc/network/interfaces.d/eth0.cfg 文件,使之包含以下内容:

    Copy
    auto lo iface lo inet loopback auto eth0 iface eth0 inet dhcp up dhclient -6 $IFACE
  3. 重启您的实例:

    Copy
    sudo reboot
  4. 重新连接到您的实例,并使用 ifconfig 命令验证网络接口上是否配置了 IPv6 地址。

启动 DHCPv6 客户端

或者,要在不执行任何额外配置的情况下立即为网络接口添加 IPv6 地址,您可以启动实例的 DHCPv6 客户端。但是,重启后,IPv6 地址不会持久保留在网络接口上。

在 Ubuntu 上启动 DHCPv6 客户端

  1. 使用实例的公有 IPv4 地址连接到您的实例。

  2. 启动 DHCPv6 客户端:

    Copy
    sudo dhclient -6
  3. 使用 ifconfig 命令确认主网络接口是否可识别该 IPv6 地址。

RHEL/CentOS

RHEL 7.4 使用 cloud-init 配置您的网络接口并生成 /etc/sysconfig/network-scripts/ifcfg-eth0 文件。您可以创建自定义 cloud-init 配置文件来启用 DHCPv6,以便生成一个具有会在每次重启后启用 DHCPv6 的设置的 ifcfg-eth0 文件。

在 RHEL 7.4 上配置 DHCPv6

  1. 使用实例的公有 IPv4 地址连接到您的实例。

  2. 使用您选择的文本编辑器创建自定义文件,例如:

    Copy
    /etc/cloud/cloud.cfg.d/99-custom-networking.cfg
  3. 向您的文件中添加以下各行,并保存所做更改:

    Copy
    network: version: 1 config: - type: physical name: eth0 subnets: - type: dhcp6
  4. 重新启动您的实例。

  5. 重新连接到您的实例,并使用 ifconfig 命令验证网络接口上是否配置了 IPv6 地址。

对于 RHEL 7.3 版和更早版本,您可以使用以下过程直接修改 /etc/sysconfig/network-scripts/ifcfg-eth0 文件。

在 RHEL 7.3 和更早版本或 CentOS 7 上配置 DHCPv6

  1. 使用实例的公有 IPv4 地址连接到您的实例。

  2. 使用您所选的文本编辑器打开 /etc/sysconfig/network-scripts/ifcfg-eth0,找到下面这一行:

    Copy
    IPV6INIT="no"

    用以下内容替换此行:

    Copy
    IPV6INIT="yes"

    添加以下两行,保存更改:

    Copy
    DHCPV6C=yes NM_CONTROLLED=no
  3. 打开 /etc/sysconfig/network,按如下所示添加或修改以下行,然后保存更改:

    Copy
    NETWORKING_IPV6=yes
  4. 通过运行以下命令在您的实例上重启联网:

    Copy
    sudo service network restart

    您可以使用 ifconfig 命令验证主网络接口是否可识别 IPv6 地址。

在 RHEL 6 或 CentOS 6 上配置 DHCPv6

  1. 使用实例的公有 IPv4 地址连接到您的实例。

  2. 按照上面过程中的步骤 2 - 4 操作以配置 RHEL 7/CentOS 7。

  3. 如果您重启联网,并且收到指示无法获取 IPv6 地址的错误,则打开 /etc/sysconfig/network-scripts/ifup-eth 并找到以下行 (默认情况下是行 327):

    Copy
    if /sbin/dhclient "$DHCLIENTARGS"; then

    删除 $DHCLIENTARGS 两侧的引号并保存更改。在您的实例上重启联网:

    Copy
    sudo service network restart

Windows

使用以下过程在 Windows Server 2003 和 Windows Server 2008 SP2 上配置 IPv6。

要确保 IPv6 优先于 IPv4,请从以下 Microsoft 支持页面下载一个名为 Prefer IPv6 over IPv4 in prefix policies 的修补程序:https://support.microsoft.com/en-us/help/929852/how-to-disable-ipv6-or-its-components-in-windows

在 Windows Server 2003 上启用和配置 IPv6

  1. 通过使用 describe-instances AWS CLI 命令或通过在 Amazon EC2 控制台中选中实例对应的 IPv6 IPs 字段来获取实例的 IPv6 地址。

  2. 使用实例的公有 IPv4 地址连接到您的实例。

  3. 从您的实例中依次选择开始控制面板网络连接本地连接

  4. 选择属性,然后选择安装

  5. 选择协议,然后选择添加。在网络协议列表中选择 Microsoft TCP/IP 版本 6,然后选择确定

  6. 打开命令提示符并打开 Network shell。

    Copy
    netsh
  7. 切换到 interface IPv6 上下文。

    Copy
    interface ipv6
  8. 使用以下命令,将 IPv6 地址添加至本地连接。使用您的实例的 IPv6 地址替换该 IPv6 地址的值。

    Copy
    add address "Local Area Connection" "ipv6-address"

    例如:

    Copy
    add address "Local Area Connection" "2001:db8:1234:1a00:1a01:2b:12:d08b"
  9. 退出 Network shell。

    Copy
    exit
  10. 使用 ipconfig 命令确认本地连接是否可识别该 IPv6 地址。

在 Windows Server 2008 SP2 上启用和配置 IPv6

  1. 通过使用 describe-instances AWS CLI 命令或通过在 Amazon EC2 控制台中选中实例对应的 IPv6 IPs 字段来获取实例的 IPv6 地址。

  2. 使用实例的公有 IPv4 地址连接到您的 Windows 实例。

  3. 选择开始控制面板

  4. 打开网络和共享中心,然后打开网络连接

  5. 右键单击局域网 (对于网络接口) 并选择属性

  6. 选中 Internet 协议版本 6 (TCP/IPv6) 复选框,然后选择确定

  7. 再次打开本地网络的属性对话框。依次选择 Internet 协议版本 6 (TCP/IPv6)属性

  8. 选择使用下列 IPv6 地址并执行以下操作:

    • 对于 IPv6 地址,输入您在步骤 1 中获取的 IPv6 地址。

    • 对于子网前缀长度,输入 64

  9. 选择确定,关闭属性对话框。

  10. 打开命令提示符。使用 ipconfig 命令确认本地连接是否可识别该 IPv6 地址。