教程:使用 Azure 门户通过路由表路由网络流量

默认情况下,Azure 会在虚拟网络中的所有子网之间路由流量。 可以创建自己的路由来覆盖 Azure 的默认路由。 自定义路由非常有用,例如,它可以让你通过网络虚拟设备 (NVA) 在子网之间路由流量。

学习教程期间所创建 Azure 资源的示意图。

本教程介绍如何执行下列操作:

  • 创建虚拟网络和子网
  • 创建用于流量路由的 NVA
  • 将虚拟机 (VM) 部署到不同子网
  • 创建路由表
  • 创建路由
  • 将路由表关联到子网
  • 通过 NVA 将从一个子网的流量路由到另一个子网

先决条件

登录 Azure

登录 Azure 门户

创建虚拟网络和堡垒主机

以下过程创建包含资源子网、Azure Bastion 子网和 Azure Bastion 主机的虚拟网络。

  1. 在门户中,搜索并选择“虚拟网络”。

  2. 在“虚拟网络”页面上,选择“+ 创建”。

  3. 创建虚拟网络基本信息选项卡上输入或选择以下信息:

    设置
    项目详细信息
    订阅 选择订阅。
    资源组 选择“新建”。
    在“名称”中输入“test-rg”。
    选择“确定”。
    实例详细信息
    名称 输入“vnet-1”。
    区域 选择“(亚太)中国东部 2”。

    Azure 门户中“创建虚拟网络”的“基本信息”选项卡的屏幕截图

  4. 选择“下一步”,转到“安全性”选项卡。

  5. 在“安全性”选项卡的“Azure Bastion”部分中,选择“启用 Bastion”。

    Azure Bastion 使用浏览器通过安全外壳 (SSH) 或远程桌面协议 (RDP),通过使用其专用 IP 地址连接虚拟网络中的虚拟机。 虚拟机不需要公共 IP 地址、客户端软件或特殊配置。 有关 Azure Bastion 的详细信息,请参阅 Azure Bastion

    注意

    每小时定价从部署 Bastion 的时刻开始计算,无论出站数据的使用情况如何。 有关详细信息,请参阅定价SKU。 如果要将 Bastion 部署为教程或测试的一部分,建议在此资源使用完成后将其删除。

  6. 在“Azure Bastion”中,输入或选择以下信息:

    设置
    Azure Bastion 主机名 输入“堡垒”。
    Azure Bastion 公共 IP 地址 选择“创建公共 IP 地址”。
    在“名称”中输入“public-ip”。
    选择“确定”。

    在 Azure 门户的“创建虚拟网络”中启用堡垒主机的屏幕截图。

  7. 选择下一步,转到IP 地址选项卡。

  8. 在“子网”的地址空间框中,选择“默认”子网。

  9. 编辑子网中,输入或选择以下信息:

    设置
    子网详细信息
    子网模板 保留默认值“默认”。
    名称 输入“subnet-1”。
    开始地址 保留默认值“10.0.0.0”。
    子网大小 保留默认值/24 (256 个地址)

    默认子网重命名和配置的屏幕截图。

  10. 选择“保存”。

  11. 选择屏幕底部的“查看 + 创建”,然后在验证通过时选择“创建”。

创建子网

本教程需要“外围网络”和“专用”子网。 “外围网络”子网是部署 NVA 的位置,而“专用”子网是部署要将流量路由到的虚拟机的位置。 subnet-1 是在前面的步骤中创建的子网。 对公共虚拟机使用 subnet-1。

  1. 在门户顶部的搜索框中,输入“虚拟网络”。 在搜索结果中,选择“虚拟网络”。

  2. 在“虚拟网络”中,选择“vnet-1”。

  3. 在 vnet-1 中,从“设置”部分选择“子网”。

  4. 在虚拟网络的子网列表中,选择“子网”。

  5. 在“添加子网”中,输入或选择以下信息:

    设置
    名称 输入 subnet-private。
    子网地址范围 输入 10.0.2.0/24

    屏幕截图显示如何在虚拟网络中创建专用子网。

  6. 选择“保存”。

  7. 选择“+ 子网”。

  8. 在“添加子网”中,输入或选择以下信息:

    设置
    名称 输入“subnet-dmz”。
    子网地址范围 输入“10.0.3.0/24”。

    屏幕截图显示如何在虚拟网络中创建外围网络子网。

  9. 选择“保存”。

