使用经典部署模型配置强制隧道

借助强制隧道,可以通过站点到站点 VPN 隧道,将全部 Internet 绑定流量重定向或“强制”返回到本地位置,以进行检查和审核。 这是很多企业 IT 策略的关键安全要求。 如果没有强制隧道,来自 Azure 中 VM 的 Internet 绑定流量会始终通过 Azure 网络基础设施直接连接到 Internet,而无法选择对流量进行检查或审核。 未经授权的 Internet 访问可能会导致信息泄漏或其他类型的安全漏洞。

本文中的步骤适用于经典(旧的)部署模型,不适用于当前部署模型“资源管理器”。 除非就是希望使用经典部署模型,否则建议使用本文中提到的资源管理器版本

注意

本文为经典(旧的)部署模型而写。 建议你改用最新的 Azure 部署模型。 资源管理器部署模型是最新的部署模型,提供比经典部署模型更多的选项和更强的功能兼容性。 请参阅了解部署模型和资源状态,了解这两种部署模型之间的差异。

如果要使用本文提到的其他版本,请使用左侧窗格中的目录。

要求和注意事项

在 Azure 中,可通过虚拟网络用户定义路由 (UDR) 配置强制隧道。 将流量重定向到本地站点,这是 Azure VPN 网关的默认路由。 以下部分列出了 Azure 虚拟网络路由和路由表的当前限制:

  • 每个虚拟网络子网具有内置的系统路由表。 系统路由表具有以下三组路由:

    • 本地 VNet 路由: 直接路由到同一个虚拟网络中的目标 VM。
    • 本地路由: 路由到 Azure VPN 网关。
    • 默认路由: 直接路由到 Internet。 如果要将数据包发送到不包含在前面两个路由中的专用 IP 地址,数据包会被删除。
  • 随着用户定义路由的发布,可以创建路由表来添加默认路由,然后将路由表关联到 VNet 子网,在这些子网启用强制隧道。

  • 需要在连接到虚拟网络的跨界本地站点中,设置一个“默认站点”。

  • 强制隧道必须关联到具有动态路由 VPN 网关(而非静态网关)的 VNet。

  • ExpressRoute 强制隧道不是通过此机制配置的,而是通过 ExpressRoute BGP 对等会话播发默认路由来启用的。 有关详细信息,请参阅什么是 ExpressRoute?

配置概述

在以下示例中,前端子网没有使用强制隧道。 前端子网中的工作负载可以继续直接接受并响应来自 Internet 的客户请求。 中间层和后端子网会使用强制隧道。 任何从这两个子网到 Internet 的出站连接都通过一个 S2S VPN 隧道重定向或强制返回到本地站点。

这样,在继续支持所需的多层服务体系结构的同时,可以限制并检查来自虚拟机或 Azure 云服务的 Internet 访问。 如果在虚拟网络中没有面向 Internet 的工作负荷,也能选择对整个虚拟网络应用强制隧道连接。

Diagram showing forced tunneling architecture.

先决条件

在开始配置之前,请确认具有以下各项:

  • Azure 订阅。 如果还没有 Azure 订阅,可以注册一个试用帐户
  • 已配置虚拟网络。
  • 使用经典部署模型时,必须在本地计算机上安装最新版本的 Azure 服务管理 (SM) PowerShell cmdlet。 这些 cmdlet 不同于 AzureRM 或 Az cmdlet。 要安装 SM cmdlet,请参阅“安装服务管理 cmdlet”。 有关一般 Azure PowerShell 的详细信息,请参阅 Azure PowerShell 文档

配置强制隧道

以下过程帮助你为虚拟网络指定强制隧道。 配置步骤与 VNet 网络配置文件相对应。 在本示例中,虚拟网络“MultiTier-VNet”具有三个子网:“前端”、“中间层”和“后端子网”,并且具有四个跨界连接:一个“DefaultSiteHQ”和三个 Branch。

