从外包到开发(第2部分)

В 以前的文章,我谈到了 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微软直接移除了相关部分的所有非微软分支。谷歌 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, 将内部站点添加到 Intranet 区域 и 向桌面上的所有用户分发快捷方式.

我们认为对于 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 设备的用户只需单击一下即可连接到公司基础设施。

我真的很喜欢这样一个事实:拥有大量的系统用户,你不必绞尽脑汁思考人们需要什么以及什么会更方便。 他们自己写下自己的愿望,所以近期的发展计划有很多。

与此同时,我们现在计划开始将该系统翻译成英文并在国外分发。 我们还不知道如何将产品分销到国外,我们正在寻找选择。 也许稍后会有一篇单独的文章来讨论这个问题。 也许读过这篇文章的人能够建议所需的向量,或者他自己知道并知道如何做到这一点并会提供他的服务。 我们将感谢您的帮助。

来源: habr.com

为具有 DDoS 保护、VPS VDS 服务器的站点购买可靠的主机 🔥 购买具备 DDoS 防护的可靠网站托管服务,包括 VPS 和 VDS 服务器 | ProHoster