Posts Tagged With: IPsec

[4G] 建立與 FortiGate 的 IPSec 連線


先前文章

[RouterOS] 建立與 FortiGate 的 IPSec 連線

是使用 RouterOS 的硬體來處理。

公司一直有使用國內廠商永洋科技的工業級 4G Router,剛好這台有 IPSec 功能,就用來測測看,測試的主機是太陽能案場建築物改建拆回,待改建完成後裝回去的設備,目前該型號已經過舊停產,要買只有新型號,就不把這台型號放上來,因為已經買不到了,永洋的設備網頁畫面幾乎一樣,應該其他型號這部分功能雷同。

這台預設會擋 ICMP 封包,設定前不知道,測試不過才知道,所以設定上要放行,但即使放行,ICMP 封包不會轉到 LAN ,所以只能對 Router 做測試。

關閉阻擋 ICMP 封包

這台支援雙 WAN ,WAN1 我讓他走光纖上網,WAN2 可以兩張 SIM 卡互相備援,一邊不通可以用另一邊,這台預設 WAN1 優先。

所以在建立 IPSec 連線時,須分別對 WAN1 跟 WAN 2 建立通道,分別取名為 toIDC 跟 toIDC4G ,連線時,因為有優先權問題,所以當 WAN1 通的時候,只有 WAN1 會建立連線,WAN2 會處於連接中的持續偵測。

最多可建立 16 條 IPSec 連線

WAN1 跟 WAN2 設定一樣,所以只列一個,FortiGate 的 IPSec 參數請參考前篇這邊只列設備參數,因為設備網頁設計為彈跳式視窗,使用 Div 標籤來做一個小畫面,不利於截圖,所以我是利用瀏覽器列印選擇範圍印出來,跟 FortiGate 呼應的變數用紅框圈起來。

設備呼應 FortiGate IPSec 的參數

連線成功就可以從狀態看到連線的情況,還滿好設定的,一次就上手。

設備狀態展示網頁

透過系統 log 可以看到我插拔 WAN1 網路線時,WAN2 會自動建立 IPSec 連線。

[日期馬賽克] 16:01:32 syslog: 04[IKE] sending DPD request 
[日期馬賽克] 16:01:32 syslog: 04[ENC] generating INFORMATIONAL_V1 request 388906204 [ HASH N(DPD) ] 
[日期馬賽克] 16:01:32 syslog: 04[NET] sending packet: from 172.16.60.239[4500] to [遠端IP馬賽克][4500] (92 bytes) 
[日期馬賽克] 16:01:32 syslog: 15[NET] received packet: from [遠端IP馬賽克][4500] to 172.16.60.239[4500] (92 bytes) 
[日期馬賽克] 16:01:32 syslog: 15[ENC] parsed INFORMATIONAL_V1 request 2283433188 [ HASH N(DPD_ACK) ] 
[日期馬賽克] 16:01:32 syslog: 03[IKE] sending retransmit 3 of request message ID 0, seq 1 
[日期馬賽克] 16:01:32 syslog: 03[NET] sending packet: from 100.120.69.136[500] to [遠端IP馬賽克][500] (409 bytes) 
[日期馬賽克] 16:01:51 syslog: 15[IKE] sending keep alive to [遠端IP馬賽克][4500] 
[日期馬賽克] 16:01:55 syslog: 05[IKE] sending retransmit 4 of request message ID 0, seq 1 
[日期馬賽克] 16:01:55 syslog: 05[NET] sending packet: from 100.120.69.136[500] to [遠端IP馬賽克][500] (409 bytes) 

我約每分鐘快速插拔 WAN1 網路線中,大部分情況都可以完成自動切換,但有發生超過 5 分鐘卡在 4G 建立 IPSec 連線沒有中斷,導致 WAN1 無法建立連線,造成雖然可以上到網際網路,但無法連接到 IPSec VPN 網段內。設備能手動中斷 IPSec 連線,讓設備自動重新建立連線,但找不到有 watch dog 或排程可以處理這塊。

Client 端對 Server 端通聯正常,ICMP 封包跟 http 封包都正常。

