Linux tc IPv6stream量调整

我使用tc和htb进行了stream量整形,一切工作都正常。 现在我想限制传入的IPv6 ssh / sftpstream量的带宽到合理的数量,所以它不会干扰更关键的stream量。 总之,没有任何工作:

tc class add dev eth0 parent 1:0 classid 1:14 htb rate 3000kbit ceil 3000kbit prio 3 ip6tables -A POSTROUTING -t mangle -o eth0 -p tcp --dport 22 -j MARK --set-mark 14 tc filter add dev eth0 parent 1:0 protocol ip handle 14 fw flowid 1:14 # or tc filter add dev eth0 parent 1:0 protocol ipv6 u32 match ip6 protocol 6 0xff match ip6 dport 22 0xffff flowid 1:14 # or variations of these... 

如何使用tc对IPv6数据进行stream量整形?

不幸的是,tc目前还不能用于IPv6。

引用:

路由策略数据库(RPDB)replace了Linux内核中的IPv4路由和寻址结构,从而产生了这个HOWTO描述的所有奇妙function。 不幸的是,Linux内部的IPv6结构是在这个核心结构之外实现的。 尽pipe它们共享一些设施,但是基本的RPDB结构并不参与IPv6寻址和路由结构。

这肯定会改变,我们只能等待一会儿。

资料来源: http : //lartc.org/lartc.html#AEN1446

如果有人知道这是从某个内核版本修复的,还是有计划在未来的版本中解决这个问题,请随时更新!

可能的解决方法(到目前为止,我自己未经过testing)是隧道化IPv6stream量(SIT隧道)并过滤包含IPv6数据包的IPv4数据包。

至less在我的调制解调器/路由器(Actiontec C1000A,BusyBox v1.17.2,内核版本2.6.30)上,我能够使用tc直接匹配目标IPv6地址(即不需要ip6tables来标记数据包):

 tc class add dev eth0 parent 1:0 classid 1:14 htb rate 3000kbit ceil 3000kbit prio 3 tc filter add dev eth0 parent 1:0 protocol ipv6 prio 16 \ u32 match ip6 dst $IPV6_ADDR flowid 1:14 

所以,这是一个猜测,但我应该认为下面的工作:

 tc filter add dev eth0 parent 1:0 protocol ipv6 prio 16 u32 match ip6 dport 80 flowid 1:14 

或者,使用你的ip6tables捣毁:

 tc filter add dev eth0 parent 1:0 protocol ipv6 handle 14 fw flowid 1:14