![添加延迟和随机数据包丢失(不包括 SSH 数据包)](https://linux22.com/image/675059/%E6%B7%BB%E5%8A%A0%E5%BB%B6%E8%BF%9F%E5%92%8C%E9%9A%8F%E6%9C%BA%E6%95%B0%E6%8D%AE%E5%8C%85%E4%B8%A2%E5%A4%B1%EF%BC%88%E4%B8%8D%E5%8C%85%E6%8B%AC%20SSH%20%E6%95%B0%E6%8D%AE%E5%8C%85%EF%BC%89.png)
我想为所有数据包添加一些随机延迟/丢弃,但不包括SSH郵件。
我可以通过这种方式对所有数据包执行此操作:
tc qdisc change dev $NIC root netem delay 100ms 10ms 25%
tc qdisc change dev $NIC root netem loss 10% 25%
我可以使用以下方法标记 SSH 数据包iptables这边走:
iptables -N TOP
iptables -I OUTPUT -j TOP
iptables -A TOP -p tcp --dport 22 -j RETURN
iptables -A TOP -p tcp --sport 22 -j RETURN
iptables -A TOP -j MARK --set-mark 9
service iptables save
但我不知道如何将它们结合起来?我的意思是我找不到一种方法来将延迟/丢弃应用于所有数据包不包括标记的!
答案1
您实际上只能将 QoS 应用于出站流量,因为您无法控制发送给您的内容。因此,像您这样做一样向 INPUT 链添加规则不会有好结果。
您可以使用 mangle 表的 POSTROUTING 链中的 CLASSIFY 目标对数据包进行分类以供 tc 处理。
分类
该模块允许您设置 skb->priority 值(从而将数据包分类到特定的 CBQ 类别中)。
--set-class major:minor 设置主要和次要类值。即使没有给出 0x 前缀,这些值也始终被解释为十六进制。
major:minor classid 是您在 tc 中用来处理流量的。如果您将某些特定流量归类为 classid 10:201,那么在 tc 中,您将创建一个父类 10:200,并将 10:201 类添加到其中。
请注意,要向 POSTROUTING 链添加规则,您必须明确使用 mangle 表
iptables -t mangle -A POSTROUTING -p tcp -m tcp --sport 22 --set-class 100:22 -j CLASSIFY