V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
solywsh
V2EX  ›  Linux

有没能按照 ip 进行流量统计的

  •  
  •   solywsh · 226 天前 · 2830 次点击
    这是一个创建于 226 天前的主题,其中的信息可能已经有所发展或是发生改变。

    想问问大家,在 Linux 平台下没有针对某一个端口,统计每个 ip 对这个端口的 INPUT 流量。

    背景是这样的,我自己搭了几个代理,然后分享给了两三个朋友使用,但是发现某一个节点流量异常,所以想统计一下哪个 ip 使用的流量比较多。之前也写了个服务定时上传 vnstat 的统计数据到时序数据库里,不过那个只能统计总的流量进出情况。

    image-20240509223133253

    27 条回复    2024-06-02 23:23:14 +08:00
    Qetesh
        1
    Qetesh  
       226 天前
    iftop ?只能看实时的速度
    lcry2023
        2
    lcry2023  
       226 天前   ❤️ 2
    x-ui 面板
    solywsh
        3
    solywsh  
    OP
       226 天前
    @Qetesh iftop 之前试过了,实时的确实不太方便统计
    mohumohu
        4
    mohumohu  
       226 天前
    nlbwmon ,openwrt 的话还有 luci 。
    solywsh
        5
    solywsh  
    OP
       226 天前
    @lcry2023 目前主要是用的 surge 的 snell 协议,面板不支持,如果到时候找不到合适的我就把协议换成 vmess 或者 trojan 吧
    kratosmy
        6
    kratosmy  
       226 天前 via iPhone
    这几个 azure 都是免费一年的吗
    solywsh
        7
    solywsh  
    OP
       226 天前
    @kratosmy 大部分是的,azure 流量超出之后会额外扣费,然后异常的节点正好就是 azure 的,我 100 刀的余额感觉都撑不过一年订阅期剩下的时间了😂我自己平时到不怎么用这几个节点,都是用机场的
    tywtyw2002
        8
    tywtyw2002  
       226 天前 via iPhone
    精细流量分析 要用 sflow 或者 netflow 啊
    linux 下生成 sflow 还是要靠抓包。
    不抓包没法从网卡统计到 ip 颗粒度的数据

    不少流量统计是统计 网卡数据包的
    yc8332
        9
    yc8332  
       226 天前   ❤️ 1
    每个人给他一个端口不就好了
    xueling
        10
    xueling  
       226 天前
    可以用我的开源项目 https://github.com/xl-xueling/xl-lighthouse.git ,只要自己写个脚本把数据上报上来就可以了,功能很强大,不过是个集群服务,需要 3 台服务器,目前单机版我还在开发。
    xueling
        11
    xueling  
       226 天前
    @xueling 单机版面向中小企业和中小数据量的业务场景使用,大概还需要 1 个月左右的时间发布。
    Int100
        12
    Int100  
       226 天前
    请问一下,这是用的什么监控工具?十分美观啊
    yph007595
        13
    yph007595  
       226 天前
    @Int100 #12 看着像 grafana
    bfdh
        14
    bfdh  
       226 天前
    iptables 加个 ACCEPT 规则,然后定期 iptables -vnL 查看这条规则命中的流量?
    stardustree
        15
    stardustree  
       226 天前
    如果是云上的服务器,一般都有 VPC 内的网络流日志,flow log 。需要额外付费。
    Int100
        16
    Int100  
       225 天前
    @yph007595 #13
    谢谢,我也觉得像 grafana
    solywsh
        17
    solywsh  
    OP
       225 天前   ❤️ 1
    @Int100 #16 就是 grafana ,写了个服务定时上传 vnstat 的数据到时序数据库,然后 grafana 把数据可视化
    yph007595
        18
    yph007595  
       225 天前
    @solywsh #17 不需要自己写服务的,telegraf 和 node_exporter 都可以收集服务器的很多信息,包括流量
    kuanat
        19
    kuanat  
       225 天前   ❤️ 2
    这个需求也算是 V2EX 上的常客了,我详细说一下思路和方向。

    Linux 网络栈是在内核里实现的,流量统计就是 packet 计数(或者计量)这个计数有几个方式:

    1. 内核态 pf 用户态 iptables

    最简单的方式就是 iptables 对 chain 计数,只要把想统计的流量走一下自定义的 chain (这个 chain 可以什么都不做),就可以利用 chain 自身计数达到目的。

    像 openwrt 之类的路由器统计内网流量基本都是这个方式,用 arp 配合 MAC 地址来区分客户端。

    这个方式的优点是轻量,缺点是要预先设定规则。你的这个场景,如果几个朋友的 IP 有比较明显的区分度,可以根据 IP 段每个人走一个规则 chain 来统计。但是对于大量无规律来源 IP 就很难写这个规则,或者写出来几万条不实际。

    2. conntrack

    想要动态处理 ip 规则,就需要做基于状态的统计。conntrack 有自己维护一套映射表,这样就无需预先知道来源 ip 就可以按需统计。优点是灵活性比较高,但是性能影响也会比上一个方法高一些。

    这两个方法的实现可以参考 https://openwrt.org/docs/guide-user/services/network_monitoring/bwmon 这个帖子 Available tools 章节,可以参考拿来用。

    第一个方案其实很好写,第二个要想自己写可能需要比较多的背景知识。

    3. 抓包自己算

    就是计量的方式,不是很推荐的做法,为了做流量统计结果把所有数据包都过滤一遍,有点杀鸡用牛刀的意思了。
    solywsh
        20
    solywsh  
    OP
       224 天前
    @yph007595 #18 因为之前没接触过时序数据库,所以还是选择了造轮子😂
    wanqingfengtao
        21
    wanqingfengtao  
       224 天前
    如果只是统计 host 流量的话,直接用 darkstat 就行了
    fangpeishi
        22
    fangpeishi  
       224 天前
    换个思路,使用的代理软件 access log 有没有相关字段,统计下上报。
    sendi
        23
    sendi  
       224 天前
    nft add rule inet traffic output ip saddr 192.168.1.100 counter
    nft add rule inet traffic input ip daddr 192.168.1.100 counter
    最近也有在搞这种 有机会可以探讨下 v(base64): d3NkMTExZjcxbwo=
    ZXiangQAQ
        25
    ZXiangQAQ  
       219 天前
    @yph007595 机场一般跑的 Project V 的服务,每个用户都有 UUID 和 Email ,直接统计就行了,服务端通过 api 暴露了 stats 的信息的,user>>>[email]>>>traffic>>>uplink/downlink 完整链路信息都看得到
    banyasmya23
        26
    banyasmya23  
       202 天前
    楼主 帖子图片用的是什么程序 请问
    solywsh
        27
    solywsh  
    OP
       202 天前
    @banyasmya23 看板是 grafana
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2576 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 05:44 · PVG 13:44 · LAX 21:44 · JFK 00:44
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.