一.Linux Bridge :Linux中的网桥
假设宿主机有 1 块与外网连接的物理网卡 eth0,上面跑了 1 个虚机 VM1,现在有个问题是: 如何让 VM1 能够访问外网?
至少有两种方案
将物理网卡eth0直接分配给VM1,但随之带来的问题很多: 宿主机就没有网卡,无法访问了; 新的虚机,比如 VM2 也没有网卡。 下面看推荐的方案
给 VM1 分配一个虚拟网卡 vnet0,通过 Linux Bridge br0 将 eth0 和 vnet0 连接起来,如下图所示
Linux Bridge 是 Linux 上用来做 TCP/IP 二层协议交换的设备,其功能可以理解为一个二层交换机。多个网络设备可以连接到同一个 Linux Bridge,当某个设备收到数据包时,Linux Bridge 会将数据转发给其他设备。
在上面这个例子中,当有数据到达 eth0 时,br0 会将数据转发给 vnet0,这样 VM1 就能接收到来自外网的数据; 反过来,VM1 发送数据给 vnet0,br0 也会将数据转发到 eth0,从而实现了 VM1 与外网的通信。
现在我们增加一个虚机 VM2,如下图所示
VM2 的虚拟网卡 vnet1 也连接到了 br0 上。 现在 VM1 和 VM2 之间可以通信,同时 VM1 和 VM2 也都可以与外网通信。
网桥实际上相当于一个物理路由器(交换机)。
brctl show 查看网桥信息,br100就是我们在这里搭建的网桥,后面挂接的虚拟机网卡和物理机网卡
virbr0 是 KVM 默认创建的一个 Bridge,其作用是为连接其上的虚机网卡提供 NAT 访问外网的功能。virbr0 默认分配了一个IP 192.168.122.1,并为连接其上的其他虚拟网卡提供 DHCP 服务。(NAT)
需要说明的是,使用 NAT 的虚机 VM1 可以访问外网,但外网无法直接访问 VM1。 因为 VM1 发出的网络包源地址并不是 192.168.122.6,而是被 NAT 替换为宿主机的 IP 地址了。
每张网卡都有唯一的MAC地址。
二.VLAN
首先搞清楚这几个概念:
LAN:Local Area Network 局域网
我们一般在公司组网,都是组建的LAN网络,用户在局域网里通信、传输文件。其获取到的是内部IP,LAN 信息交换使用的是交换机。我们可以
不连接WAN 口,把路由器当做普通交换机来使用。一个 LAN 表示一个广播域:LAN 中的所有成员都会收到任意一个成员发出的广播包。
WAN:Wide Area Network 广域网。WAN口是对外的接口,和运营商、上级网络打交道。
WLAN:Wireless LAN 无线局域网。WLAN 利用电磁波在空气中发送和接受数据,而无需线缆介质。
LAN和WLAN是对内的接口,内部的电脑、手机、PAD,都是接入到LAN或者WLAN。
一般的无线路由器,包含了完整的LAN、WAN、WLAN功能对LAN、WAN、WLAN,要放在一起理解,理解其在网络通信中扮演的角色。
那什么是VLAN呢?
VLAN 表示 Virtual LAN。一个带有 VLAN 功能的物理交换机能够将自己的端口划分出多个 LAN。计算机发出的广播包可以被同一个 LAN 中其他计算机收到,但位于其他 LAN 的计算机则无法收到。简单地说,VLAN 将一个交换机分成了多个交换机,限制了广播的范围,在二层将计算机隔离到不同的 VLAN 中。现在的交换机几乎都是支持 VLAN 的。通常交换机的端口有两种配置模式: Access 和 Trunk。
看下图,实际上是两台交换机,上面是一台,下面是一台。
Access 口:这些端口被打上了 VLAN 的标签,表明该端口属于哪个 VLAN。 Access 口都是直接与计算机网卡相连的,这样从该网卡出来的数据包流入 Access 口后就被打上了所在 VLAN 的标签。