创建 NVA 虚拟机

网络虚拟设备 (NVA) 是帮助提供网络功能(例如路由和防火墙优化)的虚拟机。 在本部分,请使用 Ubuntu 22.04 虚拟机创建 NVA。

  1. 在门户顶部的搜索框中,输入“虚拟机”。 在搜索结果中,选择“虚拟机”。

  2. 选择“+ 创建”,然后选择“Azure 虚拟机”。

  3. 在“创建虚拟机”的“基本信息”选项卡中,输入或选择以下信息:

    设置
    项目详细信息
    订阅 选择订阅。
    资源组 选择“test-rg”。
    实例详细信息
    虚拟机名称 输入 vm-nva
    区域 选择“中国北部 2”
    可用性选项 选择“无需基础结构冗余”。
    安全类型 选择“标准”。
    映像 选择“Ubuntu Server 22.04 LTS - x64 Gen2”。
    VM 架构 保留默认值“x64”。
    大小 选择一个大小。
    管理员帐户
    身份验证类型 选择密码
    用户名 输入用户名。
    Password 输入密码。
    确认密码 重新输入密码。
    入站端口规则
    公共入站端口 选择“无”。
  4. 选择“下一步: 磁盘”,然后选择“下一步: 网络”。

  5. 在“网络”中,输入或选择以下信息:

    设置
    网络接口
    虚拟网络 选择“vnet-1”。
    子网 选择“subnet-dmz (10.0.3.0/24)”。
    公共 IP 选择
    NIC 网络安全组 选择“高级”。
    配置网络安全组 选择“新建”。
    在“名称”中,输入 nsg-nva
    选择“确定”。
  6. 将其余选项保留为默认值,然后选择“查看 + 创建”。

  7. 选择创建

创建公共和专用虚拟机

在 vnet-1 虚拟网络中创建两个虚拟机。 一个虚拟机位于 subnet-1 子网中,另一个虚拟机位于 subnet-private 子网中。 对两个虚拟机使用相同的虚拟机映像。

创建公共虚拟机

公共虚拟机用于模拟公共 Internet 中的计算机。 公共和专用虚拟机用于测试通过 NVA 虚拟机的网络流量路由。

  1. 在门户顶部的搜索框中,输入“虚拟机”。 在搜索结果中,选择“虚拟机”。

  2. 选择“+ 创建”,然后选择“Azure 虚拟机”。

  3. 在“创建虚拟机”的“基本信息”选项卡中,输入或选择以下信息:

    设置
    项目详细信息
    订阅 选择订阅。
    资源组 选择“test-rg”。
    实例详细信息
    虚拟机名称 输入“vm-public”。
    区域 选择“中国北部 2”
    可用性选项 选择“无需基础结构冗余”。
    安全类型 选择“标准”。
    映像 选择“Ubuntu Server 22.04 LTS - x64 Gen2”。
    VM 架构 保留默认值“x64”。
    大小 选择一个大小。
    管理员帐户
    身份验证类型 选择密码
    用户名 输入用户名。
    Password 输入密码。
    确认密码 重新输入密码。
    入站端口规则
    公共入站端口 选择“无”。
  4. 选择“下一步: 磁盘”,然后选择“下一步: 网络”。

  5. 在“网络”中,输入或选择以下信息:

    设置
    网络接口
    虚拟网络 选择“vnet-1”。
    子网 选择“subnet-1 (10.0.0.0/24)”。
    公共 IP 选择
    NIC 网络安全组 选择“无”。
  6. 将其余选项保留为默认值,然后选择“查看 + 创建”。

  7. 选择创建

