1.网卡子接口
网卡上配置的子接口,主要有两种:
- 网卡别名子接口
- vlan子接口
1.1 网卡别名子接口eth0:1
工作原理:这是一种简单的IP层虚拟化技术。它允许你在一块物理网卡上绑定多个IP地址,但这些IP地址都位于同一个网络段(同一个广播域)内。它不涉及修改数据帧的结构。 典型场景:在一台服务器上托管多个Web站点(每个站点一个IP)、进行网络服务测试,或者为服务提供一个浮动虚拟IP(VIP)用于高可用性方案。 配置方法:
# 临时创建并启用一个IP别名子接口
sudo ip addr add 192.168.1.100/24 dev eth0 label eth0:1
sudo ip link set dev eth0:1 up
1.2 vlan子接口eth0.100
1.2.1 vlan子接口基本原理
工作原理:这是遵循IEEE 802.1Q标准的虚拟局域网技术,需要内核加载8021q模块。它在原始的以太网数据帧中插入一个4字节的VLAN标签(Tag),用以标识该数据帧属于哪个VLAN(通过VLAN ID,范围1-4094)。这样,一个物理网卡就可以像多个逻辑端口一样工作,承载多个不同的、相互隔离的广播域流量。 典型场景:企业网络中为不同部门(如财务、研发)划分安全隔离的网络;云计算中为不同租户提供独立的网络环境。在一台物理服务器上为不同租户(或不同服务)托管多个虚拟机或容器。通过VLAN子接口(如 eth0.1001, eth0.1002),可以轻松地将不同租户的流量隔离到不同的VLAN中,实现网络安全隔离,同时最大化硬件利用率。
注意: 我开始想的是,主机有vlan tag,发出的包到交换机也会增加vlan tag(假设交换机启用vlan)那么岂不是又两个vlan tag?但其实并不是这样的。 如果将主机内部配置成vlan子接口模式,那么主机里面收发的包就都带有vlan tag了,这个时候,主机接入交换机的接口必须配置成trunk接口,而不是access接口。如果配置成access模式会导致通信失败。
配置方法:
# 创建VLAN ID为10的子接口
sudo ip link add link eth0 name eth0.10 type vlan id 10
# 为其配置IP并启用
sudo ip addr add 192.168.10.1/24 dev eth0.10
sudo ip link set dev eth0.10 up
这种情况下,主机不再是一个被动的终端,而是像一个理解VLAN的路由器或三层交换机接口那样主动地处理VLAN标签。这体现了网络功能虚拟化的一种基本思想:通过软件(内核模块)在不增加硬件的情况下,赋予标准服务器更灵活的网络角色。相当于逻辑上将交换机处理vlan的动作,移动到了linux内核里面的8021q模块来实现了。在主机上配置VLAN子接口,就像是给服务器安装了一个软件定义的“迷你交换机”。它打破了终端主机只能被动接入单一网络的限制,让你能以一种更软件化、更灵活的方式来定义和管理服务器的网络连接。 传统方式主机网口接入交换机,交换机中划分vlan的方式,主机的一个网口功能很单一。但是近些年上了虚拟机、容器这类虚拟化技术时,不可能增加一个租户就多增加一个网卡,只能是多个租户共用网卡,这样的话,可以将vlan功能放到主机的网口上,这样一个网口也能划分出很多vlan出来,达到不同租户共用服务器网口的目的。 vlan子接口本质上是在物理网络基础上划分出的一个逻辑广播域。在宿主机上,它表现为一个与特定VLAN ID关联的虚拟交换机或网桥。这个逻辑交换机的作用是在同一台主机内,为连接到它的所有虚拟机提供二层交换功能,并通过上联的物理网卡和物理网络,与其他主机上同一VLAN的成员进行通信。
1.2.2 vlan子接口配置ip
vlan子接口配置ip与不配置ip,其在网络中的地位完全不同。 (1)配置ip 配置ip之后,这个vlan子接口的核心功能就变成了三层路由。 工作原理:它成为了该VLAN(例如VLAN 10)内所有设备的默认网关。当VLAN 10内的一台电脑想要访问VLAN 20的另一台电脑时,数据包会发送到这个网关地址。子接口 eth0.10收到数据包后,会剥离VLAN 10的标签,根据IP头部信息进行路由查询,发现目标在VLAN 20,然后就将数据包转发给子接口 eth0.20,由 eth0.20重新封装上VLAN 20的标签后发送出去。 配置了IP地址的VLAN子接口,其网关功能是一个完整的、标准的三层路由功能,而绝非仅限于本机VLAN间的路由。
(2)不配置ip 在虚拟化或云计算环境中,VLAN子接口的用法有所不同。这时,它通常不配置IP地址,其核心工作是二层交换和VLAN标签处理。 工作原理:宿主机的物理网卡上创建一个VLAN子接口(如 eth0.100),但这个子接口不配IP。它的任务是识别和处理特定的VLAN标签。当数据帧从虚拟机发出,通过虚拟交换机到达这个子接口时,子接口会确保数据帧带有正确的VLAN标签(例如100)后才从物理网卡送出。反之,从物理网络接收到的带VLAN 100标签的帧,也由这个子接口接收并传递给正确的虚拟机。在这个过程中,子接口不进行路由,只负责“盖章”(打上或识别VLAN标签)和“传递”。 进阶理解:为什么虚拟化场景可以不要IP? 虚拟化环境追求的是灵活性和规模。如果每个VLAN子接口都配置IP并作为网关,那么会增加IP地址管理的负担。所有跨VLAN的流量都要绕行到宿主机进行路由,这可能成为性能瓶颈,也未必符合网络设计初衷。 因此,在这种场景下,VLAN子接口的职责被简化,专注于网络隔离和标签转换。路由功能通常会上交给更专业的三层交换机或专用的路由器来完成,或者在宿主机上通过更复杂的虚拟路由方案实现。