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。