Compartilhar via

教程:通过路由表路由网络流量

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

教程中创建的 Azure 资源的图示。

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

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

先决条件

创建子网

本教程需要 DMZ 和专用子网。 DMZ 子网是用于部署 NVA 的地方,而 Private 子网则是用于部署需要路由流量的专用虚拟机的位置。 在关系图中, subnet-1 是用于公共虚拟机 的公共 子网。

创建资源组

  1. 登录到 Azure portal

  2. 在门户顶部的搜索框中输入“资源组”。 在搜索结果中选择“资源组”。

  3. 选择“+ 新建”。

  4. “创建资源组的”基本信息“选项卡中,输入或选择以下信息:

    设置
    订阅 选择订阅。
    资源组 输入 test-rg
    区域 选择“中国北部 3”。
  5. 选择“查看 + 创建”。

  6. 选择创建

创建虚拟网络

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

  2. 选择“+ 新建”。

  3. Basics 选项卡上的 Create virtual network,输入或选择以下信息:

    设置
    项目详细信息
    订阅 选择订阅。
    资源组 选择“test-rg”。
    实例详细信息
    名称 输入“vnet-1”。
    区域 选择“中国北部 3”。
  4. 选择“下一步”,转到“安全性”选项卡。

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

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

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

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

  9. 选择 + 添加子网

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

    设置
    子网详细信息
    子网模板 保留默认值“默认”。
    名称 输入 subnet-private。
    起始地址 输入10.0.2.0
    子网大小 保留默认值“/24 (256 个地址)”。
  11. 选择 添加

  12. 选择 + 添加子网

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

    设置
    子网详细信息
    子网模板 保留默认值“默认”。
    名称 输入subnet-dmz
    起始地址 输入 10.0.3.0
    子网大小 保留默认值“/24 (256 个地址)”。
  14. 选择 添加

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

部署Azure Bastion

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

注意事项

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

  1. 在门户顶部的搜索框中,输入“堡垒”。 在搜索结果中选择 Bastions

  2. 选择“+ 新建”。

  3. “创建 Bastion”“基本信息”选项卡中,输入或选择以下信息:

    设置
    项目详细信息
    订阅 选择订阅。
    资源组 选择“test-rg”。
    实例详细信息
    名称 输入堡垒
    区域 选择“中国北部 3”。
    选择 “开发人员”。
    配置虚拟网络
    虚拟网络 选择“vnet-1”。
    子网 自动创建的 AzureBastionSubnet 具有 /26 或更大的地址空间。
  4. 选择“查看 + 创建”。

  5. 选择创建

创建 NVA 虚拟机

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

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

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

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

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

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

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

  7. 选择创建

创建公用和专用虚拟机

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

创建公共虚拟机

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

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

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

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

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

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

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

  7. 选择创建

创建专用虚拟机

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

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

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

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

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

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

  7. 选择创建

启用 IP 转发

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

在Azure中启用 IP 转发

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

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

  2. Virtual machines 中,选择 vm-nva

  3. 在 vm-nva 中,展开“网络”,然后选择“网络设置”

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

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

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

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

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

  7. 选择“应用”。

在操作系统中启用 IP 转发

在本部分,请为 vm-nva 虚拟机的操作系统启用 IP 转发,以转发网络流量。 使用“运行命令”功能在虚拟机上执行脚本。

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

  2. Virtual machines 中,选择 vm-nva

  3. 展开“操作”,然后选择“运行命令”

  4. 选择 “RunShellScript”。

  5. “运行命令脚本 ”窗口中输入以下脚本:

    sudo sed -i 's/#net.ipv4.ip_forward=1/net.ipv4.ip_forward=1/' /etc/sysctl.conf
    sudo sysctl -p
    
  6. 选择运行

  7. 等待脚本完成。 输出显示已启用 IP 转发设置。

  8. 返回到 vm-nva“概述”页,然后选择“重启”以重启虚拟机。

创建路由表

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

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

  2. 选择“+ 新建”。

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

    设置
    项目详细信息
    订阅 选择订阅。
    资源组 选择“test-rg”。
    实例详细信息
    区域 选择“美国东部 2”。
    名称 输入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. 在门户顶部的搜索框中,输入“虚拟机”。 在搜索结果中选择Virtual machines

  2. Virtual machines 中,选择 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 
    

    可以看到,从 tracepathvm-private 的 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. 在门户顶部的搜索框中,输入“虚拟机”。 在搜索结果中选择Virtual machines

  2. Virtual machines 中,选择 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 portal中,搜索并选择资源组

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

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

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

后续步骤

在本教程中,你将了解:

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

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

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

若要了解如何使用虚拟网络服务终结点将网络访问限制到 PaaS 资源,请继续学习下一章节。

使用服务终结点限制网络访问