firewalld与iptables冲突,docker无法连接外网解决方案

摘要

本文主要介绍了在机器上同时配置了iptables和firewalld之后,因为防火墙冲突,导致docker内部网络无法连接外网,针对这个场景下,通过卸载firewalld,全面启用iptables,重新安装docker来解决该问题的过程。

发现过程

  1. docker日志查看发现内部无网络 使用vocechat这个聊天软件,一直没有手机通知,通过docker的日志查看:
   docker logs <containerid> -f --tail 10

发现该docker每隔5分钟会向一个网站请求检查md5值,来检测更新版本,但是一直提示没网络。

  1. 检查docker容器网络状态
   #这个可以检查容器状态,里面能看到网络情况
   docker inspect <containerid>

#### 一些尝试

  1. docker中增加DNS,发现无效
  2. /etc/docker/daemon.json中添加dns,无效 最终的方案
  • 禁用firewalld
  • 卸载docker并重新安装docker
  • 启用iptables并配置

解决过程

禁用firewalld

#先用这个看一下开放了哪些端口并记录下来
firewall-cmd --list-all
#停止并禁用firewalld
systemctl stop firewalld
systemctl disable firewalld

卸载并重新安装docker

停止并卸载docker

systemctl stop docker
apt purge docker-ce docker-ce-cli containerd.io

清理残留文件

rm -rf /var/lib/docker
rm -rf /etc/docker

重装安装docker

apt update
apt install -y docker-ce docker-ce-cli containerd.io

启动并验证docker

systemctl start docker
systemctl enable docker
#查看docker状态
systemctl status docker

这里执行完成后,可以去自己对应的服务下启动docker-compose服务了。

docker-compose up -d

iptables配置

允许22端口

#要保留22端口,不然关闭所有端口后,连SSH中断,无法操作了
iptables -A INPUT -p tcp --dport 22 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -p tcp --sport 22 -m conntrack --ctstate ESTABLISHED -j ACCEPT
#允许已建立的连接
iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

设置默认策略

iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT
#设置完成后,确认一下,另外开一个链接,看一下SSH是否能连接,如果能连接则继续向下

添加其他规则

#添加80和443的TCP端口
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j ACCEPT

查看iptables规则

iptables -L -n -v

问题:web服务前端无法访问

#一开始配置:
iptables -A INPUT -p tcp -s 127.0.0.1 -j ACCEPT
#后来配置:这个可以允许本地回环接口的流量
iptables -A INPUT -i lo -j ACCEPT

添加上述规则之后,web服务可以正确访问了。

iptables保存

因为iptables重启后,会消失,需要进行持久化。

#安装iptables-persistent
apt install iptables-persistent
#保存当前规则:
iptables-save > /etc/iptables/rules.v4
ip6tables-save > /etc/iptables/rules.v6

这一步做完后,就正常了。

结语

本文介绍了因为firewalld与iptabales冲突引起docker内部网络与外部不通,通过重新安装docker并禁用firewalld,并解决了因为iptables没有转发本地localhost(127.0.0.1)的流量导致web服务nginx无法正常反代的问题。

备注:本文的系统为debian12.

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