Client 連接 Server 的服務

Server 端對 Client 端通聯中,ICMP 封包到 Router 正常,到 Client 裝置會被擋,可能是裝置預設會擋 ICMP 封包 (這邊有確認過 Windows Client 會回應 ICMP 封包),http 封包都正常,連接的網頁是我在 NB 備份的個人網頁。

Server 連接 Client 的服務

這台設備大體上可用,因為實況上不會碰到 WAN1 經常性斷線、恢復連線,所以不太有機會碰上卡住的情形,由於這台已經停產,官方網站也沒有韌體更新,所以不確定是不是可被修復的 bug 。

Categories: 資訊管理, 工作點滴, 技術分享 | 標籤: | 發表留言

[RouterOS] 偵測 IPSec 無法連接


先前介紹

[RouterOS] 雙 WAN 備援線路

是為了替

[RouterOS] 建立與 FortiGate 的 IPSec 連線

建立備援線路,當光纖中斷時,自動改用 4G 上網,再觸發 IPSec 重新撥號。

理想很美好,現實很骨感。

我大概每分鐘將光纖網路插入、拔除的連續測試下,大部分情形,從光纖切換到 4G 約 2 秒,IPSec 重新撥號約 3 秒,從 4G 切回光纖,約 12 秒,IPSec 重新撥號約 3 秒。

如果一直穩定都是這樣,基本上是可以接受的,但麻煩就發生在有時 4G 切回光纖時,IPSec 超過 3 分鐘並未觸發重新撥號,導致 LAN 到 WAN 沒問題,但是透過 IPSec VPN 到機房異常。我是判斷可能是 4G 備援線路並未中斷,只是優先緒比光纖差,所以設備認為還連得上線,不算中斷。

首先查了資料,可以使用內建的 netwatch 去偵測網路,可以觸發斷線、恢復連線、測試等三種事件,官方說明如下:

Manual:Tools/Netwatch

Netwatch

我測試了幾個 IP ,分別用不同的方法:

netwatch 清單
1. VPN 內網的總 Gateway (10.0.0.1)

想法很簡單,不論走光纖還是 4G ,只要連不到 VPN 的 Gateway ,砍掉 IPSec ,讓系統自己連線。

但是 netwatch 不能指定從哪個介面 (Interface) 出去,所以造成 netwatch 本身就連不到 IPSec ,直接胎死腹中。

2. ISP 業者的 DNS (168.95.1.1)

想法是能上網,總能連線到 ISP 業者的 DNS 吧?結果不管是走光纖還是走 4G ,都能順利連線,退而求其次,改連線測試目標為光纖出去後第一台 ISP 業者的 Gateway ,測試結果仍是走光纖還是走 4G ,都能順利連線。所以也沒用了。

3. 光纖區網的上層 Gateway (172.16.60.1)

這個倒是滿順利的,我插、拔網路線都會引起對應事件,但這邊有個問題是,要是我 Router 沒事,出事的是光纖數據機或是 ISP 業者機房迴路,對 netwatch 來說,我這個偵測根本沒用,RouterOS 的硬體多半是工業級,可以耐溫到 70 度,但光纖數據機是商用級,只能耐溫到 40 度,經常斷網也是光纖數據機當機造成的,所以效用不大。

system log

從上述 log 可以看出,網孔1 的網路線拔除後,連不上 172.16.60.1 ,就把 IPSec 連線砍掉 (確保改由 4G 連線),系統自動連接後,把網孔1 的網路線插回,又能連上 172.16.60.1 ,仍把 IPSec 連線砍掉 (確保改由光纖連線)。

既然有 netwatch 做思路,我乾脆自己寫 script 來解決偵測問題,也是一種方案。一樣,翻出官方文件來:

Manual:Scripting

我寫兩個公用函數,一個主要功能是在指定介面下呼叫 ping 進行連線測試,一個主要功能是偵測連接不上 VPN 的 Gateway 時,把 IPSec 連線砍掉。

