[O365] 免費的 Visio 網頁版


在使用 Office 365 商務標準版時,忽然發現有 Visio

Visio 出現在其他應用程式

原來是精簡的網頁版。有多個樣板:

可選擇不同模板開啟

檔案內也可以已開啟所有模板可供選擇

拖拉網路設備與電腦設備

但免費的不讓我輸出任何向量檔,最多提供 Visio 原始檔下載,沒有 Visio 就不能轉換成任何向量檔,有點可惜,好歹給我 SVG 吧…

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

[網域] 個人網站更新網域


農曆年後回家後,一開始其實沒注意到

.tk

網域全面被回收了。

一開始是在公司要回傳假日要作業的檔案時,家裡 VPN 連接不上,一開始以為是家裡無線基地台問題,家裡無線基地台重開後沒用,連續更新了三版韌體 (因為中間有不能跳版的韌體) ,還因為韌體不相容,網路參數被壓回預設值,全部重設,最後確認基地台其實是沒事的,才注意到是網域出問題了。

上網翻了翻,tk 網段被國際網域交付給另一家經營,另一家官方網頁有公告,說會逐步通知網域持有者轉換。

所以緊急先買了個網域,等官方通知,等了許久還沒下文,應該是原網域公司並沒有交付聯絡資訊給新公司,所以就把緊急買的網域公開出來,會逐步更新這個網誌內相關連結。

新網域我其實以前用過。以前開 SOHO 時,公司英文名有在 Office 365 可申請免費的網域,也用過,這次剛好沒人用,就乾脆買下來:

所以個人網站首頁變成:http://www.hisdt.com/

如果網誌內相關文章還沒更新到網址的,可來此篇留言,我會優先更新該篇,沒有的話就是有空我就搜尋原網址進行更新。

Categories: 自用整理 | 標籤: | 發表留言

[Edge][Copilot] 個人帳號被當成公司帳號部分功能無法使用


前篇:[Edge][Copilot] 方便使用的登入捷徑

有提到「公司帳號就會拒絕分析左側主頁畫面」,實際上也會不能上傳 pdf 分析。

有次我在家裡電腦個人帳號碰到這問題,家裡電腦早先在 Edge 拆成多種身分帳號功能前,用過公司帳號登入,就自動被登入了,如下圖。

個人帳號 Copilot 出現已保護

我個人習慣用 google 做預設搜尋引擎,所以一開始沒注意到卡在哪,用 Bing 登入後,發現 Bing 是登入公司帳號。

Bing 網頁是用公司帳號

從 Bing 網頁切換為個人帳號後就正常。

Bing 網頁切換為個人帳號

再回到其他用個人帳號的網頁,Copilot 也正常了。

Copilot 恢復個人帳號權限

所以若發現 Copilot 被強制改成公司帳號登入時,只能到 Bing 網頁去改登入帳號。

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

[Edge][Copilot] 方便使用的登入捷徑


Edge 大概在 2023/08 左右的更新,納入了不同設定檔的架構,這個架構在 Chrome 大概早了一年以上,但對於多個帳號來說,倒是方便。

大部分人通常會有個人的微軟帳號 (以下簡稱個人帳號),如果公司有 Office 365 ,還會有公司的微軟帳號 (以下簡稱公司帳號),新版的 Edge 預設可分成個人、公司,但實務上可以多個,例如顧問職業的,可能會有個人1、個人2、公司1、公司2,這個是自由命名的,也可以叫成學校1,命名不影響功能。

如果預設只有個人、公司兩帳號,個人通常預設圖示是個人帳號的圖示,公司帳號大部分人未必上傳圖示,就會顯示成公事包,我習慣將兩種帳號的捷徑拉到開始工具列,方便點選使用,如下圖:

開始工具列的兩個 Edge 捷徑

要使用兩種帳號可以在 Edge [設定] > [個人檔案] > [其他設定檔] 來管理。

好處很多,個人帳號與公司帳號的資料可以分開同步,不互相影響。早先我還在資訊部的時候,有很多公司的網路設備、開發者帳號、各項資訊服務的管理者帳號要輸入,就統一放在公司帳號。例如行動裝置的開發者帳號分成最高權限的主帳號跟被授權的開發者帳號,我就分別對應到公司帳號與個人帳號,平常用個人帳號的 Edge 登入時,就可以避免動到最高權限的主帳號功能。

早先,在這個功能出來前,我是把公司帳號放在 Chrome ,個人帳號用 Edge 。

這個習慣到了 Copilot 以後,越發凸顯分兩個帳號的好處,下面分別是兩帳號的使用 Copilot 的畫面截圖:

個人帳號瀏覽 Copilot
公司帳號瀏覽 Copilot

左側主頁瀏覽的網址是:https://copilot.microsoft.com/

右側則是將工具列 Copilot 功能鈕點開。

