将本地网络连接到Azure虚拟网络以创建混合网络时,需要控制对Azure网络资源的访问,作为总体安全计划的一部分。
Azure 防火墙和防火墙策略通过使用定义允许和拒绝的网络流量的规则来控制混合网络中的网络访问。
在本教程中,请创建三个虚拟网络:
- VNet-Hub - 防火墙位于此虚拟网络中。
- VNet-Spoke - 辐射虚拟网络表示部署在 Azure 上的工作负载。
- VNet-Onprem - 本地虚拟网络代表本地网络。 在实际部署中,可以使用 VPN 或 ExpressRoute 连接进行连接。 为简单起见,本教程使用 VPN 网关连接,Azure定位的虚拟网络表示本地网络。
本教程介绍如何执行下列操作:
- 创建防火墙中心虚拟网络
- 创建分支虚拟网络
- 创建本地虚拟网络
- 配置和部署防火墙和策略
- 创建并连接 VPN 网关
- 将中心和分支虚拟网络对等互连
- 创建路由
- 创建虚拟机
- 测试防火墙
若要改用Azure PowerShell,请参阅使用 Azure PowerShell 在混合网络中部署和配置Azure 防火墙。
先决条件
混合网络使用中心和分支型网络体系结构模型在 Azure 虚拟网络与本地网络之间路由流量。 中心辐射型网络体系结构具有以下要求:
- 若要使辐射型子网流量通过中心防火墙进行路由,请使用将流量指向该防火墙的用户定义路由 (UDR),并禁用 虚拟网络网关路由传播 选项。 禁用了“虚拟网关路由传播”选项可防止将路由分配到分支子网。 此选项可防止已学习到的路由与你的 UDR 发生冲突。 如果要保持虚拟网络网关路由传播处于启用状态,请确保定义指向防火墙的特定路由,以覆盖从本地网络通过 BGP 发布的那些路由。
- 在中心网关子网上配置一个指向防火墙 IP 地址的 UDR,将其作为通向附属网络的下一跃点。 无需在 Azure 防火墙子网中创建 UDR,因为它会从 BGP 探测路由。
若要了解如何创建这些路由,请参阅本教程中的 “创建路由 ”。
注意
Azure 防火墙必须具有直接的 Internet 连接。 如果 AzureFirewallSubnet 通过 BGP 学习到指向本地部署网络的默认路由,则必须使用一个 0.0.0.0/0 UDR,并将 NextHopType 的值设置为 Internet,以覆盖该路由并保持与 Internet 的直接连接。
可以将 Azure 防火墙配置为支持强制隧道。 有关详细信息,请参阅 Azure 防火墙强制隧道。
注意
即使 UDR 将 Azure 防火墙 指定为默认网关,直接对等互连的虚拟网络之间的流量仍会直接路由。 若要在此方案中将子网到子网流量发送到防火墙,UDR 必须在这两个子网上显式地包含目标子网网络前缀。
如果没有 Azure 订阅,请在开始前创建一个试用版订阅。
创建防火墙中心虚拟网络
首先,创建用于存储本教程资源的资源组:
- 登录 Azure 门户。
- 在 Azure 门户主页上,选择资源组>然后创建。
- 对于订阅,请选择您的订阅选项。
- 对于 资源组名称,请输入 FW-Hybrid-Test。
- 对于 Region,请选择 China East 2。 以后创建的所有资源必须位于同一位置。
- 选择查看 + 创建,然后选择创建。
接下来,创建虚拟网络:
注意
AzureFirewallSubnet 子网的大小为 /26。 有关子网大小的详细信息,请参阅 Azure 防火墙常见问题解答。
- 在 Azure 门户主页上,选择“创建资源”。
- 在“ 网络”下,选择 “虚拟网络”,然后选择“ 创建”。
- 对于“资源组”,请选择“FW-Hybrid-Test”。
- 对于 “名称”,请输入 VNet-hub。
- 在“安全性”选项卡上,选择“下一步”。
- 对于 IPv4 地址空间,请输入 10.5.0.0/16。
- 在“子网”下,选择“默认值”。
- 对于子网用途,请选择Azure 防火墙。
- 对于 起始地址,请输入 10.5.0.0/26。
- 选择“保存”,选择“查看 + 创建”,然后选择“创建”。
为网关创建第二个子网。
- 在“VNet-hub”页上,选择“子网”。
- 选择“+子网”。
- 对于子网用途,请选择虚拟网络网关。
- 对于 起始地址,请输入 10.5.2.0/26。
- 选择 添加 。
创建分支虚拟网络
- 在 Azure 门户主页上,选择“创建资源”。
- 在 “网络”中,选择 “虚拟网络”,然后选择“ 创建”。
- 对于“资源组”,请选择“FW-Hybrid-Test”。
- 在名称中,输入VNet-Spoke。
- 对于 Region,请选择 China East 2。
- 选择下一步。 在“安全性”选项卡上,选择“下一步”。
- 对于 IPv4 地址空间,请输入 10.6.0.0/16。
- 在“子网”下,选择“默认值”。
- 对于 名称 字段,输入 SN-Workload。
- 对于 起始地址,请输入 10.6.0.0/24。
- 选择“保存”,选择“查看 + 创建”,然后选择“创建”。
创建本地虚拟网络
- 在 Azure 门户主页上,选择“创建资源”。
- 在 “网络”中,选择 “虚拟网络”,然后选择“ 创建”。
- 对于“资源组”,请选择“FW-Hybrid-Test”。
- 对于 名称,请输入 VNet-OnPrem。
- 对于 Region,请选择 China East 2。
- 选择下一步。 在“安全性”选项卡上,选择“下一步”。
- 对于 IPv4 地址空间,请输入 192.168.0.0/16。
- 在“子网”下,选择“默认值”。
- 对于“名称”,输入 SN-Corp。
- 对于 起始地址,请输入 192.168.1.0/24。
- 选择“保存”,选择“查看 + 创建”,然后选择“创建”。
为网关创建第二个子网。
- 在 VNet-OnPrem 页上,选择 “子网”。
- 选择“+子网”。
- 对于子网用途,请选择虚拟网络网关。
- 对于 起始地址,请输入 192.168.2.0/24。
- 选择 添加 。
配置和部署防火墙
将防火墙部署到防火墙中心虚拟网络。
在 Azure 门户主页上,选择“创建资源”。
搜索 防火墙,从结果中选择它,然后选择“ 创建”。
在 “创建防火墙”上,使用下表配置防火墙:
设置 值 订阅 <您的订阅> 资源组 FW-Hybrid-Test 名称 AzFW01 区域 中国东部 防火墙层 标准 防火墙管理 使用防火墙策略来管理此防火墙 防火墙策略 添加新项:
hybrid-test-pol
中国东部选择虚拟网络 使用现有的:
VNet-hub公共 IP 地址 添加新项:
fw-pip对于本教程的直接互联网配置,取消选中启用防火墙管理网卡,然后选择下一步:高级。
在本教程中,将启用 NAT 网关保留为未选中。 要在防火墙创建时配置 StandardV2 NAT 网关,请参见“与 Azure 防火墙 集成 NAT 网关。
选择 下一步:标签,然后选择 下一步:评论 + 创建。 检查设置,然后选择创建。
部署需要几分钟时间。
部署完成后,转到 FW-Hybrid-Test 资源组,然后选择 AzFW01 防火墙。
记下专用 IP 地址。 稍后在创建默认路由时需要用到它。
配置网络规则
首先,添加一个网络规则以允许 Web 流量。
- 从“FW-Hybrid-Test”资源组选择“hybrid-test-pol”防火墙策略 。
- 在“设置”下选择“网络规则”。
- 选择“添加规则集合”。
- 对于 Name,请输入
RCNet01。 - 对于 优先级,请输入
100。 - 对于规则集合操作,请选择允许。
- 在 “规则”下,对于 “名称”,请输入
AllowWeb。 - 对于源类型,请选择“IP 地址”。
- 对于“源”,请输入 。
- 对于“协议”,请选择“TCP”。
- 对于目标端口,输入
80。 - 对于“目标类型”,请选择“IP 地址” 。
- 对于目标,输入
10.6.0.0/16。 - 选择 添加 。
创建并连接 VPN 网关
中心和本地虚拟网络通过 VPN 网关进行连接。
创建 VPN 网关
为中心和本地虚拟网络创建 VPN 网关。 网络到网络配置需要 RouteBased VpnType。 创建 VPN 网关通常需要 45 分钟或更长时间,具体取决于所选 VPN 网关的 SKU。
对于每个网关,请根据表中的值重复执行以下步骤。
| 设置 | 中心网关 | 本地网关 |
|---|---|---|
| 名称 | GW-hub | GW-Onprem |
| 虚拟网络 | VNet-hub | VNet-Onprem |
| 公共 IP 地址 | VNet-hub-GW-pip | VNet-Onprem-GW-pip |
| 第二个公共 IP 地址 | VNet-hub-GW-pip2 | VNet-Onprem-GW-pip2 |
- 在 Azure 门户主页上,选择“创建资源”。
- 在搜索框中,键入 虚拟网络网关 ,然后按 Enter。
- 选择虚拟网络网关,然后选择创建。
- 输入表格中的Name。
- 对于“区域”,请选择前面使用的同一区域。
- 对于“网关类型”,请选择“VPN”。
- 对于 SKU,选择 VpnGw1AZ。 新部署需要使用支持可用性区域的 SKU。 更多信息请参见VPN 网关 SKU整合。
- 从表中选择 虚拟网络 。
- 将 启用主动-激活模式 设置为 启用 ,使每个网关拥有表中列出的两个公共IP地址。
- 对于 公共 IP 地址,请选择“ 新建”,然后输入表中的名称。
- 对于 第二个公共 IP 地址,请选择“ 新建”,然后输入表中的名称。
- 接受其余默认值,选择 “查看 + 创建”,然后选择“ 创建”。
创建 VPN 连接
在中心和本地网关之间创建 VPN 连接。 每个方向都需要一条连接,并且双方的共享密钥必须一致。
使用表中的值对每个连接重复以下步骤。
| 设置 | 中心到本地 | 本地到中心 |
|---|---|---|
| 待打开的网关 | GW-hub | GW-Onprem |
| 连接名称 | Hub-to-Onprem | Onprem-to-Hub |
| 第一个虚拟网关 | GW-hub | GW-Onprem |
| 第二个虚拟网关 | GW-Onprem | GW-hub |
- 打开 FW-Hybrid-Test 资源组,然后从表中选择网关。
- 在“设置”中,选择左侧列中的“连接”。
- 选择 添加 。
- 输入表格中的连接名称。
- 选择“VNet 到 VNet”作为“连接类型”。
- 选择“下一步:设置”。
- 从表中选择 第一个虚拟网络网关 和第 二个虚拟网络网关 。
- 对于共享密钥(PSK),请输入一个为此实验生成的高强度共享密钥。 两个连接都使用相同的值,并将其安全存储。 不要重复使用已发布的示例值。
- 选择 “审阅 + 创建”,然后选择“ 创建”。
验证连接
大约五分钟后,这两个连接的状态应显示为“已连接”。
将中心和分支虚拟网络对等互连
将中心辐射型虚拟网络进行对等互连。
打开“FW-Hybrid-Test”资源组并选择“VNet-hub”虚拟网络。
在左栏中选择“对等互连”。
选择 添加 。
在“远程虚拟网络摘要”下:
设置名称 值 对等连接名称 SpoketoHub 订阅 <您的订阅> 虚拟网络 VNet-Spoke 允许“VNet-Spoke”访问“VNet-hub” 已选定 允许“VNet-Spoke”接收来自“VNet-Hub”的转发流量 已选定 允许“VNet-Spoke”中的网关或路由服务器将流量转发到“VNet-Hub” 未选中 启用“VNet-Spoke”以使用“VNet-hub”远程网关或路由服务器 已选定 在“本地虚拟网络摘要”下:
设置名称 值 对等连接名称 HubtoSpoke 允许“VNet-hub”访问“VNet-Spoke” 已选定 允许“VNet-hub”接收来自“VNet-Spoke”的转发流量 已选定 允许“VNet-Hub”中的网关或路由服务器将流量转发到“VNet-Spoke” 已选定 启用“VNet-hub”以使用“VNet-Spoke”远程网关或路由服务器 未选中 选择 添加 。
创建路由
接下来,创建两个路由表:
- 通过防火墙 IP 地址从中心网关子网连接到分支子网的路由
- 从分支子网通过防火墙 IP 地址的默认路由
使用表中的值对每个路由表重复以下步骤。
| 设置 | 中心到分支路由 | 默认辐条路由 |
|---|---|---|
| 路由表名称 | UDR-Hub-Spoke | UDR-DG |
| 传播网关路由 | 是(默认值) | 否 |
| 路由名称 | ToSpoke | ToHub |
| 目标 IP 地址/CIDR 范围 | 10.6.0.0/16 | 0.0.0.0/0 |
| 关联虚拟网络 | VNet-hub | VNet-spoke |
| 关联子网 | GatewaySubnet | SN-Workload |
- 在 Azure 门户主页上,选择“创建资源”。
- 在搜索框中,键入 路由表 ,然后按 Enter。
- 选择“路由表”,然后选择“创建”。
- 为资源组选择 FW-Hybrid-Test 。
- 对于“区域”,请选择以前使用的同一位置。
- 输入表中的路由表 名称 。 如果适用,请将 传播网关路由 设置为 “否”。
- 选择查看 + 创建,然后选择创建。
- 创建路由表后,请选择它以打开路由表页。
- 在左列中的“设置”下,选择“路由”。
- 选择 添加 。
- 输入表中的 路由名称 。
- 对于“目标类型”,请选择“IP 地址”。
- 输入表中 的目标 IP 地址/CIDR 范围 。
- 对于“下一跳类型”,请选择“虚拟设备”。
- 对于 “下一跃点地址”,请键入前面记录的防火墙专用 IP 地址。
- 选择 添加 。
将每个路由表关联到其子网。
- 在路由表页上,选择 “子网”。
- 选择“关联”。
- 从表中选择 虚拟网络 和 子网 。
- 选择“确定”。
创建虚拟机
创建发散型工作负载和本地虚拟机,并将其放置到相应的子网中。
创建工作负荷虚拟机
在分支虚拟网络中创建一个虚拟机,运行 NGINX,没有公共 IP 地址。
- 在 Azure 门户主页上,选择“创建资源”。
- 在 “热门市场产品”下,选择 Ubuntu Server 24.04 LTS。
- 输入虚拟机的以下值:
- 资源组 - 选择“FW-Hybrid-Test”
- 虚拟机名称:VM-Spoke-01
- 区域 - 之前使用的同一区域
- 映像 - Ubuntu Server 24.04 LTS - x64 Gen2
- 大小 - Standard_B2s
- 身份验证类型 - SSH 公钥
- 用户名:azureuser
- SSH 公钥源 - 生成新密钥对
- 密钥对名称 - VM-Spoke-01_key
- 对于“公共入站端口”,请选择“无”。
- 选择 “下一步:磁盘”,接受默认值,然后选择“ 下一步:网络”。
- 选择“VNet-Spoke”作为虚拟网络;子网为“SN-Workload”。
- 对于“公共 IP”,请选择“无”。
- 选择“ 下一步:管理”,然后选择“ 下一步:监视”。
- 对于“启动诊断”,选择“禁用”。
- 选择“查看 + 创建”,检查摘要页上的设置,然后选择“创建”。
- 在“ 生成新密钥对 ”对话框中,选择“ 下载私钥”并创建资源。 将密钥文件另存为 VM-Spoke-01_key.pem。
安装 Nginx
创建虚拟机后,安装 Nginx Web 服务器。
辐射网络的默认路由会通过 Azure 防火墙 转发互联网流量。 AllowWeb 规则允许本地到辐射的 HTTP 流量,而非从辐射点下载包。 安装时添加临时应用规则,并在测试防火墙前移除它。
打开 hybrid-test-pol。 在“ 规则”下,选择“ 应用程序规则>添加规则集合”。
输入以下值:
设置 值 名称 Install-Nginx 规则集合类型 应用程序 优先级 100 规则集合操作 允许 规则汇集组 DefaultApplicationRuleCollectionGroup 规则名称 允许包仓库 源类型 IP 地址 Source 10.6.0.0/24 Protocol:port http:80, https:443 目标类型 FQDN 目标完全限定域名 (FQDN) azure.archive.ubuntu.com,archive.ubuntu.com,security.ubuntu.com,packages.microsoft.com 选择 添加 ,等待策略更新完成。 本教程中保留虚拟机默认的Azure提供的DNS设置。
在 Azure 门户中,打开 Cloud Shell 并确保它已设置为 Bash。
使用 az vm run-command invoke 在虚拟机上安装 nginx:
az vm run-command invoke \ --resource-group FW-Hybrid-Test \ --name VM-Spoke-01 \ --command-id RunShellScript \ --scripts 'set -eu; sudo apt-get update; sudo apt-get install -y nginx; hostname | sudo tee /var/www/html/index.html; curl --fail http://localhost'- 确认该命令已成功执行,并返回本地 Web 服务器上的 Spoke VM 主机名。 如果软件包下载失败,请检查错误信息中的仓库主机名,并将其与临时规则进行比对。 仅允许已配置的软件包仓库;不要添加通配符 Internet 规则。 参见 “排查Ubuntu上APT常见问题”。
- 返回 hybrid-test-pol 并删除 Install-Nginx 规则集合。 请等待政策更新完成后再继续。
创建本地虚拟机
使用此虚拟机通过Azure Bastion进行连接。 然后,通过防火墙连接到 spoke 服务器。
- 在 Azure 门户主页上,选择“创建资源”。
- 在 “热门市场产品”下,选择 Ubuntu Server 24.04 LTS。
- 输入虚拟机的以下值:
- 资源组 - 选择现有资源组,然后选择“FW-Hybrid-Test”。
- 虚拟机名称 - VM-Onprem。
- 区域 - 前面使用的区域。
- 映像 - Ubuntu Server 24.04 LTS - x64 Gen2
- 大小 - Standard_B2s
- 身份验证类型 - SSH 公钥
- 用户名:azureuser
- SSH 公钥源 - 生成新密钥对
- 密钥对名称 - VM-Onprem_key
- 对于“公共入站端口”,请选择“无”。
- 选择 “下一步:磁盘”,接受默认值,然后选择“ 下一步:网络”。
- 选择“VNet-Onprem”作为虚拟网络;子网为“SN-Corp”。
- 对于“公共 IP”,请选择“无”。 你通过此虚拟网络中的 Bastion 进行连接。
- 选择“ 下一步:管理”,然后选择“ 下一步:监视”。
- 对于“启动诊断”,选择“禁用”。
- 选择“查看 + 创建”,检查摘要页上的设置,然后选择“创建”。
- 在“ 生成新密钥对 ”对话框中,选择“ 下载私钥”并创建资源。 将密钥文件另存为 VM-Onprem_key.pem。
注意
Azure 会为未分配公共 IP 地址的 VM 或位于内部基本 Azure 负载均衡器的后端池中的 VM 提供默认出站访问 IP。 默认出站访问 IP 机制会提供不可配置的出站 IP 地址。
发生以下事件之一时,将禁用默认出站访问 IP:
- 将公共 IP 地址分配给 VM。
- 虚拟机被放置在标准负载均衡器的后端池中,可以有出站规则,也可以没有。
- 向 VM 的子网分配了 Azure NAT 网关资源。
在灵活业务流程模式下通过使用虚拟机规模集创建的 VM 没有默认的出站访问权限。
有关 Azure 中的出站连接的详细信息,请参阅 Azure 中的默认出站访问权限和使用用于出站连接的源网络地址转换 (SNAT)。
部署 Azure Bastion
在VNet-Onprem部署Azure Bastion Basic,直接连接到VM-Onprem。 浏览器与虚拟机之间的连接无需经过 VPN 网关。 你从VM-Onprem发送的 Web 请求仍然需要经过 VPN 连接和 Azure 防火墙 才能到达辐射网络。
打开 VNet-Onprem,选择 子网,然后选择 +子网。
为子网用途选择Azure Bastion。 确认名称是 AzureBastionSubnet,输入 192.168.3.0 作为 起始地址,选择 /26 作为 大小。 选择 添加 。
在 Azure 门户菜单中,选择“创建资源”。
在搜索框中,键入 Bastion 并从结果中选择它。
选择“创建”。
在 “创建 Bastion”上,配置以下设置:
设置 值 订阅 选择订阅 资源组 FW-Hybrid-Test 名称 堡垒内 区域 与其他资源相同 层 基本 虚拟网络 VNet-Onprem 子网 AzureBastionSubnet 公共 IP 地址 创建一个新的标准静态公共IP地址,名为 public-ip-bastion。 Bastion Basic 需要专用子网和公共 IP 地址,部署时会产生费用。 关于配置需求,请参见 Azure Bastion 配置设置。
选择“查看 + 创建”。 验证通过后,选择“ 创建”。
测试防火墙
首先,记下“VM-spoke-01”虚拟机的专用 IP 地址。
在Azure门户中,转到 VM-Onprem 虚拟机。
选择“通过 Bastion 连接”。>
从本地文件选择“使用 SSH 私钥”。
对于 “用户名”,请输入 azureuser。
浏览到并选择之前下载的 VM-Onprem_key.pem 文件。
选择 连接。
在 VM-Onprem 的 SSH 会话中,测试从属虚拟网络上的 Web 服务器:
curl http://<VM-spoke-01 private IP>Web 服务器返回响应。
接下来,将防火墙网络规则集合操作更改为“拒绝”,以验证防火墙规则是否按预期工作。
- 选择“hybrid-test-pol”防火墙策略。
- 选择“规则集合”。
- 选择“RCNet01”规则集合。
- 对于“规则集合操作”,请选择“拒绝”。
- 选择“保存”。
再次运行测试。 这次测试失败。
清理资源
为下一教程保留防火墙资源,或者不再需要这些资源,请删除 FW-Hybrid-Test 资源组以删除所有与防火墙相关的资源。