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

借助强制隧道,可以通过站点到站点 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 的工作负荷,也能选择对整个虚拟网络应用强制隧道连接。

显示强制隧道体系结构的示意图。

先决条件

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

  • Azure 订阅。 如果还没有 Azure 订阅,可以激活 MSDN 订户权益或注册获取免费帐户
  • 已配置虚拟网络。
  • 使用经典部署模型时,会无法使用 Azure Cloud Shell。 相反,用户必须在计算机上本地安装最新版本的 Service Management (SM) PowerShell cmdlet。 这些 cmdlet 不同于 AzureRM 或 Az cmdlet。 要安装 SM cmdlet,请参阅“安装服务管理 cmdlet”。 有关一般 Azure PowerShell 的详细信息,请参阅 Azure PowerShell 文档

配置强制隧道

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

<VirtualNetworkSite name="MultiTier-VNet" Location="North Europe">
     <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
    
  2. 创建一个路由表。 使用以下 cmdlet 创建路由表。

    New-AzureRouteTable –Name "MyRouteTable" –Label "Routing Table for Forced Tunneling" –Location "North Europe"
    
  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>