可以注意到左上角藍色框框的地方,Edge 明確幫你分成 [個人] 與 [公司] ,而 Copilot 號稱保護商業資料的部分,可以從紅色框框看到,個人帳號完全沒有任何保護,但公司帳號到處提醒你受到保護。

Copilot商業資料保護的概觀:https://learn.microsoft.com/zh-tw/copilot/overviewCopilot

我自己測試,在個人帳號左側主頁不管是網頁、PDF檔案,都可以在右側工具列畫面要求 Copilot 分析,但在公司帳號就會拒絕分析左側主頁畫面,目前碰到同仁 Edge 沒有分兩種帳號的,公司帳號在登入下,可以分析左側畫面,所以應該是 Edge 在這邊還沒做的很好。

分成兩個帳號還有一個好處,登入 Office 365 會自動登入該帳號空間,不會混淆:

自動登入個人 Office 帳號
自動登入公司 Office 帳號

這也有利於平常存取不同帳號的檔案,家用檔案不會誤傳到公司帳號造成困擾。

我試用 Edge 分成個人帳號、公司帳號四個月,覺得還滿不錯的,有興趣的可以這樣管理你的 Edge 。

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

[VSCode] 趕快下載 VSCode x86 最終版 1.83.1


今天更新 VSCode 時,忽然發現 x86 版本沒了,經查 FAQ 顯示 x86 最後版本為 1.83 ,我是打算留個版本,在舊版 Windows 虛擬機可用。
引述:
Windows 32-bit versions
Windows x86 32-bit versions are no longer actively supported after release 1.83 and could pose a security risk.

說明連結:

https://code.visualstudio.com/docs/supporting/faq?#_previous-release-versions

經過實測下載,x86 最終版本為 1.83.1:

https://update.code.visualstudio.com/1.83.1/win32-archive/stable

建議有需要的趕快下載,不然就會像 Live Mail 一樣,沒下載到的就沒有了。

註:其他版本仍正常提供下載。

Categories: 自用整理, 工作點滴 | 標籤: | 發表留言

[Win11] 安裝 Windows Essentials 2012 v16.4.3528.0331


安裝方式同前,這篇只是展示 Win11 也能安裝。

先前文章:[Win10] 安裝 Windows Essentials 2012 v16.4.3528.0331

由於只需要 Windows Live Mail 跟 Movie Maker ,我並沒有全裝,全裝也沒意義。

背景則開啟 Win11 的設定,切到系統資訊,以便確認的確是安裝在 Win11 上。

選擇安裝程式

安裝好開啟一個 .eml 測試,可正常執行。

開啟測試 eMail

我自己有寫一個多檔案瀏覽器,包含支援預覽 .eml ,但使用的是 WebBrowser Control ,需要有安裝 Windows Live Mail 才能擴充支援。

不過我沒做信頭就是了。

透過 WebBrowser Control 預覽 .eml

只要當時有保留檔案,現在仍然能安裝,只是沒有安全性更新而已。

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

[Win11] 快速工具列轉到 Open-Shell 上


公司 NB 已經六歲了,到了汰舊換新的時刻,新 NB 是 Win11 的,也是我正式使用 Win11 的電腦。

我個人習慣平常用快速工具列來工作,但 Win11 的開始工具列微軟重新用 WPF 開發,沒有支援原先自訂工具列功能,對我來說,沒快速工具列覺得有點煩,而且我也討厭 Win11 的開始工具列。

例如我以前是用: [Win10] 用 Classic Shell 取代『開始工具列』

Classic Shell 因為是免費靠捐贈維運的軟體,Win10 中後期經營不下去,收掉了,不過他也把原始碼轉成 Open Source ,新版的可在 Win11 上跑,有我以前愛用的軟體,我就不找其他類似軟體測試。

新版命名為:Open-Shell

可在最新版本找到下載連結,雖然有提供舊版的語言檔下載,不過我測了有支援的功能沒多少,建議現況當成沒這語言檔。

由於 Open-Shell 只有替代了「開始」那個按鈕,所以快速工具列我就只能放在 Open-Shell 上,Open-Shell 會讓你用類似 Win7 的開始工具列,常用軟體檔案可以直接開,很方便,所以我真的不知道微軟為啥啥都要學 Mac ,Mac 的爛東西也學?有病。

我把原先 Win10 建好的捷徑複製到新電腦:[Win10] 建立新版快速工具列的目錄鍵接

我本來以為 Open-Shell 可自訂選單功能可以加入目錄鍵結,經測試無效,我改加在:

%UserProFile%

(在檔案總管網址列貼入上面字串)

快速工具列嵌入 Open-Shell

如上圖,滑鼠只要停在該清單上,可自動展開,SF 是網路芳鄰上的路徑,簡單說就是 Nas 上的路徑,可以自動展開瀏覽,不用特別開檔案總管去找。

當然到了 Win11 我終於開始試用深色樣式來跟隨大潮流,Open-Shell 感覺這塊沒做好,中間那個藍色直條的顏色沒跟到,還在 Win7 的顏色,有點小缺憾。


[2023/10/20 更新]

剛好看到 Win10 的樣式,套用進去很讚,請從此下載:

Win10 樣式:Fluent-Metro

Win11 樣式:Fluent-Refresh

另外參考官方論壇有討論到,全黑的色塊可以直接用 Win11 的開始工具列,我是用 1 x 213 pixel 黑色透明的 png 來處理。

Open Shell 套用 Win10 樣式


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

[JS] 水文統計改為 JavaScript


利用假日把水文統計網頁改為 JavaScript ,可在 Edge / Chrome 中執行,有問題再反映。

水文統計:http://www.hisdt.com/Tools/stat/Stat.asp

Chrome 執行畫面

舊版 VBScript 網頁在文末有超連結,仍可用 Edge 開啟 IE 相容模式執行。

Categories: 工作點滴, 技術分享, 決策支援系統 | 發表留言

[VBA] 轉換 Json 字串到 Excel 表格


前篇:[VBA] 抓取 Json 檔案轉入 Excel

前篇的 Json 字串解析,是從 GitHub 上抓的,別人的程式碼用一陣子總覺得全身不舒服,前陣子要處理 OCPP 的 Json 字串時,就自己寫一個。

呼叫範例:

