Docker 在管理员添加的规则之上插入 iptable Postrouting 规则

Ram*_*Ram 6 linux networking iptables docker

我必须在 NAT 表 POSTROUTING 链中添加一些 iptable 条目,以允许 docker 容器通过主机的不同源地址/源接口 (to_source) 访问互联网。

一切进展顺利。

前任:

target     prot opt source               destination
SNAT       all  --  100.100.8.0/22       10.1.2.3       to:100.64.0.5
Run Code Online (Sandbox Code Playgroud)

但是,当重新启动 docker 服务时,它会在我的条目之上插入 MASQUERADE 规则,因此我的上述修复被屏蔽。Docker 容器现在无法访问互联网。

前任:

target     prot opt source               destination
MASQUERADE  all  --  100.100.8.0/22       0.0.0.0/0
SNAT        all  --  100.100.8.0/22       10.1.2.3       to:100.64.0.5
Run Code Online (Sandbox Code Playgroud)

有没有办法让我的 POSTROUTING 规则即使在 docker 重新启动后也始终保持在链的顶部?

Sye*_*med 0

如果您的主机上安装了 Ubuntu,则可以iptables-save在启动 docker 守护程序后使用该实用程序将 iptables 规则保存到文件中。然后,一旦刷新旧规则,您就可以使用iptables-restore保存的规则文件简单地恢复原始的 docker 规则。

如果您不想恢复所有旧的 iptables 规则,您可以更改保存的规则文件以仅保留您需要的规则。