AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 579726
Accepted
jaltek
jaltek
Asked: 2014-03-05 07:07:54 +0800 CST2014-03-05 07:07:54 +0800 CST 2014-03-05 07:07:54 +0800 CST

码头工人和墙

  • 772

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

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

是否有人在重新启动岸墙时设法保存/恢复 docker 规则,或者是否有人有其他解决方法?

也可以看看:

  • 有类似问题的 Shorewall Mailinglist
  • GitHub 问题 #2801 @ dotcloud/docker
shorewall
  • 7 7 个回答
  • 7048 Views

7 个回答

  • Voted
  1. Best Answer
    fazy
    2014-09-29T04:47:12+08:002014-09-29T04:47:12+08:00

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

    /etc/shorewall/shorewall.conf

    确保启用了 IP 转发(大多数配置项是 Yes/No,但这个是“On”):

    IP_FORWARDING=On
    

    /etc/shorewall/masq

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

    #INTERFACE:DEST         SOURCE
    eth0                    172.17.0.0/16
    

    /etc/shorewall/interfaces

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

    #ZONE           INTERFACE               OPTIONS
    dock            docker0
    

    /etc/shorewall/zones

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

    #ZONE   INTERFACE
    dock    ipv4
    

    /etc/shorewall/策略

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

    #SOURCE         DEST            POLICY
    # ...(other policies)...
    dock            all             ACCEPT
    # ...(other policies, catch-all)...
    

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

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

    • 20
  2. linuxhackerman
    2016-03-26T01:53:02+08:002016-03-26T01:53:02+08:00

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

    • 允许按任何顺序启动/停止/重新启动shorewall和docker
    • 无需维护扩展脚本
    • 7
  3. Aaron C. de Bruyn
    2014-09-10T18:52:19+08:002014-09-10T18:52:19+08:00

    刚刚在我的盒子上弄明白了。确保 /etc/shorewall.conf 有:

    IP_FORWARDING=Yes

    Docker 依赖于转发,我在我的所有服务器上将“puppet”设置为“No”。

    更新:您可能还需要将来自 docker 的流量伪装成您的 WAN 接口。

    编辑/etc/shorewall/masq,您将需要类似于以下内容的行:

    br0 172.17.0.0/12

    在这种情况下,我的 WAN 接口实际上是 br0(一个网桥),但你的可能是 eth0 之类的。(ifconfig用于查看您的接口及其 IP 地址)。在我的机器上,docker 使用 172.17.0.0/24 这是一个 RFC1918 私有地址范围。这在其他系统上可能会有所不同,但您可以通过ifconfig再次使用 查找接口来查看范围docker0。

    • 2
  4. womble
    2015-11-24T19:29:55+08:002015-11-24T19:29:55+08:00

    您可以通过创建扩展脚本来确保 Docker 规则集在重启前保存DOCKER链,然后在重启后再次恢复它。我刚刚发布了一个帖子,其中包含如何执行此操作的示例,尽管我确信这远非唯一可能的方法。

    • 2
  5. adamcstephens
    2014-05-22T17:22:50+08:002014-05-22T17:22:50+08:00

    docker 服务可以在不影响正在运行的容器的情况下重新启动,并且可以在 Shorewall 重新启动后运行以重新加载 docker 特定规则。显然,与容器的网络会在短时间内中断。

    至少在我的几个 Archlinux 安装中是这样。

    • 0
  6. lenybernard
    2015-06-19T03:33:23+08:002015-06-19T03:33:23+08:00

    refresh 操作不会清除 iptable,因此如果您只想刷新规则或策略,您只需运行 refresh 而不是 restart :

    sudo shorewall refresh
    

    显然,如果您真的需要重新启动shorewall,问题仍然存在。然后,您必须重新启动 docker 并重新启动您的容器。

    • 0
  7. DukeLion
    2016-08-11T02:18:24+08:002016-08-11T02:18:24+08:00

    一种可能的选择是使用 --net=host 选项运行 Docker,以允许容器化应用程序访问主机网络而无需 IP 转发和 NAT。

    • 0

相关问题

  • 什么对IP禁令更好?在防火墙(shorewall)级别,还是在 IIS 级别?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve