Windows Dockers环境下,让windows与Dockers互通解决方案,iptables解决方案过程原理了解

看图解说

要做到网络互通,首先你必须对整个网络拓扑结构有了解。笔者为你们画了出来了。基本结构就是这样。
首先必须强调的概念是。这些网络当中,
要让我们的dockerMachine帮我们转发请求,必须在docker-machine 上面最端口转化,因为docker-machine 上面有两张网卡,一张 对外,一张对内。在其上,可以做端口映射,如将该机器上的端口50222 映射到Container1上的22端口
在这里插入图片描述
因为dockerMachine在外面可以访问,所以可以通过开放端口,映射目标地址的方式。

研究的方法
1.首先导出Iptables
通过iptables-save >before.txt

2.通过尝试添加一个redis容器,并将容器的6379端口映射到外部的56379端口,
导出iptables
3.通过iptables-save >>after.txt

得到before.txt 与after.txt。比较这两个文件

在nat 表中,添加了如下的记录。

-A POSTROUTING -s 172.17.0.2/32 -d 172.17.0.2/32 -p tcp -m tcp --dport 6379 -j MASQUERADE
-A DOCKER ! -i docker0 -p tcp -m tcp --dport 56379 -j DNAT --to-destination 172.17.0.2:6379

在filter 表中,添加了如下的记录

-A DOCKER -d 172.17.0.2/32 ! -i docker0 -o docker0 -p tcp -m tcp --dport 6379 -j ACCEPT

在nat表中的第一条,表示,在下图的filter链
在这里插入图片描述

的PostRouteing ,一般是数据包向外发送的。这个一般看作是docker容器中的请求发送给dokcerMachine ,dockerMachine充当路由器的角色,将对数据包的源地址进行转化成为本机地址,我们称之为MASQUERADE,也就是自动替换(如果是路由器将会替换成公网地址)。本条我们就不必关注了。

关注nat的第二条-A DOCKER ! -i docker0 -p tcp -m tcp --dport 56379 -j DNAT --to-destination 172.17.0.2:6379这一条在nat 的DOCKER链中,添加了一条规则,这条规则是,

  1. ! -i docker排除docker0接口来的请求
  2. -p tcp只支持tcp 传输协议
  3. -m tcp使用 tcp 扩展模块的功能 (tcp扩展模块提供了 --dport, --tcp-flags, --sync等功能)
  4. --dport 56379表示目标端口是本机的56379端口
  5. -j DNAT目标地址转化,目标地址可能是本机,需要转化成为172.17.0.2 所以后面跟着一个
  6. --to-destination 172.17.0.2:6379后面跟着一个转化目标地址,表示数据包的请求的目标地址与端口转化成为规则制定的那样。

照猫画虎
sudo iptables -t nat -A DOCKER ! -i docker0 -p tcp -m tcp --dport 50222 -j DNAT --to-destination 172.17.0.3:22

然后尝试着请求一下50222端口(前提是你的172.17.0.3容器开22端口,否则还是不会通的!!!)
在这里插入图片描述
发现果然没有通,让我们来分析一下原因,数据包在经过docker-machine 的时候,目标地址确确实实被转化了,但是源地址没有转化呀!你随便丢一个网段来的数据包我就给你访问,这不是搞笑吗?

所以分析filter表里面新增的iptables规则描述。
同样我们可以写出一条新的。
sudo iptables -t filter -A DOCKER ! -i docker0 -p tcp -m tcp --dport 22 -j ACCEPT
在这里插入图片描述

尝试着访问,果然是ok,好了,本教程到此结束,望读者能举一反三。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值