搜索本产品文档关键词
使用Terraform管理IPsec VPN网关典型实践
所有文档
menu
没有找到结果,请重新输入

私有网络 VPC

使用Terraform管理IPsec VPN网关典型实践

概览

IPsec VPN网关是一种通过公网加密通道连接您的IDC和私有网络的方式。

vpc-vpn02.png

前提条件

  • 您已经注册了百度智能云账号。如未注册,请先完成账号注册。
  • 确保用户数据中心的网关设备支持IKEv1和IKEv2协议,支持这两种协议的本地网关设备均可以和云上VPN网关互连。
  • 用户数据中心的网关设备已经配置了静态公网IP。
  • 用户数据中心和VPC互通的网段没有重叠。
  • 您已经了解VPC中的安全组规则,并确保安全组规则允许用户数据中心的网关设备访问云上资源。具体操作,请参见查询安全组规则和添加安全组规则。

需求场景

某公司在百度智能云创建了VPC,网段为172.16.0.0/16。用户数据中心的网段为10.24.0.0/20,用户数据中心网关设备的公网IP为211.XX.XX.XX。公司因业务发展,需要用户数据中心与云上VPC互通。您可以通过IPsec-VPN网关和隧道,建立用户数据中心与云上VPC的连接,实现云上和云下的互通。

方案概述

如下图所示,用户可以使用IPSec VPN网关建立用户数据中心和百度智能云VPN的连接。

结构图.drawio.png

配置步骤

环境准备

Terraform:是一种安全有效地构建、更改和版本控制基础设施的工具。它以配置文件为驱动,您在文件中定义各种组件,Terraform会基于该文件完成所有组件的创建、变更和管理。目前百度智能云已与 Terraform集成,您可通过Terraform来创建、管理CFC、BOS、VPC、BCC等多种百度智能云资源,具体请参考Terraform BaiduCloud Provider

部署过程

  1. 登录Terraform官网下载适用于您的操作系统的程序包。
  2. 配置terraform baidu provider信息,配置文件可参考如下的代码,在当前文件夹内保存为version.tf。
    terraform {
      required_providers {
        baiducloud = {
          source = "baidubce/baiducloud"
          version = "1.15.6" #版本号 可去官网查询版本更新信息
        }
      }
    }
  1. 执行命令terraform init,Terraform会根据当前文件夹内的version.tf文件初始化工作空间。
  2. 编辑Terraform配置文件。新建文件main.tf,在文件中指定VPC、子网、EIP、安全组、VPN网关、IPSec隧道、路由表的元信息。参考配置和步骤如下:

更多参数信息可参考baidu provider官方文档

  • 创建VPC
resource "baiducloud_vpc" "vpc" {
  name = "terraform_vpc"
  cidr = "172.16.0.0/16"
}
  • 创建子网并对应一个可用区 本示例使用的是华北-北京-可用区D
resource "baiducloud_subnet" "subnet" {
  name        = "terraform_subnet"
  zone_name   = "cn-bj-d" 
  cidr        = "172.16.32.0/20"
  vpc_id      = baiducloud_vpc.vpc.id
  description = "terraform test subnet"
}
  • 创建EIP
resource "baiducloud_eip" "eip" {
  # EIP带宽
  bandwidth_in_mbps = 1
  billing_method    = "ByBandwidth"
  payment_timing    = "Postpaid"
}
  • 创建安全组
resource "baiducloud_security_group" "sg" {
  name        = "terraform-sg"
  description = "security group created by terraform"
  vpc_id      = baiducloud_vpc.vpc.id
}
  • 创建安全组规则
#这里是允许入方向的ICMP协议 本示例只进行ping测试 可根据实际情况开放端口和协议
resource "baiducloud_security_group_rule" "sgr1_in" {
  security_group_id = baiducloud_security_group.sg.id
  remark            = "remark"
  protocol          = "icmp"
  port_range        = ""
  direction         = "ingress"
  source_ip         = "all"
}
# 出方向的ICMP协议开放
resource "baiducloud_security_group_rule" "sgr1_out" {
  security_group_id = baiducloud_security_group.sg.id
  remark            = "remark"
  protocol          = "icmp"
  port_range        = ""
  direction         = "egress"
  source_ip         = "all"
}
  • 创建VPN网关
resource "baiducloud_vpn_gateway" "vpn_gateway" {
  # 等待EIP创建完成再创建VPN网关
  depends_on     = [baiducloud_eip.eip]
  vpn_name       = "test_vpn_gateway"
  vpc_id         = baiducloud_vpc.vpc.id
  description    = "test desc"
  # 付费方式Prepaid预付费 Postpaid后付费
  payment_timing = "Postpaid"
  # 绑定弹性公网IP
  eip            = baiducloud_eip.eip.eip
}
  • 创建IPSec隧道
