Linux重启防火墙后容器网络无法被访问的解决办法

背景

在系统运行的时候,可能会操作防火墙的配置,可能重启防火墙。不料,重启防火墙之后,却导致运行在上面的容器无法被访问了。只能重启docker服务后才正常。

分析

docker实现容器的服务能被外部访问,借助的是iptables的请求转发。主要涉及到DNAT的端口转换,即nat表的规则。

在docker启动服务的时候,会根据已有的容器的端口映射和容器IP,在nat表中添加DNAT的端口映射规则,并开启ipv4的转发。这样容器的服务就可以被外部网络访问了。

同时,再将容器对外部的访问通过SNAT进行源IP的转换(MASQUERADE),使容器可以访问外部的网络。

当我们重启iptables之后,就会发现,容器就无法访问外部网络,外部网络也无法访问容器了。

因为docker服务启动的时候,会创建上面的规则,而且是临时创建的,包括ipv4转发。所以如果重启iptables服务之后,这些规则就被清除了。而如果再重启网络后,ipv4转发的配置也会被清除。这样就导致容器的转发网络就失效了。

为了解决这个问题,我们就需要将docker创建的防火墙规则永久存储下来。

下面是永久保存防火墙规则的命令:

iptables-save > /etc/sysconfig/iptables

而ipv4转发的配置的永久保存,请参考《Linux重启网络后导致容器网络无法连接的解决办法》。

这样就再也不怕重启防火墙和重启网络了,也不怕系统重启了。

总结

docker服务启动时会临时创建防火墙规则和ipv4转发,但是重启防火墙就会清除这些临时规则,导致容器网络被破坏。我们需要将这些配置永久存储起来,就不怕重启操作了。


原文地址: http://www.yu7s.com/article/20240422201137749.html

相关推荐
wusam6 分钟前
螺蛳壳里做道场:老破机搭建的私人数据中心---Centos下Docker学习04(环境准备)
学习·docker·centos
康熙38bdc1 小时前
Linux 进程优先级
linux·运维·服务器
hhzz1 小时前
Linux Shell编程快速入门以及案例(Linux一键批量启动、停止、重启Jar包Shell脚本)
android·linux·jar
只是有点小怂1 小时前
parted是 Linux 系统中用于管理磁盘分区的命令行工具
linux·运维·服务器
三枪一个麻辣烫2 小时前
linux基础命令
linux·运维·服务器
cuisidong19972 小时前
如何在 Kali Linux 上安装 Google Chrome 浏览器
linux·运维·chrome
光通信学徒3 小时前
ubuntu图形界面右上角网络图标找回解决办法
linux·服务器·ubuntu·信息与通信·模块测试
wusam3 小时前
螺蛳壳里做道场:老破机搭建的私人数据中心---Centos下Docker学习03(网络及IP规划)
运维·服务器·网络·docker·容器
南种北李3 小时前
Linux自动化构建工具Make/Makefile
linux·运维·自动化
一直在进步的派大星3 小时前
Docker 从安装到实战
java·运维·docker·微服务·容器