为了进行持续测试,我希望 apache 服务器至少以 20ms 的延迟提供静态文件。
我尝试寻找一个 apache 配置设置或者具有类似功能的插件,但是失败了。
tc 和 iptables 的组合可能有效,但我只找到了一种基于传出端口添加延迟的方法(每个客户端都不同)。
变量 如果=低 IFSPEED=100Mbps #从 sudo /sbin/ethtool $IF 获取 延时=1000毫秒 # # 创建有类 HTB 对象树 # sudo /sbin/tc qdisc 添加 dev $IF 句柄 1: root htb # # 创建一个有类子桶,其类标识为 1:11 # sudo /sbin/tc class add dev $IF parent 1: classid 1:11 htb rate $IFSPEED # # 创建一个 qdisc(无类)netem 子进程来为这个“bucket”中的数据包提供延迟 # sudo /sbin/tc qdisc add dev $IF parent 1:11 handle 11: netem delay $DELAY # # 将损坏/标记的流量过滤到上述类别 # sudo /sbin/tc filter add dev $IF parent 1:0 prio 1 protocol ip handle 11 fw flowid 1:11 # # 使用 iptables 处理发往 4001 端口的 TCP 数据包,并标记数据包以进行 tc 过滤 # sudo /sbin/iptables -A OUTPUT -t mangle -p tcp --dport 4001 -j MARK --set-mark 11
因此,前面的代码片段有效,但是如何改变策略以便每个目标端口为 80 的传入数据包都被延迟? - 尝试使用 PREROUTING 尝试 iptables ,但仍然不起作用?
答案1
可以对传入 (入口) 或传出 (出口) 数据包(或两者)添加延迟。延迟传入数据包有点困难(因为数据包已经到达),但可以使用中级功能块设备(看看这里.搜索“netem on coming fromcoming Traffic”)。
由于可以通过延迟入口或出口流量来实现目标,并且延迟出口更容易,因此我建议这样做。您的配置几乎是正确的:您只需将 iptables mangle 行替换为
sudo iptables -t mangle -A OUTPUT -p tcp -m tcp --sport 80 -j MARK --set-mark 11