wangbin
  • wangbin
  • 2020-02-23
  • IT

vnstat统计vps使用的流量

一. 简介

最近买了个iplc线路nat小鸡,所有流量从内网走,既快又安全,除了每个月只有10G流量,其他都很完美。

10G流量,还是计算进和出的双向10G流量,其实只能认为是5G,这点流量看个视频基本上就gg了。

嗯,所以需要屏蔽视频。不过流量充足的时候还是想可以看看的,那就剩余流量超过3G的时候允许视频,小于3G的时候不允许,就这样。

是不是有点太折腾了呢,折腾就折腾吧,尽可能的使用资源。

二.vnstat统计vps使用的流量

查了下,vnstat可以通过分析/proc文件获取vps的网络使用情况,然后通过命令按小时、天、月展示。

安装

yum -y install vnstat

启动

systemctl start vnstat

开机启动

systemctl enable vnstat

创建网卡数据库,开始统计

如果vps是kvm架构,网卡名称是eth0,执行

vnstat -u -i eth0

ovz的话,执行,

vnstat -u -i venet0

创建网卡数据库,保险点再设置下权限

chown vnstat:vnstat -R /var/lib/vnstat/

vnstat就会在后台开始统计了

检查

可以执行

vnstat -i venet0 -l 

检查网卡实时流量,正常显示的话,就没问题啦

读取数据

按月查询流量情况,我这次用到的就是这个命令

vnstat -i venet0 -m 

按周查询流量情况

vnstat -i venet0 -w

按天查询流量情况

vnstat -i venet0 -d

按小时查询流量情况

vnstat -i venet0 -h

帮助

vnstat --help

三.屏蔽视频

屏蔽视频通过ipatables来实现

iptables -A OUTPUT -m string --string "netflix.com" --algo bm --to 65535 -j DROP

四.完整的定时监测脚本

echo ""
echo "------ vnstat"
TOTAL_USED=$(vnstat -m | tail -1 | cut -d "|" -f 3)
TOTAL_USED=$(echo ${TOTAL_USED} | cut -d " " -f 1)
echo "TOTAL_USED: ${TOTAL_USED}"

TOTAL_LEFT=$(echo "10-${TOTAL_USED}" | bc)
echo "TOTAL_LEFT: ${TOTAL_LEFT}"

VIDEO_URL_ARRAY=("netflix.com")
if [[ $(echo "${TOTAL_LEFT} <= 3" | bc) = "1" ]]; then
    # <=3
    if [[ "$(iptables -nL --line-number | grep youtube)" = "" ]]; then
        echo "开始 禁止访问视频..."
        # 禁止访问
        for VIDEO_URL in ${VIDEO_URL_ARRAY[*]}
        do
            iptables -A OUTPUT -m string --string "${VIDEO_URL}" --algo bm --to 65535 -j DROP
        done
    fi
else
    # >3
    if [[ "$(iptables -nL --line-number | grep youtube)" != "" ]]; then
        echo "解除 禁止访问视频..."
        # 解除
        for VIDEO_URL in ${VIDEO_URL_ARRAY[*]}
        do
            iptables -D OUTPUT -m string --string "${VIDEO_URL}" --algo bm --to 65535 -j DROP
        done
    fi
fi

五. 总结

一个月6块钱买的小鸡,真实5G流量,1块钱1G流量用起来很爽,真是世界加钱可及,可惜我钱不够...

就这样吧,折腾着

参考:

  1. https://www.vpser.net/manage/vnstat.html

  2. https://blog.csdn.net/qq_35899407/article/details/90061141