深度解析Linux下VLAN功能的实现原理

哦,Linux下的这个VLAN,我来说说我当时遇到的坑吧。

那一年,公司刚刚接到一个大订单,网络架构要重新设计,一百多台服务器都要用VLAN来分隔。
起初我很困惑。
Linux下如何实现VLAN?
后来我才意识到。
在Linux系统上,net_device结构体支持虚拟网络设备。
你看,这东西不知道你是真是假。
然而,如果你给设备一个结构,网络层就会识别它。
那一年,我尝试创建一个新的 VLAN 设备,使用 vconfig 命令,例如 vconfig add eth0 1 00,将 VLAN 1 00 添加到 eth0。
看一下,这个命令既简单又原始。
但如果忘记添加主机设备,系统会大吃一惊,直接报错说找不到物理设备。

这个VLAN设备的代码主要在net/core和kernel drivers/net目录中。
当我看到这些代码时,我感到非常头疼。
函数一个接一个,比如NF_函数,dev_queue_xmit等等,这让我想起了。
特别是hard_start_xmit,当数据发送到硬件时,应该使用这个函数。
对于 VLAN 设备,可以在下面使用 vlan_dev_hard_start_xmit。
该功能中添加了VLAN标签。
如果标签加错了哦,数据包就会丢失。
这是一件大事。
当时我的网络就因此被封锁了好几天。

检索数据更加困难。
一旦中断到来,驱动程序必须在中断函数中处理它。
当VLAN设备接收到数据包时,必须根据VLAN ID对其进行解封装。
否则,你怎么知道这个数据包应该去哪里呢?记得有一次,我正在测试一个新添加的VLAN,但解封装时出了问题,大量数据包乱飞。
我花了一整晚才把它修好。

总体而言,虽然VLAN在Linux中功能强大,但它确实是一项技术活。
如果你不明白那些功能和流程,出了问题,哭都晚了。
当时我因为错误使用一个vconfig命令,差点导致整个网络瘫痪。
所以在这个行业你一定要小心,多练习,避免陷入陷阱。

浅析华硕固件无线路由内部VLAN布局和原理(以R7000+梅林为例)

等等,昨晚我还在想这个。
在我的华硕 R7 000 上更新 Merlin 固件后,网络变得完全稳定。
那天晚上,我去后端查看VLAN设置,一头雾水。

看,在LAN端口上,我连接了一台计算机,一台台式计算机,使用标准的LAN1 端口。
我尝试 ping 另一台连接到 LAN 端口 2 的笔记本电脑,但 ping 失败!一开始以为是线路断了,后来发现必须先到后端去改VLAN配置。
我把LAN1 和LAN2 都放在同一个VLAN里,就成功了。

然后我又检查了WAN口。
那天我的宽带到期了,所以我又打电话了。
插入猫的WAN口,就会自动升起,自动获取IP等信息。
我只是想知道这个WAN口如何连接互联网?后来查看日志,发现VLAN2 是工作的。
当时我就想,如果WAN口也用VLAN1 是不是更方便一点?但转念一想,LAN和WAN岂不是要结合在一起吗?绝对不是。

顺便说一句,还有一个细节。
前几天我在后台看的时候,发现CPU端口是一个TRUNK端口,并且连接到了eth0。
该eth0有多个虚拟VLAN接口,例如vlan1 @eth0、vlan2 @eth0等。
当我看到这些虚拟接口时,我心想,这和企业中使用的三层交换机类似吗?数据通过虚拟局域网 (VLAN) 进行隔离和转发。
NAT 转换也很有趣。
前几天我特地用手机做了局域网黑客攻击,使用的是NAT映射。
事实证明,当我内部网络上的设备(例如我的台式电脑)出去访问Internet时,它们使用的是路由器WAN端口的IP地址。
也就是说,我可以从外部通过这个端口访问我在内网的电脑。
这说明NAT在WAN口和LAN口之间进行地址转换。
此外,我发现这种 NAT 转换有时非常慢,尤其是在增加了我家的宽带带宽后,它变得更加明显。
由此可见,硬件加速确实非常重要。

我突然想到,Merlin固件到底是什么呢?相比华硕官方固件,它更注重性能,或者有什么特别的功能吗?在我的印象中,Merlin固件好像支持更多的路由协议?这需要更仔细地研究。

现在我还有一个问题。
由于WAN口是VLAN2 ,如果我有两条宽带,我可以将另一条宽带连接到另一个VLAN吗?像 VLAN3 一样?这会实现双带宽负载平衡吗?我以前在其他地方见过这种设置。
Merlin固件下可以吗?