替换寮网网关服务器的经历

我是木更津高専2019年降临日历第5天的负责人,自称学寮网络委员会顾问的ぴーおか。
根据委员会的名称,我无偿负责学寮内的网络基础设施管理和故障处理工作。
前几天我们已经完成了服务器的更换,并且稳定运行,所以我打算进行一些总结。

宿舍网络概述

我們的翻譯選擇如下:

寮內子網與校內子網(外界)通過網關服務器連接,該服務器對只通過申請過的MAC地址處理數據包。此外,每個寢室和網關服務器之間通過L2連接,並且DHCP和DNS服務也由該服務器提供。使用者需要提交申請表,網絡委員會批准並反映到服務器上才能連接到外部網絡。然而,目前只接受紙質申請。因此,”我們的第一個目標是在網絡上實現申請功能!”

传统服务器存在的问题

输入MAC地址时的问题

在申请适用时,我们需要通过SSH登录服务器,并手动将申请表的内容输入到自定义规格的CSV文件中。而且,在执行反映时,如果申请表中存在MAC地址重复或申请数量错误的情况,就会导致所有寄宿生的外部连接被断开,这是一个非常严格的规定(因为在共用路由器的寄宿生中,MAC地址的重复情况相当常见)。
因此,每年开始时,处理近200份申请表成为网络委员会的惯例活动,而且要付出极大的努力。

将秘传的设置反映脚本转化为保密的源代码。

设定反映被设计成只需执行一个shell脚本即可完成,操作本身非常简单。(前提是申请列表的CSV文件没有问题)
当我真的阅读其内容时,发现脚本调用了另一个脚本,又调用了另一个脚本,生成了设置iptables的脚本,并调用之…总体上,这是一个难以解读的状态。
也许过去只能这样做,但我也想找到一种解决办法。

无法重新复制现有的系统方式。

在实际运行的服务器上进行更改已经本末倒置,因为如果发生意外情况导致服务器无法运行,那么一切努力都将白费。
但是,在无法在另一台机器上复现相同的环境之前,无法开始开发。

基于这些原因,我们决定从零开始重新设计这个网关服务器。

新服务器的设计

利用申请Web表单的实施

由于申请列表在数据库中进行管理,因此不再需要担心MAC地址重复的问题。
而且,该网络应用程序还会生成后面提到的防火墙规则。

简化防火墙设置

以前我们通常使用iptables直接执行来管理防火墙,现在我们将使用能更简洁设置规则的ufw来管理。我们会定期更新由Web应用生成的规则,并允许来自申请的MAC地址的外部连接。

确保再现性和幂等性

我已经引入了Ansible。这是一个由RedHat开发的配置管理工具,可以自动执行各种软件包的安装和配置,避免人为错误的发生。

尽可能使用Docker容器驱动应用程序

因为我觉得在为Web应用程序建立环境和运行监视应用程序时,使用容器更容易一些。而且,容器不依赖于操作系统版本,这也是它的魅力之一。

使用 Prometheus 和 Grafana 进行监控。

我们之前一直使用Munin来进行监控,但是由于无法指定图表的时间段,感觉很不方便,所以我们进行了更改。
简单来说,Prometheus会按时间顺序存储监控数据,而Grafana会将其图表化并显示。
我们也考虑了DataDog和NetData,但是它们的存储期限较短,而且更注重实时性,感觉有些不太适合。

在更換當天遭遇的主要障礙

服务器的默认路由条目突然消失。

这次重启后修复了,但是由于不知道原因且连续发生了两次,所以即使现在是第三天稳定运行,我还是有点害怕。希望了解原因的人可以评论一下。

<2019/12/13更新>
看起来可能是因为NIC卸载引起了接口的故障。
详细信息请参阅RHEL6官方文档。

申请表格的网页加载很慢

原因是申请表格的Web页面参考了Google Fonts的内容分发网络(CDN)。由于未申请的用户无法访问外部资源,因此浏览器会在判断超时之前一直等待加载完成。

宿舍里的学生说:“有点连不上。”

大概是路由器有问题。

总结

很抱歉,由于使用了太多的工具,我无法钻研每一个工具,感到很抱歉。
实际上,虽然替代本身是为了引入Web申请而开始的,但我觉得引入Ansible的好处更大。
实际上,服务器设置工作只需输入一个命令即可完成,工作时间也只需约10分钟。
接下来,我还想在毕业前充分撰写文档,以便未来的员工能够熟练使用该系统。

毕业研究?正如您所料…

广告
将在 10 秒后关闭
bannerAds