关于Linux的一些想法

背景

最近买了一个Raspberry Pi,想做成一个复杂一点的家庭网关。Raspberry Pi确实是一款不错的硬件,小身材大智慧,运行一个基于Debian的Linux系统。

由于本人已经有10多年Linux使用经验,也比较喜欢研究操作系统方面的东西,在Linux方面还算积累了不少经验。配置Rasp的过程还算顺利,但还是碰到不少问题。

本人在Rasp上配置了hostapd+dnsmasq+dhcpcd+dhcpd+n2n+monit,主要提供以下几个功能:

  • 一个n2n网络,提供任意两个子网的P2P访问
  • 一条外网访问内部子网的通道
  • 一条fuck gfw的通道及WiFi热点
  • 一个可视化管理页面

整个过程还算顺利,基本上一天就搞定了,但还是遇到一些问题:

  • 服务异常退出
  • 网络访问异常

于是乎,我就开始了研究Linux网络配置的过程,这个过程非常痛苦,基本没有一篇完整的文章,只能从别人的回复中去发现真相。

由于Linux发展历史已经很长,再加之各种不同的软件与发行版本存在,即使使用相同的软件,在不同发行版本中系统配置也可能不一样,这使得发现问题的过程非常难。比如/etc/network/interfaces这个大家非常熟悉的配置文件,来自ifupdown软件包,但经过长久发展interfaces的作用在慢慢消息,但其他功能又都存在。

其次,这种软件包之间的依赖、调用关系复杂,因果关系复杂,使得发现问题的过程异常艰辛。

为什么这个难?

我们都知道Linux发展非常久了,社区一直也繁荣,成果也非常突出。但是,除开发环境,普通消费场景较少见到Linux的普遍应用。

由于本人人事软件开发差不多十年,对软件开发和软件架构也算有点心得。纵观Linux系统,由很多软件堆起来的,功能强大,扩展性强。

但是……

  • 配置文件 - 复杂,明明说对绝大多数人适用的配置,却还要写在conf中,零配置的情况几乎为零
  • 软件角色 - manager与worker角色不明,软件相互关联、相互影响,严重影响软件使用与问题判断
  • 新旧交替 - 软件更新替代界限不明,大量无用代码影响判断
  • 功能重叠 - 不同软件功能重叠,相互影响

该怎么做?

有了以上问题,本人就想该怎么做。其实本人一直很想实现以下软件架构

kernel -> systemd(boss) -> networkd(manager) -> dhcpcd+dhcpd+openresolv+dnsmasq+hostapd+…(workers)

networkd实施策略管理(manager),实现状态更新,错误判断,智能分析等,通过调用相关workers执行具体动作:

  • 向路由器获取ip/dns等
  • 设置本机路由
  • 建立wifi ap
  • 网络健康分析、智能路由、……
  • 提供网络服务(dnsmasq\nginx)

level

  • device plug
  • interface up - dhcpclient …
  • service up - dhcpcd hostapd …
  • provider up - dnsmasq nginx …

最后更新于 2023-11-30
小酌怡情
Built with Hugo
主题 StackJimmy 设计
访问量 -    访客数 - 人次