docker iptables详解

该环境安装了docker ,并启动了一个容器做了端口映射

docker数据如何经过iptables

接着来梳理,数据经过iptables 是如何处理的。首先需要了解iptables 的组成:
iptables 有4表(raw、mangle、nat、filter)5链(prerouting、input、forward、output、postrouting

查看各个表命令
# 表功能解析
Filter表:过滤数据包
NAT表:用于网络地址转换(IP、端口)
Mangle表:修改数据包的服务类型、TTL、并且可以配置路由实现QOS
Raw表:决定数据包是否被状态跟踪机制处理

iptables -t raw -nL
iptables -t mangle -nL
iptables -t nat -nL
iptables -t filter -nL

5链解析

INPUT链——进来的数据包应用此规则链中的规则[过滤所有目标地址是本机地址的数据包(过滤进入主机的数据包)]
OUTPUT链——外出的数据包应用此规则链中的规则[处理所有源地址是本机地址的数据包(从本机发出去的数据包)]
FORWARD链——转发数据包时应用此规则链中的规则[负责转发流经主机的数据包,起转发的作用]
PREROUTING链——对数据包作路由选择前应用此链中的规则
POSTROUTING链——对数据包作路由选择后应用此链中的规则

综上,Linux将用户规则依据功能和规则所处链路位置进行分组,“四表”存放着功能一致的规则,“五链”存放着数据包所处链路一致的规则。
这四个表分别存放什么功能的规则?如下归类:
在这里插入图片描述

进入本篇正题:

docker数据经过iptables 需要按顺序经过5链进行处理。看下图:
在这里插入图片描述

  1. 首先数据经过prerouting表,由于 raw、mangle表都为空,所以可以直接看nat表的prerouting 链:

nat

iptables -t nat -nL

从下图顺序可以看到通过nat表中的prerouting链,将所有访问本地地址的数据都匹配到Docker 链;
而Docker 这里有DNAT 规则,将访问宿主机的这些端口的数据转发到了对应的容器当中172.20.x.x:port

在这里插入图片描述

  1. 再到input链,其中mangle表为空,直接看nat、filter表中的input链:

结合从上图(nat表)中可以看到natinput链以及下图(filter表)中的input链都没做任何规则

iptables -t filter -nL

在这里插入图片描述

  1. 再接着到output链,raw、mangle为空,直接查看natfilter表中的output

从上可以看到 nat 表中的output链将所有目的地址为非环回地址的本地地址数据匹配到Docker链,然后重复DNAT

再到filter表中的output链没有做任何规则

  1. 最后到postrouting 链,mangle 为空

nat表中POSTROUTING将目标容器地址的返回数据通过MASQUERADE(自动化SNAT)做动态转发出去,而目标地址为对应容器ip的,则转发到对应容器映射的外部端口上

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值