使用 Azure Resource Manager 模板将多个 IP 地址分配给虚拟机

在一个 Azure 虚拟机 (VM) 上可以附加一个或多个网络接口 (NIC)。 可为任何 NIC 分配一个或多个静态/动态的公共和专用 IP 地址。 将多个 IP 地址分配给 VM 可实现以下功能:

  • 在一台服务器上托管具有不同 IP 地址和 SSL 证书的多个网站或服务。
  • 用作网络虚拟设备,例如防火墙或负载均衡器。
  • 能够将任何 NIC 的任意专用 IP 地址添加到 Azure 负载均衡器后端池。 过去,只有主 NIC 的主 IP 地址才能添加到后端池。 若要详细了解如何对多个 IP 配置进行负载均衡,请阅读对多个 IP 配置进行负载均衡一文。

每个附加到 VM 的 NIC 都具有一个或多个与之关联的 IP 配置。 系统会为每个配置分配一个静态或动态专用 IP 地址。 每个配置还可拥有一个与之关联的公共 IP 地址资源。 系统会为公共 IP 地址资源分配一个动态或静态公共 IP 地址。 若要详细了解 Azure 中的 IP 地址,请阅读 Azure 中的 IP 地址一文。

分配给 NIC 的专用 IP 地址数目存在限制。 能够在 Azure 订阅中使用的公共 IP 地址数也存在限制。 有关详细信息,请参阅 Azure 限制一文。

本文介绍如何使用 Resource Manager 模板通过 Azure Resource Manager 部署模型创建虚拟机 (VM)。通过经典部署模型部署 VM 时,不能将多个公共和专用 IP 地址分配给同一 NIC。若要了解有关 Azure 部署模型的详细信息,请阅读了解部署模型一文。

方案

创建具有一个 NIC 的 VM,并连接到虚拟网络。 VM 需要三个不同的专用 IP 地址和两个公共 IP 地址。 IP 地址将分配到以下 IP 配置:

  • IPConfig-1:分配一个静态专用 IP 地址和一个静态公共 IP 地址。
  • IPConfig-2:分配一个静态专用 IP 地址和一个静态公共 IP 地址。
  • IPConfig-3:分配一个静态专用 IP 地址,不分配公共 IP 地址。

    多个 IP 地址

IP 配置在创建 NIC 时关联到 NIC,NIC 在创建 VM 时附加到 VM。 本方案使用的 IP 地址类型用于演示目的。 可分配需要的任何 IP 地址和分配类型。

Note

尽管本文中的步骤将所有 IP 配置都分配给一个 NIC,但也可将多个 IP 配置分配给多 NIC VM 中的任何 NIC。 若要了解如何创建具有多个 NIC 的 VM,请阅读创建具有多个 NIC 的 VM一文。

模板说明

部署模板后,即可使用不同配置值快速且一致地创建 Azure 资源。本文使用部署具有多个 IP 地址的 VM 模板。

部署模板时,会创建以下资源:

资源 名称 说明
网络接口 myNic1 在本文的方案部分描述的三个 IP 配置在创建后会分配给此 NIC。
公共 IP 地址资源 创建 2 项资源:myPublicIPmyPublicIP2 这些资源被分配了静态公共 IP 地址,并且被分配到方案中描述的 IPConfig-1IPConfig-2 IP 配置。
VM myVM1 标准 DS3 VM。
虚拟网络 myVNet1 虚拟网络,有一个名为 mySubnet 的子网。
存储帐户 特定于部署 存储帐户。

部署模板时,必须指定以下参数的值:

名称 说明
adminUsername 管理员用户名。该用户名必须符合 Azure 用户名要求
adminPassword 管理员密码 该密码必须符合 Azure 密码要求
dnsLabelPrefix PublicIPAddressName1 的 DNS 名称。DNS 名称将解析为分配给 VM 的公共 IP 地址之一。在创建 VM 时所在的 Azure 区域(位置)内,名称必须是唯一的。
dnsLabelPrefix1 PublicIPAddressName2 的 DNS 名称。DNS 名称将解析为分配给 VM 的公共 IP 地址之一。在创建 VM 时所在的 Azure 区域(位置)内,名称必须是唯一的。
OSVersion VM 的 Windows/Linux 版本。操作系统是所选的给定 Windows/Linux 版本的完整修补映像。
imagePublisher 适用于所选 VM 的 Windows/Linux 映像发布者。
imageOffer 适用于所选 VM 的 Windows/Linux 映像。

使用模板部署的每个资源都配置了多个默认设置。可通过以下某个方法查看这些设置:

  • 在 GitHub 上查看模板:如果熟悉模板,可以在模板中查看设置。
  • 查看部署后的设置:如果不熟悉模板,则可使用以下某个部分的步骤来部署模板,在部署后查看设置。

可以使用 Azure 门户、PowerShell 或 Azure 命令行接口 (CLI) 部署模板。所有方法都产生相同的结果。若要部署模板,请完成以下某个部分的步骤:

使用 Azure 门户进行部署

若要使用 Azure 门户部署模板,请完成以下步骤:

  1. 根据需要修改模板。模板部署本文的资源部分列出的资源和设置。若要详细了解模板及其创作方法,请阅读创作 Azure Resource Manager 模板一文。
  2. 使用以下方法之一部署模板:
    • 在门户中选择模板:完成从自定义模板部署资源一文中的步骤。选择名为 101-vm-multiple-ipconfig 的预先存在的模板。
    • 直接:单击下面的按钮,在门户中直接打开模板:

无论选择哪种方法,都需要为本文前面列出的参数提供值。部署 VM 后,连接到 VM 并将专用 IP 地址添加到部署的操作系统,只需完成本文将 IP 地址添加到 VM 操作系统部分的步骤即可。请勿向操作系统添加公共 IP 地址。

使用 PowerShell 进行部署

若要使用 PowerShell 部署模板,请完成以下步骤:

  1. 通过完成使用 PowerShell 部署模板一文中的步骤来部署模板。本文介绍多个用于部署模板的选项。如果选择通过 -TemplateUri parameter 进行部署,则请注意,该模板的 URI 为 https://raw.githubusercontent.com/azure/azure-quickstart-templates/master/101-vm-multiple-ipconfig/azuredeploy.json。如果选择通过 -TemplateFile 参数进行部署,则可将模板文件的内容从 GitHub 复制到计算机的新文件中。根据需要修改模板内容。模板部署本文的资源部分列出的资源和设置。若要详细了解模板及其创作方法,请阅读创作 Azure Resource Manager 模板一文。

    不管选择哪个选项来部署模板,都必须为本文参数部分列出的参数提供值。如果选择使用参数文件提供参数,请将参数文件的内容从 GitHub 复制到计算机上的新文件中。修改文件中的值。使用所创建的文件作为 -TemplateParameterFile 参数的值。

    若要确定 OSVersion、ImagePublisher 和 imageOffer 参数的有效值,请完成导航并选择 Windows VM 映像一文中的步骤。

    Tip

    如果不确定 dnslabelprefix 是否可用,请输入 Test-AzureRmDnsAvailability -DomainNameLabel <name-you-want-to-use> -Location <location> 命令进行查找。如果可用,该命令会返回 True

  2. 部署 VM 后,连接到 VM 并将专用 IP 地址添加到部署的操作系统,只需完成本文将 IP 地址添加到 VM 操作系统部分的步骤即可。请勿向操作系统添加公共 IP 地址。

使用 Azure CLI 进行部署

若要使用 Azure CLI 1.0 部署模板,请完成以下步骤:

  1. 通过完成使用 Azure CLI 部署模板一文中的步骤来部署模板。本文介绍多个用于部署模板的选项。如果选择通过 --template-uri (-f) 进行部署,则请注意,该模板的 URI 为 https://raw.githubusercontent.com/azure/azure-quickstart-templates/master/101-vm-multiple-ipconfig/azuredeploy.json。如果选择通过 --template-file (-f) 参数进行部署,则可将模板文件的内容从 GitHub 复制到计算机的新文件中。根据需要修改模板内容。模板部署本文的资源部分列出的资源和设置。若要详细了解模板及其创作方法,请阅读创作 Azure Resource Manager 模板一文。

    不管选择哪个选项来部署模板,都必须为本文参数部分列出的参数提供值。如果选择使用参数文件提供参数,请将参数文件的内容从 GitHub 复制到计算机上的新文件中。修改文件中的值。使用所创建的文件作为 --parameters-file (-e) 参数的值。

    若要确定 OSVersion、ImagePublisher 和 imageOffer 参数的有效值,请完成导航并选择 Windows VM 映像一文中的步骤。

  2. 部署 VM 后,连接到 VM 并将专用 IP 地址添加到部署的操作系统,只需完成本文将 IP 地址添加到 VM 操作系统部分的步骤即可。请勿向操作系统添加公共 IP 地址。

将 IP 地址添加到 VM 操作系统

连接并登录所创建的具有多个专用 IP 地址的 VM。 必须手动添加所有添加到 VM 的专用 IP 地址(包括主地址)。 针对 VM 操作系统完成以下步骤:

Windows

  1. 在命令提示符下,键入 ipconfig /all。 只能看到主要专用 IP 地址(通过 DHCP)。
  2. 在命令提示符下键入 ncpa.cpl,打开“网络连接”窗口。
  3. 打开相应适配器的属性:本地区域连接
  4. 双击“Internet 协议版本 4 (IPv4)”。
  5. 单击“使用下面的 IP 地址”并输入以下值:

    • IP 地址:输入 Primary 专用 IP 地址
    • 子网掩码:根据子网设置此值。 例如,如果子网为 /24 子网,则子网掩码为 255.255.255.0。
    • 默认网关:子网中的第一个 IP 地址。 如果子网为 10.0.0.0/24,则网关 IP 地址为 10.0.0.1。
    • 单击“使用下面的 DNS 服务器地址”并输入以下值:
      • 首选 DNS 服务器:如果不使用自己的 DNS 服务器,请输入 168.63.129.16。 如果使用自己的 DNS 服务器,请输入服务器的 IP 地址。
    • 单击“高级”按钮,然后添加其他 IP 地址。 使用为主 IP 地址指定的相同子网,为 NIC 添加步骤 8 中列出的每个辅助专用 IP 地址。

      Warning

      如果没有正确地遵循上述步骤,则可能会失去到 VM 的连接。 在继续之前,请确保针对第 5 步输入的信息是准确的。

    • 单击“确定”关闭“TCP/IP 设置”,然后再次单击“确定”关闭适配器设置。 将重新建立 RDP 连接。

  6. 在命令提示符下,键入 ipconfig /all。 此时将显示添加的所有 IP 地址,DHCP 已关闭。

验证 (Windows)

若要确保你能够通过关联的公共 IP 从辅助 IP 配置连接到 Internet,请在使用上述步骤正确地添加它以后,执行以下命令:

ping -S 10.0.0.5 hotmail.com

Note

对于辅助 IP 配置,仅当该配置具有与之关联的公共 IP 地址的情况下,才能 ping 到 Internet。 对于主 IP 配置,不需公共 IP 地址也可 ping 到 Internet。

Linux (Ubuntu)

  1. 打开终端窗口。
  2. 请确保以 root 用户身份操作。 如果不是,请输入以下命令:

    sudo -i
    
  3. 更新网络接口(假设为“eth0”)的配置文件。

    • 保留 dhcp 的现有行项。 主 IP 地址会保留之前的配置。
    • 使用以下命令添加其他静态 IP 地址的配置:

      cd /etc/network/interfaces.d/
      ls
      

      应会看到一个 .cfg 文件。

  4. 打开 文件。 该文件的末尾应会显示以下命令行:

    auto eth0
    iface eth0 inet dhcp
    
  5. 在此文件包含的命令行后面添加以下命令行:

    iface eth0 inet static
    address <your private IP address here>
    netmask <your subnet mask>
    
  6. 使用以下命令保存该文件:

    :wq
    
  7. 使用以下命令重置网络接口:

    sudo ifdown eth0 && sudo ifup eth0
    

    Important

    如果使用远程连接,请在同一行中同时运行 ifdown 和 ifup。

  8. 使用以下命令验证 IP 地址是否已添加到网络接口:

    ip addr list eth0
    

    应会在列表中看到添加的 IP 地址。

Linux(Redhat、CentOS 和其他操作系统)

  1. 打开终端窗口。
  2. 请确保以 root 用户身份操作。 如果不是,请输入以下命令:

    sudo -i
    
  3. 输入密码,根据提示的说明操作。 切换为 root 用户后,使用以下命令导航到网络脚本文件夹:

    cd /etc/sysconfig/network-scripts
    
  4. 使用以下命令列出相关的 ifcfg 文件:

    ls ifcfg-*
    

    应会看到其中一个文件是 ifcfg-eth0

  5. 若要添加 IP 地址,请为其创建配置文件,如下所示。 请注意,必须为每个 IP 配置创建一个文件。

    touch ifcfg-eth0:0
    
  6. 使用以下命令打开 ifcfg-eth0:0 文件:

    vi ifcfg-eth0:0
    
  7. 在此示例中,请使用以下命令向文件 eth0:0 添加内容。 请务必根据 IP 地址更新信息。

    DEVICE=eth0:0
    BOOTPROTO=static
    ONBOOT=yes
    IPADDR=192.168.101.101
    NETMASK=255.255.255.0
    
  8. 使用以下命令保存该文件:

    :wq
    
  9. 运行以下命令重新启动网络服务,确保更改成功:

    /etc/init.d/network restart
    ifconfig
    

    应会在返回的列表中看到添加的 IP 地址 eth0:0

验证 (Linux)

若要确保你能够通过关联的公共 IP 从辅助 IP 配置连接到 Internet,请执行以下命令:

ping -I 10.0.0.5 hotmail.com

Note

对于辅助 IP 配置,仅当该配置具有与之关联的公共 IP 地址的情况下,才能 ping 到 Internet。 对于主 IP 配置,不需公共 IP 地址也可 ping 到 Internet。

对于 Linux VM,在尝试验证源自辅助 NIC 的出站连接时,可能需要添加适当的路由。 可通过多种方式执行此操作。 对于 Linux 分发版,请参阅相应的文档。 下面是实现此目的的一种方法:

echo 150 custom >> /etc/iproute2/rt_tables 

ip rule add from 10.0.0.5 lookup custom
ip route add default via 10.0.0.1 dev eth2 table custom
  • 确保执行以下替换:
    • 10.0.0.5 替换为有关联的公共 IP 地址的专用 IP 地址
    • 10.0.0.1 替换为默认网关
    • eth2 替换为辅助 NIC 的名称