Fortigate IPSEC + OSPF + SDWAN 實作
參考資料
前言
上一篇分享了 Fortigate IPSEC + iBGP 的動態路由,但畢竟一般企業中鮮少使用BGP,大多反而是使用OSPF,OSPF不但能自動交換路由,同時也能 Fail Over 與 Load Balance,此篇實作帶大家一起來看看 Fortigate IPSEC + OSPF + SDWAN 有沒有搞頭。
環境說明
設計概念: 三個Site透過 IPSEC+OSPF+SDWAN 來達成多線路OSPF動態路由,任一條線路故障時可透過其他線路接續連線,並透過SDWAN來監測線路品質狀況,同時由於資訊安全控管的原則希望能統一由同一個Gateway進出。
Firmware Ver. : Fortigate-VM 7.0.15
| WAN IP |
LAN Subnets |
WAN1 IPSEC IP |
WAN2 IPSEC IP |
|
| SiteA |
WAN1 10.1.1.1 WAN2 10.1.2.1 Port4 (to Internet) |
192.168.11.254/24 192.168.12.254/24 192.168.13.254/24 |
A1toB1 172.17.1.1 A1toC1 172.17.1.6 |
A2toB2 172.17.2.1 A2toC2 172.17.2.6 |
| SiteB |
WAN1 10.1.1.2 WAN2 10.1.2.2 |
192.168.21.254/24 192.168.22.254/24 192.168.23.254/24 |
B1toA1 172.17.1.2 B1toC1 172.17.1.3 |
B2toA2 172.17.2.2 B2toC2 172.17.2.3 |
| SiteC |
WAN1 10.1.1.3 WAN2 10.1.2.3 |
192.168.31.254/24 192.168.32.254/24 192.168.33.254/24 |
C1toB1 172.17.1.4 C1toA1 172.17.1.5 |
C2toB2 172.17.2.4 C2toA2 172.17.2.5 |
設定過程(1)
設定Interface
以下設定皆以一台SiteC為範例,請對照該台設定相關對應設定至SiteB,第一階段我們先忽略SDWAN,先把IPSEC+OSPF設起來。
先把 WAN1、WAN2、LAN Interface設定好如下圖
為了方便設定,我將 LAN Interface綁成一個Zone,並且不要Block內部流量互通
設定IPSEC
至 VPN => IPSEC 建立 WAN1 IPSEC VPN,我以 C1toB1 來命名
Remote IP設定SiteB WAN1 IP,指定Pre-shared Key
本地Interface就選剛剛做好的LAN Zone,Local & Remote Subnets 都鍵入 0.0.0.0/0
Wizard會建立一堆討厭的東西,晚一點砍掉
建立SiteC WAN2 IPSEC VPN C2toB2
建好兩條VPN之後,至Policy砍掉Wizard自動建立的Policy
至Static Route砍掉Wizard自動建立的路由
至Network Interface,來進行 C1toB1、C2toB2 Interface設定
如下圖設定自己(SiteC)與對方(SiteB)的預先定義IP,Netmask設定 /32,開啟Ping
設定完後如下圖
我們將兩個IPSEC VPN綁成一個Zone (VPN_Zone),並且不要Block內部流量讓裡面介面能互通(後面會用到)
設定Firewall Policy
建立Firewall Policy,允許LAN Zone與VPN Zone互通,不要NAT
設定好後Firewall Policy如下圖
至此完成了SiteC IPSEC設定,※請依照上面步驟去完成SiteB IPSEC的步驟
當 SiteC、SiteB Firewall Policy設定完成後,你應該可以發現IPSEC Turnel已經起來了
如果還沒起來,可以透過IPSEC介面,點擊 Bring Up
從SiteC去Ping SiteB 的 IPSEC IP,已經可以Ping的到,但是SiteB的LAN Ping不到,這是正確的
下圖可知 IPSEC Interface 的路由已經起來了所以Ping的到,因為沒有LAN Subnet的路由所以Ping不到,這個部分就是要靠OSPF上場了。
設定OSPF
至 Network => OSPF,指定Router ID、Area ID、要自動交換路由的網段 ※(需要包括IPSEC介面的路由)
Interfaces將IPSEC介面加入,Network Type 選擇 "Point to Point"
※請依照上面步驟去完成SiteB OSPF設定
完成後至CLI Console,輸入下列指令可查詢OSPF Neighbor、OSPF路由
get router info ospf neighbor
get router info routing-table ospf
輸入下列指令顯示完整路由
get router info routing-table all
或者可由 Dashboard => Network => Routing,確認路由
連線測試
我們在SiteB放一台PC (192.168.21.4)、SiteC放一台PC (192.168.31.5)
Ping ok
Traceroute 確認路由
設定過程(2)
比照上述 SiteC <=> SiteB 設定過程,來完成 SiteA <=> SiteB、SiteC <=> SiteA 的設定。
設定IPSEC
設定IPSEC Turnel
設定Interface
設定IPSEC Interface IP、並把新增的IPSEC加入VPN_Zone
設定Firewall Policy
Firewall Policy由於一開始是由Zone來設定的,所以完全不需要調整
IPSEC應該就起來了
設定OSPF
將新增的IPSEC介面加入
完成後至CLI Console,查詢OSPF Neighbor、OSPF路由
get router info ospf neighbor
get router info routing-table ospf
輸入下列指令顯示OSPF路由詳細資訊
get router info ospf route
Fail Over測試
我測試的方式如下
1. 由SiteB PC連續Ping SiteC PC,先確定是走哪一條IPSEC
透過packet sniffer確認是由C1toB1過來的
2. 將C1toB1 IPSEC手動斷線,觀察是否會走另一條IPSEC
確認由C1toB1切到C2toB2
3. 將C2toB2再度手動斷線,觀察流量是否會透過SiteA過來
確認由C2toB2切到C1toA1,流量從SiteA過來了
如此一來就驗證了OSPF運作ok 👍
SDWAN設定過程
ok,OSPF運作ok了,那說好的SDWAN呢 ? 這邊哪來的SDWAN ?
別急,現在我們就來把VPN_Zone改接成SDWAN
把IPSEC從Zone移除
至Network => VPN_Zone將IPSEC移出Zone
設定SD-WAN Zone
Network => SD-WAN => Create New => SD-WAN Zone
在此建立一個OSPF_SDWAN的Zone
將剛剛移除Zone的四條IPSEC VPN新增至SD-WAN Member
到Interface也可以看到SD-WAN Zone
建立Firewall Policy
建立 LAN <=> SDWAN、SDWAN <=> LAN的 Firewall Policy,一樣皆不要做NAT。
在此要建立一條 SDWAN <=> SDWAN,使其IPSEC VPN可內部互通
OSPF設定
不需異動
用Console看一下OSPF Neighbor,看起來沒問題,路由也都有正確交換
設定SD-WAN Performance SLA
分別針對SiteB、SiteA設定線路SLA,檢查的對象就設為對方的Interface IP
Fail Over測試
再做一次Fail Over測試
1. 由SiteB PC連續Ping SiteC PC,先確定是走哪一條IPSEC
ok,目前是走 C1toB1
2. 將C1toB1 IPSEC手動斷線
流量改走C2toB2
3. 將C2toB2再度手動斷線
流量改走C2toA2
驗證了OSPF運作ok
統一上網出口
最後,我們來將 SiteA、SiteB、SiteC 設定為統一透過 SiteA 出去上網
設定SiteA Interface & SD-WAN
將SiteA Port4 接到Internet,設定SD-WAN Interface Gateway,並把Port4加入Default SD-WAN Zone
設定SiteA SD-WAN Rule
設定出Internet走Default SD-WAN Zone
設定SiteA Static Route
設定Default Route進Default SDWAN
設定SiteA OSPF Inject Static Route
設定SiteA Firewall Policy
設定 OSPF_SDWAN Zone、SiteA LAN 出Internet Firewall Policy,此處需開啟NAT
確認SiteA Default Route
確認一下上面設定進SDWAN的Static Route
get router info routing-table all
確認SiteC Default Route
可以發現OSPF自動生成了SiteC 的Default Route
到此,設定大功告成
來看一下 SiteC 的SDWAN Rule,沒有 !! 這是正確的
來看一下 SiteC 的Static Route,沒有 !! 這是正確的,因為路由我們全靠OSPF
※熟知SD-WAN設定的人應該知道※
SD-WAN設定至少要包含四個步驟
- SD-WAN線路設定
- SD-WAN Rule設定
- Static Route 指向SD-WAN
- Firewall Policy
SiteC 我們只做了 1. 跟 4. ,但卻沒有做 2. 跟 3.,也就是說其實針對LAN的部分Fortigate SD-WAN功能根本沒生效,我們只是因為需要SD-WAN Performance SLA來監測OSPF線路的狀態,所以硬把SDWAN Interface當作是上面的Zone來使用,也就是說其實理論上這樣設定是有問題的,但其實這樣設定有其好處。
有用過OSPF的MIS應該就能體會,這應該是最困擾所有MIS的事情,就是你根本不知道OSPF裡面的狀態,鍵人我就曾碰過兩地間的OSPF其中一條線路掉包很嚴重,但一直很難查出來的窘境,讓我們繼續看下去...
Internet連線測試
由SiteC PC持續發動Traceroute 8.8.8.8
確認是走A1toC1
將A1toC1斷線,改走A2toC2
將A2toC2斷線,流量改走SiteB A1toB1 過來
運作完美 ദ്ദി ༎ຶ‿༎ຶ )
OSPF Load Balance 測試
來驗證OSPF Load Balance是否正常,鍵人我將兩台PC都放到SiteC,透過這兩台PC分別Ping SiteA不同的Interface。
192.168.31.2走A1toC1去192.168.12.254,192.168.31.5走A2toC2去192.168.13.254,由此證明 IPSEC OSPF Load Balancing ok。
透過這兩台PC分別Ping Internet 8.8.8.8。
192.168.31.2走A1toC1去 8.8.8.8,192.168.31.5走A2toC2去 8.8.8.8,由此證明 IPSEC SDWAN Load Balancing ok。
結語
我中間有提到過,有用過OSPF的MIS應該就能體會,監測OSPF線路品質是最困擾所有MIS的事情,就是你根本不知道OSPF裡面的狀態好壞,鍵人我就曾碰過兩地間的OSPF其中一條線路掉包很嚴重但很難查出來的窘境,經過實作發現Fortigate 目前SD-WAN在IPSEC OSPF的搭配上雖然可以運作,但其實針對LAN的部分SD-WAN功能根本沒生效,也就是說其實理論上這樣設定是有問題的,我們只是因為需要SD-WAN Performance SLA來監測OSPF線路的狀態,所以硬把SDWAN Interface當作是上面的Zone來使用。
但透過SD-WAN下能夠監測OSPF線路品質,利用SD-WAN Performance SLA 的偵測機制確實可以大大的幫助OSPF線路狀況的研判與監測,且還是可以自動交換路由,依然提供給大家參考。