我们在工作中接到了一项任务,其中包括将某些产品从 Windows 移植到 Linux。该产品功能的一部分是 NDIS6 微型端口网络适配器,它显然只通过网络缓冲区。它有一个标识符和 MAC 地址。单独的服务应用程序激活该网络驱动程序并启动通过此适配器传递网络流量的 IP 服务。
我的问题是,在 Linux 上,什么可以替代这种“虚拟”网络驱动程序?
答案1
Linux 中的 Windows 微型端口网络适配器替换是什么?
“微型端口网络适配器”没有解释太多 –微型端口驱动程序是 Windows 驱动程序模型所特有的,它描述了驱动程序的编写方式,但没有描述其功能。
某些实体(模块?)将充当以太网数据包的直通通道,可以通过编程激活和停用,并且可以通过编程用于通过它设置 IP 网络
如果你的目标是创建一个由软件控制的网络接口(即通过接口发送的数据包由程序通过文件句柄接收,反之亦然),那么你应该使用tap
或者tun
接口。(前者携带带有第 2 层以太网报头的数据包,后者则不携带,但除此之外,它们是相同的。)
官方文档:
https://www.kernel.org/doc/Documentation/networking/tuntap.txt
(这个文档相当古老;在所有现代 Linux 发行版中,您不需要手动创建设备节点,也不需要手动加载内核模块。但是,第 3 节“程序接口”和基于 ioctl 的 API 仍然准确。)
Linux 上的大多数 VPN 和 VM 软件都使用 TUN/TAP 接口;事实上,Windows 上可用的“TAP-Windows”和“Wintun”NDIS 驱动程序就是为模仿它们而编写的。
您也可以编写自己的网络接口驱动程序来执行相同的操作(例如 VirtualBox 使用的“vboxnetadp”和 SheepShaver Mac 模拟器使用的“sheep_net”),但大多数系统管理员会感谢您没有这样做,而是使用标准的 tun/tap。