

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# Transit Gateway 与客户端 VPN 集成
<a name="cvpn-tgw"></a>

您可以将客户端 VPN 端点本地连接到 Transit Gateway VPCs，以便安全地远程访问多个本地网络以及连接到 Transit Gateway 的其他资源。这样就无需为每个 VPC 创建单独的 VPN 端点或通过中间端管理复杂路由 VPCs。

**Topics**
+ [概述](#cvpn-tgw-overview)
+ [优势](#cvpn-tgw-benefits)
+ [Transit Gateway 集成的工作原](#cvpn-tgw-how-it-works)
+ [先决条件](#cvpn-tgw-prerequisites)
+ [创建 Transit Gateway Client VPN 端点](#cvpn-tgw-create)
+ [管理路线](#cvpn-tgw-routes)
+ [配置授权](#cvpn-tgw-authorization)
+ [管理可用区](#cvpn-tgw-manage-azs)
+ [跨账户访问 Transit Gateway](#cvpn-tgw-cross-account)
+ [注意事项和限制](#cvpn-tgw-limitations)

## 概述
<a name="cvpn-tgw-overview"></a>

当您将 Transit Gateway 与客户端 VPN 终端节点关联时，如果在客户端 VPN 终端节点中配置了适当的路由和授权规则，则连接的 VPN 客户端可以访问连接到 Transit Gateway 的所有资源。

与传输网关关联的终端节点会保留客户端源 IP 地址。未应用源网络地址转换 (SNAT)，这样可以增强对客户端流量的可见性。

**重要**  
您不能在单个 Client VPN 终端节点中混用 VPC 子网关联和 Transit Gateway 关联。创建端点时选择一种关联类型。

## 优势
<a name="cvpn-tgw-benefits"></a>

Transit Gateway 与 Client VPN 集成具有以下好处：
+ **简化管理** — 无需为每个 VPC 设置单独的 VPN 终端节点。无需VPCs 仅为 VPN 终止创建中间体。
+ **集中路由** — 利用 Transit Gateway 作为中央路由中心。简化整个网络的路由管理。
+ **增强可见性**-保留客户端源 IP 地址（无 SNAT）。为 Client VPN 提供流日志支持。
+ **可扩展性** — 轻松添加可通过 Client VPN 访问的 Transit Gateway 的新 VPCs内容。扩展以支持大型远程员工和业务部门。
+ **集中式安全**-在所有连接的网络中实施一致的安全策略。保持全面的审计跟踪。

## Transit Gateway 集成的工作原
<a name="cvpn-tgw-how-it-works"></a>

以下内容介绍了 Client VPN 如何与 Transit Gateway 配合使用：

1. **创建终端节点**-创建客户端 VPN 终端节点并指定 Transit Gateway ID。

1. **创建附件** — AWS 自动为终端节点创建类型为 Transit Gateway `client-vpn` 的附件。

1. **可用区选择**-您可以指定要使用的可用区，或者自动 AWS 选择 2 个可用区。

1. **路由配置**-将路由添加到客户端 VPN 终端节点路由表，将客户端流量通过 Transit Gateway 定向到目标网络。

1. **客户端连接流** — 当客户端连接时，流量通过客户端 VPN 终端节点流向 Transit Gateway，然后根据 Transit Gateway 路由表流向目标网络。

![使用 Client VPN 的 Transit Gateway 流量流](http://docs.aws.amazon.com/zh_cn/vpn/latest/clientvpn-admin/images/cvpn-tgw-traffic-flow.png)


## 先决条件
<a name="cvpn-tgw-prerequisites"></a>

在创建与传输网关关联的 Client VPN 终端节点之前，请验证以下要求。

Transit Gatewa  
+ 与 Client VPN 终端节点位于同一区域的现有 Transit Gateway。
+ 要进行跨账户访问，必须通过 AWS Resource Access Manager与您的账户共享 Transit Gateway。
+ 必须为 Transit Gateway 分配一个 IPv4 CIDR 块。如果您计划使用 IPv6 或双堆栈配置，请同时分配一个 IPv6 CIDR 块。

网络要求  
+ 客户端 CIDR 范围不得与VPCs 连接到 Transit Gateway 的 CIDR 范围重叠。
+ Transit Gateway 必须支持您选择的可用区。
+ 必须在 VPC 路由表中配置返回路由，才能将发往客户端 CIDR 范围的流量定向到 Transit Gateway。

证书要求  
+ 在 AWS Certificate Manager (ACM) 中配置的服务器证书，该证书与 Client VPN 端点位于同一区域。
+ 如果您使用双向身份验证，则是在 ACM 中配置的客户端证书。

## 创建 Transit Gateway Client VPN 端点
<a name="cvpn-tgw-create"></a>

您可以使用控制台或 Transit Gateway 创建与 Transit Gateway 关联的 Client VPN 终端节点 AWS CLI。

**创建 Transit Gateway Client VPN 终端节点（控制台）**

1. 打开位于 [https://console.aws.amazon.com/vpc/](https://console.aws.amazon.com/vpc/) 的 Amazon VPC 控制台。

1. 在导航窗格中，选择 **Client VPN Endpoints**（Client VPN 端点），然后选择 **Create Client VPN Endpoint**（创建 Client VPN 端点）。

1. （可选）在**名称标签**和**描述**中，输入端点的名称和描述。

1. 对于**流量 IP 地址类型**，请选择以下选项之一：
   + **IPv4**— 指定客户端 IPv4 CIDR 范围（例如，`10.0.0.0/22`）。
   + **IPv6**— AWS 自动分配客户端 IPv6 CIDR 范围。
   + **双堆栈**-指定客户端 IPv4 CIDR 范围。 AWS 自动分配客户端 IPv6 CIDR 范围。

1. 对于**服务器证书 ARN**，请为在 ACM 中配置的 TLS 证书指定 ARN。

1. 选择您的身份验证方法。有关更多信息，请参阅 [中的客户端身份验证 AWS Client VPN](client-authentication.md)。

1. （可选）对于 “**连接**日志”，打开 “**启用客户端连接的日志详细信息**”，然后指定 CloudWatch 日志组和日志流。

1. 对于**网络基础设施**，请选择 T **ransit Gateway**。

1. 对于 T **ransit Gateway ID**，请从下拉列表中选择 Transit Gateway。

1. （可选）对于**可用区**，最多选择 5 个可用区。如果您不选择可用区，则 AWS 会自动选择 2。

1. （可选）配置其他设置，例如 DNS 服务器、传输协议、分割隧道、VPN 端口、会话超时和登录标语。

1. 选择 **Create Client VPN Endpoint**（创建 Client VPN 终端节点）。

**注意**  
创建后，端点状态为`pending-associate`。Transit Gateway 附件是自动创建的。客户端可以在附件可用后进行连接。

**创建 Transit Gateway Client VPN 终端节点 (AWS CLI)**  
将 [create-client-vpn-endpoint](https://docs.aws.amazon.com/cli/latest/reference/ec2/create-client-vpn-endpoint.html) 命令与 `--transit-gateway-id` 参数一起使用。

以下示例创建具有特定可用区的 Client VPN 终端节点：

```
aws ec2 create-client-vpn-endpoint \
    --client-cidr-block 10.0.0.0/22 \
    --server-certificate-arn arn:aws:acm:us-east-1:123456789012:certificate/a1b2c3d4-5678-90ab-cdef-11111EXAMPLE \
    --authentication-options Type=certificate-authentication,MutualAuthentication={ClientRootCertificateChainArn=arn:aws:acm:us-east-1:123456789012:certificate/a1b2c3d4-5678-90ab-cdef-22222EXAMPLE} \
    --connection-log-options Enabled=false \
    --transit-gateway-id tgw-0a1b2c3d4e5f6EXAMPLE \
    --availability-zone-list us-east-1a us-east-1b us-east-1c
```

输出示例：

```
{
    "ClientVpnEndpointId": "cvpn-endpoint-0a1b2c3d4e5f6EXAMPLE",
    "Status": {
        "Code": "pending-associate"
    },
    "DnsName": "cvpn-endpoint-0a1b2c3d4e5f6EXAMPLE.prod.clientvpn.us-east-1.amazonaws.com"
}
```

要 AWS 自动选择 2 个可用区，请省略以下`--availability-zone-list`参数：

```
aws ec2 create-client-vpn-endpoint \
    --client-cidr-block 10.0.0.0/22 \
    --server-certificate-arn arn:aws:acm:us-east-1:123456789012:certificate/a1b2c3d4-5678-90ab-cdef-11111EXAMPLE \
    --authentication-options Type=certificate-authentication,MutualAuthentication={ClientRootCertificateChainArn=arn:aws:acm:us-east-1:123456789012:certificate/a1b2c3d4-5678-90ab-cdef-22222EXAMPLE} \
    --connection-log-options Enabled=false \
    --transit-gateway-id tgw-0a1b2c3d4e5f6EXAMPLE
```

### 验证 Transit Gateway 的连接
<a name="cvpn-tgw-verify"></a>

创建终端节点后，验证 Transit Gateway 连接是否已创建。

**验证 Transit Gateway 连接（控制台）**

1. 打开位于 [https://console.aws.amazon.com/vpc/](https://console.aws.amazon.com/vpc/) 的 Amazon VPC 控制台。

1. 在导航窗格中，选择 **Transit Gateway Attachments**（中转网关连接）。

1. 找到**资源类型 = `client-vpn` 的附件，资源** **ID** 与您的 Client VPN 端点 ID 相匹配。

1. 验证**状态**是否为`available`。

**验证 Transit Gateway 的连接 (AWS CLI)**  
使用 [describe-transit-gateway-attachments](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-transit-gateway-attachments.html) 命令。

```
aws ec2 describe-transit-gateway-attachments \
    --filters Name=transit-gateway-id,Values=tgw-0a1b2c3d4e5f6EXAMPLE Name=resource-type,Values=client-vpn
```

要查看终端节点的 Transit Gateway 配置，请使用以下[describe-client-vpn-endpoints](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-client-vpn-endpoints.html)命令：

```
aws ec2 describe-client-vpn-endpoints \
    --client-vpn-endpoint-ids cvpn-endpoint-0a1b2c3d4e5f6EXAMPLE
```

输出包括一个具有 Transit Gateway ID 的`TransitGatewayConfiguration`对象和关联的可用区。

## 管理路线
<a name="cvpn-tgw-routes"></a>

**重要**  
对于与 Transit Gateway 关联的终端节点，在创建路由时无需指定目标子网 ID。流量会自动通过 Transit Gateway 附件定向。

**添加路由（控制台）**

1. 打开位于 [https://console.aws.amazon.com/vpc/](https://console.aws.amazon.com/vpc/) 的 Amazon VPC 控制台。

1. 在导航窗格中，选择 **Client VPN Endpoints**（Client VPN 终端节点）。

1. 选择 Client VPN 终端节点，选择**路由表**，然后选择**创建路由**。

1. 在**路由目标**中，输入目标 CIDR 范围（`10.1.0.0/16`例如，VPC 或`0.0.0.0/0`所有流量）。

1. （可选）在**描述**中，输入路径的描述。

1. 选择**创建路由**。

**添加路线 (AWS CLI)**  
使用不带`--target-vpc-subnet-id`参数的[create-client-vpn-route](https://docs.aws.amazon.com/cli/latest/reference/ec2/create-client-vpn-route.html)命令。

```
aws ec2 create-client-vpn-route \
    --client-vpn-endpoint-id cvpn-endpoint-0a1b2c3d4e5f6EXAMPLE \
    --destination-cidr-block 10.1.0.0/16
```

要添加多条路由，请为每个目标 CIDR 范围运行命令：

```
# Route to VPC 1
aws ec2 create-client-vpn-route \
    --client-vpn-endpoint-id cvpn-endpoint-0a1b2c3d4e5f6EXAMPLE \
    --destination-cidr-block 10.1.0.0/16

# Route to VPC 2
aws ec2 create-client-vpn-route \
    --client-vpn-endpoint-id cvpn-endpoint-0a1b2c3d4e5f6EXAMPLE \
    --destination-cidr-block 10.2.0.0/16

# Route to on-premises network
aws ec2 create-client-vpn-route \
    --client-vpn-endpoint-id cvpn-endpoint-0a1b2c3d4e5f6EXAMPLE \
    --destination-cidr-block 192.168.0.0/16
```

**删除路由（控制台）**

1. 打开位于 [https://console.aws.amazon.com/vpc/](https://console.aws.amazon.com/vpc/) 的 Amazon VPC 控制台。

1. 在导航窗格中，选择 **Client VPN Endpoints**（Client VPN 终端节点）。

1. 选择 Client VPN 终端节点，选择**路由表**，选择路由，然后选择**删除路由**。

1. 选择**删除路径**进行确认。

**要删除路线 (AWS CLI)**  
使用 [delete-client-vpn-route](https://docs.aws.amazon.com/cli/latest/reference/ec2/delete-client-vpn-route.html) 命令。

```
aws ec2 delete-client-vpn-route \
    --client-vpn-endpoint-id cvpn-endpoint-0a1b2c3d4e5f6EXAMPLE \
    --destination-cidr-block 10.1.0.0/16
```

## 配置授权
<a name="cvpn-tgw-authorization"></a>

**重要**  
与 Transit Gateway 关联的 Client VPN 终端节点不支持基于安全组的授权。必须使用基于网络的授权规则来控制客户端访问。

**添加授权规则（控制台）**

1. 打开位于 [https://console.aws.amazon.com/vpc/](https://console.aws.amazon.com/vpc/) 的 Amazon VPC 控制台。

1. 在导航窗格中，选择 **Client VPN Endpoints**（Client VPN 终端节点）。

1. 选择 Client VPN 端点，选择**授权规则**，然后选择**添加授权规则**。

1. **要使目标网络启用访问权限**，请输入目标 CIDR 范围（例如`10.1.0.0/16`）。

1. 对于 “**授予访问权限**”，请选择以下选项之一：
   + **允许所有用户访问**-所有经过身份验证的客户端都可以访问目标网络。
   + **允许访问特定访问组中的用户-在访问组 ID 中输入 A** ctive Directory 组 SID 或 IdP **组**名称。

1. 选择**添加授权规则**。

**添加授权规则 (AWS CLI)**  
使用 [authorize-client-vpn-ingress](https://docs.aws.amazon.com/cli/latest/reference/ec2/authorize-client-vpn-ingress.html) 命令。

以下示例授权所有用户访问`10.1.0.0/16`网络：

```
aws ec2 authorize-client-vpn-ingress \
    --client-vpn-endpoint-id cvpn-endpoint-0a1b2c3d4e5f6EXAMPLE \
    --target-network-cidr 10.1.0.0/16 \
    --authorize-all-groups
```

以下示例授权特定的 Active Directory 组：

```
aws ec2 authorize-client-vpn-ingress \
    --client-vpn-endpoint-id cvpn-endpoint-0a1b2c3d4e5f6EXAMPLE \
    --target-network-cidr 10.1.0.0/16 \
    --access-group-id S-1-2-34-1234567890-1234567890-1234567890-1234
```

## 管理可用区
<a name="cvpn-tgw-manage-azs"></a>

创建后，您可以修改与传输网关关联的 Client VPN 终端节点的可用区。

**添加单个可用区 (AWS CLI)**  
使用带`--availability-zone`参数的 [associate-client-vpn-target-network](https://docs.aws.amazon.com/cli/latest/reference/ec2/associate-client-vpn-target-network.html) 命令。

```
aws ec2 associate-client-vpn-target-network \
    --client-vpn-endpoint-id cvpn-endpoint-0a1b2c3d4e5f6EXAMPLE \
    --availability-zone us-east-1c
```

**移除单个可用区 (AWS CLI)**  
首先，使用 [describe-client-vpn-target-network](https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-client-vpn-target-networks.html) s 命令查找可用区的关联 ID。

```
aws ec2 describe-client-vpn-target-networks \
    --client-vpn-endpoint-id cvpn-endpoint-0a1b2c3d4e5f6EXAMPLE
```

然后使用带有关联 ID 的 [disassociate-client-vpn-target-network](https://docs.aws.amazon.com/cli/latest/reference/ec2/disassociate-client-vpn-target-network.html) 命令。

```
aws ec2 disassociate-client-vpn-target-network \
    --client-vpn-endpoint-id cvpn-endpoint-0a1b2c3d4e5f6EXAMPLE \
    --association-id cvpn-assoc-0a1b2c3d4e5f6EXAMPLE
```

## 跨账户访问 Transit Gateway
<a name="cvpn-tgw-cross-account"></a>

您可以创建与不同 AWS 账户拥有的 Transit Gateway 关联的 Client VPN 终端节点。为此，Transit Gateway 所有者必须通过与您的账户共享 Transit Gateway AWS Resource Access Manager。

先决条件  
+ **Transit Gateway 所有者账户** — 现有的 Transit Gateway 和在其中创建资源共享的权限 AWS Resource Access Manager。
+ **客户端 VPN 终端节点帐户**-创建客户端 VPN 端点和接受 AWS Resource Access Manager 资源共享的权限。

在 Client VPN 终端节点帐户中，在 AWS Resource Access Manager 控制台中或使用[accept-resource-share-invitation](https://docs.aws.amazon.com/cli/latest/reference/ram/accept-resource-share-invitation.html)命令接受资源共享。接受共享后，当您创建客户端 VPN 终端节点时，Transit Gateway 会显示在 Transit Gateway ID 下拉列表中。

## 注意事项和限制
<a name="cvpn-tgw-limitations"></a>

将 Transit Gateway 与 Client VPN 集成使用时，请考虑以下几点：
+ **协会限制**
  + 您不能在单个终端节点中混用 VPC 子网关联和 Transit Gateway 关联。
  + 每个端点必须仅使用一种关联类型。
+ **安全组**
  + Transit Gateway 终端节点不支持基于安全组的授权。
  + 仅使用基于网络的授权规则。
+ **路线管理**
  + 不支持从 Transit Gateway 自动传播路由。
  + 您必须手动定义目的网络的路由。
+ **CIDR 重叠**
  + 客户端 VPN CIDR 区块不应与其他 Transit Gateway 附件或 Transit Gateway CIDR 块重叠。
  + Transit Gateway 不支持连接 VPCs之间重叠的 CIDR 范围。
+ **区域限制**
  + 客户端 VPN 终端节点和 Transit Gateway 必须位于同一 AWS 区域。
  + Client VPN 不支持跨区域 Transit Gateway 对等互连。
+ **可用区**
  + 每个终端节点最多可以指定 5 个可用区。
  + 如果未指定，则 AWS 自动分配 2 个可用区。
  + Client VPN 和 Transit Gateway 必须同时支持所有指定的可用区。
+ **返回路由**
  + VPCs 连接到 Transit Gateway 的返回路由必须配置为将发往客户端 VPN CIDR 的流量路由回 Transit Gateway。
  + 如果没有正确的返回路由，VPN 客户端就无法访问中的资源 VPCs。
    + **对于 IPv4**：Client VPN CIDR 在创建端点时已知。
    + **对于 IPv6**：您必须描述 Transit Gateway 路由表以确定分配给客户端 VPN 终端节点的 IPv6 CIDR 范围（与客户端 VPN 终端节点关联的 Transit Gateway 路由表中最大 CIDR 范围），因为 IPv6 客户端 CIDR 范围由自动分配。 AWS Client VPN
+ **连接和流日志**
  + 可以启用 T@@ [ransit Gateway 流日志](https://docs.aws.amazon.com/vpc/latest/tgw/tgw-flow-logs.html)，以捕获有关进出您的传输网关的 IP 流量的信息。可以启用 [Client VPN 连接日志](https://docs.aws.amazon.com/vpn/latest/clientvpn-admin/cvpn-working-with-connection-logs.html)，以捕获有关客户端 VPN 连接事件的信息。
  + 通过将 Transit Gateway 流日志事件中的客户端 IP 和时间戳与客户端 VPN 连接日志中的相同客户端 IP 和时间段进行比较，可以将 Transit Gateway 流日志事件与客户端 VPN 连接关联起来。
+ **互联网连接**
  + 要通过 Transit Gateway 的 Client VPN 访问互联网，如果不使用分割隧道，则连接的 VPC 必须配置 NAT。
    + 用@@ **于 IPv4**：配置 NAT 网关以将 Client VPN 客户端 IPs 替换为公有 IP 地址。
    + **有关 IPv6**：请参阅[使用集中互联网出站流量 IPv6](https://docs.aws.amazon.com/whitepapers/latest/ipv6-on-aws/advanced-dual-stack-and-ipv6-only-network-designs.html#centralized-internet-outbound-traffic-with-ipv6)。