如何配置iptables和tc实现不同丢包和延时

如何配置iptables和tc实现不同丢包和延时,第1张

目前限速已经可以实现,但是限连接数由于iptables测connlimit模块不存在无法限速,hashlimit模块不正常也没法使用

限速脚本:

#!/bin/sh

# 定义进出设备(IDEV 内网接口,ODEV外网接口)

IDEV="br-lan"

ODEV="pppoe-wan"

# 定义总的上下带宽

UP="0.45mbit"

DOWN="3.7mbit"

# 定义每个受限制的IP上下带宽

#rate 起始带宽(默认限制,单IP限制带宽)

UPLOAD="0.1mbit"

DOWNLOAD="0.5mbit"

#ceil 最大带宽(当带宽有富余时单IP可借用的最大带宽,这个也是所有受限IP总带宽)

MUPLOAD="0.2mbit"

MDOWNLOAD="1mbit"

#内网IP段

INET="192.168.1."

# 受限IP范围,IPS 起始IP,IPE 结束IP。

IPS="140"

IPE="142"

# 清除网卡原有队列规则

tc qdisc del dev $ODEV root 2>/dev/null

tc qdisc del dev $IDEV root 2>/dev/null

# 定义最顶层(根)队列规则,并指定 default 类别编号

tc qdisc add dev $ODEV root handle 10: htb default 256

tc qdisc add dev $IDEV root handle 10: htb default 256

# 定义第一层的 10:1 类别 (上行/下行 总带宽)

tc class add dev $ODEV parent 10: classid 10:1 htb rate $UP ceil $UP

tc class add dev $IDEV parent 10: classid 10:1 htb rate $DOWN ceil $DOWN

#开始iptables 打标和设置具体规则

i=$IPS

while [ $i -le $IPE ]

do

tc class add dev $ODEV parent 10:1 classid 10:2$i htb rate $UPLOAD ceil $MUPLOAD prio 1

tc qdisc add dev $ODEV parent 10:2$i handle 100$i: pfifo

tc filter add dev $ODEV parent 10: protocol ip prio 100 handle 2$i fw classid 10:2$i

tc class add dev $IDEV parent 10:1 classid 10:2$i htb rate $DOWNLOAD ceil $MDOWNLOAD prio 1

tc qdisc add dev $IDEV parent 10:2$i handle 100$i: pfifo

tc filter add dev $IDEV parent 10: protocol ip prio 100 handle 2$i fw classid 10:2$i

iptables -t mangle -A PREROUTING -s $INET$i -j MARK --set-mark 2$i

iptables -t mangle -A PREROUTING -s $INET$i -j RETURN

iptables -t mangle -A POSTROUTING -d $INET$i -j MARK --set-mark 2$i

iptables -t mangle -A POSTROUTING -d $INET$i -j RETURN

i=`expr $i + 1`

done

MontaVista 4.0 (kernel version 2.6.X) 支持HRT,可以实现微妙级的延时,好像还到不了纳秒。用关中断和busy loop来实现当然可以,但是关中断时间不能太长,而且只能在内核空间实现,肯定影响其他任务调度。如果需要长时间产生这样的信号,那感觉用不太适合用Linux来实现。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/7333671.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-04
下一篇 2023-04-04

发表评论

登录后才能评论

评论列表(0条)

保存