在 terraform IPSec 隧道中使用的 AWS IP 地址(通过 Transit Gateway)

Posted

技术标签:

【中文标题】在 terraform IPSec 隧道中使用的 AWS IP 地址(通过 Transit Gateway)【英文标题】:AWS IP address to use in terraform IPSec tunnels (via Transit Gateway) 【发布时间】:2021-06-17 01:58:33 【问题描述】:

我正在尝试构建 AWS terraform IPSec *** 配置。但是,我不记得在哪里可以找到 AWS IPSec IP 地址; terraform cgw documentation 表示ip_address 字段是必需的。

答案应该假设 *** 将连接到我的AWS Transit Gateway。

我的地形:

resource "aws_customer_gateway" "cgw-abbv-for-local-and-remote" 
  bgp_asn    = 65001
  ip_address = "A.B.C.D"   #<-- I need this IP before terraform apply
  type       = "ipsec.1"

  tags = 
    Name        = "insert-cgw-name-here"
  


resource "aws_***_connection" "***-abbv-for-local-and-remote" 
  customer_gateway_id = aws_customer_gateway.cgw-abbv-for-local-and-remote.id
  transit_gateway_id  = aws_ec2_transit_gateway.my-tgw-name.id
  type                = aws_customer_gateway.cgw-abbv-for-local-and-remote.type

  tags = 
    Name        = "insert-***-name-here"
  

【问题讨论】:

【参考方案1】:

似乎 OP 已经找到了答案,但让我加两分钱,因为两年前为了通过 AWS 高级网络证书,我花了很多时间弄清楚 AWS *** 的问题。这可能对刚接触 *** 的人有用——尤其是在 AWS 生态系统中:

有一本很棒的书,名为AWS Certified Advanced Networking Official Study Guide,我会推荐所有担任云网络工程师角色的人阅读。 [1]

它指出以下几点:

创建 *** 连接后,*** 隧道会在产生流量时激活 来自您的 *** 连接。 VGW不是发起者;您的客户网关必须启动隧道。如果您的 *** 连接经历了一段空闲时间(通常 10 秒,具体取决于您的配置),隧道可能会关闭。这是因为 AWS 使用按需 DPD 机制。如果 AWS 没有收到来自 *** 对等方的流量 10 秒后,AWS 发送一条 DPD“R-U-THERE”消息。如果 *** 对等体没有响应 对于三个连续的 DPD,*** 对等体被认为是死的,AWS 会关闭隧道。 [页。 100, 101]

在 *** 连接的非 AWS 端,*** 在客户网关上终止。 客户网关是客户本地端的 *** 终端设备的 AWS 术语。客户网关也可以作为运行的 EC2 实例托管在 AWS 中 满足下一节中给出的要求的 *** 软件。 大多数客户不需要购买额外的设备,并且可以重复使用 现有的本地 *** 终端设备来创建通往 VPC 的隧道。 [页。 110]

您可以使用任何支持第 3 层 *** 技术的第三方 *** 设备。 AWS 不支持第 2 层 *** 技术。 IPsec 用于 *** 终止的 AWS 端的 VGW,因此您的 *** 设备必须支持 IPsec 协议。您将为每个 VGW 设置两个 *** 隧道。 对 BGP 路由协议的支持是可选的,但建议用于高级路由功能。其他路由协议,如开放最短路径优先 (OSPF) 不受支持 AWS。 您必须确保在本地防火墙中打开了正确的端口 让 IPsec 流量流动。 [页。 111] 尤其是:*** 连接的两端都必须拥有一个公共 IP 地址

如果您还没有,我真的建议您跳过这些页面,以了解有关(混合)云架构的最佳实践和 AWS 思维方式。如果事情没有按照您想要的方式进行,您可以避免事后感到困惑。 IPSec(即第 3 层)*** 比大多数人想象的更难做好。应该了解所有与路由和安全相关的内容,例如:IKESA基于策略的路由NAT-遍历ISAKMP等[另见p. 97: *** 功能 -> 安全和路由部分]。

另一个很好的参考是 AWS Site-to-Site *** 指南 (PDF)。 [2]

另外很高兴知道:AWS CloudFormation 文档中还可以找到许多 terraform 属性。 AWS::EC2::CustomerGateway 资源的 IpAddress 属性状态的文档 [3]:

客户网关外部接口的Internet 可路由 IP 地址。地址必须是静态

[1]https://www.programmer-books.com/wp-content/uploads/2019/04/AWS-Certified-Advanced-Networking-Official-Study-Guide.pdf [2]https://docs.aws.amazon.com/***/latest/s2s***/s2s-***-user-guide.pdf [3]https://docs.aws.amazon.com/de_de/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-customer-gateway.html#cfn-ec2-customergateway-ipaddress

【讨论】:

【参考方案2】:

客户网关的 ip_address 是位于客户数据中心内部的物理设备/路由器的 IP。您需要此 ip_address 来建立 *** 连接。当您迷失在 terraform 中时,AWS docs 也会提供帮助。

【讨论】:

【参考方案3】:

这在 terraform 文档中不是很清楚,但我在互联网上找到了一个澄清这个问题的示例。

简而言之,aws_customer_gateway 配置不是在 IPSec 隧道的 AWS 端...这些资源相对于 AWS 是“远程”的:

所以在这种情况下,ip_address 将是 AWS IPSec 数据包的目标 IP 地址离开 AWS Transit Gateway; aws_customer_gateway ip_address 不属于 AWS。

【讨论】:

以上是关于在 terraform IPSec 隧道中使用的 AWS IP 地址(通过 Transit Gateway)的主要内容,如果未能解决你的问题,请参考以下文章

ipsec隧道影不影响流量

IPSEC的一些理解

IPsec篇(7.0) 04. 如何快速删除IPsec安全隧道 ❀ 飞塔 (Fortinet) 防火墙

pfSense使用证书认证配置IPsec站点到站点隧道指南

ipsec dpd 使用注意

如何配置l2tp over gre隧道