我正在开发一个应用程序,其中我非常依赖iptables
来路由流量。
我只是通过从我的应用程序调用{{1}}作为外部进程来设置表。
我想知道是否有办法直接与iptables所依赖的内核模块(Netfilter)对话,并避免为此运行新进程的开销?
欢迎推荐其他路由解决方案。
答案 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
这可能不是您问题的直接答案,但希望有所帮助。