创建专用虚拟机

  1. 在门户顶部的搜索框中,输入“虚拟机”。 在搜索结果中,选择“虚拟机”。

  2. 选择“+ 创建”,然后选择“Azure 虚拟机”。

  3. 在“创建虚拟机”的“基本信息”选项卡中,输入或选择以下信息:

    设置
    项目详细信息
    订阅 选择订阅。
    资源组 选择“test-rg”。
    实例详细信息
    虚拟机名称 输入vm-private
    区域 选择“中国北部 2”
    可用性选项 选择“无需基础结构冗余”。
    安全类型 选择“标准”。
    映像 选择“Ubuntu Server 22.04 LTS - x64 Gen2”。
    VM 架构 保留默认值“x64”。
    大小 选择一个大小。
    管理员帐户
    身份验证类型 选择密码
    用户名 输入用户名。
    Password 输入密码。
    确认密码 重新输入密码。
    入站端口规则
    公共入站端口 选择“无”。
  4. 选择“下一步: 磁盘”,然后选择“下一步: 网络”。

  5. 在“网络”中,输入或选择以下信息:

    设置
    网络接口
    虚拟网络 选择“vnet-1”。
    子网 选择“subnet-private (10.0.2.0/24)”。
    公共 IP 选择
    NIC 网络安全组 选择“无”。
  6. 将其余选项保留为默认值,然后选择“查看 + 创建”。

  7. 选择创建

启用 IP 转发

若要通过 NVA 路由流量,请在 Azure 中和 vm-nva 的操作系统中启用 IP 转发。 启用 IP 转发后,vm-nva 收到的任何发往不同 IP 地址的流量都不会被丢弃,而是会被转发到正确的目标。

在 Azure 中启用 IP 转发

在本部分,请为 vm-nva 虚拟机的网络接口启用 IP 转发。

  1. 在门户顶部的搜索框中,输入“虚拟机”。 在搜索结果中,选择“虚拟机”。

  2. 在“虚拟机”中,选择“vm-nva”。

  3. 在 vm-nva 的“设置”部分选择“网络”。

  4. 选择“网络接口:”旁边的接口名称。 该名称以 vm-nva 开头,为接口分配了一个随机编号。 此示例中的接口名称为 vm-nva124。

    NVA 虚拟机的网络接口的屏幕截图。

  5. 在网络接口概述页上的“设置”部分,选择“IP 配置”。

  6. 在“IP 配置”中,选中“启用 IP 转发”旁边的框。

    屏幕截图显示如何启用 IP 转发。

  7. 选择“应用”。

在操作系统中启用 IP 转发

在本部分,请为 vm-nva 虚拟机的操作系统启用 IP 转发,以转发网络流量。 使用 Azure Bastion 服务连接到 vm-nva 虚拟机。

  1. 在门户顶部的搜索框中,输入“虚拟机”。 在搜索结果中,选择“虚拟机”。

  2. 在“虚拟机”中,选择“vm-nva”。

  3. 在“操作”部分选择“Bastion”。

  4. 输入创建虚拟机时输入的用户名和密码。

  5. 选择“连接” 。

  6. 在虚拟机的提示符处输入以下信息以启用 IP 转发:

    sudo vim /etc/sysctl.conf
    
  7. 在 Vim 编辑器中,删除 net.ipv4.ip_forward=1 行中的 #

    按 Insert 键。

    # Uncomment the next line to enable packet forwarding for IPv4
    net.ipv4.ip_forward=1
    

    按 Esc 键。

    输入 :wq,然后按 Enter

  8. 关闭 Bastion 会话。

  9. 重启虚拟机。

创建路由表

在本部分,请创建一个路由表来定义通过 NVA 虚拟机的流量的路由。 该路由表与部署了 vm-public 虚拟机的 subnet-1 子网关联。

  1. 在门户顶部的搜索框中,输入“路由表”。 在搜索结果中选择“路由表”。

  2. 选择“+ 新建”。

  3. 在“创建路由表”中,输入或选择以下信息:

    设置
    项目详细信息
    订阅 选择订阅。
    资源组 选择“test-rg”。
    实例详细信息
    区域 选择“中国东部”。
    名称 输入“route-table-public”。
    传播网关路由 保留默认值“是”。
  4. 选择“查看 + 创建”。

  5. 选择“创建”。

创建路由

