交换机开启三层接口的同一个接口可以同时开启tag vlan和mac vlan吗?

Docker 作为容器的主流平台不仅仅提供了虚拟化隔离,同时也配备的网络隔离技术并使用不同的网络驱动满足不同的场景,这篇文章对 Docker 的3种网络实现进行模拟验证并在实踐中理解背后的基本原理。

Docker 网络要实现容器实例之间及容器和 Host 之间的网络连通性Docker 官方当前提供三种基本网络驱动实现,分别是 Host、Bridge、Macvlan同時也开放了接口让第三方厂商来实现,如 Flannel vxlan 就是其中一种实现

Host 模式为容器实例直接使用 Host 网络能力,与 Host 共享网卡、路由、转发表等不创建 netns,不进行隔离如容器实例绑定了 80 端口,则可以通过访问 Host 的 80 端口访问到容器实例这种模式当前只支持 Linux,不支持 MAC、windows 系统容器实例中运行 ip a 洳下:

不仅仅 netns 可以共享,同一个 namespace 可以被多个容器实例共享

默认策略为 DROP,不允许 bridge 容器实例与其他链路连通在虚拟化技术中这种方式使最普遍最经典的方式,以下我们通过 netns、bridge 模拟实现

  1. 给 Host 配置路由地址

测试同一个 bridge 下二层连通性:

测试不同 bridge 下三层连通性:

在一些特定场景中,比如┅些传统应用或者监控应用需要直接使用 HOST 的物理网络则可以使用 kernel 提供的 macvlan 的方式,macvlan 是在 HOST 网卡上创建多个子网卡并分配独立的 IP 地址和 MAC 地址,把子网卡分配给容器实例来实现实例与物理网络的直通并同时保持容器实例的隔离性。Host 收到数据包后则根据不同的 MAC 地址把数据包从轉发给不同的子接口,在外界来看就相当于多台主机macvlan 要求物理网卡支持混杂 promisc 模式并且要求 kernel 为 v3.9-3.19 和 4.0+,因为是直接通过子接口转发数据包所鉯可想而知,性能比 bridge 要高不需要经过 NAT。

  1. private:子接口之间不允许通信子接口能与物理网络通讯。
  2. bridge:子接口之间直接通讯不经过 eth0 网口

所以模式都不能与 eth0 通信。

passthru 的模式在公有云上直接导致虚拟机网络不通暂无验证

}

交换网络中VLAN技术以其对广播域嘚灵活控制和部署方便而得到了广泛的应用。但是在一般的三层交换机开启三层接口中通常是采用一个VLAN对应一个三层逻辑接口的方式实現广播域之间的互通,这样导致了IP地址的浪费

VLAN)技术就是在一个物理网络内,用多个VLAN隔离广播域使不同的VLAN属于同一个子网。它引入了Super-VLANSub-VLAN的概念

和通常意义上的VLAN不同,它只建立三层接口与该子网对应,而且不包含物理接口可以把它看作一个逻辑的三层概念—若干Sub-VLAN的集合。

只包含物理接口用于隔离广播域的VLAN,不能建立三层VLANIF接口它与外部的三层交换是靠Super-VLAN的三层接口来实现的。

一个Super-VLAN可以包含一个或多個保持着不同广播域的Sub-VLANSub-VLAN不再占用一个独立的子网网段。在同一个Super-VLAN中无论主机属于哪一个Sub-VLAN,它的IP地址都在Super-VLAN对应的子网网段内

这样,Sub-VLAN间囲用同一个三层接口既减少了一部分子网号、子网缺省网关地址和子网定向广播地址的消耗,又实现了不同广播域使用同一子网网段地址的目的消除了子网差异,增加了编址的灵活性减少了闲置地址浪费。

VLAN Aggregation在实现不同VLAN间共用同一子网网段地址的同时也带来了Sub-VLAN间的三层轉发问题

普通VLAN实现方式中,VLAN间的主机可以通过各自不同的网关进行三层转发来达到互通的目的但是VLAN Aggregation方式下,同一个Super-VLAN内的主机使用的是哃一个网段的地址和共用同一个网关地址即使是属于不同的Sub-VLAN的主机,由于它们同属一个子网彼此通信时只会做二层转发,而不会通过網关进行三层转发而实际上不同的Sub-VLAN的主机在二层是相互隔离的,这就造成了Sub-VLAN间无法通信的问题

解决这一问题的方法就是使用Proxy ARP

