V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
HawkinsSherpherd
V2EX  ›  宽带症候群

[疯狂网络妄想] 网络功能容器化的家用路由器

  •  
  •   HawkinsSherpherd · 1 天前 · 1213 次点击

    为什么要这么做?

    • 容器化的话,安装和卸载一些网络功能就不至于留下一地狼藉了。想象一下你编译一些稀奇古怪的软件后留下一些自己都不知道的无用依赖。或者用包管理卸载软件但卸载不干净,还是会留下一些无用依赖浪费空间。

    • 更灵活的网络功能编排。我可以轻松地安排一台或多台完全功能的,独立的虚拟路由器,让它们运行在不同的网络命名空间里。

    物理规格的展望?

    • 至少两张物理网卡
    • 一张连接到宿主机的网络协议栈的默认网络命名空间,用作带外管理
    • 一张用于业务网络,最好支持 SR-IOV ,不排除用户有一些更疯狂的展望

    宿主机上要装什么?

    • Debian 12 这样的主流 Linux 发行版
    • 容器运行时,像 Docker 这样的
    • dnsmasq ,用来给连接带外管理口的管理工作站动态分配地址

    怎么实现路由器功能?

    在宿主机上创建至少一个业务网络命名空间,并让虚拟路由器功能容器使用它。

    我目前想到了两种路线:

    • 路线 A:控制与数据平面运行在同一容器中,使用 Linux 自带的网络协议栈
      • 需要高级路由功能就找 BIRD ,FRR 的容器,不需要就随便拉个原装镜像,自己弄弄路由相关的启动配置
    • 路线 B:控制与数据平面分离,使用高性能用户态网络协议栈作为数据平面(如 VPP )

    网络功能如何运行在容器里?

    • 将它们放到业务网络命名空间中
    • 你弄了个 PPPoE 客户端容器,你在上面建立了连接,这个接口也会出现在路由器容器里面
    • 运行一个 dnsmasq 容器,它能够使用路由器容器相同网络空间中的套接字

    运行虚拟机?

    • 更改虚拟机网络的命名空间连接路由器容器所在网络
    • SR-IOV VF 附加到虚拟机和路由器容器上,高效交换数据
    10 条回复    2024-12-18 09:05:34 +08:00
    465456
        1
    465456  
       1 天前
    openwrt 里面装个 docker
    CatCode
        2
    CatCode  
       1 天前
    想法很好 就差一个程序员来写了
    CatCode
        3
    CatCode  
       1 天前
    @465456 不建议这么做,因为 docker 会影响 openwrt 的 UDP
    maybeonly
        4
    maybeonly  
       1 天前
    并不疯狂,我已经用了好多年了,运行良好,方便折腾。
    在 netns (容器)之间转发的数据和一般的来自外部网卡的数据,对于内核来说有略微的不同,可能线路 B 会遇到这方面的问题。
    我的做法是,直接在母鸡上操作各 netns (容器)的网络设置……比较暴力,但是省事——都在一起了,还折腾什么鸟( bird )事?
    以及,只有容器的话不是很需要 SR-IOV 的感觉。
    而且我在很多场景下只分了 netns 。
    还有一个坑,做这种东西的时候不可避免的会用到 iptables/nft ,特别是 iptables 因为内核版本的差异可能根本不好用,者也是只虚拟化 netns 的一大原因(其实刚开始做这套的时候才是 centos7 ,那时候默认还只是传统的 iptables )
    Immunize
        5
    Immunize  
       1 天前
    挺好的,可以了解下 SONiC ,大厂的自研白盒交换机就是基于 SONiC + 一堆容器服务实现的。
    julyclyde
        6
    julyclyde  
       1 天前
    把容器作为目标而非手段
    是一种病
    terrancesiu
        7
    terrancesiu  
       1 天前
    你这个不疯狂,大厂的设计都这样,用 linux 但是走用户空间,然后管理和数据分离。他们的进程管理也是用自己的方式,容器也是一种方式。
    dalaoshu25
        8
    dalaoshu25  
       23 小时 50 分钟前
    OpenWRT 不说,OP 不知道 RouterOS 7.4 之后就支持 container 了?既然能访问 V2EX ,为什么不在妄想之前先 google 一下?重新发明车轮很有意思吗?
    thereone
        9
    thereone  
       23 小时 18 分钟前
    最终目标是是什么,就是为了容器化而容器化?
    不是和业务和需求相关的?真想要那就直接上现成的 NFV 何必搞这么多容器 H3C VSR1000 vyos routeros 华为 AR1000V openwrt 也可以实现。需要区分用 vxlan 就行,如果用的 PVE8 那自带的 SDN 功能不就可以了,上 VXLAN 加 vyos 或者 H3C VSR1000
    yyysuo
        10
    yyysuo  
       11 小时 20 分钟前
    v6 怎么处理。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3230 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 20ms · UTC 12:26 · PVG 20:26 · LAX 04:26 · JFK 07:26
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.