<VirtualNetworkSite name="MultiTier-VNet" Location="China North">
     <AddressSpace>
      <AddressPrefix>10.1.0.0/16</AddressPrefix>
        </AddressSpace>
        <Subnets>
          <Subnet name="Frontend">
            <AddressPrefix>10.1.0.0/24</AddressPrefix>
          </Subnet>
          <Subnet name="Midtier">
            <AddressPrefix>10.1.1.0/24</AddressPrefix>
          </Subnet>
          <Subnet name="Backend">
            <AddressPrefix>10.1.2.0/23</AddressPrefix>
          </Subnet>
          <Subnet name="GatewaySubnet">
            <AddressPrefix>10.1.200.0/28</AddressPrefix>
          </Subnet>
        </Subnets>
        <Gateway>
          <ConnectionsToLocalNetwork>
            <LocalNetworkSiteRef name="DefaultSiteHQ">
              <Connection type="IPsec" />
            </LocalNetworkSiteRef>
            <LocalNetworkSiteRef name="Branch1">
              <Connection type="IPsec" />
            </LocalNetworkSiteRef>
            <LocalNetworkSiteRef name="Branch2">
              <Connection type="IPsec" />
            </LocalNetworkSiteRef>
            <LocalNetworkSiteRef name="Branch3">
              <Connection type="IPsec" />
            </LocalNetworkSiteRef>
        </Gateway>
      </VirtualNetworkSite>
    </VirtualNetworkSite>

以下步骤会将“DefaultSiteHQ”设置为强制隧道的默认站点连接,并将中间层和后端子网配置为使用强制隧道。

  1. 使用提升的权限打开 PowerShell 控制台。 使用以下示例连接到你的帐户:

    Add-AzureAccount -Environment AzureChinaCloud
    
  2. 创建一个路由表。 使用以下 cmdlet 创建路由表。

    New-AzureRouteTable -Name "MyRouteTable" -Label "Routing Table for Forced Tunneling" -Location "China North"
    
  3. 将默认路由添加到路由表中。

    下面的示例将默认路由添加到在步骤 1 中创建的路由表。 唯一支持的路由是“0.0.0.0/0”到“VPN 网关”下一跃点的目标前缀。

    Get-AzureRouteTable -Name "MyRouteTable" | Set-AzureRoute -RouteTable "MyRouteTable" -RouteName "DefaultRoute" -AddressPrefix "0.0.0.0/0" -NextHopType VPNGateway
    
  4. 将路由表关联到子网。

    创建路由表并添加路由后,可以使用以下示例将路由表添加到 VNet 子网,或将路由表与 VNet 子网关联。 下面的示例将“MyRouteTable”路由表添加到 VNet MultiTier-VNet 的中间层和后端子网。

    Set-AzureSubnetRouteTable -VirtualNetworkName "MultiTier-VNet" -SubnetName "Midtier" -RouteTableName "MyRouteTable"
    Set-AzureSubnetRouteTable -VirtualNetworkName "MultiTier-VNet" -SubnetName "Backend" -RouteTableName "MyRouteTable"
    
  5. 为强制隧道指定默认站点。

    在前面的步骤中,示例 cmdlet 脚本创建了路由表,并将路由表关联到两个 VNet 子网。 剩下的步骤是在虚拟网络的多站点连接中,选择一个本地站点作为默认站点或隧道。

    $DefaultSite = @("DefaultSiteHQ")
    Set-AzureVNetGatewayDefaultSite -VNetName "MultiTier-VNet" -DefaultSite "DefaultSiteHQ"
    

其他 PowerShell cmdlet

删除路由表

Remove-AzureRouteTable -Name <routeTableName>

列出路由表

Get-AzureRouteTable [-Name <routeTableName> [-DetailLevel <detailLevel>]]

从路由表中删除路由

Remove-AzureRouteTable -Name <routeTableName>

从子网中删除路由

Remove-AzureSubnetRouteTable -VirtualNetworkName <virtualNetworkName> -SubnetName <subnetName>

列出与子网关联的路由表

Get-AzureSubnetRouteTable -VirtualNetworkName <virtualNetworkName> -SubnetName <subnetName>

从 VNet VPN 网关中删除默认站点

Remove-AzureVnetGatewayDefaultSite -VNetName <virtualNetworkName>