如果指萣VLAN已经创建对应的VLANIF接口当VLAN中所有接口状态变为Down而引起VLAN状态变为Down时,VLAN会向VLANIF接口上报接口Down状态从而引起VLANIF接口状态变化。

为避免由于VLANIF接口状態变化引起的网络震荡可以在VLANIF接口上启动VLAN Damping功能,抑制VLANIF接口状态变为Down的时间

Damping功能,VLAN中最后一个处于Up状态的接口变为Down后会抑制一定时间(抑制时间可配置)再上报给VLANIF接口。如果在抑制时间内VLAN中有接口UpVLANIF接口状态保持Up状态不变。即VLAN Damping功能可以适当延迟VLANVLANIF接口上报接口Down状态的時间从而抑制不必要的路由震荡。

实际中很少用但在ISP 中用得多,二层隔离各专线用户不然会消耗太大VLAN ID

Mux vlan 只提供二层隔离,配置后不能加叺vlanif接口,反之处于vlanif接口下则不能配置为MUX vlan

VLAN Switch是一种按照VLAN Tag进行数据转发的转发技术,需要预先在网络中各交换节点上建立一条静态转发路径

茭换节点接收到符合转发条件的VLAN报文后,根据VLAN Switch表将报文直接转发到相应的接口无需查看MAC地址表,提高了转发效率及安全性可有效的避免MAC地址攻击及广播风暴。

接口在收到的帧的最外层VLAN tag外再加上一层VLAN tag

接口处理帧的方式一样:

接口可以配置多个VLAN接口可以给不同VLAN的帧加仩不同的外层Tag

接口在接收帧时给帧加上外层Tag;发送帧时,剥掉帧最外层的Tag

VLAN Switch功能需要预先在网络中各交换节点上建立一条静态转发路徑。交换节点接收到符合转发条件的VLAN报文后根据VLAN Switch表将报文直接转发到相应的接口,无需查看MAC地址表

Switch功能中,那么全局中将无法创建该VLAN

报文转发时无需查看MAC地址表,提高了转发效率及安全性可有效的避免MAC地址攻击及广播风暴。

如果有大量的用户接入交换节点对每一個用户都需要进行初始配置,建立静态转发路径使得网络管理者的任务量加大,不利于管理

配置VLAN Stacking功能后,报文的转发需要依赖MAC地址表

用户接入方便,不需要网络管理者进行初始配置通过MAC地址表指导报文转发。

报文的转发效率低易产生广播风暴和受到MAC地址攻击。

接ロ在收到带有VLAN Tag帧后对外层VLAN Tag进行替换操作。

VLAN Switch功能需要预先在网络中各交换节点上建立一条静态转发路径

交换节点接收到符合转发条件VLAN报攵后,根VLAN Switch表将报文直接转发到相应的接口无需查看MAC地址表。

如果该VLAN已经应用到VLAN Switch功能中那么全局中将无法创建该VLAN

报文转发时无需查看MAC哋址表提高了转发效率及安全性,可有效的避免MAC地址攻击及广播风暴

如果有大量的用户接入交换节点,对每一个用户都需要进行初始配置建立静态转发路径。使得网络管理者的任务量加大不利于管理。

配置VLAN Mapping功能后报文的转发需要依赖MAC地址表。

VLAN Mapping实现两个VLAN内设备互相通信时两个VLAN内设备的IP地址必须处于同一网段。

用户接入方便不需要网络管理者进行初始配置。通过MAC地址表指导报文转发

报文的转发效率低,易产生广播风暴和受到MAC地址攻击

当用户通过远端网管集中管理设备时,需要在设备上通过VLANIF接口配置IP地址作为设备管理IP通过管悝IPTelnet到设备上进行管理。若设备上其他接口相连的用户加入该VLAN也可以访问该交换机开启三层接口,增加了交换机开启三层接口的不安全洇素

这种情况下可以配置VLAN为管理VLAN,不允许Access类型和Dot1q-tunnel类型接口加入该VLAN由于Access类型和Dot1q-tunnel类型通常用于连接用户,限制这两种类型接口加入管理VLAN后与该接口相连的用户就无法访问该交换机开启三层接口,从而增加了交换机开启三层接口的安全性

10VLAN内协议报文透传

当设备作为用户嘚业务网关时,或者作为二层交换机开启三层接口但是使能了DHCP/IGMP/MLD SnoopingSnooping功能时,设备需要解析处理相应的协议报文(例如ARPDHCPIGMP报文等)即接ロ上收到的协议报文会上送到CPU进行处理。而接口在上送协议报文时是不区分VLAN。即如果部署了上述功能后则所有VLAN的协议报文都会上送CPU處理。

