码头工人和岸边

jal*_*tek 17 shorewall docker

我在我的服务器上使用Shorewall作为简单的独立防火墙,并且也想使用Docker

通过使用 Docker 容器及其端口重定向, docker 设置了自己的 iptables 规则/链,如果 shorewall 重新启动,这些规则/链将被终止。所以容器将变得无法访问

有没有人在 shorewall 重启后设法保存/恢复 docker 规则,或者有没有其他解决方法?

也可以看看:

faz*_*azy 20

以下配置更改应确保 Docker 和 Shorewall 主机之间的流量。在 Shorewall 4.5.21.9 上测试,但应适用于最新版本:

/etc/shorewall/shorewall.conf

确保启用 IP 转发(大多数配置项是是/否,但这是“开启”):

IP_FORWARDING=On
Run Code Online (Sandbox Code Playgroud)

/etc/shorewall/masq

为您的私有 Docker 网络启用伪装 (NAT)(如果您使用不同的网络,即您使用 启动 docker --bip=#.#.#.#/#,然后进行相应更改)。更改eth0为具有外部连接的主机上的任何接口:

#INTERFACE:DEST         SOURCE
eth0                    172.17.0.0/16
Run Code Online (Sandbox Code Playgroud)

/etc/shorewall/interfaces

添加一个接口条目,以便 Shorewall 知道该dock区域与哪个接口相关:

#ZONE           INTERFACE               OPTIONS
dock            docker0
Run Code Online (Sandbox Code Playgroud)

/etc/shorewall/zones

创建一个新区域;注意,docker太长会导致“无效区域名称”错误。

#ZONE   INTERFACE
dock    ipv4
Run Code Online (Sandbox Code Playgroud)

/etc/shorewall/policy

您可能希望允许 Docker 容器与主机Internet 通信,因此这是一个很好的起点:

#SOURCE         DEST            POLICY
# ...(other policies)...
dock            all             ACCEPT
# ...(other policies, catch-all)...
Run Code Online (Sandbox Code Playgroud)

如果您还没有使用to打开它,您可能还需要一个类似的ACCEPT策略来处理来自fwto 的流量。dockfwall

您可以根据需要在策略规则文件中进一步收紧它。例如,上面没有明确允许外部流量到达您的 Docker 容器;检查您的其他区域/政策/规则。


小智 7

由于 Docker 引入了其网络隔离功能,如果您想使用自定义网络,这里提到的其他解决方案已不再足够。Shorewall 5.0.6 引入了对 Docker 的支持,包括 Docker 网络。这个:

  • 允许以任何顺序启动/停止/重新启动 shorewall 和 docker
  • 无需维护扩展脚本