【发布时间】:2012-06-21 18:51:10
【问题描述】:
我知道我可以使用 tc 和 netem 来做
tc qdisc add dev eth0 root netem loss 50%
这将丢弃所有 eth0 流量中 50% 的数据包。但是,我想指定一个协议(UDP、TCP 等),所以只有这个协议的数据包会被丢弃。
【问题讨论】:
标签: linux udp network-protocols throttling
我知道我可以使用 tc 和 netem 来做
tc qdisc add dev eth0 root netem loss 50%
这将丢弃所有 eth0 流量中 50% 的数据包。但是,我想指定一个协议(UDP、TCP 等),所以只有这个协议的数据包会被丢弃。
【问题讨论】:
标签: linux udp network-protocols throttling
这是 iptables 的一个烦人的特性。即使文档说 DROP 会默默地将数据包丢弃在地板上,它仍然会告诉调用程序,导致 sendmsg(或其他)将设置 errno 返回到 ENETUNREACH 或 EPERM。似乎没有“没有真正默默地丢弃数据包并且不告诉任何人”的功能。
不过,我找到了以下解决方法:如果数据包要离开您的本地机器,您可以在 mangle 表中将 TTL 设置为 0:
iptables -t mangle -A SomeChain -m ttl -j TTL --ttl-gt 0 --ttl-set 0
我已经成功地使用它来处理 DoS 反射攻击。
【讨论】:
改用 iptables - 它有一个概率选项可以让你这样做,例如:
iptables -A INPUT -m statistic -p tcp --mode random --probability 0.5 -j DROP
调整各种值以匹配所需的流量/方向/概率。
【讨论】: