lxc/lxd iptables 输出所有者规则错误“无效参数”。

lxc/lxd iptables 输出所有者规则错误“无效参数”。

如果我尝试在我的 lxc/lxd Ubuntu 14.04 amd64 容器中运行以下命令:

iptables -A OUTPUT -p tcp -m owner --uid-owner 0 -m tcp --dport 80 -j ACCEPT

我收到以下错误消息:

iptables: Invalid argument. Run `dmesg' for more information.

...但/var/log/dmesg没有得到任何额外的输出。

我确信 iptables 规则有效,因为它在 lxc/lxd 主机和其他机器上都能正常工作。似乎有问题的部分是所有者部分,即如果我运行此命令:

iptables -A OUTPUT -p tcp -m tcp --dport 80 -j ACCEPT

...它运行良好。

对我来说这似乎是 lxc 中的一个错误,但是有什么方法可以进一步调查它吗?

编辑1

我使用调试标志从源代码构建了 iptables,然后跟踪执行过程。这让我找到了该iptables-standalone.c文件,其中:

int iptc_commit(struct xtc_handle *handle);

...函数返回EINVAL错误代码。问题是我无法找到该函数的源代码。它似乎位于libip4tc.so共享库中,但我无法找到该库的源代码。

如果有人知道来源在哪里,我将非常感激,如果你能告诉我。

编辑2

參閱我创建的 lxc GitHub 问题更详细地描述了这一情况。我打算放弃,因为这项工作对我来说太过艰巨,而我可以通过避免在容器中使用与“所有者”匹配的 iptables 规则来解决这个问题。

答案1

您所要做的就是将容器的“security.privileged”配置设置为“true”,因为它默认为“false”。

即参考并寻找“security.privileged”配置。

我不太清楚改变这个配置会产生什么效果,所以要小心并自己研究,但我认为它只是授予容器更多控制共享内核(在主机和容器之间共享)的权限。

相关内容