![延迟特定 IPv6 地址的服务器响应](https://linux22.com/image/722633/%E5%BB%B6%E8%BF%9F%E7%89%B9%E5%AE%9A%20IPv6%20%E5%9C%B0%E5%9D%80%E7%9A%84%E6%9C%8D%E5%8A%A1%E5%99%A8%E5%93%8D%E5%BA%94.png)
我有 3 台配置了 IPv6 地址的服务器,我想为几台服务器(例如 S1 和 S3)添加一些延迟。对于 IPv4,我使用“tc”命令,它运行良好。
用于 IPv4 地址的命令:
tc qdisc ls dev eth1
tc qdisc add dev eth1 root handle 1: prio
tc qdisc add dev eth1 parent 1:1 handle 2: netem delay 1000ms
tc filter add dev eth1 parent 1:0 protocol ip pref 55 handle ::55 u32 match ip
src 20.1.1.1 flowid 2:1
tc filter add dev eth1 parent 1:0 protocol ip pref 55 handle ::55 u32 match
ip src 20.1.1.3 flowid 2:1
我想将相同的策略添加到 Ipv6 地址。任何帮助都将不胜感激。提前致谢
答案1
由于这些过滤器适用于传出数据包并匹配源 IP,而且最后两个 tc 命令由于重复使用相同的句柄而发生冲突,我理解规则是直接添加到每个服务器的,或者如果句柄发生变化,则添加到路由器的。在答案中这并不重要,因为句柄不会被指定,因此让系统来选择它们。
切换到等效的 IPv6 规则非常简单:protocol ip
替换为protocol ipv6
而match ip
替换为match ip6
。感谢不一致!切换协议时不能使用相同的 pref/prio。参考前两点:将 tc 与 IPv6 和 IPv4 结合使用。如果需要,只需添加一个句柄(具有唯一的::节点 ID在同一个前缀中)。
因此,为了为两个附加地址2001:db8::10
和添加延迟2001:db8::20
,请保留问题中的所有先前规则并添加这两条规则:
tc filter add dev eth1 parent 1:0 protocol ipv6 pref 56 u32 match ip6 src 2001:db8::10 flowid 2:1
tc filter add dev eth1 parent 1:0 protocol ipv6 pref 56 u32 match ip6 src 2001:db8::20 flowid 2:1
被调用的过滤器u32
实际上意味着它在 32 位上运行。因此,每条规则实际上将使用 4 个匹配,因为 IPv6 地址使用的是 128 位。