Sub CommandOpenFile(ByVal strCommand)
   Set tSheets = ThisWorkbook.Sheets(strCommand)
   strFileName = ThisWorkbook.Path & "\ocpp.log"
   strBody = myGetStringFile(strFileName)
   arrBody = Split(strBody, vbLf)
   ubl = UBound(arrBody)
   
   iRow = 1
   For ibl = 0 To ubl
      nLoc = InStr(arrBody(ibl), StringFormat(",{0}{1}{0},{", """", strCommand))
      If nLoc > 0 Then
         sLoc = InStr(nLoc + 1, arrBody(ibl), "{")
         eLoc = Len(arrBody(ibl)) - 1
         strValue = Mid(arrBody(ibl), sLoc, eLoc - sLoc + 1)
         Set pJson = ParseJson(strValue)
         
         If iRow = 1 Then
            uCol = pJson.Count
            arrCol = pJson.Keys
            For iCol = 1 To uCol
               tSheets.Cells(iRow, 1 + iCol) = arrCol(iCol - 1)
            Next
            iRow = iRow + 1
         End If
         
         For iCol = 1 To uCol
            tSheets.Cells(iRow, 1 + iCol) = pJson(arrCol(iCol - 1))
         Next
         
         iRow = iRow + 1
         Set pJson = Nothing
      End If
   Next
End Sub

我把我的 Json 解析獨立放在一個模組內,可參考下方網址

modJsonTool.bas: https://1drv.ms/u/s!AqdV_QuSGVQUy2eZgQaLJJb2BNbz?e=7xFSKW

這段的目的是我的 OCPP.log 是一個通訊過程的紀錄檔,裡面有多段的 Json 字串,大部分的指令所形成的 Json 都比較簡單,就用一個通用的副程式解析,把相同指令的 Json 解析都扔到相同的頁籤。

OCPP 內比較複雜的類似 MetaValues 指令,因為回傳的是樹狀結構,不是列狀 (Row) ,所以要挑自己要留的欄位轉到 Excel 內,就單獨另外寫一個 Sub 處理。

Json 解析我參照前篇的架構,屬於樹狀的資料 (以 {…} 包括) 用 Dictionary 去處理,屬於陣列的資料 (以 […] 包括) ,用 Collection 處理,解析的程式碼就用遞迴處理,所以主要的只有一個函數:

Function ParseJson(ByVal strJson As String, Optional ByVal rootDelimiter As Variant)
   JsonDelimiterInit
   ubd = UBound(jsonDelimiter)
   ReDim arrIndex(ubd)
   
   ReDim colTemp(ubd) As New Collection
   fmtKeepName = "(($VbaJson${0}${1}${2}$))"
   fmtKeepLeft = 11
   
   rtnValue = Empty
   strJson = TrimEx(strJson)
   lenJson = Len(strJson)
   pbd = -1
   startLoc = 0
   
   Do
      nowIndex = lenJson + 1
      nbd = -1
      For ibd = 0 To ubd
         arrIndex(ibd) = InStr(startLoc + 1, strJson, jsonDelimiter(ibd)(0))
         If arrIndex(ibd) > 0 And nowIndex > arrIndex(ibd) Then
            nowIndex = arrIndex(ibd)
            nbd = ibd
         End If
      Next
      
      If nbd = -1 Then
         ' 沒有括號裡面開始解析內容
         Exit Do
      Else
         ' 字串的引號裡面會不會有括號?
         startLoc = arrIndex(nbd)
         endIndex = FoundBlockEndIndex(strJson, jsonDelimiter(nbd), startLoc)
         
         If endIndex > 0 Then
            pbd = nbd
            colIndex = colTemp(nbd).Count + 1
            Select Case jsonDelimiter(nbd)(0)
            Case "{"
               strObjectName = StringFormat(fmtKeepName, "Object", nbd, colIndex)
            Case "["
               strObjectName = StringFormat(fmtKeepName, "Array", nbd, colIndex)
            Case Else
               Err.Raise &H80000001, , "Json 字串解析格式錯誤"
            End Select
            
            subJson = Mid(strJson, startLoc + 1, endIndex - startLoc - 1)
            strJson = Replace(strJson, StringFormat("{1}{0}{2}", subJson, jsonDelimiter(nbd)(0), jsonDelimiter(nbd)(1)), strObjectName)
            
            colTemp(nbd).Add ParseJson(subJson, jsonDelimiter(nbd))
         Else
            Err.Raise &H80000002, , "Json 字串缺括號 " & jsonDelimiter(nbd)(1) & ",字串內容為 " & strJson
            Exit Do
         End If
      End If
   Loop
   
   If lenJson > 0 Then
      ' 回傳物件
      If IsMissing(rootDelimiter) Then
         Set rtnValue = colTemp(pbd)(colTemp(pbd).Count)
      Else
         nowDelimiter = rootDelimiter(0)
         
         Select Case nowDelimiter
         Case "{"
            ' Set rtnValue = New Dictionary ' 需在 選單 工具 設定引用項目 引用 Microsoft Scripting Runtime ,使用其中 Dictionary 類別
            Set rtnValue = CreateScriptingDictionary()
         Case "["
            Set rtnValue = New Collection
         End Select
         
         ' 解析內容
         arrItems = Split(strJson, ",")
         ubi = UBound(arrItems)
         For ibi = 0 To ubi
            arrItems(ibi) = TrimEx(arrItems(ibi))
            
            Select Case nowDelimiter
            Case "{"
               itemRow = Split(arrItems(ibi), ":")
               ubr = UBound(itemRow)
               If ubr > 1 Then
                  For ibr = 2 To ubr
                     itemRow(1) = itemRow(1) & ":" & itemRow(ibr)
                  Next
               End If
               
               For ibr = 0 To 1
                  itemRow(ibr) = TrimEx(itemRow(ibr))
               Next
               itemKey = TrimEx(itemRow(0), TES_SepcialAdd, , """'")
               strItem = itemRow(1)
            Case "["
               itemKey = CStr(ibi + 2)
               strItem = arrItems(ibi)
            End Select
         
            If InStr(strItem, Left(fmtKeepName, fmtKeepLeft)) >= 1 Then
               arrRow = Split(strItem, "$")
               Set itemValue = colTemp(CLng(arrRow(3)))(CLng(arrRow(4)))
            Else
               strValue = TrimEx(strItem, TES_SepcialAdd, , """'")
               If Len(strValue) < Len(strItem) Then
                  itemValue = strValue
               Else
                  itemValue = CVariant(strValue)
               End If
            End If
            
            Select Case nowDelimiter
            Case "{"
               rtnValue.Add itemKey, itemValue
            Case "["
               rtnValue.Add itemValue, itemKey
            End Select
         Next
      End If
   End If
   
   Set ParseJson = rtnValue
   
   Set rtnValue = Nothing
   For ibd = 0 To ubd
      Set colTemp(ibd) = Nothing
   Next
End Function

每一層物件對應到 Json 每一層。

由於用遞迴函數,如果碰上我還沒遭遇過的特殊字串,可能會卡在裡面,建議在這個函數裡面加 DoEvents ,若遭遇到無窮迴圈時,可以透過除錯模式跳出,加入特殊字串處理。

GitHub 範例要求要在 VBA 專案參照物件 (提早連結),好處是執行效能比較快,缺點是不熟的人不會處理,特別是 VBA 的安全信任一直調整,所以我改成延後連結的方式處理:

Function CreateScriptingDictionary() As Object
   Set CreateScriptingDictionary = CreateObject("Scripting.Dictionary")
End Function

目前遭遇過特殊字元已經納入處理的有這個陣列:

If Not IsArray(jsonEscape) Then jsonEscape = Array(Split("\""|\\|\/|\b|\f|\n|\r|\t", "|"), Array("""", "\", "/", Chr(8), Chr(12), Chr(13), Chr(10), Chr(9)))

我自己之後會持續使用自己程式碼,擴大支援範圍。

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

[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] 雙 WAN 備援線路


先前介紹

[RouterOS] 多孔上行設定

的本質是一個 WAN ,但避免網路線路出問題,所以透過 Bond 將多網孔綁成一孔來上行,得到備援線路機制。

這次介紹的是在已經有 WAN 的情況下,再加一路 WAN 來進行不同網路間的備援,一般情況會選用不同的 ISP 業者,避免單一業者出問題後,備援網路也不通,這次是以 4G 網路做備援,要哪家業者,接哪家的 SIM 卡即可。

開始之前,可以先看一下原廠的文件:

高可用度解決方案 High Availability Solutions

網路架構大概是這樣:

網路分類BridgeGateway
光纖網路WANBridgeWan172.16.60.1/24
行動網路WANBridgeLTE172.22.0.1/24
區域網路LANBridgeLan10.1.*.1/24

行動網路我選擇一台工業級的 4G Router ,其他設備參閱上面連結的文章,網路設備我用停用的庫存備品 RB450 來測試,RouterOS 版本為 v7.7 。

在一般範例通常不用 Bridge 而用網孔,用 Bridge 的好處是可以多孔設定,屆時網孔故障後可以快速換孔,必要時可以做 Bond 來多條網路線共用,所以我習慣用 Bridge ,當然用了 Bridge 效能會慢一點。

這篇主要介紹新增第二外網,所以只有一個外網的基礎設定就不再介紹,請參考相關前文。若有需要,可以依流程繼續新增更多的外網。

首先新增一個 Bridge,取名為 BridgeLTE ,其他使用預設值不用動。

新增一個預設的 Bridge

指定網孔加入 BridgeLTE,這邊是測試,就只加入一個網孔,如果網路線只有室內配線通常可以不考慮多孔,也就是一般辦公室環境。工業級設備通常會跨到好幾個不同接地的區塊,就要考慮因浪湧造成直接連接的網孔被擊穿故障,所以就會考慮多孔備援的情形。

網孔2 加入 BridgeLTE

在 Interface List 中,將 BridgeLTE 加到 WAN 。

Interface List

設定 BridgeLTE 在 4G Router 下的 LAN IP,這樣如果有多個網孔,隨便插一孔,也會用 BridgeLTE 的 IP 上網。

LAN IP 設定

在 Route 加入外部 IP 的 Gateway 。優先順序是靠距離 (Distance) 調整。如果是要走負載平衡,也就是同時生效的時候,通常會跟 BridgeWan 相同,在 RouterOS 預設為 1 ,這邊希望 BridgeLTE 是備援架構,BridgeWan 若正常為優先通道,所以 Distance 設定為 2 ,優先順序可以依照此原則調整。

加入 Route 的 Gateway

基本上到這裡就設定完畢,可以透過網路線插拔後,執行 traceroute (內建工具) 或在 Windows 下執行 tracert 來觀測 RouterOS 經過不同網路連接到目的地。

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

[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 則迴響

[VBA] 抓取 Json 檔案轉入 Excel


周一同事說,有個政府網頁的數據因為直接 Show 圖上,當滑鼠停在上面才會跳出數據,所以必須一筆一筆透過移動滑鼠來讀取並記錄。我回覆說,可以把網頁提供給資訊部,看看能不能協助存取。

昨天我收到網址,並由同事告訴我她要抓甚麼數據,確認後,開啟 Edge 的開發者模式,馬上就確認是透過 AJAX 讀取資料更新畫面。

用 Edge 測試了幾個網址,資料內容是 Json 格式,都可以直接撈出來,大概沒啥阻擋,打算用過去寫好 .Net framework 的 WebClient 去抓,一測試,WebClient 連線能建立成功,但是無法取得資料流,檔案大小都是 0 到逾時。


註:寫部落格時才想到,可能是 https 加密問題… 參考先前紀錄:

[CLR] .Net framework 2.0 WebClient 連接 https


剛好我以前是用 VBScript 寫過 AJAX ,有現成程式碼拷貝到 Excel 去測試,在 Excel 測 xmlhttp 抓資料就正常,所以可以推論這個網站有針對 http protocol 的 Header 做偵測與阻擋。

透過 xmlhttp 抓 AJAX 取得 Json 資料後,問題在 Json 解碼,這個在 GitHub 有現成程式碼可以引用:

GitHub – VBA-tools/VBA-JSON: JSON conversion and parsing for VBA

我直接引用他寫好的 JsonConverter ,見下圖的專案視窗。

上面網址的最下方說明,要同時引用他另一個專案:

GitHub – VBA-tools/VBA-Dictionary: Drop-in replacement for Scripting.Dictionary on Mac

我在 Excel 365 跑這段程式碼的時候,會因為他自建類別 Dictionary ,與 Scripting.Dictionary 不相容,所以我去修改他的類別,把原始 Scripting.Dictionary 透過 .This 丟出來,就可以順利的完成執行。

主要程式碼如下圖:

VBA 透過 XmlHttp 抓取 AJAX 資料並分析匯入

順利把 Json 共 24 欄 12,313 列資料匯入 Excel 。

已匯入的原始資料

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

[IE11] 2023/02/14 後無法單獨執行 IE


農曆年後,很多新聞報導微軟要在這個月 (02/14) 的安全性更新時,把 IE11 斃掉。

02/14 是西雅圖時間,所以我從 02/15 測試。

02/15 的 Edge 更新完,點選 IE11 ,會自動切換到 Edge ,經追蹤後,設定畫面沒改,還是如下方所示,但是紅圈框起來的「永不」會變成未選擇,只要人工手動改回「永不」,IE11 還是開得起來。

選擇永不就搞定

02/16 的 Edge 更新完,點選 IE11 ,又自動切換到 Edge ,本來以為要再改一次,但是不是,整個選項沒了。

[更新]

我有截圖放在 FB 上,這張圖才是 02/16 的截圖。

沒有永不可選擇

[更新]

這張圖是寫文章時抓的,所以看起來又改一版,上下數來就有三個版。

已經沒有永不可以選擇

想要讓 IE11 繼續跑,只好拜託 google 大神。

最早比較完整的可能是 2020/08/10 這篇:

Internet explorer Edge addon, begone!

從這篇後找到關鍵字後,可以找到 2020/08/04 論壇上有:

IEToEdge BHO appears in IE 11 after July 2020 Updates

再更早通常跟防毒軟體有關,看起來是防毒軟體發現新的機碼被標記。

依照上面文章將

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\Ext\CLSID\{1FD49718-1D00-4B19-AF5F-070AF6D5D54C}

設定為 0 後,IE11 又恢復可以開啟的狀態。

既然微軟打算斃掉 IE11 ,也不強迫大家硬要用 IE11 ,直接在 Edge 跑 IE11 看看,有此需求的,建議先從設定將工具列 IE11 圖示打開會比較方便,如下圖:

在 Edge 啟用 IE11 按鈕

依照先前網誌測試幾頁 IE11 專屬網頁:

[IE11] ActiveX 在獨立網頁可正常執行

測試包含 ActiveX 跟 VBScript 的 OWC 元件範例網頁正常 (網頁圖表範例) ,連入時,記得點選工具列上的 IE11 圖示,會顯示 Edge 正在跑 IE11 模式:

用 Edge 跑包含 OWC 的網頁

其次測試很多同業叫我改版的水文統計網頁,這是用 asp + VBScript 寫的 (水文統計線上分析):

Edge 跑 VBScript + DHTML 的內容

再來測試網友叫我改的 BBS 年代的網文排版工具 (線上排版工具)

時代的遺跡:BBS 網文排版工具

我在 IE 全盛年代時,因為當時 HTML5 + SVG 還沒出來,大量採用 DHTML + VML ,VML 是 w3c 承認的格式,但是只有提出的微軟用,所以只被 IE 支援,但在那個年代網頁向量繪圖只有 VML ,沒得選,而使用 VML 縮放點陣圖是採比較耗 CPU 的重繪縮圖,不是直接抽點變得有點像是馬賽克,所以我都用 VML 縮圖,目前為止,Chrome / Edge 在縮小圖片時,還是採用抽點縮圖。

原始的檔案是做成 HTMLHelp ,可編譯成 Windows 內部說明檔的格式,其中圖檔是原圖用 1024×768 ,用 VML 語法縮圖到 512×384,滑鼠點選會顯示原圖的作法:

編譯後的線上說明檔

在 Edge 測試如下圖 (曾文水庫暨曾文溪流域資訊系統):

Edge 跑 IE11 模式支援 ActiveX + VML

最後,在 Edge 跑 IE11 除錯模式不被支援,所以這時利用本篇一開始的說明強制回 IE11 是一種選擇,微軟也提供說明在來除錯:

Use DevTools in Internet Explorer mode (IE mode)


其他參考

寫這篇文章時,找到很不錯的黑大這幾篇:

沒熬過情人節的 IE11 – 強迫導向 Edge 問題及後續停用計劃

在 Windows 11 啟動獨立 IE 應用程式

本來我們公司有自製 .Net framework 2.0 + WebBrowser Controller 可以在 Win11 下跑需要 IE11 的網頁,但用上面方法更簡潔。

先前在找 IE11 繼續跑之前,有先看到 Edge 的設定網頁,有各種功能分別可在群組原則、機碼跟 Edge 專用的 XML 設定,適用於企業管控瀏覽器:

Microsoft Edge – 原則

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

[RouterOS] 儲存空間滿溢可能會造成無法開機


MikroTik 的 CRS326-24S+2Q+RM:100M RJ45 x1 / 10G SFP+ x24 / 40G QSFP x2

瞧,有 40G 光纖孔 2 孔,又有 10G 光纖孔 24 孔的工業級網路設備,選來做 Router 也是正常的吧?

在 RouterOS v6 之前,韌體比較小,我習慣會把 log 記錄存在 flash 內,而不存在記憶體內。因為通常設備出問題後,最常見的行為是斷電重開,若是存在記憶體內,log 就變得沒有意義,所以必須存記憶卡內,而我過去習慣是保存 10,000 筆,兩個檔案就是 20,000 筆,預設是 1,000 筆兩個檔。

儲存 log 筆數

在 RouterOS v7.2 時,CRS326-24S+2Q+RM 發生 3 次死機,後來升級到 RouterOS v7.5 後,還沒碰上過,本來以為是韌體版本問題,就沒多注意。

前一篇:[RouterOS] CRS326 重設步驟

前一篇在現場跑了一個多月,碰上斷電後,就無法啟動,簡稱 A 機,現場備機先上, A 機帶回來,我依前一篇重設後正常, A 機拿去給同事才知道,實驗室環境先前有一台測掛,簡稱 B 機,但沒跟我說,我就順便拿來試。

先前的問題從 Console 模式可以看到, A 機死機的情況是跑到最後,會顯示 services stop ,B 機升級到 RouterOS v7.6 後,RJ45 網孔只收電腦封包,不回應任何封包,從 Console 模式看, B 機卻是可以登入,所以用 Console 模式登入進去看,網孔的預設參數都不見了,連預設的 bridge 都沒出現。

看了 B 機 Storage Size 沒有任何空間留下來,經查 log file 超過 2 MB ,把 flash 空間吃完,刪除 log file 後,從 Console 下 Reset-Configuration 重設,就能順利開機登入,並還原參數。

因此我猜可能是 flash 儲存空間滿溢,趕快把我所有 CRS326-24S+2Q+RM 的 log 都先改為保存 2,000 筆紀錄,並把前一次的 log 刪除。

空出儲存空間

完成設備復原後,把 B 機還給同事,上網查一下,官方有說明如何把 log 存到 usb 行動碟去:

Disks – RouterOS – MikroTik Documentation

還有提到,RouterOS v7.7 可以設定當重開或斷電可以自動存到 usb 行動碟去。

從上所述,可能 RouterOS 開機需要自動備份參數或是寫入東西到儲存空間,若是儲存空間滿溢,就無法寫入了。

另外這邊有一個影片教學教把 log 存到 usb 行動碟去。

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

[RouterOS] CRS326 重設步驟


最近發生幾次 CRS326-24S+2Q+RM 在長時間執行斷電後,呈現死機,不但無法正常開機,連網孔都不回應。檢討可能原因另外開一篇說明,這邊只說明重設步驟。

重設時,我個人偏好開啟 Console 模式,這樣可以監看重設過程,如果不喜歡,就依照個人意願設定即可。

官方網站的重設步驟:Manual:Reset – MikroTik Wiki

我自己實作步驟:

1. 先斷電,Reset 按著不放,送電,約 3 秒,USER 燈閃爍,放開 Reset 鍵。

官方說明是 LED 燈,但 CRS326 除網孔外有四個燈,不知道看哪個,實測是看 USER 燈,這邊要注意,USER 燈開始閃爍就要趕快放開 Reset 鍵,大概閃爍一會熄滅後再放開 Reset 鍵就沒用了。

Console 畫面會顯示如下:

RouterBOOT backup booter 6.48.6

CRS326-24S+2Q+

CPU frequency: 650 MHz
 Memory speed: 300 MHz
  Memory size:  64 MiB
 Storage size:  16 MiB

Press any key within 2 seconds to enter setup
writing settings to flash... OK
..

loading kernel... OK
setting up elf image... OK
jumping to kernel code
Starting...
Resetting system configuration...
Starting services...
MikroTik 7.5 (stable)
MikroTik Login: 

2. 用 admin 登入 192.168.88.1/24

3. 更新韌體

Reset 只是把參數還原到預設值,韌體版本並不會變更,我在實驗室環境用 RouterOS v7.2 ,現場是 v7.5 ,因為正式版的 v7.6 已經出來了,所以我就排入工作步驟,更新到最新韌體。

Rebooting...
installed system-7.6
finishing installation...
[  477.365766] reboot: Restarting system


RouterBOOT booter 6.48.6

CRS326-24S+2Q+

CPU frequency: 650 MHz
 Memory speed: 300 MHz
  Memory size:  64 MiB
 Storage size:  16 MiB

Press any key within 2 seconds to enter setup..

loading kernel... OK
setting up elf image... OK
jumping to kernel code
Starting...
Starting services...
MikroTik 7.6 (stable)
MikroTik Login: 

4. 還原設定檔

現況已經是新韌體的空機,接下來就是把先前備份的參數檔進行還原,還原後登入驗證是否一致。

還原前仍是用 用 admin 登入 192.168.88.1/24 登入,還原後就看參數檔是啥,就改用該參數登入了。

Rebooting...
[  236.300568] reboot: Restarting system


RouterBOOT booter 6.48.6

CRS326-24S+2Q+

CPU frequency: 650 MHz
 Memory speed: 300 MHz
  Memory size:  64 MiB
 Storage size:  16 MiB

Press any key within 2 seconds to enter setup..

loading kernel... OK
setting up elf image... OK
jumping to kernel code
Starting...
Starting services...
MikroTik 7.6 (stable)
[DeviceName] Login:

先寫這篇是為了下一篇的引言,我想重設混在下一篇很亂,不如抽出來寫。

下一篇:[RouterOS] 儲存空間滿溢可能會造成無法開機

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

[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 則迴響

[RouterOS] 重設 Mac Address


RouterOS 的備份還原機制很強大,可以完全還原成原先設備設定。其中就包含 Mac Address 。

在有鎖定 Mac Address 的環境下,還原很有用,完全不用改上游端設定,但同一網段不能有相同的 Mac Address ,否則會產生封包碰撞,就會造成網路設備時斷時連。

我接受到一個任務,要測試 IPsec 一主兩從的環境進行測通,所以我先拿測試設備依據我上游端測試環境建立主網段,子網段我用主網段備份還原再來修改。

IP 相關設定設好後,發現主網段跟子網段大概 30 ~ 60 秒間會輪流斷網,以前碰過,我大概有印象是重設 Mac Address 即可,但是我忘了先前我怎麼做,為避免日後又忘記,所以我把步驟記錄下來,下次自己查網誌即可。

設定方式不複雜,大概兩個步驟。

1.

將網孔的 Mac Address 恢復成硬體預設值,硬體預設值是出廠時,商家賦予的,理論上是不會重複,但是網路設備這麼多,我認為早就重複了。

從 Interface 進去,針對每一孔網孔點開,按下 [Reset MAC Address] 即可將網孔的 Mac Address 恢復硬體預設值。

重設網孔 Mac Addr.

2.

比較麻煩的是 Bridge ,因為 Bridge 預設是自動編,重設完每一孔網孔 Mac Address 後,可以重新開機,重新開機會自動重編,若發現還是原先的 Mac Address ,就要檢查設定。

出廠預設值會把預設的 bridge 設定 Mac Address ,不過基於安全起見,全部檢查一遍,把每一個 Bridge 打開檢查一遍,有被設定 [Admin. MAC Address] 的,一律點選右邊的上箭號將該設定恢復為空值。

都改完後,重新開機,Bridge 就會自動重新編號。

其中,若是有 Bridge 只綁定單一網孔時,會使用該網孔的 Mac Address ,所以網孔的 Mac Address 一改變,就會跟著改。當然,使用中的網孔或是 Bridge 的 Mac Address 變更時,會斷網自動重連。

移除 Admin. MAC Address

這功能其實平常用不太到,不記錄下來,下次大概率又是又忘了。

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

[RouterOS] 多孔上行設定


Core Switch 使用

MikroTik 的 CRS326-24S+2Q+RM:100M RJ45 x1 / 10G SFP+ x24 / 40G QSFP x2

其中,預設上行孔為 100 M RJ45 跟 Port1 10G SFP+

上行孔我接 LAN 為 1Gb 的 4G 雙 SIM + WAN 的基地台,後來發現我的上行孔只有 100 Mb ,4G 跟 vDSL 快的時候是可以超過 100 Mb 的,所以就在中間加一台

MikroTik 的 CSS326-24G-2S+RM :1G RJ45 x24 / 10G SFP+ x2

改由光纖孔做為上行埠。

10G SFP+ Port 23/24 跟 40G QSFP Port 1/2 我拿來做 LAN ,所以我挑 10G SFP+ Port 21/22 來做 Bond ,備援線路為 100 M RJ45 。

Bond 可參考先前文章:[RouterOS] 多網孔的 Bond 設定

首先新增一個上行的橋接器,命名為 BridgeWan

新增上行的 BridgeWan

其次,新增 BondingWan 綁定 SFP+ Port 21/22 。

新增上行的 BondingWan

將 BondingWan 跟 100Mb RJ45 都透過 BridgeWan 橋接。

設定 Port 對應 BridgeWan

最後把 BridgeWan 加到 WAN 端,讓它可變上行埠。

將 BridgeWan 對應到 WAN 端

在這個設定下,Port 21/22 可以同時接兩條到上位的 Switch ,可以互相備援及負載平衡,任何一路斷訊指是從 20Gb 掉到 10Gb ,也可以只接一路。若光纖 SFP+ 相容度不佳,還可以改走 RJ45 上行,同時在上位的 Switch 若發生故障,也可以透過 RJ45 直接接到對外的 4G Router ,提高維修的彈性。

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

在 WordPress.com 建立免費網站或網誌.