VPS 流量超限变"天价账单"?单双向计费陷阱、vnStat 限流与自动关机防护
2026-08-14 · DevCraft Studio
单向计费还是双向计费?AWS/LightSail/阿里云按量付费怎么一夜刷出天价账单?手把手教你用 vnStat 监控流量,并写脚本在流量到 90% 时自动 Telegram 通知并关机。
玩便宜 VPS 的人,大多有个错觉:流量嘛,商家送的 1TB、2TB 哪用得完,根本不用操心。这话对了一半——如果你买的是 RackNerd、ColoCrossing 这种"流量管够、用超就限速或停机、不乱扣钱"的便宜大碗商家,确实可以高枕无忧。但一旦你碰上按量付费、超额按 GB 计价的厂商(AWS、LightSail、阿里云按量、以及各种 CDN 后付费),那故事就完全反过来了。
网上隔三差五就有真实案例:有人一觉醒来,发现云账号欠了几百、几千甚至几万块——不是机器贵,是流量在被攻击或异常时被疯狂计费。这篇就用大白话,把"流量计费"这潭水给你搅清,再给你一套能落地、能保命的监控+自动关机方案。
一、先搞懂:流量到底怎么计费(单向 vs 双向)
这是整篇的地基,搞不清这个,后面全白搭。
单向计费(也叫出方向 / Egress 计费): 只统计从你的 VPS 流出去的流量(用户访问你的网站、下载你的文件、API 返回数据),流入的流量(用户上传、你拉取数据)免费不算。绝大多数主流云厂商的标准云服务器用的就是这种——阿里云 ECS、AWS EC2 都是只算出站。
双向计费(Inbound + Outbound): 进站和出站都算钱。只要数据经过公网网卡,不管进还是出,全计入账单。这种在常规云服务器里不算主流,但在某些特定产品线、共享带宽包、以及被 DDoS/CC 攻击的场景里,杀伤力极大。
举个直观的例子你就懂了:
- 你建个博客,访客看文章产生"出站流量",你偶尔传张图产生"入站流量"。博客以出站为主,入站占比极小。所以单向计费对你最友好——几乎只按访问量算钱。
- 但如果你被 CC 攻击,攻击者拼命往你服务器"灌"垃圾请求,这全是入站流量。单向计费下这些免费,你只是机器累一点;双向计费下,这些垃圾流量全额计入账单,瞬间把流量包榨干,甚至直接停机。
各家的真实姿势(以常见产品为准,具体看你账单条款):
- AWS EC2:标准做法,只算出站流量,出站价格按区域不同,跨境尤其贵。
- 阿里云 ECS:单向流出计费,只出站产生费用,流入免费。
- AWS Lightsail:套餐内含固定传输额度(3.5 刀套餐 1TB、5 刀套餐 2TB……),套餐内的额度是双向都算的;一旦超了套餐,超额部分只算出站,单价 0.09 美元/GB。
- Vultr:取"入站"和"出站"里的较大值来计费——说白了是单向逻辑。超额流量北美/西欧 0.01 美元/GB,新加坡/东京 0.025,悉尼/首尔 0.05。
所以一句话:买之前一定看清是单向还是双向,尤其是"被攻击时谁买单"这件事。
二、真实案例:一觉醒来,天价账单
光说理论没感觉,看几个真实发生过的(都是公开帖子和投诉里的故事,细节有出入以原帖为准,但逻辑都是真的):
案例一:Lightsail 莫名其妙 81 刀账单。 有用户两台 LightSail(新加坡 + 美国,都是 3.5 刀/月、含 1TB 流量),用了好几年一直稳定。某个月突然收到 81+ 刀的账单。查用量:新加坡用了 199+GB、美国用了 564+GB,都没超各自 1TB 额度,结果两边流量还是被额外单独收费了(新加坡 0.12 刀/GB、美国 0.09 刀/GB)。最后跟客服扯皮,账单免了,但客服也没说清为啥额度内的流量还被计费。教训:Lightsail 的计费坑,连老用户都可能踩。
案例二:阿里云 CDN 被刷,一早欠费 600 多停机。 一个博主只用阿里云 CDN 给博客图片加速,平时流量小得可怜。某天半夜到凌晨一两个小时,被人刷了 2000 多 GB 流量,一早醒来邮件告警,后台一看:好家伙欠费 600 多,直接停机。CDN 默认按量后付费、且大多不开流量封顶/限速,一个脚本小子在家用千兆宽带 ab/wrk 压一晚上,你就大出血。
案例三:阿里云 DCDN 峰值带宽计费,16GB 文件一次下载扣 1600 多。 更离谱的一个:某站点有个 16GB 的日志文件,被某个海外请求在 32 秒内以约 500Mb/s 的峰值带宽拉了一次。因为用的是"按峰值带宽计费"模式,达到峰值就按全天峰值算,直接扣了 1600 多块。用户一算:照这逻辑,被人连续刷一晚上,早上起来是不是得欠一套房?
这些案例共同指向一件事:"按量后付费 + 被攻击/异常 + 没有流量封顶"= 风险放大器。 你睡觉时,账单在默默涨。
三、vnStat:流量监控神器实战
想不被坑,第一步是"看得见"自己的流量。最强、最轻量、几乎不占资源的工具就是 vnStat——它直接读 Linux 内核的网络计数器,不抓包,所以不影响性能,后台常驻也就占 1MB 左右内存。
1. 安装与启用
# Debian / Ubuntu
sudo apt install vnstat -y
# RHEL 系(AlmaLinux / Rocky / CentOS)
sudo dnf install vnstat -y
# 启用守护进程(它会自动建数据库并开始采集)
sudo systemctl enable --now vnstat
sudo systemctl status vnstat2. 注册要监控的网卡
先看看你的网卡叫啥(常见是 eth0、ens3、eth0 等):
ip -br addr然后告诉 vnStat 监控它(首次会有"数据库不存在"的提示,无视即可):
sudo vnstat -u -i eth03. 日常查看命令
vnstat # 总览:今日、昨日、本月
vnstat -l # 实时流量(类似 nload,Ctrl+C 退出)
vnstat -h # 按小时统计
vnstat -d # 按日统计(日报)
vnstat -m # 按月统计(月报)
vnstat -i eth0 # 指定网卡vnstat -d 的日报长这样(示意):
eth0 / daily
day rx | tx | total | avg. rate
---------------------+-------------+-------------+---------------
2026-08-12 12.34 GiB | 8.76 GiB | 21.10 GiB | 2.1 Mbit/s
2026-08-13 15.01 GiB | 9.88 GiB | 24.89 GiB | 2.4 Mbit/s
today 6.22 GiB | 4.10 GiB | 10.32 GiB | 1.8 Mbit/srx 是入站,tx 是出站,total 是合计。记住:vnStat 统计的是 rx + tx 双向总流量。所以如果你的商家是双向计费,直接看 total 就对上了;如果是单向(只算出站)的 AWS/阿里云,你重点盯 tx(transmit)那列。
想只看本月的出站流量(对应单向计费),可以加 --json 用 jq 取:
vnstat -i eth0 --json m | jq -r '.interfaces[0].traffic.month[-1].tx'4. 对齐你的账期
多数商家流量是"自然月"结算,但有的按"开通日"滚动(比如每月 18 号清零)。vnStat 默认每月 1 号重置,想对齐账期就改 MonthRotate:
sudo nano /etc/vnstat.conf
# 找到 MonthRotate,改成你的账期日,比如 18 号:
MonthRotate 18
sudo systemctl restart vnstat5. 进阶好搭档
- nethogs:按进程看谁在吃流量,专治"流量莫名暴涨找不到元凶"。
sudo apt install nethogs -y
sudo nethogs eth0- vnstati:把统计画成图,方便贴到监控面板。
sudo apt install vnstati -y
vnstati -s -o /var/www/html/vnstat_summary.png四、编写防扣费脚本:到 90% 自动 Telegram 通知 + 关机
监控看到了,但人不可能 24 小时盯着。最稳的办法是写个脚本,每天定时跑:当月流量用到套餐上限的 90%,就通过 Telegram 机器人给你发警报,并自动关机,把超额费用的可能性直接掐死在摇篮里。
1. 先弄个 Telegram 机器人
- 在 Telegram 里找
@BotFather,发/newbot,按提示建一个机器人,拿到 BOT_TOKEN(形如123456:ABC-DEFxxxx)。 - 给你的机器人发一条任意消息,然后浏览器打开
https://api.telegram.org/bot你的BOT_TOKEN/getUpdates,里面能找到你的 CHAT_ID。 - 把这两个值填进脚本的配置区。
2. 防扣费脚本(traffic-guard.sh)
#!/bin/bash
# ============================================================
# VPS 流量防扣费脚本
# 功能:当月流量达到套餐上限的 90% 时,发 Telegram 通知并自动关机
# 依赖:vnstat (>=2.x, 带 --json)、jq、bc、curl
# 用法:chmod +x traffic-guard.sh && ./traffic-guard.sh
# 建议加 crontab:0 8 * * * /root/traffic-guard.sh
# ============================================================
# ---------- 配置区(按实际情况修改) ----------
TELEGRAM_BOT_TOKEN="填你的BOT_TOKEN"
TELEGRAM_CHAT_ID="填你的CHAT_ID"
IFACE="eth0" # 监控网卡,用 ip -br addr 查
LIMIT_GB=1000 # 套餐月流量上限(GB)
WARN_PERCENT=90 # 触发阈值(百分比)
# -----------------------------------------------
send_telegram() {
curl -s -X POST "https://api.telegram.org/bot${TELEGRAM_BOT_TOKEN}/sendMessage" \
-d "chat_id=${TELEGRAM_CHAT_ID}" \
-d "text=$1" >/dev/null
}
# 用 vnStat 的 JSON 取"本月"已用总流量(字节);month[-1] 是最新的那个月
USED_BYTES=$(vnstat -i "$IFACE" --json m 2>/dev/null | jq -r '.interfaces[0].traffic.month[-1].total')
if [ -z "$USED_BYTES" ] || [ "$USED_BYTES" = "null" ]; then
send_telegram "⚠️ 流量监控脚本取数失败,请检查 vnstat 是否正常。"
exit 1
fi
USED_GB=$(echo "scale=2; $USED_BYTES/1024/1024/1024" | bc)
PERCENT=$(echo "scale=1; $USED_GB*100/$LIMIT_GB" | bc)
echo "本月已用 ${USED_GB} GB / 上限 ${LIMIT_GB} GB(${PERCENT}%)"
# 超过阈值:通知 + 关机
if [ "$(echo "$PERCENT >= $WARN_PERCENT" | bc)" -eq 1 ]; then
MSG="🚨 VPS 流量告警:本月已用 ${USED_GB} GB(${PERCENT}%),已达上限 ${LIMIT_GB} GB 的 ${WARN_PERCENT}%。为避免超额扣费,系统即将自动关机。"
send_telegram "$MSG"
# 留 60 秒缓冲,确保消息发出、你有机会上机抢救
sleep 60
shutdown -h now "流量超额自动关机"
fi几个要点说明:
month[-1]取的是 vnStat JSON 里最新的月份(当前月),用 jq 的负数索引,稳。- 取的是
total(双向合计)。如果你商家是单向只算出站(AWS/阿里云 ECS),把.total改成.tx,这样只盯出站流量,更贴合账单。 bc做浮点运算,jq解析 JSON,两个都得装:sudo apt install jq bc -y。- 脚本默认到 90% 才动作。想更保守可以调到 80%;想留更多余量做处理也可以,但别太低不然老误报。
3. 让脚本每天自动跑
crontab -e
# 加一行:每天早 8 点检查一次
0 8 * * * /root/traffic-guard.sh >> /var/log/traffic-guard.log 2>&1五、其他省钱 / 避险的实在建议
- 选对商家,从根上避开坑。 如果你就是个人建站、跑脚本、怕麻烦,直接选 RackNerd、ColoCrossing、CloudCone 这种"月流量 1~3TB 管够、用超顶多限速/停机、绝不按 GB 疯狂扣费"的便宜大碗。它们把"超额变天价账单"的可能性直接消除了。Vultr 那种按量超额的,适合短期弹性用、用完就删,但长期挂业务得时刻盯着 vnStat。
- 开启一切能开的预警和封顶。 阿里云/AWS 后台都有"可用额度预警""延停服务""流量封顶/带宽封顶",哪怕心里有底也全打开。上面那个 3.5 万欠费的投诉,用户明明设了 500 元预警和 120 元延停,结果风控延迟没拦住——可见预警也不是万无一失,但开了总比不开强。
- 用 Cloudflare 免费挡攻击。 前面一篇讲过,Cloudflare 橙色云能挡大部分 CC/DDoS 的垃圾流量,而且它替你扛在前面,源站看到的异常入站会少很多。配合 vnStat 监控,安全又省钱。
- 异常暴涨先查进程。
nethogs一看就知道是哪个进程在狂吃流量——可能是被入侵的挖矿程序、失控的爬虫、或者配置错的同步任务。先定位、再处理,比盲目关机强。 - 快照/备份别省。 真遇到被攻击或欠费停机,有备份才能快速换机器恢复。3-2-1 原则(3 份副本、2 种介质、1 份异地)记心里。
六、结论
流量计费这事,说白了就三句话:
- 看清单向还是双向——单向只算出站,双向进出都算,被攻击时双向最惨。
- 按量付费的厂商(AWS/LightSail/阿里云按量/CDN 后付费)默认"不封顶",被刷就是天价;便宜大碗商家(RackNerd/ColoCrossing/CloudCone)反而安全,用超不扣钱。
- 装上 vnStat 看得见,配上自动关机脚本管得住——流量到 90% 自动 Telegram 报警并关机,把风险锁死。
别等一觉醒来收到天价账单才后悔。花十分钟把 vnStat 装上、把脚本跑起来,比你事后跟客服扯皮几天强一百倍。省钱的核心,不是不花钱,而是别让意外替你花钱。
延伸阅读
更多相关攻略推荐:连云厂商也看不到你的数据?机密计算(Confidential Com、被割裂的"云上互联网":数据主权(GDPR)、本地化存储与主权云(S、为什么你自己 VPS 发的邮件总进垃圾箱?邮件协议(SPF、DKIM、百兆带宽如何流畅看 4K?视频切片(HLS/DASH)、AVIF 压、告别繁琐密码:OAuth 2.0、SSO 单点登录与 Passkey。