macvlan 网络隔离和连通 - 天天5分钟玩转 Docker 容器技术(57)

上一节咱们建立了两个 macvlan 并部署了容器,网络结构以下:docker

本节验证 macvlan 之间的连通性。

网络

bbox1 能 ping 通 bbox3,bbox2 能 ping 通 bbox4。即:同一 macvlan 网络能通讯。学习

bbox1 没法 ping 通 bbox2 和 bbox4。即:不一样 macvlan 网络之间不能通讯。但更准确的说法应该是:不一样 macvlan 网络不能 在二层上 通讯。在三层上能够经过网关将 macvlan 连通,下面咱们就启用网关。操作系统

咱们会将 Host 192.168.56.101 配置成一个虚拟路由器,设置网关并转发 VLAN10 和 VLAN20 的流量。固然也可使用物理路由器达到一样的效果。首先确保操做系统 IP Forwarding 已经启用。ip

输出为 1 则表示启用,若是为 0 可经过以下命令启用:路由

sysctl -w net.ipv4.ip_forward=1部署

在 /etc/network/interfaces 中配置 vlan sub-interface:table

auto eth2容器

iface eth2 inet manual配置

auto eth2.10

iface eth2.10 inet manual

vlan-raw-device eth2

auto eth2.20

iface eth2.20 inet manual

vlan-raw-device eth2


启用 sub-interface:

ifup eth2.10

ifup eth2.20


将网关 IP 配置到 sub-interface:

ifconfig eth2.10 172.16.10.1 netmask 255.255.255.0 up

ifconfig eth2.20 172.16.20.1 netmask 255.255.255.0 up


添加 iptables 规则,转发不一样 VLAN 的数据包。

iptables -t nat -A POSTROUTING -o eth2.10 -j MASQUERADE

iptables -t nat -A POSTROUTING -o eth2.20 -j MASQUERADE

 

iptables -A FORWARD -i eth2.10 -o eth2.20 -m state --state RELATED,ESTABLISHED -j ACCEPT

iptables -A FORWARD -i eth2.20 -o eth2.10 -m state --state RELATED,ESTABLISHED -j ACCEPT

 

iptables -A FORWARD -i eth2.10 -o eth2.20 -j ACCEPT

iptables -A FORWARD -i eth2.20 -o eth2.10 -j ACCEPT


当前网络拓扑以下图所示:

如今 host1 上位于 mac_net10 的 bbox1 已经能够与 host2 上位于 mac_net20 的 bbox4 通讯了。

下面咱们分析数据包是如何从 bbox1(172.16.10.10)到达 bbox4(172.16.20.11)的。整个过程以下图所示:

① 由于 bbox1 与 bbox4 在不一样的 IP 网段,跟据 bbox1 的路由表:

数据包将发送到网关 172.16.10.1。

② 路由器从 eth2.10 收到数据包,发现目的地址是 172.16.20.11,查看本身的路由表:

因而将数据包从 eth2.20 转发出去。

③ 经过 ARP 记录的信息,路由器可以得知 172.16.20.11 在 host2 上,因而将数据包发送给 host2。

④ host2 根据目的地址和 VLAN 信息将数据包发送给 bbox4。

macvlan 网络的连通和隔离彻底依赖 VLAN、IP subnet 和路由,docker 自己不作任何限制,用户能够像管理传统 VLAN 网络那样管理 macvlan。

至此,macvlan 就讨论完了,恭喜你们又学完一个网络方案,下一节咱们开始学习 flannel。

二维码+指纹.png

相关文章
相关标签/搜索