我是 iptables 及其模块的新手,我希望得到帮助来解决它。
问题
管理大规模 NAT 路由。我需要处理超过 100,000 个静态 IP(并且还在不断增长)并将它们路由到 N 个环境之一。
目标
目标是拥有动态 DNAT 路由。这意味着什么可以用这个流程来解释:
- 机器(linux)接收网络层请求。
- Netfilter拦截请求以编程方式
- Netfilter 将目标更改为民众知识产权
- 转发请求
目前的解决方案
目前的实现是静态完成的。通过对每个 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和去)。
这是一个很绕口的问题,这对我来说是一个真正的挑战。
任何帮助是极大的赞赏。