使用 Netfilter 以编程方式设置数据包目的地并路由它们

使用 Netfilter 以编程方式设置数据包目的地并路由它们

我是 iptables 及其模块的新手,我希望得到帮助来解决它。


问题

管理大规模 NAT 路由。我需要处理超过 100,000 个静态 IP(并且还在不断增长)并将它们路由到 N 个环境之一。


目标

目标是拥有动态 DNAT 路由。这意味着什么可以用这个流程来解释:

  1. 机器(linux)接收网络层请求。
  2. Netfilter拦截请求以编程方式
  3. Netfilter 将目标更改为民众知识产权
  4. 转发请求

目前的解决方案

目前的实现是静态完成的。通过对每个 IP 使用以下 DNAT 规则以及带有 MASQUERADE 的规则来处理 SNAT

iptables -t nat -A PREROUTING -s {USER-STATIC-IP_1} -j DNAT --to-destination {ENV-IP_1}
...
iptables -t nat -A PREROUTING -s {USER-STATIC-IP_N} -j DNAT --to-destination {ENV-IP_N}
iptables -t nat -A POSTROUTING -j MASQUERADE

问题:

  • 扩展——iptables 规则不可能永远增长。
  • 复制 - 规则数据不是集中的,而是在每台机器上兑现。
  • 管理 - 管理 N 个规则并在机器之间同步它们很麻烦。
  • 日志 - 可以记录日志,但不能流线。我们需要使用 LOG iptables 模块
  • 无直接控制 - 对数据包流没有真正的控制。我们只能添加和删除静态规则,但无法与数据包交互。

挑战

  • 使用 Netfilter 拦截网络请求(我无法找到可以以编程方式拦截请求的其他模块)
  • 请求的异步处理。我想将 IP 地址存储在数据库(快速数据库)中以集中所有 IP。
  • 更新中没有腐败的目的地
  • 响应需要路由回用户(MASQUERADE 风格)。
  • 用于与 Netfilter 集成的程序语言应该是快速的(可以编译)并且对新程序员友好(我在Python)。

这是一个很绕口的问题,这对我来说是一个真正的挑战。

任何帮助是极大的赞赏。

相关内容