基于OpenFlow的容器SDN网络互通方案
基于OpenFlow的容器SDN网络互通方案
这篇文章是想设计一套基于OpenFlow的容器SDN网络互通方案。
同主机同网段
容器和自己的网关连接,先看192.168.0.2容器和网关的流表,条件:端口5进入源mac是03:10的源IP是192.168.0.2目标IP是192.168.0.1的流量,动作:从3口出,这样流量就可以到达网关;那怎样返回呢?反过来,流量从3口进入,源mac是ab:96,源IP是192.168.0.1,目的IP是192.168.0.2,动作:先把目的mac改成容器03:10,然后从5端口流出,这样容器就可以和网关互联了。
同主机不同网段
虽然在同一台主机,但是是不同的网段,按照传统的设计理念,肯定是需要路由转发才能互通的,下面请看我的设计,从192.168.0.2->10.1.0.2,流量从5端口进入源mac是03:10,源IP是192.168.0.2,目的地址是10.1.0.2,动作:将源mac修改为3d:46,目的mac改成04:f8,然后从4端口出,这里之所以设计源mac为3d:46是想让容器以为流量来自网关。反过来,流量从4口如源mac为04:f8,源IP为10.1.0.2,目的地址为192.168.0.2,动作:修改源地址为3d:46,目的mac为03:10,从5端口出。这样网络就可以互通了,这里mac改为网关的mac是重点。
同网段不同主机
这个例子里面可是说跨主机的问题,从10.1.0.2->10.1.0.3。流量从4口入,源mac为04:f8,源IP为10.1.0.2,目的IP为10.1.0.3,动作:修改源mac为00:d9,目的mac为00:da,源IP为10.0.0.27,目的IP为10.0.0.28,从端口1出。因为要跨宿主机,这里首先要把源mac和目的mac修改为宿主机的,这样流量才能出去,但10.0.0.27/28这两个IP感到疑惑,怎么突然冒出两个IP出来,这里之所以这样设计是为了安全考虑,隐藏内部容器的IP,当然这里如果直接使用容器的IP也是可以,但作为产品设计考虑到容器的IP可能在现实网络中防火墙无法通过的原因,设计这样的IP,更加灵活。流量到达另一台宿主机1口后,目的mac是00:da,源IP是10.0.0.28目的IP是10.0.0.28,动作:修改源mac为04:f8,目的mac为5d:1f,源IP为10.0.1.2,目的IP为10.1.0.3并且从4口出。这样流量就到达的另一个容器了,返回的原理是相同的,不再赘述。
不同主机不同网段
这种情况可能是最复杂的一种场景,但结合前面的讲述应该也不是太难,从10.1.0.2->192.168.0.3。流量从4口进入源mac为04:f8,源IP为10.1.0.2,目的IP为192.168.0.3,动作:修改源mac为00:d9,目的mac为00:da,源IP地址为10.0.0.135,目的IP为10.0.0.134,从1口出,这个和上面是一样的,流量到达另一个宿主机1口的时候,目的mac为00:da,源IP是10.0.0.135,目的IP是10.0.0.134,动作:源mac修改为68:6c,目的mac为b8:73,源IP为10.1.0.2,目的IP为192.168.0.3从5口出,这样流量就到达了另一台宿主机里面的容器了,返回同理不赘述。
连接外网
容器都会通过宿主机访问外部网络,192.168.0.2的容器连接外网,流量从5口进入,源mac为03:10,源IP为192.168.0.2目的IP为114.114.114.114,动作:从3口出,交给网关;反过来,流量从3口进入源mac为ab:96,源IP 114.114.114.114目的IP为192.168.0.2,动作:目的mac改为03:10,从5端口出
这样通过在每个主机上面启动一个网关,达到不同网段互通的目的。至此整个网络方案设计完成!
更多推荐
所有评论(0)