比较少见的想写一篇随笔

说起来也比较奇怪,因为我想着把家里的网络从 OpenWRT 彻底迁出来,想用 pfSence 或者一个 Linux 来做网关。

因为 OpenWRT 一直在用别人做好的镜像,而他更多的作为一个家用路由的系统,一些功能不是很全,还有一些东西并不是十分好用。

例如,我需要一个动态路由协议的栈,让我在 GNS3 里做网络实验的路由和主机们连得了公网,并且做到动态更新,因此我给 OpenWRT 装了 quagga, 然后发现 OpenWRT 没有一个方便使用的 Webshell。。。

dnsmasq 确实比较轻量级,但很可惜我真的不太会配,而且我也没搞清楚他们如何在 Windows AD 域里进行动态更新。

我承认 OpenWRT 确实很不错,但显然他没有一个完整的 Linux 发行版那么强大,我自己需求的功能需要自行定制固件,编译起来比较麻烦,并且我没搞明白他的 NFS 挂载。

我的内网里有一台 Ubuntu 20.04 ( 他甚至在几个月前还是 CentOS 8,直到因为 CentOS 8 造成的容器运行时一堆问题之后我忍无可忍 ),专门用来跑 Docker,作为我的内网应用服务器。

所以这个 Linux 是必然会存在的,那么为什么不让他多承担点功能呢?

也许我可以考虑把 DHCP 和 DNS 交给 Windows DC 来处理,这样至少在动态更新这一块会方便很多。。。嘛?这一块我真的不是很清楚,Windows 服务器我玩的确实不是很明白。

或者把 DHCP 交给 Linux,配合 Samba 也有办法实现动态更新。

但不管怎么说,OpenWRT 要满足比较复杂的需求基本是比较困难了。

大概只是我喜欢折腾而已,毕竟这个方案并没有显得高到哪里去,家庭网络也其实根本不需要多么复杂的架构。

但是既然想到了,就想了一下可行性,发现唯一一个实现起来麻烦的东西就是 Clash, 也就是出海用的网关。

比较常见的方法就是用 rediriptables 配合把所有流量转发给 Clash,但是对于我这个机场用户,解决订阅却是个麻烦事。

说起来其实也没啥难度,毕竟就是 Shell 脚本加 Crontab 就轻松解决的问题,我对 Clash 也用不太到他的 fake-ip 之类的高端功能,但是后来发现自带的 DNS 分流总是要用的,而且我的机场给的订阅配置居然没有写 socks-portredir-port 的配置,这下子就很麻烦了。

网络上有一些订阅脚本,但多数是交互式的,显然非常不符合我要写进 Crontab 的需求,我希望这个脚本是不需要人工干预操作的,自动化他不好吗?

是的,我这个在学 Ansible,并且总归是学了编程的人非常忍受不了交互式的脚本,或者大量的重复性工作。

毕竟 Clash 的配置文件是个 YAML ,Shell 脚本貌似并不能容易的处理 YAML,因此我自己拿 Python 写了一个更新脚本。

嘛,就算不会面向对象编程,面向谷歌编程还是会的(

胶水语言还是强的,几行代码就把逻辑写出来了。

现在还没法正式给网络架构做迁移:因为我那个服务器是家用台式机改的,只有一个板载网卡,这个 “高端软路由” 不管怎么讲,总得双网口吧,所以这个脚本的 v0.1 版本就拿来给我的 Laptop 更新订阅用,写两个加端口的配置进去就够了。

但是我想说的是,作为一个运维,如果没有方便做好的实现的时候,你怎么做?

Shell 脚本我也有在写一丢丢,但是确实在很多场景,Shell 脚本是比较受限的。

于是现在又有了 Ansible,简单试用之后我确实感受到了他的强大之处。

之前我就在 Udemy 看到了那个 Python Network Programming for Network Engineers, 我在 Youtube 上也有关注 David Bombal, 作为一个 GNS3 社区活跃人物,他在 2017 年就讲过关于 Python 自动化网络的问题。这一点上我认为不管是对于 Network Engineer 还是 Linux Administrator,这一点都没什么区别,那就是以后必然是一切都要自动化的时代了。

Ansible 是一个非常好的工具没错,但一旦自带模块不能满足需求的时候呢?

DevOps 在这个时代还是蛮重要的,敏捷开发的概念我是很认同的,也就是说,我认为以后是开发要懂一些运维,运维也更要懂一些开发的时代了。

之后我要做一个基于 Jekyll 的纯前端静态页面,也许我可以通过这个项目来试一下 CI/CD 工具,至少 GitHub Action 就蛮不错的。

感觉我做了许多开发干的事情,实际上这两者我更偏爱运维。但我和一部分运维不太一样的是,我选择更多学习运维并非讨厌编程,或是不擅长编程,而是在了解两者之后再作出的选择。

因此,作为一个带专二年级生,能写一点 C,能写 Python 啥的,并且在更多了解这些之后,我还打算更多的学习编程。

哦对了,我只是个大菜鸡罢了。也许我与其他菜鸡不太一样的一点是:

我是一个有极客精神的菜鸡