:global CheckConnectHost do={
   :if ( [/ping $Host interface=$Interface count=5 interval=100ms]=0)  do={
      :log warning "[自訂log識別字串]: $Interface connect $Host fail. ";
      :return false;
   } else={
#      :log info "[自訂log識別字串]: $Interface connect $Host success. ";
      :return true;
   }
}

:global CheckIPSecConnectHost do={
   :global CheckConnectHost;
   :if ( [$CheckConnectHost Host=$VpnHost Interface=$Interface]=false ) do={
      :foreach i in=[/ip/ipsec/active-peers find remote-address=$RemoteHost] do={
        :log info "[自訂log識別字串]: IPSec Active-Peers $RemoteHost STATE is $[/ip/ipsec/active-peers get (i) state]. ";
         /ip/ipsec/active-peers kill-connections;
}
      :log warning "[自訂log識別字串]: IPSec down, kill IPSec connection.";
   }
}

公用函數每次重開機需要載入記憶體,所以用開機排程執行:

開機執行排程載入 ScriptCommon

再利用排程指定從介面 BridgeLan (區域網路) 連接 IPSec VPN Gateway:

利用排程檢查遠端 VPN Gateway 是否正常連線

內建 ping 功能可以指定網孔或是 Bridge 的介面來進行連線測試,若有必要,也可以指定用網孔進行 DNS 連線測試,會比 netwatch 好用,但最終還是要看 IPSec 能不能連線,所以我沒做複雜的邏輯分別測試不同的 WAN ,直接測試 IPSec 能否正常連線,不能就砍掉讓系統自動重建。

原則上,在光纖斷網,會自動移轉到 4G ,然後自動重新撥號,我這段只是針對自動變化行為不正常時,強制斷線重連,沒有這段在一般狀況下不會有感覺,我是想,是不是因為我持續插拔網孔,讓系統的 timeout 還沒滿足,就被我當成異常… 但我不希望 IPSec 斷太久,所以超過 90 秒還連不上,我也強制中斷讓他自動重新建立連線了。

Categories: 資訊管理, 工作點滴, 技術分享 | 標籤: | 發表留言

[RouterOS] 建立與 FortiGate 的 IPSec 連線


看這篇前,最好把這一篇看一下,重複的就不說了:

[RouterOS] 建立一主二從的 IPsec 通道

我在 IDC 機房有台 FortiGate 的防火牆,已經有現成的 IPSec 的 Server 端,我需要從 Client 端的 RouterOS 建立規則進行連線。

測試的版本是 winbox 是 v3.37 版,RouterOS 是 v7.7 版。

我直接把前篇文章的 p002 進行還原,省得重新設定,所以最好把前一篇看過。

1. 建立 Profile

在 FortiGate 的設定是:

FortiGate Phase 1 Proposal

所以在 RouterOS 設定這樣:

RouterOS Profile 的設定

其中,Diffie-Hellman Group 5 的意思,稍微 Google 就能查到,這邊只貼出 5 ,其他的自己上網找:

Group 5 to use a modular exponentiation group with a 1536-bit modulus.

所以在 RouterOS 選擇 modp1536 即可。

2. 建立 Proposal

在 FortiGate 的設定是:

FortiGate Authentication
FortiGate Phase 2

在 RouterOS 建立一個新的 Proposal ,因為我上面用 IKEv1 ,所以取名成這樣,相關參數參考上方圖「FortiGate Phase 1 Proposal」、「FortiGate Authentication」

RouterOS Proposal 的設定

3. 建立 Peer

在 RouterOS 建立一個新的 Peer ,Address 輸入 IDC 機房 IPSec 伺服器的 IP,相關參數參考上方圖「FortiGate Authentication」

RouterOS Peer 的設定

4. 建立 Identity

在 RouterOS 建立一個新的 Identity ,Secret 輸入上方圖「FortiGate Authentication」中的 Pre-shared Key,My ID 輸入上方圖「FortiGate Authentication」中的 Peer ID

RouterOS Identity 的設定

5. 建立 Policy

在 RouterOS 建立一個新的 Policy ,Src. Address 輸入 Client 端網段,Dst. Address 輸入 Server 端網段

