Linux网络限速

在Linux上,要限速网络速度,通常有两种方法:iptables和tc,或者将两种结合起来。

1. 最简单的办法

  • 摘自:http://bbs.chinaunix.net/thread-833575-1-1.html

  • 限制192.168.0.2的上传速度为30KB/s:
    iptables -A FORWARD -s 192.168.0.2 -m limit --limit 20/s -j ACCEP
     
    iptables -A FORWARD -s 192.168.0.2 DROP
  • 用iptables时,要先清空链表,再设置限度,否则限不了。  
     
  • sudo /usr/sbin/iptables -F 清空链,清空链表后可能上不了网,要用iptables -A INPUT -j ACCEPT/iptables -A OUTPUT -j ACCE
    sudo /usr/sbin/iptables -A INPUT -m limit --limit 10/s -j ACCEPT 限制输入为10个包每秒
  • sudo /usr/sbin/iptables -A OUTPUT -m limit --limit 10/s -j ACCEPT 限制输出为10个包每秒
    sudo /usr/sbin/iptables -L 列出链
    sudo /usr/sbin/iptables -A OUTPUT -s 127.0.0.1 -m limit --limit 20/s -j  ACCEPT 
    这样限制本地不行
### Linux Traffic Control (TC) 配置限速教程 #### 1. 安装必要的工具 在 CentOS 或其他基于 Red Hat 的系统上,可以安装 `iproute` 工具集来支持 TC 功能。如果尚未安装该工具,则可以通过以下命令完成安装: ```bash yum install -y iproute ``` 对于 Debian 和 Ubuntu 系统,可以直接运行以下命令确认并安装必要组件: ```bash apt-get update && apt-get install -y iproute2 ``` #### 2. 使用 TC 进行基本的流量控制设置 以下是通过 TC 实现网络限速的一个典型示例: 假设需要对特定 IP 地址(如 `192.168.1.100`)进行限速操作。 ##### (1)创建根队列 首先,在指定接口(例如 eth0)上创建一个 HTB(层次化令牌桶 Hierarchical Token Bucket)作为根队列结构。 ```bash tc qdisc add dev eth0 root handle 1: htb default 12 ``` 此命令设置了默认类 ID 为 `12` 并启用了 HTB 模型[^2]。 ##### (2)定义父级速率限制 接着,定义整个链路的最大带宽限制(例如 1 Mbps),并将子节点分配给不同的优先级类别。 ```bash tc class add dev eth0 parent 1: classid 1:1 htb rate 1mbit ceil 1mbit ``` ##### (3)针对具体目标地址设定独立速率 为了进一步细化管理,可单独为某些源或目的地址应用更严格的约束条件。 ```bash tc filter add dev eth0 protocol ip prio 1 u32 match ip dst 192.168.1.100 flowid 1:1 ``` 上述语句表示匹配所有发往 `192.168.1.100` 的数据包,并将其归入到之前声明过的 `classid=1:1` 中去执行相应的速度调整策略[^3]。 #### 3. 添加虚拟网卡以解决入方向限速问题 由于标准版 TC 只能作用于外发的数据流,因此当试图调控进入本地系统的连接时会遇到障碍。此时可通过引入额外的 TUN/TAP 设备绕过这一局限性——即先捕获原始输入请求再重新路由至用户空间程序处理后再转发出去形成闭环回环效应达到双向同步效果[^3]。 创建一对关联起来的新设备实例: ```bash modprobe tun ip link add name veth-in type veth peer name veth-out ifconfig veth-in up ifconfig veth-out up brctl addbr br-tc brctl stp br-tc off brctl setfd br-tc 0 brctl addif br-tc veth-out ifconfig br-tc up iptables -t nat -A PREROUTING -i eth0 -j ROUTE --gw $(ip addr show veth-in | grep 'inet' | awk '{print $2}' | cut -d '/' -f 1) ``` 随后即可按照常规方法在此新路径之上施加各种规则了。 #### 4. 删除已有的 QDiscs 和 Filters 清理先前可能残留下来的配置项以便重试或者切换方案测试不同参数组合表现如何影响实际性能指标变化情况。 ```bash tc qdisc del dev eth0 root ``` --- ### 注意事项 - 上述例子仅作演示用途,请依据实际情况修改适配环境变量比如网卡名称等细节部分。 - 对生产环境中实施此类更改前务必充分验证其可行性以及潜在风险评估报告提交上级审批同意后方可正式上线部署以免造成不可逆损害后果严重。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值