resource "baiducloud_vpn_conn" "vpn_conn" {
  vpn_id        = baiducloud_vpn_gateway.vpn_gateway.id
  # 共享密钥是用于验证IPsec连接的Unicode字符串,本端和对端必须使用相同的预共享密钥
  secret_key    = "ddd22@www"
  # 本端IP 百度智能云VPC中需要进入VPN隧道的子网 本示例填入创建的子网的IP地址
  local_subnets = [
    baiducloud_subnet.subnet.cidr
  ]
  # 对端网关是指用户数据中心的 IPsec VPN 服务网关 对端网关需与百度智能云VPN网关配合使用。
  remote_ip      = "211.xx.xx.xx"
  # 对端需要通过VPN隧道连通的网段
  remote_subnets = [
    "10.24.0.0/20"
  ]
  description   = "test VPN conn"
  vpn_conn_name = "vpnconn"
  ike_config    = {
    # 选择IKE协议的版本,目前支持IKE V1和IKE V2
    ike_version   = "v1"
    # 选择IKE V1版本的协商模式。
    # 主模式(main):协商过程安全性高。
    # 野蛮模式(aggressive):协商快速且协商成功率高。
    # 协商成功后两种模式的信息传输安全性相同。
    ike_mode      = "main"
    # 选择第一阶段协商使用的加密算法 支持aes、aes192、aes256和3des
    ike_enc_alg   = "aes"
    # 第一阶段协商使用的认证算法 支持sha1、md5、sha2_256、sha2_384和sha2_512
    ike_auth_alg  = "sha1"
    # 选择第一阶段协商的Diffie-Hellman密钥交换算法
    ike_pfs       = "group2"
    # 设置第一阶段协商出的SA的生存周期 默认值为28800秒
    ike_life_time = 28800
  }
  ipsec_config = {
    # 选择第二阶段协商的加密算法 支持aes、aes192、aes256和3des
    ipsec_enc_alg   = "aes"
    # 选择第二阶段协商的认证算法 支持sha1、md5、sha2_256、sha2_384和sha2_512 
    ipsec_auth_alg  = "sha1"
    # 选择第二阶段协商的Diffie-Hellman密钥交换算法
    ipsec_pfs       = "group2"
    # 设置第二阶段协商出的SA的生存周期。默认值为28800秒
    ipsec_life_time = 28800
  }
}
  • 创建路由表
resource "baiducloud_route_rule" "route_rule" {
  route_table_id      = baiducloud_vpc.vpc.route_table_id
  # 源IP地址 本示例中为用户创建的子网的IP地址
  source_address      = baiducloud_subnet.subnet.cidr
  # 目的IP地址 本示例中为用户数据中心的IP地址
  destination_address = "10.24.0.0/20"
  # 下一跳实例
  next_hop_id         = baiducloud_vpn_gateway.vpn_gateway.id
  # 下一跳类型 本示例中应该为VPN
  next_hop_type       = "vpn"
  description         = "created by terraform"
}
  1. 执行命令terraform plan,Terraform会根据当前配置文件中的信息列出资源变更计划。
  2. 执行命令terraform apply,根据提示输入yes,即自动执行资源创建。

查询VPN网关列表和IPSec隧道列表

data "baiducloud_vpn_gateways" "default" {
  # 此处填入VPC ID即可查询VPC下所有的网关列表及详细信息
  vpc_id = "vpc-xxxxxxx"
}
data "baiducloud_vpn_conns" "default" {
  # 此处填入VPN ID即可查询VPN关联的IPSec隧道的详细信息
  vpn_id = "vpn-xxxxxxx"
}

可使用filter在结果中过滤资源,示例代码

# 可使用正则表达式过滤 下面的代码块的效果是在结果中过滤name符合表达式 tf-test-VPN-* 的资源
filter {
   name = "name"
   values = ["tf-test-VPN-*"]
}

资源更新

可修改main.tf文件中有关VPN网关和VPN隧道的配置参数,然后执行资源创建步骤5和步骤6即可完成资源的更新。

资源删除

可使用如下命令进行资源的删除:

    #命令默认会释放当前main.tf中的所有资源
    terraform destroy 
    #可以通过 -target 选项销毁特定的资源,格式为:-target=<资源类型>.<资源名称>,例如:
    terraform destroy -target baiducloud_vpn_gateway.test-vpn

测试验证

在完成全部配置后,可通过下面的定义,通过Terraform在子网内创建一台BCC实例,去测试网络之间的连通性,确定安全组规则生效之后,可使用ping命令检测连通性:

-$ ping 10.24.x.x

# BCC创建示例 具体规格参数可根据需要灵活配置
data "baiducloud_images" "images" {
  image_type = "System"
  name_regex = "8.4 aarch"
  os_name    = "CentOS"
}
resource "baiducloud_instance" "server1" {
  # 可用区 本示例创建的是华北-北京-可用区D的子网 此处可用区应和子网保持一致
  availability_zone = "cn-bj-d"
  # BCC规格
  instance_spec     = "bcc.gr1.c1m4"
  # 镜像ID 使用的是CentOS 8.4 aarch镜像
  image_id          = data.baiducloud_images.images.0.id
  # 付费类型
  billing           = {
    payment_timing = "Postpaid"
  }
  # 子网ID 通过Terraform创建的子网
  subnet_id       = baiducloud_subnet.subnet.id
  # 安全组 通过Terraform创建的安全组
  security_groups = [baiducloud_security_group.sg.id]
}

同时,用户数据中心内的设备应该也能够与VPC的实例连接。

至此,通过IPSec VPN的方式,成功实现用户数据中心连接到云平台内部的资源,实现了云上和云下的互通。

相关产品

VPN网关私有网络VPC云服务器BCC弹性公网IP

上一篇
网络层安全说明
下一篇
使用Terraform管理弹性网卡典型实践