RouterOS Policy 的設定

到此就完成相關設定。

檢視 Active Peers

如果沒有封包流動,只會看到 Uptime 開始計時,這時有可能還有防火牆或路由問題,所以可以用 ping 來扔封包測試。

檢視 RouterOS Active Peers

如果 Client 端無法正確扔資料到 Server 端,可以在路由表加上設定,如反白的那行,我把遠端的封包指到區域網路內:

RouterOS Route List 加上路徑

最後做雙向測試,從 Client TraceRoute 到 Server ,並連接 Server 的服務,反過來從 Server TraceRoute 到 Client ,並連接 Client 的服務,搞定收工。

Categories: 工作點滴, 技術分享 | 標籤: | 2 則迴響

[RouterOS] 建立一主二從的 IPsec 通道


接續前篇:[RouterOS] 重設 Mac Address

前面先完成硬體初始化設定,再來做後面的 IPsec 通道建立測試。當然,IPSec 有很多重複的部分,可以把兩篇一起看,這篇第一台初始設定完成後,直接再還原兩台,調整 Mac Address 跟相關參數即可。

測試前有先上網找資料,有人提到 RouterOS v7 跟舊版不相容,比對了一下,是有些參數在 v7 跟 v6 以前不相通,所以如果使用的是舊版 RouterOS ,建議升級到 v7 以後,或是去找其他篇。

測試前,我先把相關軟硬體都更新到最新。winbox 是 v3.37 版,RouterOS 是 v7.6 版。

設備命名WANLAN建立通道
IDC (伺服器區)172.16.60.230/2410.0.0.1/24對 p00?
p001 (設備區1)172.16.60.231/2410.0.1.1/24對 IDC
p002 (設備區2)172.16.60.232/2410.0.2.1/24對 IDC
IPsec 網路概況

各網段的 Gateway 都是尾碼為 1 的 IP ,就不再贅述。

WAN 的部分實際上應該是現場的 Public IP ,因為在測試環境測,所以用虛擬網段來取代。所以 WAN / LAN 實務上不需要都是 Class C ,視需求而定。

有些介面設定其實沒有順序性,但有些介面有,我的說明只是說明順序而已,不一定需要完全依照這個順序,下面說明假定從空機開始。

這邊截圖是用 p001 為準的,因為之後有多個 p??? 可以直接複製還原。

1. 建立 Profile

預設已經有 [default] 這個 Profile ,可以直接用,一般建議是自己建立自己通道要用的加密設定,如果沒有要考慮與其他人相容,通道的加密設定通常支援選項越少越好,自動交握的時間才會短,可以提高性能,Profile 可以重複使用,所以看個人,命名我習慣是項目開頭,以便識別這個是哪個項目,我沒用加密01 (Encryption) 來命名,是因為單字太長,我直接用編碼01 (Encode01) 來命名,所以從這角度來看,命名是看自己爽度。

Add Profile

2. 建立 Proposal

同上,預設已經有 [default] 這個 Proposal ,可以直接用,我自己建一個,因為我後面要選用 IKEv2 ,所以命名為 IKEv2 。

Add Proposal

3. 建立 Peer

Peer 是一個通道要一個,看到裡面要設定 IP 就知道了,也就是這裡我選了 IKE2 ,所以我前面命名為 IKE2 。

所以在 IDC 就要建立兩個 Peer 對應到 p001 跟 p002 ,所以後續如果增加 p003、p004、…,只要到 IDC 那台去新增 Peer。

圖上的 Peer-VM 是我測試到 VM 的,跟這篇沒關係,可以不用管它。

Add Peer

4. 建立 Identity

建立身分識別時需選擇 Peer ,所以依照需求選即可, 我用預先提供共用金鑰方式,密碼可自訂,但必須兩邊一致。

一樣,無須管圖上的 Peer-VM 。

Add Identity

5. 建立 Policy

