所以我试图做大致这个
http://wiki.mikrotik.com/wiki/PCC
在Linux上。
进一步解释一下:PCC只需要取出数据包的源地址,对它进行散列,将散列除以某个数字,如果余数等于某个其他数字,则进行规则匹配。
实际上,我使用这种方法大多是随机地将我的networking分成几个几乎同样大的组。 更具体地说,六个这样的小组将如下所示:
Group 1: pcc_hash(source IP) % 6 = 0 Group 2: pcc_hash(source IP) % 6 = 1 ... etc
然后给这些组分配一些共享的资源(比如带宽或公共IP地址),他们不想经常改变(特别是使用公共IP地址)。
我的问题是,如果有一个很好的方法,使用一些类似的,最好简单的iptables规则将networking分成任意数量的随机平等的子网。
我已经成功地使用u32(2 ^ n个networking,仅仅匹配源IP地址的最后n位)将networking分成两个幂。 但是,一些随机性也会很好,而将networking分割成精确的三分之一是不可能的。 此外,mikrotiks基本上是基于Linux的,所以必须有一种方法来做到这一点:D
有人在这里意识到一个好的方法,或者至less有一些好的u32文档可以做到这一点吗?
提前致谢
-MK
此外,mikrotiks基本上是基于Linux的,所以必须有一种方法来做到这一点:D
那么,Mikrotik™必须转向GPL,否则就会因为销售基于GPLed软件的产品而被起诉。 如果他们已经是GPL,你可以看看源代码。 如果他们不是 – help'em。 😉
我怀疑Netfilter有这样一个模块可用,但我认为使用任何类似的例子来编写它并不难。
有一个networking分裂成任何像确切的三分之一是不可能做到这一点。
为什么让你这么想? 假设你用0xF [0..15]掩码; 那么是什么让你无法分割成范围[0..5],[6..11],[12..15]? 是的,不是精简的,但很接近1/3。 你的广泛范围,你会得到更紧密的分工。
作为使用netfilter的u32模块的替代方法,你可以使用netfilter的nfnetlink_queue子系统。 这个想法是,你通过一个用户空间进程(很可能是一个守护进程)发送数据包,检查数据包,标记他们认为合适的,然后返回给netfilter进行进一步处理。
这个机制是相对简单的。 iptables QUEUE和NFQUEUE目标将选定的数据包放在一个队列中,用户空间进程通过nfnetlink_queue API( 这里是文档 )从那里接收数据包。 当每个数据包从用户空间返回到netfilter时,进程设置的MARK可用于通过进一步处理(通过iptables或tc )来引导数据包。
警告:我从来没有实际使用netlink的队列模块来实现一个解决scheme,所以我没有亲身体验它的潜在健壮性,安全性或性能。 很明显,networking数据包stream经的用户空间守护进程需要相当的精心开发。