Fortigate IPSEC + OSPF + SDWAN 實作 參考資料 https://docs.fortinet.com/document/fortigate/6.2.16/cookbook/632796/ospf-with-ipsec-vpn-for-network-redundancy 前言 上一篇分享了 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. 由 Site B 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線路狀況的研判與監測,且還是可以自動交換路由,依然提供給大家參考。