我有一个服务器和几个 VPS,所以我使用 iptables 来重定向端口,我通过脚本自动执行此操作。
服务器重新启动后插入规则大约需要 500 个 iptables 命令,但有时只执行了几个命令,其余命令失败,并且 iptables 命令返回退出值 4,我没有在任何地方找到这是什么意思?
我在 for-each 循环中插入了 500 条规则,所以基本上在同一时间我插入了那么多规则,这可能是问题所在吗?
答案1
从探寻源头我们include/xtables.h
发现
enum xtables_exittype {
OTHER_PROBLEM = 1,
PARAMETER_PROBLEM,
VERSION_PROBLEM,
RESOURCE_PROBLEM, // number 4 because that's how enum count
对所遵循的代码分支进行一些疯狂的假设(您的 没有打印错误吗iptables
?),iptables/iptables.c
可以exit(RESOURCE_PROBLEM)
考虑到看起来像锁定问题。这符合您对iptables
命令紧密循环的描述(尽管标准错误应该有一些错误,但您的打印出来了吗?);也许可以使用iptables-restore
原子方式一次性插入您需要的所有更改,或者减慢循环速度(并确认此代码是正在触发的错误路径)。