使用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
單隧道配置示例
場景示例
本文以上圖場景為例。某公司在阿里云擁有一個VPC,VPC網段為192.168.10.0/24,VPC中使用ECS部署了應用服務。同時該公司在本地擁有一個數據中心,本地數據中心中要與VPC互通的網段為192.168.66.0/24。公司計劃在本地數據中心與云上VPC之間建立IPsec-VPN連接,實現資源互訪。
網段規劃及VPN配置示例
網段規劃
資源 | 示例值 | |
VPC | 待和本地數據中心互通的私網網段 | 192.168.10.0/24 |
VPN網關(公網網絡類型) | VPN網關公網IP地址 | 101.XX.XX.127 |
本地數據中心 | 待和VPC互通的私網網段 | 192.168.66.0/24 |
FortiGate防火墻的公網IP地址 | 122.XX.XX.248 | |
FortiGate防火墻連接公網的物理接口 | WAN:為WAN口配置公網IP地址122.XX.XX.248 | |
FortiGate防火墻連接本地數據中心的物理接口 | LAN:為LAN口配置私網IP地址192.168.66.125/24 |
VPN配置示例
配置項 | 阿里云側示例值 | FortiGate防火墻側示例值 | |
預共享密鑰 | ff123TT**** | ff123TT**** | |
IKE配置 | IKE版本 | ikev1 | ikev1 |
協商模式 | main | main | |
加密算法 | aes | aes | |
認證算法 | sha1 | sha1 | |
DH分組 | group2 | group2 | |
SA生存周期(秒) | 86400 | 86400 | |
IPsec配置 | 加密算法 | aes | aes |
認證算法 | sha1 | sha1 | |
DH分組 | group2 | group2 | |
SA生存周期(秒) | 86400 | 86400 |
前提條件
本文僅描述如何在FortiGate防火墻中添加VPN配置,不再描述阿里云VPN網關側的配置,本文使用靜態路由方式。在開始配置前,請確保您已在阿里云側完成創建VPN網關、創建用戶網關、創建IPsec連接、配置VPN網關路由的操作。具體操作,請參見建立VPC到本地數據中心的連接(單隧道模式)。
開始配置
下文以FortiOS 7.0為例介紹如何配置FortiGate防火墻。以下內容僅作示例使用,具體配置命令請以廠商的配置手冊為準。
登錄FortiGate防火墻命令行配置界面。
為FortiGate防火墻添加IPsec-VPN第一階段配置(IKE配置)。
config vpn ipsec phase1-interface edit "to_AliCloud" set interface "wan" set peertype any set net-device disable set proposal aes128-sha1 set dpd on-idle set dhgrp 2 set keylife 86400 set remote-gw 101.XX.XX.127 #指定隧道對端地址為VPN網關實例公網IP地址。 set psksecret ff123TT**** #指定隧道的預共享密鑰,阿里云側和FortiGate防火墻側需保持一致。 next end
為FortiGate防火墻添加IPsec-VPN第二階段配置(IPsec配置)。
config vpn ipsec phase2-interface
edit "to_AliCloud"
set phase1name "to_AliCloud" #關聯隧道的phase1-interface。
set proposal aes128-sha1
set dhgrp 2
set keylifeseconds 86400
set auto-negotiate enable
next
end
配置防火墻策略。
onfig firewall address #定義地址段 edit "Local_192.168.66.0/24" set subnet 192.168.66.0 255.255.255.0 next edit "Remote_192.168.10.0/24" set subnet 192.168.10.0 255.255.255.0 next edit "AliCloud_VPN_Gateway" set subnet 101.XX.XX.127 255.255.255.255 next end config firewall policy edit 4 set srcintf "lan" set dstintf "to_AliCloud" #指定隧道下從FortiGate防火墻去往阿里云方向允許通過的網段。 set action accept set srcaddr "Local_192.168.66.0/24" set dstaddr "Remote_192.168.10.0/24" set schedule "always" set service "ALL" next edit 5 set srcintf "to_AliCloud" #指定隧道下從阿里云去往FortiGate防火墻方向允許通過的網段。 set dstintf "lan" set action accept set srcaddr "Remote_192.168.10.0/24" set dstaddr "Local_192.168.66.0/24" set schedule "always" set service "ALL" next end
配置訪問VPC的靜態路由。
config router static edit 3 set dst 192.168.10.0 255.255.255.0 set device "to_AliCloud" next edit 4 set dst 192.168.10.0 255.255.255.0 set distance 254 set blackhole enable next end
為FortiGate配置Local-in policy。
重要為FortiGate配置Local-in policy,在沒有IKE會話建立的情況下,丟棄阿里云側發來的IKE協商包。請注意此步驟非常重要,不配置很可能會出現與IPsec-VPN連接中斷后無法重新建立的情況。
config firewall local-in-policy edit 1 set intf "wan" set srcaddr "AliCloud_VPN_Gateway" set dstaddr "all" set service "IKE" set schedule "always" set action deny next end