建立 Policy 時,需選擇 Peer ,另外記得通道 (Tunnel) 要打勾,[Src. Address] 輸入本地端網段,[Dst. Address] 輸入遠端網段,RouterOS v6 以前在這邊需要輸入 SA (Gateway) ,在 v7 會自動偵測,建立連線後可在 Status 看到兩邊的 SA 。

馬賽克掉的部分就是跟這篇沒關的 Peer-VM 。

Add Policy-General

在 Policy Action 頁籤中,記得選上面建立的 Proposal ,選完後按下 Ok 。

Add Policy-Action

到此就完成相關設定。

檢視 Active Peers

當 IDC 跟 p001 分別設定好後,只要網路通的話,就會自動建立連線,可以從 [Policies]、[Active Peers]、[Installed SAs] 看到,一般來說網管會看 Active Peers ,Uptime 就是建立連線後過多久,斷線會歸 0 重計,後面自然就是封包數量及位元組量。

要看 SA 的話,除了 Policies 單一 Policy 的 Status 可以看外,也可以從 Installed SAs 看到所有的 SA 。

如果要備份還原的話,我會偏向先設定 p001 ,再修改成 IDC ,後面就用 p001 備份還原。但實務上通常會先設定 IDC ,因為網管總是先處理好伺服器群,才會往下做,所以等到 p001 改好後,再備份還原 p001 給 p002 或其他。

View Active Peers

如果沒有自動建立連線,請先檢查兩側分別到兩側的 WAN IP 是否可以通連,確認後再檢查參數,也可以檢查 log ,先前我有加密選錯,試圖建立連線失敗,會顯示在 log 上。

解決 Edge to Edge 防火牆設定

如果 Active Peers 已經可以正確建立,有 Uptime ,但兩邊無法互通,建議先送 ping 封包,然後到 ip / Firewall / Connections 去檢查是不是有對應 IP 一直送封包進來,若有,通常是防火牆問題。

一般建議是向下圖一樣建立 NAT 規則。

[Src. Address] 為本地端網段,[Dst. Address] 為遠端網段。

我自己試的結果是不通,有可能是因為我的上行 WAN 不是指定給網孔而是 Bridge ,所以我用下面的 NAT 可以過。

而我有下圖的 NAT 後,把上圖的 NAT 刪除,也不影響 Edge to Edge 。

Firewall – NAT 2

一主二從測通

在總測通擷圖前,同事跟我說我把 LAN 網段搞錯了,其實應該是下面這樣,參考紅字為修改部分,所以擷圖前我把 LAN 改成最新的後,測通才擷圖。所以也應證先前前面說的,LAN 可以 Class B 跟 Class C 互混。

設備命名WANLAN建立通道
IDC (伺服器區)172.16.60.230/2410.0.0.1/16對 p00?
p001 (設備區1)172.16.60.231/2410.1.1.1/24對 IDC
p002 (設備區2)172.16.60.232/2410.1.2.1/24對 IDC
IPsec 網路修改後概況

Edge 部分分別在各區網 IP 尾碼 207 放上 Win10 電腦,分別用 ping 及瀏覽器進行測通。

可以看到 IDC 有兩個 IPsec 通道,分別來自於 p001 及 p002 。

總測試擷圖

其他

實務上,IDC 與 p001 / p002 並不是主從架構,而是平行架構,可以這樣想像,網管習慣先處理機房端,再建置各部門端,所以習慣上會把機房當主,各部門區域網路當從,但講主從可能會誤會 Client to Server 架構,實際上是 Site to Site 架構,所以要特別在最後進行補充。

就是因為實際上是平行架構,所以 p001 我也可以同時連接 VM 區,例如上面擷圖中有看到 Peer-VM 的設定,所以不是全部只能連線到 IDC ,也可以同時連線其他區網。

另外總測試擷圖看到 traceroute 部分,第一列都不通,這是因為 IPsec 通道並沒有替遠端路由自動加上路徑,若希望第一列能被偵測到,要道 ip / route 去新增,例如在 p001 要新增 10.0.0.0/16 的 Gateway 為 172.16.60.230 。

Categories: 工作點滴, 技術分享 | 標籤: | 1 則迴響

在WordPress.com寫網誌.