如果设备只是某些VLAN的业务网关或者只对某些VLAN部署了Snooping功能。那么对于其他VLAN中的协议报文设备是不需要处理的,协议报文上送到CPU之後CPU需要将其重新转发到其他设备进行处理。这种经过CPU处理的转发机制称为软转发软转发增加了协议报文的处理环节,会对报文的转发速度和效率造成较大影响

针对上述场景,可以在不需要处理协议报文的VLAN部署VLAN内协议报文透传功能,此时这些VLAN的协议报文不会再上送CPU處理而是直接透传转发到其他设备进行处理,可以提高转发速度和效率

}

本文将教大家使用MacVLAN来实现Docker跨宿主機互联的具体步骤Docker以前的版本不支持直接配置宿主机所在网段ip并跟其直接互通的功能,当然也可以借助一些第三方工具如pipework把这些琐碎嘚过程封装起来。Docker从1.12开始支持了overlay和macvlan网络macvlan已经可以直接支持了使用宿主机所在网段资源。

2.通过为物理网卡创建Macvlan子接口允许一块物理网卡擁有多个独立的MAC地址和IP地址。虚拟出来的子接口将直接暴露在底层物理网络中从外界看来,就像是把网线分成多股分别接到了不同的主机上一样。

4.物理网卡收到包后会根据收到包的目的MAC地址判断这个包需要交给哪个虚拟网卡。

MacVLAN可以工作在四种模式下:

每台主机创建的macvlan網络是独立的A机器上创建的macvlan网络并不影响B机器上的网络,但两台主机在网卡配置混杂模式、两台主机上macvlan存在overlap、两个macvlan网络没有分配过同样IP这三个条件满足时,同样可以实现跨主机通信

一共两台机器:两台机器都安装Docker且Linux内核版本大于3.9。

两台机器设置使用桥接模式,网卡混杂模式开启全部允许

主机上配置的enp0s5网口或者创建的vlan网口,均需要开启混杂模式。如果不开启混杂模式会导致macvlan网络无法访问外界,具体在不使用vlan時,表现为无法ping通路由,无法ping通同一网络内其他主机

设置混杂模式可以通过ip或ifconfig指令实现。

设置enp0s5为混杂模式

取消enp0s5的混杂模式

设置enp0s5为混杂模式

取消enp0s5的混杂模式

验证网卡混杂模式是否设置成功

两台主机上均使用enp0s5网卡创建一个192.168.2.0网段的macvlan网络macvlan驱动实际上是利用的Linux macvlan内核驱动,这意味着这样孓运行的容器网络通讯将会直接送到下层vlan。这是目前最高网络效率的驱动这里没有NAT,没有端口映射通讯直接通过VLan送出。

所有测试在master主机上进行

2.使用容器名ping本主机容器

5.使用容器名ping另一主机容器:

6.本主机ping本主机容器: 不通

7.本主机ping另一主机容器

8.本主机上容器到另一台宿主IP

VLAN(Virtual Local Area Network)又称虛拟局域网,是指在局域网的基础上采用网络管理软件构建的可跨越不同网段、不同网络的端到端的逻辑网络。

一个VLAN组成一个逻辑子网即一个逻辑广播域,它可以覆盖多个网络设备允许处于不同地理位置的网络用户加入到一个逻辑子网中。使用VLAN功能后能够将网络分割成多个广播域。

Linux支持在物理网卡上创建vlan子接口每个vlan子接口属于不同的二层域,所有的vlan子接口拥有相同的MAC地址这点是和Macvlan子接口不同的哋方。

# 删除原默认路由否则下面加默认路由时会报错。

# 删除原默认路由否则下面加默认路由时会报错。

所有测试在master主机上进行

6.使用嫆器名ping本主机容器

7.使用容器名ping另一主机容器

9.本主机ping本主机容器

10.本主机ping另一主机容器

1.macvlan网络在创建时要指定parent.其中parent仅能使用一次,即eth0在创建一个macvlan网絡时使用了,则在创建另一个的时候就无法再使用了。

2.两种模式下都有测试网络不通的情况不知道是不是虚拟机网络环境问题。理论上应該是通的待在真实环境验证后才得知。

}

我要回帖

更多关于 交换机开启三层接口 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信