使用IPsec-VPN实现本地数据中心IDC(Internet Data Center)和阿里云VPC之间的网络互通时,在阿里云侧完成VPN网关的配置后,您还需在本地数据中心的网关设备中添加VPN配置才能成功在本地数据中心和阿里云VPC之间建立IPsec-VPN连接。本文介绍如何在FortiGate防火墙中添加VPN配置。
场景示例
本文以上图场景为例。某公司在阿里云拥有一个专有网络VPC(Virtual Private Cloud),VPC网段为10.0.0.0/16,VPC中使用云服务器ECS(Elastic Compute Service)部署了应用服务。同时该公司在本地拥有一个数据中心,本地数据中心中要与VPC互通的网段为192.168.0.0/16。公司计划在本地数据中心与云上VPC之间建立IPsec-VPN连接,实现资源互访。
本文场景中,本地数据中心使用一台FortiGate防火墙的一个公网IP地址与阿里云建立双隧道模式的IPsec-VPN连接。如果您的场景需要建立单隧道模式的IPsec-VPN连接,请参见文末的单隧道配置示例。
网段规划及VPN配置示例
网段规划
资源 | 网段 | IP地址 |
本地数据中心 | 待和VPC互通的网段:192.168.0.0/16 | 服务器IP地址:192.168.10.211 |
FortiGate防火墙 | 接口所属网段:192.168.0.0/16 |
|
VPC | 主网段:10.0.0.0/16 交换机1:10.0.10.0/24 交换机2:10.0.20.0/24 | ECS IP地址:10.0.10.247 |
VPN网关实例(公网网络类型) | 不涉及 |
说明 创建VPN网关实例后,系统会自动为VPN网关实例分配地址。 |
BGP网段规划
本文将分别描述IPsec-VPN连接使用静态路由方式和BGP动态路由方式下如何配置FortiGate防火墙。如果您不需要使用BGP动态路由方式,可以忽略本部分。以下为本文的BGP网段规划。
资源 | 隧道 | BGP隧道网段 | BGP IP地址 | BGP AS号(本端自治系统号) |
VPN网关实例 | 隧道1 | 169.254.10.0/30 说明 一个VPN网关实例下,每个隧道的网段需保持唯一。 | 169.254.10.1 | 65535 |
隧道2 | 169.254.20.0/30 | 169.254.20.1 | ||
FortiGate防火墙 | 隧道1 | 169.254.10.0/30 | 169.254.10.2 | 65500 |
隧道2 | 169.254.20.0/30 | 169.254.20.2 |
VPN配置示例
本文场景中隧道1(主隧道)和隧道2(备隧道)使用相同的示例值。
每条隧道下,阿里云侧和FortiGate防火墙侧VPN配置需保持相同。
配置项 | 阿里云侧示例值 | FortiGate防火墙侧示例值 | |
预共享密钥 | 123456**** | 123456**** | |
IKE配置 | IKE版本 | ikev2 | ikev2 |
协商模式 | main | main | |
加密算法 | des | des 说明 本文场景中FortiGate防火墙使用的软件版本不支持aes算法,因此本文以des算法作为示例,推荐使用aes算法。 | |
认证算法 | sha1 | sha1 | |
DH分组 | group2 | group2 | |
SA生存周期(秒) | 86400 | 86400 | |
IPsec配置 | 加密算法 | des | des 说明 本文场景中FortiGate防火墙使用的软件版本不支持aes算法,因此本文以des算法作为示例,推荐使用aes算法。 |
认证算法 | sha1 | sha1 | |
DH分组 | group2 | group2 | |
SA生存周期(秒) | 86400 | 86400 |
前提条件
本文仅描述如何在FortiGate防火墙中添加VPN配置,不再描述阿里云VPN网关侧的配置。因此在您开始配置前,请确保您已经完成创建VPN网关实例、创建用户网关、创建IPsec连接、配置VPN网关路由的任务,具体操作步骤:
静态路由方式,请参见建立VPC到本地数据中心的连接(双隧道模式)。
BGP动态路由方式,请参见建立VPC到本地数据中心的连接(双隧道模式和BGP路由)。
本文场景中,本地数据中心使用FortiGate防火墙的一个公网IP地址与阿里云建立双隧道模式的IPsec-VPN连接,因此仅需创建一个用户网关,创建IPsec连接时,两条隧道关联同一个用户网关即可。
开始配置
下文以FortiOS V6.2.4为例介绍如何配置FortiGate防火墙。以下内容仅作示例使用,具体配置命令请以厂商的配置手册为准。
静态路由方式
登录FortiGate防火墙命令行配置界面。
为FortiGate防火墙添加IPsec-VPN第一阶段配置(IKE配置)。
#为隧道1添加IPsec-VPN第一阶段配置 config vpn ipsec phase1-interface edit "to_aliyun_test1" set interface "port1" #指定接口为公网出口的接口。 set ike-version 2 set peertype any set net-device disable set proposal des-sha1 set localid-type address #指定localid的格式为IP地址格式,与阿里云侧隧道1 remoteid的格式保持一致。 set dhgrp 2 set remote-gw 8.XX.XX.146 #指定隧道1的对端地址为VPN网关实例的IPsec地址1。 set psksecret 123456**** #指定隧道1的预共享密钥,阿里云侧和FortiGate防火墙侧需保持一致。 next end #为隧道2添加IPsec-VPN第一阶段配置 config vpn ipsec phase1-interface edit "to_aliyun_test2" set interface "port1" #指定接口为公网出口的接口。 set ike-version 2 set peertype any set net-device disable set proposal des-sha1 set localid-type address #指定localid的格式为IP地址格式,与阿里云侧隧道2 remoteid的格式保持一致。 set dhgrp 2 set remote-gw 8.XX.XX.74 #指定隧道2的对端地址为VPN网关实例的IPsec地址2。 set psksecret 123456**** #指定隧道2的预共享密钥,阿里云侧和FortiGate防火墙侧需保持一致。 next end
为FortiGate防火墙添加IPsec-VPN第二阶段配置(IPsec配置)。
#为隧道1添加IPsec-VPN第二阶段配置 config vpn ipsec phase2-interface edit "to_aliyun_test1" set phase1name "to_aliyun_test1" #关联隧道1的phase1-interface。 set proposal des-sha1 set dhgrp 2 set auto-negotiate enable set keylifeseconds 86400 next end #为隧道2添加IPsec-VPN第二阶段配置 config vpn ipsec phase2-interface edit "to_aliyun_test2" set phase1name "to_aliyun_test2" #关联隧道2的phase1-interface。 set proposal des-sha1 set dhgrp 2 set auto-negotiate enable set keylifeseconds 86400 next end
配置防火墙策略。
config firewall policy edit 1 set name "forti_to_aliyun1" #指定隧道1下从FortiGate防火墙去往阿里云方向允许通过的网段。 set srcintf "port4" set dstintf "to_aliyun_test1" set srcaddr "all" set dstaddr "all" set action accept set schedule "always" set service "ALL" next edit 2 set name "aliyun_to_forti1" #指定隧道1下从阿里云去往FortiGate防火墙方向允许通过的网段。 set srcintf "to_aliyun_test1" set dstintf "port4" set srcaddr "all" set dstaddr "all" set action accept set schedule "always" set service "ALL" next edit 3 set name "forti_to_aliyun2" #指定隧道2下从FortiGate防火墙去往阿里云方向允许通过的网段。 set srcintf "port4" set dstintf "to_aliyun_test2" set srcaddr "all" set dstaddr "all" set action accept set schedule "always" set service "ALL" next edit 4 set name "aliyun_to_forti2" #指定隧道2下从阿里云去往FortiGate防火墙方向允许通过的网段。 set srcintf "to_aliyun_test2" set dstintf "port4" set srcaddr "all" set dstaddr "all" set action accept set schedule "always" set service "ALL" next end
配置访问VPC的静态路由。
config router static edit 1 set dst 10.0.0.0 255.255.0.0 set priority 0 set device "to_aliyun_test1" next edit 2 set dst 10.0.0.0 255.255.0.0 set priority 10 #降低指向隧道2路由的优先级,使流量优先通过隧道1传输。 set device "to_aliyun_test2" next end
BGP动态路由方式
登录FortiGate防火墙命令行配置界面。
为FortiGate防火墙添加IPsec-VPN第一阶段配置(IKE配置)。
#为隧道1添加IPsec-VPN第一阶段配置 config vpn ipsec phase1-interface edit "to_aliyun_test1" set interface "port1" #指定接口为公网出口的接口。 set ike-version 2 set peertype any set net-device disable set proposal des-sha1 set localid-type address #指定localid的格式为IP地址格式,与阿里云侧隧道1 remoteid的格式保持一致。 set dhgrp 2 set remote-gw 8.XX.XX.146 #指定隧道1的对端地址为VPN网关实例的IPsec地址1。 set psksecret 123456**** #指定隧道1的预共享密钥,阿里云侧和FortiGate防火墙侧需保持一致。 next end #为隧道2添加IPsec-VPN第一阶段配置 config vpn ipsec phase1-interface edit "to_aliyun_test2" set interface "port1" #指定接口为公网出口的接口。 set ike-version 2 set peertype any set net-device disable set proposal des-sha1 set localid-type address #指定localid的格式为IP地址格式,与阿里云侧隧道2 remoteid的格式保持一致。 set dhgrp 2 set remote-gw 8.XX.XX.74 #指定隧道2的对端地址为VPN网关实例的IPsec地址2。 set psksecret 123456**** #指定隧道2的预共享密钥,阿里云侧和FortiGate防火墙侧需保持一致。 next end
为FortiGate防火墙添加IPsec-VPN第二阶段配置(IPsec配置)。
#为隧道1添加IPsec-VPN第二阶段配置 config vpn ipsec phase2-interface edit "to_aliyun_test1" set phase1name "to_aliyun_test1" #关联隧道1的phase1-interface。 set proposal des-sha1 set dhgrp 2 set auto-negotiate enable set keylifeseconds 86400 next end #为隧道2添加IPsec-VPN第二阶段配置 config vpn ipsec phase2-interface edit "to_aliyun_test2" set phase1name "to_aliyun_test2" #关联隧道2的phase1-interface。 set proposal des-sha1 set dhgrp 2 set auto-negotiate enable set keylifeseconds 86400 next end
配置防火墙策略。
config firewall policy edit 1 set name "forti_to_aliyun1" #指定隧道1下从FortiGate防火墙去往阿里云方向允许通过的网段。 set srcintf "port4" set dstintf "to_aliyun_test1" set srcaddr "all" set dstaddr "all" set action accept set schedule "always" set service "ALL" next edit 2 set name "aliyun_to_forti1" #指定隧道1下从阿里云去往FortiGate防火墙方向允许通过的网段。 set srcintf "to_aliyun_test1" set dstintf "port4" set srcaddr "all" set dstaddr "all" set action accept set schedule "always" set service "ALL" next edit 3 set name "forti_to_aliyun2" #指定隧道2下从FortiGate防火墙去往阿里云方向允许通过的网段。 set srcintf "port4" set dstintf "to_aliyun_test2" set srcaddr "all" set dstaddr "all" set action accept set schedule "always" set service "ALL" next edit 4 set name "aliyun_to_forti2" #指定隧道2下从阿里云去往FortiGate防火墙方向允许通过的网段。 set srcintf "to_aliyun_test2" set dstintf "port4" set srcaddr "all" set dstaddr "all" set action accept set schedule "always" set service "ALL" next end
为隧道接口配置BGP IP地址。
config system interface edit "to_aliyun_test1" set ip 169.254.10.2 255.255.255.255 #配置隧道1接口的BGP IP地址。 set remote-ip 169.254.10.1 255.255.255.255 #指定隧道1对端的BGP IP地址。 next edit "to_aliyun_test2" set ip 169.254.20.2 255.255.255.255 #配置隧道2接口的BGP IP地址。 set remote-ip 169.254.20.1 255.255.255.255 #指定隧道2对端的BGP IP地址。 next end
配置BGP动态路由。
config router bgp set as 65500 set router-id 122.XX.XX.248 config neighbor edit "169.254.10.1" #指定隧道1的对端BGP邻居。 set remote-as 65535 edit "169.254.20.1" set remote-as 65535 #指定隧道2的对端BGP邻居。 next end config network edit 1 set prefix 192.168.0.0 255.255.0.0 #宣告本地数据中心侧需要和VPC互通的网段。 next end config redistribute "connected" #将直连接口的路由重定向发布到BGP中。 set status enable end end