Web Manager OpenVPN客户端密钥VPNFace Lite

前言


对魔术字母VPN及其原因的需求增加了,这远非网络技术所难免。


嗨,你擅长电脑吗? 帮助我有关VPN的问题?

实际上,我什至感到高兴的是,人们开始学习计算机网络的基础知识(什么是VPN,它会发生什么,以及为什么不同的网站开始使用它?),并在可能的情况下提供帮助。 我尝试推动自我配置自己的VPN服务器的过程,但我了解并非每个人都是sysadmin ,因此有些朋友只是建议购买服务器并将其交给我进行配置。


但是任何程序员都应该懒惰,以免重复重复同一件事。 一遍又一遍地执行相同的动作会磨练技能,但会杀死所有对发展和创造力(以及时间)的兴趣。


因此,在设置了第三个VPN服务器后,我意识到有必要使所有这些过程自动化并使其对用户友好 ,以便在简短指示后,即使是最普通的用户也可以与朋友或亲戚共享ovpn密钥。 甚至更好-安装系统后,用户可以以最少的技能和知识独立进行操作。


因此,VPNFace项目诞生了-一组用于管理OpenVPN服务器的用户密钥的服务器脚本,以及用于它们的Web控制面板。 经过几天的开发,我发现自己认为,要放置的功能中大约有25%不会被同一“普通用户”所主张,并且将Lite前缀添加到名称中,并且该项目的主要概念从通用设计人员变为狭narrow的头脑。工具 ,同时还大大减少了发布前的开发时间。


当然- 好吧,它从来没有那样发生过-为什么还要另外一个OpenVPN管理器? 老实说-当主核心已经在工作时,我想到了vpn管理器的其他项目,我看到了各种各样的小事情。 起初我很沮丧,我是如此愚蠢,甚至没有进行最低限度的学习(因为我特别不喜欢生产自行车),但是研究了上述项目之后,我意识到我的也有自己的优势。


主要特点:


  1. 功能极简主义:普通用户在以管理员身份与vpn交互时,仅需要几个功能-创建密钥,锁定和解锁。 如果他有一个可用的VPN服务器,则不太可能考虑创建另一个VPN服务器,也不太可能考虑更改证书中心的数据。 为了平静地使用电报 ,很少有人会需要漂亮的流量图和企业服务器的功能。
  2. 软件简约:用户唯一需要的程序是官方的OpenVPN客户端,可在所有系统和设备上使用。 按键控制面板是在浏览器中运行的Web应用程序。 管理授权由vpn密钥执行。
  3. 半固定配置:80%的用户需要相同的东西,他们不在乎网络中有哪些IP地址(他们甚至都不知道它们在那儿),另外15%的用户则需要更多,但是同样另外,剩下的5%会自己编写类似的内容,并在其中实现所需的一切,因此您不必担心它们。 但是,可以将面板手动连接到已经打开的vpn服务器,或者在标准安装之前更正证书数据。
  4. 绝对独立于托管公司或其他第三方服务-关于最神奇的托管的争议有很多破碎的副本,这完全由用户选择。 服务器的操作系统对脚本来说更重要-它是在Ubuntu / Debian系统下编写的,但是所有托管者都拥有它们。 该系统将平稳地位于内部家庭网络和公司网络中。
  5. 全新购买的服务器上最简化的安装过程:如果可以在没有用户参与的情况下完成某些操作,则可以使用硬编码来完成。 因为精简版。 是的,无法实现像Google Outline这样的安装程序,它需要通过ssh进行用户连接才能开始安装,并且需要独立购买服务器,但是有可能获得“如何通过ssh进行连接”的知识是最困难的必要之一。 使用“默认设置”,可以为用户配置“标准”配置,而不会出现任何问题。

按键控制面板


在默认安装过程中,将创建三台VPN服务器:管理员服务器,互联网服务器和黑暗服务器-从名称中不难猜测,第一台用于管理员访问服务器和键盘控制面板(如果需要,还包括ssh),第二台用于将用户立即释​​放到互联网,第三个透明地将所有可能的流量都带到tor网络(udp流量,除了DNS不会到任何地方,而且DNS转到tor)



控制面板决定由新的第六个AngularJS制成( 在安装过程中,下载了面板的编译版本,因此工作不需要角度库 )。 我喜欢Web应用程序的概念,并且如果可能的话,我会尝试朝这个方向发展。 我还想研究角材料很长时间,以便在各种项目中创建Google管理面板。


如前所述,密钥管理被简化到最低程度:


新密钥:



按键锁:



按键解锁:



下载按钮提供完成的ovpn文件以进行连接。


