如何使所有 Windows 网络接口在 WSL2 中可见(且可用)?

如何使所有 Windows 网络接口在 WSL2 中可见(且可用)?

我是一名学生,目前正在开发一个项目,目标是将 MultiPath TCP (MTCP) 集成到 WSL2 中。然而,我们面临着一个重大挑战:WSL2 仅公开一个“主”网络接口,这不足以实现 MTCP 的最佳运行。即使我重新编译内核并启用 MTCP,它也不会按预期运行,因为它需要多个接口。我的问题是,您对提议的启用 MTCP 的网络架构有什么想法,是否有更简单的方法来实现或有哪些可以改进的地方?预先感谢您,祝您有美好的一天:)

这是架构细分:

服务器应用程序(在 Windows 中):

  • 接口监视器:该组件监视网络接口。客户端定期向服务器请求接口列表,并根据此信息添加或删除接口。或者,服务器可以将此信息写入 WSL 文件系统中的文件,客户端读取该文件以更新其接口。

  • 从 TAP 接口接收数据包:客户端创建TAP接口后,服务器会产生一个线程负责接收数据包。通过接口更新通知客户端发送数据包的适当端口。每个TAP接口对应一个专用端口。

  • NAT 数据包:在处理数据包接收的线程中,服务器通过修改相关IP字段来执行网络地址转换(NAT)。可以使用 PcapPlusPlus 等库来简化此操作,该库简化了 TCP 数据包修改。

  • 发送数据包:StackOverflow 上的一些线程建议 Windows 限制直接发送原始数据包。我仍在探索将数据直接发送到相应接口的选项。

客户端应用程序(在 WSL2 中):

  • TAP接口创建:客户端通过相应地创建或删除 TAP 接口来对接口更新做出反应。

  • 接口监听:一旦创建了 TAP 接口,客户端就会使用名为 libpcap 的库来从中嗅探数据包。

  • 通过 UDP 发送数据包:每个接口都关联一个专用端口,保证捕获的数据包正确传输。

  • 接收响应:一个线程将负责接收来自真实Windows接口的响应,并且将被写入TAP接口中。

相关内容