IPsec VPN between pfSense and AWS with BGP routing

IPsec VPN這個話題很常見,但是也很不常見,常見是因為企業應用中必然有他的影子,不常見是因為他配置好之後就幾乎再也不會去動他。

使用static routing 方式配置pfSense 到AWS的IPsec VPN,網路上的blog和youtube 有很多很多很多。

但是,使用BGP routing的我沒看到,我也不會,因為我跟BGP沒有很熟,直到我昨天發現了有一個人使用Azure 配置IPsec VPN with BGP routing的示例,所以我就照著畫葫蘆,不錯,方案可行

AWS 提供的IPsec VPN 默認就是使用BGP routing的方式,也就是說,網路上所有配置為static routing的blog和youtube,都是手動修改為static routing的,我的理解是,他們也不會

BGP routing的好處在於,一個connection 上的兩條tunnel 可以HA方式同時運行,畢竟兩條tunnel後面就是兩台ec2 instance,偶爾壞個一次,也並非是很難見到的情形,而企業應用中,高可用在很多場景下都是必要的元素。

而在我之前的使用經驗中,使用static routing的方式,flapping的情形還是很多的。

環境描述:

雲端 10.2.0.0/16
地端 10.1.2.0/24

在AWS上創建IPsec VPN 只需要點幾下,首先在VPC中創建cgw,然後創建vgw,把vgw attach到VPC,

然後創建VPN connection,在該頁面選擇之前創建好的vgw和cgw,在routing options 請保留為默認的Dynamic,也就是BGP。

在VPN connection 創建完成後,會根據客人本地使用的防火牆型號提供一個詳細的配置說明文件,文件中包含了AWS側的public IP,phase1和phase2的協商加密方式,pre-share key,BGP配置信息等,對於pfSense 來說,需要選擇Generic。

和static routing方式配置不一樣的地方是,該配置說明文件中包含了BGP配置信息,其中有雲端的AS,地端的AS,以及私有互聯IP。

到這裡,AWS上的配置就已經完成了,是不是很簡單。

接下來進行pfSense的配置,首先從Package Manager 來安裝FRR。

FRR routing daemon for BGP, OSPF。

安裝完成後,啟用FRR。

創建Route Maps,為他起個名字,Action設置為permit。

進入BGP配置,啟用BGP Routing,並設置Local AS和Networks to Distribute,這裡我們要advertise的就是本地網路10.1.2.0/24,而Local AS 65000 來自於剛才從AWS下載的配置說明文件。

接下來再打開從AWS下載的配置說明文件,裡面除了Local AS,還有AWS側的Remote AS,以及neighbor address,那麼兩條tunnel,就會有兩個neighbor。

依次添加兩個neighbor:

將neighbor添加完成後,啊,VPN還沒創建呢。

在pfSense上創建VPN的方式就不多說了,phase1 和static routing 方式一模一樣,區別在於,phase2 mode 需要修改為VTI方式,並在Networks 中填入由AWS下載的配置說明文件中分配的雲端和地端私有IP地址。

當VPN創建完成,連結成功建立後,可以從Status中來查看BGP的狀態,也可以斷掉一條測試看看。

從AWS側,你將會看到提示,有1 BGP route up,也就是上面的10.1.2.0/24。

參考文件:https://www.linkedin.com/pulse/site-to-site-vpn-between-pfsense-azure-bgp-allow-dynamic-mario-brenes-ud10e/