iptables的替代品?

时间:2014-01-29 07:34:38

标签: c++ linux linux-kernel iptables

我正在开发一个应用程序,其中我非常依赖iptables来路由流量。 我只是通过从我的应用程序调用{​​{1}}作为外部进程来设置表。

我想知道是否有办法直接与iptables所依赖的内核模块(Netfilter)对话,并避免为此运行新进程的开销?

欢迎推荐其他路由解决方案。

2 个答案:

答案 0 :(得分:2)

我认为netfilter没有任何问题。您可以在任何netfilter挂钩上绑定回调,内核将在挂钩事件上调用您的回调。您是通过nf_register_hook执行此操作的。您甚至可以使用conntrack

跟踪关联

此示例为here

有关hacking netfilter official documentation

的更多信息

答案 1 :(得分:2)

如果我的理解是正确的,那么您需要一个用于配置iptables的编程接口。不幸的是,iptables(libiptc)没有提供用于配置或查询它们的API接口,它的堆栈太低了。

我可以建议的一个替代方案是内核IP集。 ipset实际上是iptables的扩展,允许创建一次匹配整组地址的规则。 IP表是线性遍历的,其中ip set存储在索引数据结构中。这使它非常有效。

https://packages.debian.org/sid/net/ipset

这可能不是您问题的直接答案,但希望有所帮助。