面板中内置了最小的用户帮助:



并且已编译的文档包含在项目中,默认情况下,该端口在管理子网的端口81上升:



Lite版本的含义还限制了语言支持-目前,整个项目仅以俄语存在,并且甚至没有在内核中使用多种语言。


服务器端


服务器端在nodejs和bash脚本上运行。 为什么是节点? 我喜欢她,她身上有很多项目。 对我来说,拥有一个vpn经理收藏似乎是个好主意。 安装脚本将拉起节点版本管理器 ,通过它安装节点v10,并创建指向系统范围文件夹的链接,以使在nodejs下编写的服务正常工作。


节点中安装的软件包也非常少-用于将项目作为系统服务启动的永久,永久服务,对于Web api,shelljs-用于执行控制台命令,表达-ip-地址和子网计算器,粉笔-输出到控制台的颜色非常明确。 当然,可以用极简主义的完美主义来简化此列表,但是Akin的第二定律显然是无处生来的(相同的定律可以应用于“ why nodejs?”等问题),尽管在其他问题上希望有极简主义,这里我决定不深入。


服务器脚本通过一组bash脚本管理openvpn服务器,并且需要特定的根目录文件结构和openvpn文件配置。 两个json文件用作数据库,它允许:


  1. 摆脱与mongo / sql之类的数据库的交互以及相关的依赖关系和复杂性
  2. 毫无问题,当在已配置的工作服务器上进行安装时,当套件中包括的安装程序甚至可能有害并且必须避免默认安装过程时,请手动或通过脚本准备“基础”(以及目录和文件的结构)(必须检查安装是否需要json并包含其内容)数据库文件)

作为独立的Web应用程序,控制面板的另一项好处是将服务器功能分离为一组单独的http api端点,这使第三方程序可以通过常规http请求管理用户密钥。


易于安装(默认)


假定这种安装将在干净的新服务器上运行。 如果已经为某些任务配置了服务器-最好参考手动安装(以免损坏现有功能)。


我喜欢nvm(节点版本管理器)的安装,在该安装中,用户只需要在终端中执行一个命令即可(他从项目站点复制了该命令),因此默认安装程序的工作方式相同。 在启动安装bash脚本运行时,iptables-persistent软件包将要求用户保存当前的iptables规则。



用户的选择没有任何区别,因为安装完成后,最后一个操作将重新配置防火墙,新的规则集将覆盖当前选择。 在工作结束时,脚本将提示您通过Web界面完成安装。



Web安装从确认服务器的公共IP地址开始。 默认情况下,Web脚本从浏览器字符串url中获取数据。 着眼于此ip,服务器代码将查找网络地址接口,以用于防火墙和openvpn服务器的将来配置。



接收网络数据后,安装程序将创建一个管理员VPN服务器。 在根目录的设置过程中生成加密密钥需要花费一些时间,而在同一机器上的开发过程中,此时间从1到15分钟不等。


创建并启动服务器后,安装程序将继续执行第二步,在此提示用户创建管理员密钥。



然后进入待机模式以连接管理员vpn。 预计vpn将连接到执行安装的同一设备上。



当用户连接到管理员vpn服务器时,它在地址10.1.0.1处可用,并且安装程序页面的jsonp请求成功传递到那里,这成为将页面重定向到内部地址并完成安装的信号。



在安装的最后阶段,将创建并配置其余两个vpn服务器(生成密码的时间* 2),tor,nginx和iptalbles。 收到完成服务器端安装的信号后,脚本会将页面重定向到主控制面板。


手动安装


在OpenVPN服务器的工作结构上手动安装控制面板需要几个步骤,并且Linux管理员在技术上是可行的(而且我认为除了他们以外的其他人可能不需要手动安装):


  1. 根据当前服务器安全性的要求以及以所需形式(服务,手册等)组织脚本的方式准备nodejs环境
  2. 准备数据和服务器目录的文件结构,创建json“数据库”
  3. 在控制面板和文档上设置Nginx代理(如果需要)

详细信息和技术细节可在在线文档中找到。


总结


我希望该项目对某人有用。


项目资料库
Angular Web Panel源代码存储库
该项目是根据MIT许可分发的,并发布以支持DIGITAL RESITANCE运动。


PS开发思路无处不在-并加强了多语言能力,摆脱了代码中的硬编码,添加了用于创建服务器,管理路由和防火墙,将系统转变为通用设计器等功能。 等,但是如何以及何时实施所有这些措施? 毫无头绪,未来将会展现。

Source: https://habr.com/ru/post/zh-CN412815/


All Articles