我被要求使用 PC/服务器硬件创建一个高吞吐量路由器。我对 pf、iptables 和 tc 比较熟悉,但我从未遇到过如此高的流失率和如此多的规则。我希望你能帮助我避免采取行不通的愚蠢解决方案。
我的目标是支持至少 10,000 个并发客户端,每秒至少添加和删除 100 个客户端。每个客户端都有简单的双向路由规则,具有以下功能:
- 仅限 IPv6
- 转发数据包(替换源地址和目标地址)
- 记录收到的字节数
- 收到一定数量的数据后停止转发
我担心的是,由于某些隐藏的互斥体,每秒创建和销毁 100 个规则集会降低性能。
我的候选解决方案是:
- OpenBSD 与 pf.这是我的首选解决方案。
- Debian 与 iptables + tc。
- 自定义内核模块。我不想这样做,但如果必须的话我会这样做。
这些解决方案中哪一个的扩展性最好?我应该使用哪些技巧来获得最佳性能?
答案1
虽然我从未尝试过做您正在做的事情,但使用 OpenBSD 执行此操作的最佳方法可能是使用表,因为您可以轻松地从表中添加/删除 IP。