В ,我談到了 Veliam 創建的背景以及透過 SaaS 系統分發它的決定。在這篇文章中,我將討論我必須做什麼才能使產品不是本地的,而是公開的。關於分發是如何開始的以及他們遇到了什麼問題。
Планирование
目前面向使用者的伺服器端處於開啟狀態 Linux幾乎每個組織都有 Windows 伺服器,這一點就不能說了。 LinuxVeliam 的主要優勢在於能夠遠端連接到 NAT 後面的伺服器和網路設備。然而,這項功能嚴格依賴路由器必須是 Mikrotik 品牌。這顯然無法滿足大多數用戶的需求。我最初考慮過添加對主流廠商路由器的支援。但我意識到,這將是一場永無止境的擴展支援廠商清單的競賽。此外,即使是已經支援的路由器,不同型號的路由器也可能使用不同的命令來更改 NAT 規則。 VPN 似乎成了唯一的解決方案。
由於我們決定分發產品,但並非以開源形式,因此無法包含各種採用 GPL 等開放授權的程式庫。這又是另一個問題:在決定銷售產品後,我們不得不重寫一半的函式庫,因為它們是 GPL 授權的。如果是為自己寫,這沒問題。但對於分發來說,這就不合適了。我首先想到的 VPN 是… OpenVPN但它是 GPL 協議的。另一個選擇是使用日本的 SoftEther VPN。它的許可允許將其整合到產品中。經過幾天的各種測試,我們研究瞭如何將其整合到產品中,使用戶無需進行任何配置或了解 SoftEther VPN 的任何知識,最終我們做出了一個原型。一切都按預期運行。但不知何故,這個方案仍然讓我們感到不安,最後我們放棄了它。當然,在找到另一個方案後,我們自然而然地放棄了它。最終,所有功能都使用常規 TCP 連線實作。有些連接透過協調器工作,有些則直接使用 NAT 打洞 (NHP) 技術,這項技術也在 Free Pascal 中實現。我必須說,我以前從未聽說過 NHP。我也從未想過可以直接連接兩個都位於 NAT 後面的網路設備。我研究了這個主題,理解了它的原理,然後開始著手編寫程式碼。此方案已實現:使用者只需單擊即可透過 RDP、SSH 或 Winbox 連接到位於 NAT 後面的目標設備,無需輸入密碼或設定 VPN。此外,大多數此類連接都繞過了我們的協調器,這有助於降低延遲和連接維護成本。
伺服器部分的翻譯 Linux 上 Windows
過渡到 Windows 原因有很多。首先,Windows 內建的 wmic 不支援 WQL 查詢。而我們的系統原本就是基於 WQL 所建構的。還有一些其他原因,但我忘了我們最終放棄 WQL 的原因了。或許不同版本之間存在差異。 Windows第二個問題是多執行緒。由於找不到合適的第三方工具,而且許可證也符合要求,我只好再次啟動 Lazarus IDE,自己編寫了一個必要的工具。它以所需的物件清單和要執行的特定查詢作為輸入,並接收回應資料。所有這些都是在多線程模式下完成的。太棒了!
我為 PHP 配置好 pthreads 之後 Windows 我以為一切都會順利運行,但結果卻並非如此。經過一番調試,我發現 pthreads 似乎可以正常工作,但在我們的系統上卻無法運作。很明顯,pthreads 本身存在一些特殊問題。 Windows就是這樣。我讀過文檔,上面是這麼說的。 Windows 線程數是有限的,而且據我所知,這是預設的。這成了一個問題。因為當我開始減少應用程式運行的執行緒數時,它的運行速度變得非常慢。我再次打開 IDE,發現同一個工具已經更新,增加了多執行緒物件 ping 功能,並且還添加了連接埠掃描功能。之後,PHP 就不再需要 pthreads 了,它也不再被使用。後來,這個工具又增加了幾個其他功能,而且至今仍然可用。之後,也編譯了一個安裝程式。 Windows其中包括 Apache、PHP、MariaDB、PHP 應用程式本身以及一套用於與系統互動的實用程序,所有這些都是用 Free Pascal 編寫的。至於安裝程序,我原本以為可以很快解決這個問題,因為它非常常見,幾乎每個軟體都需要安裝程式。要嘛是我找錯了地方,要嘛是其他原因。但我遇到的產品不是不夠靈活,就是價格昂貴且不靈活。最終,我找到了一個可以滿足所有需求的免費安裝程式:InnoSetup。我在這裡寫這篇文章是因為我之前也遇到過這個問題,希望它能幫助其他人。
有利於您的客戶而拒絕插件
我之前寫過,客戶端是一個有「插件」的瀏覽器。所以有時候Chrome更新後,佈局會變得有點卡頓,或者 Windows 我會進行更新,屆時自訂的 UR 方案將會消失。我真的不想在產品的公開版本中出現這種意外。而且,每次更新後,自訂的 UR 方案都會消失。 Windows微軟直接移除了相關部分的所有非微軟分支。 Google Chrome 也不再記住用戶選擇從自訂 URL 開啟應用程式的選項,每次點擊受監控對象時都會詢問。最終,還需要與用戶本地系統進行適當的交互,而瀏覽器無法提供此功能。在這種情況下,最簡單的選擇似乎是創建自己的瀏覽器,就像現在許多人使用 Electron 所做的那樣。但是,很多東西已經是用 Free Pascal 寫的,包括伺服器端,所以他們決定用相同的語言編寫客戶端,而不是創建一個混雜的版本。於是,他們用 Chromium 核心編寫了一個客戶端。之後,它開始獲取各種綁定。
發布
最後我們為系統選擇了一個名稱。在從本地版本轉換為 SaaS 的過程中,我們不斷地進行各種選擇。由於我們最初計劃不僅進入國內市場,因此選擇名稱的主要標準是「.com」區域中是否存在未佔用或不是很昂貴的網域名稱。某些功能/模組尚未從本地版本移植到 Veliam,但我們決定將其與當前功能一起發布,並以更新形式完成其餘部分。在第一個版本中,沒有 HelpDesk、Veliam Connector,無法更改通知觸發器的閾值等等。我們購買了程式碼簽署憑證並簽署了客戶端和伺服器部分。我們為該產品編寫了一個網站,開始註冊軟體、商標等程式。總的來說,我們已經準備好開始了。儘管我們對此毫不懷疑,但由於所做的工作以及也許有人會使用您的產品這一事實而感到一絲欣喜。然後停下來。該合作夥伴表示,沒有消息通知,就不可能進入市場。沒有很多其他的東西是可能的,但沒有這個就不行。經過一番爭論,添加了與 Telegram 的集成,這適合我們。在目前所有即時通訊工具中,這是唯一一款免費提供 API 存取且無需任何複雜審批程式的即時通訊工具。同一個 WhatsApp 建議聯繫那些收取高額服務費用的提供者;所有要求不帶墊圈訪問的信件都被忽略了。好吧,Viber...我不知道現在誰在用它,因為...那裡的垃圾郵件和廣告都超乎想像。 XNUMX月底,經過一系列的內測和朋友們的測試,開放給大家註冊,並提供軟體下載。
開始分發
從一開始,我們就明白我們需要少量的系統用戶,以便他們可以在戰鬥模式下測試產品並提供一些初步反饋。在 VK 上購買的一些帖子取得了成果。第一批註冊已經到來。
這裡必須要說的是,當您的公司沒有知名品牌時進入市場,同時提供需要從伺服器和工作站輸入帳戶的無代理監控功能,是非常困難的。這讓很多人感到害怕。我們從一開始就明白這樣做會出現問題,並在技術和道德上都做好了準備。儘管 RDP 和 SSH 預設已加密,但所有遠端連線均由我們的軟體使用 AES 標準進行額外加密。來自本機伺服器的所有資料都透過 HTTPS 傳輸到雲端。帳戶以加密形式儲存。所有子系統的加密金鑰對於所有客戶端都是單獨的。對於遠端連接,通常使用會話加密金鑰。
在這種情況下,我們能做的就是盡可能開放、做好安全工作、不厭其煩地回答人們的問題,讓人們感到平靜。
對許多人來說,軟體的便利性和功能性超過了恐懼,他們註冊了。有些人在 VK 上發表的帖子中寫道,該軟體無法使用,因為這是他們的密碼的集合,通常是一家無名公司。必須說,持這種觀點的人不只一個。許多人根本不明白,當他們在作為服務運行的伺服器上安裝其他專有軟體時,它也擁有系統的完全權限,並且他們不需要帳戶來執行非法操作(很明顯,您可以更改啟動服務的用戶,但在這裡,您也可以輸入任何帳戶)。其實,人們的擔心是可以理解的。在伺服器上安裝軟體是很常見的事情,但輸入帳戶有點可怕和親密,因為一半的人對所有服務都使用相同的密碼,即使是為了測試而創建單獨的帳戶也很懶。但目前,人們信任大量的服務,並提供憑證等。我們努力成為其中一員。
有很多評論說我們從某個地方偷了它。這讓我們有點驚訝。好吧,這是一個人的意見,但這樣的評論可以在不同人的各種出版物中找到。起初他們不知道該如何應對。要麼為有些人認為在俄羅斯沒有人可以自己做任何事情而只能偷竊而感到悲傷,要麼為他們認為這只能被偷竊而感到高興。
我們現已完成取得 EV 代碼簽署憑證的程序。要獲得它,您需要經過一系列檢查並發送大量有關該公司的文件,其中一些文件必須經過律師認證。在大流行期間獲取 EV 代碼簽名證書是一篇文章的單獨主題。整個過程花了一個月的時間。這不是一個月的等待,而是不斷要求提供更多文件。也許與疫情無關,整個過程對每個人來說都花了這麼長時間?分享。
有人說我們不會使用它,因為沒有 FSTEC 憑證。我們必須解釋一下,我們無法也不會獲得它,因為要獲得此證書,加密必須符合 GOST,並且我們計劃不僅在俄羅斯分發該軟體,而且還使用 AES。
所有這些評論都讓人懷疑是否有可能推廣一種要求您在不公開的情況下輸入帳戶的產品。儘管我們知道有人會對此持非常消極的態度。註冊人數過千之後,我們就不再想了。尤其是之後,除了那些甚至沒有嘗試過該產品的人的負面評價之外,還開始出現非常愉快的評論。不得不說,這些正面評價是產品研發的最大動力。
為員工新增遠端存取功能
客戶最常見的請求之一是「允許伊凡從家裡訪問他的電腦」。我們在 Mikrotik 上設定了 VPN 並建立了使用者帳戶。但這確實是個問題。使用者無法按照說明一步一步地透過 VPN 連線。不同版本 Windows在一個Windows系統中,一切連接正常;但在另一個系統中,卻需要使用不同的協定。通常,這都需要重新配置作為VPN伺服器的網路設備,而並非所有員工都有權限存取這些設備,這很不方便。
但我們已經有了到伺服器和網路設備的遠端連線。為什麼不使用現成的傳輸並製作一個單獨的小型實用程序,您可以簡單地將其提供給用戶進行連接。我只是想確保用戶沒有在那裡輸入任何深奧的內容。只需一鍵“連接”。但是,如果該實用程式只有一個按鈕,它將如何了解連接位置?有一個想法是在我們的伺服器上在線建立所需的應用程式。系統管理員點擊「下載快捷方式」按鈕,命令會發送到我們的雲,以建立帶有硬連線資訊的單獨二進位文件,以便透過 RDP 連接到所需的伺服器/電腦。一般來說,這是可以做到的。但這需要很長時間;管理員必須先等待二進位檔案編譯完成,然後再下載。當然,可以簡單地添加第二個文件和配置,但這已經是 2 個文件了,為了簡單起見,用戶需要一個。一個文件,一鍵,無需安裝程式。在谷歌上閱讀了一些內容後,我得出的結論是,如果你在編譯後的“.exe”末尾添加一些信息,那麼它就不會惡化(好吧,幾乎)。你至少可以在那裡添加戰爭與和平,它會像以前一樣工作。不利用這一點將是一種罪。現在,您可以在用戶端中直接解壓縮該應用程式(稱為 Veliam 連接器),並在最後添加連接所需的資訊。並且應用程式本身知道如何處理它。為什麼我把「差不多」寫在括號裡高一點?因為您必須為這種便利性付出代價,因為應用程式會丟失其數位簽章。但在現階段,我們認為為了這種便利而付出的代價很小。
第三方模組許可證
我在上面已經寫過,在決定將產品公開,而不僅僅是供我們自己使用之後,我們必須努力工作,尋找一些不允許我們自己包含在我們的產品中的模組的替代品。但發布之後,卻意外發現了一件非常不愉快的事。 Veliam 伺服器位於用戶端,包含 MariaDB DBMS。而且它是 GPL 許可的。 GPL授權表示軟體必須是開源的,如果我們的產品包含具有此授權的MariaDB,那麼我們的產品必須受此授權約束。但幸運的是,這個許可證的目的是開源,而不是懲罰那些在法庭上不小心犯錯的人。如果版權所有者提出索賠,他會以書面通知侵權者,並必須在 30 天內消除侵權行為。我們自己發現了錯誤,沒有收到任何信件,並立即開始考慮如何解決問題。事實證明,解決方案很明顯——切換到 SQLite。該資料庫沒有許可限制。大多數現代瀏覽器都使用 SQLite 和許多其他程式。我在網路上找到資訊說SQLite被認為是世界上最廣泛使用的DBMS,正是因為瀏覽器,但我沒有尋找證據,所以這是不準確的資訊。我開始研究改用 SQLite 的危險。
當客戶端有數百台安裝了 MariaDB 和資料的伺服器時,這將成為一項不簡單的任務。某些 MariaDB 功能在 SQLite 中不可用。嗯,例如,在程式碼中我們使用了類似的查詢
Select * FROM `table` WHERE `id`>1000 FOR UPDATE
這種構造不僅從表中進行選擇,而且還鎖定行資料。還有幾個設計也必須重寫。但除了我們必須重寫大量查詢之外,我們還必須提出一種機制,在更新客戶端的 Veliam 伺服器時,將所有資料移植到新的 DBMS 並刪除舊的 DBMS。此外,SQLite 中的事務不起作用,這是一個真正的問題。但在閱讀了浩瀚的萬維網後,我發現在連接時透過傳遞一個簡單的命令就可以啟用 SQLite 中的事務,沒有任何問題
PRAGMA journal_mode=WAL;這樣,任務就完成了,現在客戶端的伺服器部分運行在SQLite。我們沒有註意到系統操作有任何變化。
新服務台
有必要將 HelpDesk 系統從內部版本移植到 SaaS 版本,但需要進行一些更改。我想做的第一件事是在系統中透明的用戶授權方面與客戶的網域整合。現在,為了登入 HelpDesk 並在系統中留下請求,使用者只需點擊桌面上的捷徑即可開啟瀏覽器。使用者不輸入任何憑證。 Apache SSPI 模組是 Veliam Server 的一部分,會自動在網域帳戶下對使用者進行授權。當用戶在公司網路之外時,要在系統中留下請求,他只需單擊一個按鈕,他就會在電子郵件中收到一個鏈接,通過該鏈接,他無需密碼即可登錄 HelpDesk 系統。如果使用者在網域中被停用或刪除,則 HelpDesk 帳戶也將停止運作。因此,系統管理員不需要同時監控網域和 HelpDesk 中的帳戶。一名員工辭職 - 他斷開了網域中的帳戶,僅此而已,他不會透過公司網路或連結登入系統。為了使這種整合發揮作用,系統管理員需要創建一個 GPO, и .
我們認為對於 HelpDesk 系統(至少對我們自己而言)極其必要的第二件事是,一鍵直接從應用程式連接到申請人。此外,如果系統管理員位於不同的網路上,則連線必須通過。對於外包來說這是強制性的,對於全職系統管理員來說這通常也是非常必要的。已經有幾種產品在遠端連線方面做得非常出色。我們決定為他們進行整合。我們現在已經整合了 VNC,未來我們計劃添加 Radmin 和 TeamViewer。使用我們的網路傳輸進行遠端基礎設施連接,我們使 VNC 連接到 NAT 後面的遠端工作站。 Radmin 也會發生同樣的情況。現在,為了連接到用戶,您只需點擊應用程式本身中的「連接到申請人」按鈕即可。 VNC用戶端打開並連接到申請人,無論您是在同一個網路上還是穿著拖鞋坐在家裡。首先,系統管理員必須使用 GPO 在每個人的工作站上安裝 VNC 伺服器。
現在我們自己正在切換到新的 HelpDesk 並使用與域和 VNC 的整合。這對我們來說非常方便。現在,我們可以避免為 TeamViewer 付費,我們已經使用它來運行我們的支援服務三年多了。
接下來我們打算做什麼?
我們發布產品的時候,沒有做任何有償關稅,只是簡單地將免費關稅限制在50個監視對象內。我們認為,五打網路設備和伺服器應該足以滿足每個人的需求。然後開始請求增加限制。說我們有點震驚,其實沒什麼好說的。擁有這麼多伺服器的公司真的對我們的軟體感興趣嗎?對於提出此類請求的人,我們免費延長了限制。針對他們的要求,我們詢問了一些人為什麼需要這麼多,他們是否真的有這麼多的伺服器和網路設備。事實證明,系統管理員開始以我們完全沒有計劃的方式使用系統。一切都變得簡單 - 我們的軟體開始不僅監控伺服器,還監控工作站。因此,有許多擴大限制的要求。現在我們已經推出了有償關稅,限額可以自主擴大。
伺服器幾乎總是使用儲存系統或 RAID 陣列中的本機磁碟。我們最初是為他們製造產品的。智慧監控對於這項任務來說並不有趣。但考慮到人們已經採用了監控工作站軟體,因此出現了實施SMART監控的要求。我們將盡快實施。
有了 Veliam Connector,就不再需要在企業網路中部署 VPN 伺服器、建立遠端桌面閘道 (RDGW) 或將連接埠轉送到 RDP 連線所需的機器。許多用戶僅使用我們的系統來實現這些遠端連線。 Veliam Connector 僅在以下情況下提供: Windows有些企業用戶會使用運行 macOS 的家用筆記型電腦連接到公司網路上的工作站或終端。這意味著系統管理員需要重新考慮因使用者眾多而導致的轉送或 VPN 設定問題。因此,我們目前正在完善 Veliam Connector 的 macOS 版本。屆時,使用 Apple 設備的用戶只需單擊即可連接到公司基礎設施。
我真的很喜歡這樣一個事實:擁有大量的系統用戶,你不必絞盡腦汁思考人們需要什麼以及什麼會更方便。他們自己寫下自己的願望,所以近期的發展計畫很多。
同時,我們現在計劃開始將該系統翻譯成英文並在國外分發。我們還不知道如何將產品分銷到國外,我們正在尋找選擇。也許稍後會有一篇單獨的文章來討論這個問題。也許讀過這篇文章的人能夠建議所需的向量,或者他自己知道並知道如何做到這一點並會提供他的服務。我們將感謝您的幫助。
來源: www.habr.com