在本部分,请在前面步骤中创建的路由表中创建路由。

  1. 在门户顶部的搜索框中,输入“路由表”。 在搜索结果中选择“路由表”。

  2. 选择“route-table-public”。

  3. 在“设置”中选择“路由”。

  4. 在“路由”中选择“+ 添加”。

  5. 在“添加路由”中,输入或选择以下信息:

    设置
    路由名称 输入“to-private-subnet”。
    目标类型 选择“IP 地址”。
    目标 IP 地址/CIDR 范围 输入 10.0.2.0/24
    下一跃点类型 选择“虚拟设备”。
    下一跃点地址 输入“10.0.3.4”。
    这是你在前面的步骤中创建的 vm-nva 的 IP 地址。

    屏幕截图显示如何在路由表中创建路由。

  6. 选择 添加

  7. 在“设置”中选择“子网”。

  8. 选择“+ 关联”。

  9. 在“关联子网”中,输入或选择以下信息:

    设置
    虚拟网络 选择 vnet-1 (test-rg)
    子网 选择 subnet-1
  10. 选择“确定”

测试网络流量的路由

测试从 vm-public 到 vm-private 的网络流量的路由。 测试从 vm-private 到 vm-public 的网络流量的路由。

测试从 vm-public 到 vm-private 的网络流量

  1. 在门户顶部的搜索框中,输入“虚拟机”。 在搜索结果中,选择“虚拟机”。

  2. 在“虚拟机”中,选择“vm-public”。

  3. 在“操作”部分选择“Bastion”。

  4. 输入创建虚拟机时输入的用户名和密码。

  5. 选择“连接” 。

  6. 在提示符中,输入以下命令来跟踪从 vm-public 到 vm-private 的网络流量的路由:

    tracepath vm-private
    

    其响应类似于如下示例:

    azureuser@vm-public:~$ tracepath vm-private
     1?: [LOCALHOST]                      pmtu 1500
     1:  vm-nva.internal.chinacloudapp.cn                          1.766ms 
     1:  vm-nva.internal.chinacloudapp.cn                          1.259ms 
     2:  vm-private.internal.chinacloudapp.cn                      2.202ms reached
     Resume: pmtu 1500 hops 2 back 1 
    

    可以看到,对于从 vm-public 到 vm-private 的 tracepath ICMP 流量,上述响应中有两个跃点。 第一个跃点为 vm-nva。 第二个跃点是目标 vm-private。

    Azure 通过 NVA 发送来自 subnet-1 的流量,而不是直接发送到 subnet-private,原因是你之前已将 to-private-subnet 路由添加到 route-table-public,并将其关联到了 subnet-1。

  7. 关闭 Bastion 会话。

测试从 vm-private 到 vm-public 的网络流量

  1. 在门户顶部的搜索框中,输入“虚拟机”。 在搜索结果中,选择“虚拟机”。

  2. 在“虚拟机”中,选择“vm-private”。

  3. 在“操作”部分选择“Bastion”。

  4. 输入创建虚拟机时输入的用户名和密码。

  5. 选择“连接” 。

  6. 在提示符中,输入以下命令来跟踪从 vm-private 到 vm-public 的网络流量的路由:

    tracepath vm-public
    

    其响应类似于如下示例:

    azureuser@vm-private:~$ tracepath vm-public
     1?: [LOCALHOST]                      pmtu 1500
     1:  vm-public.internal.chinacloudapp.cn                       2.584ms reached
     1:  vm-public.internal.chinacloudapp.cn                       2.147ms reached
     Resume: pmtu 1500 hops 1 back 2 
    

    可以看到上述响应中有一个跃点,即目标 vm-public。

    Azure 将流量直接从 subnet-private 发送到了 subnet-1。 默认情况下,Azure 直接在子网之间路由流量。

  7. 关闭 Bastion 会话。

清理资源

使用创建的资源之后,可以删除资源组及其所有资源。

  1. 在 Azure 门户中,搜索并选择“资源组”。

  2. 在“资源组”页上,选择“test-rg”资源组。

  3. 在“test-rg”页上,选择“删除资源组”。

  4. 在“输入资源组名称以确认删除”中输入“test-rg”,然后选择“删除”。

后续步骤

在本教程中,你将了解:

  • 创建了一个路由表并将其关联到了某个子网。

  • 创建简单 NVA,用于将流量从公共子网路由到专用子网。

若要了解有关路由的详细信息,请参阅路由概述管理路由表

若要了解如何通过虚拟网络服务终结点限制对 PaaS 资源的网络访问,请继续学习下一教程。