希望对我应该创建哪种类型的 NKE 有一些提示。我希望在 OS X 上对数据包进行 iproute2 样式的路由,或者我应该说“macOS”。默认情况下,在 macOS 上,“路由”命令似乎仅限于 IP 地址。我希望我的路线基于端口。
为了扩展,我在一个只允许端口 80 和 443 的公司网络中,但是还有一个非常慢但允许所有流量的第二个网络。我想将 80/443 上的所有流量引导到较快的公司网络上,并将其他所有流量引导到较慢的网络上,但有一个例外:试图通过其本地网络 ip 范围与公司网络通信的流量。我知道根据具体情况,我可以将我的应用程序配置为使用某些接口而不是其他接口,如果它在过滤器上匹配,我还可以使用附加到接口的代理将流量“转发”到另一个接口,但我过去在内存/磁盘使用和本地代理方面遇到过问题。
于是我有了一个疯狂的想法,因为我不能通过端口修改 macOS 路由,如果我可以创建自己的虚拟网络接口,它会位于服务订单的顶部并引导流量呢?大概这意味着转发数据包,可能会重新创建它们,所以我不能 100% 确定这是最好的方法。或者,我可以在现有接口上监听我想要重定向的流量,然后将那些重定向的数据包修改到不同的接口。
阅读 NKE 文档,例如Apple 网站上的 NKE 文档,我发现自己与Apple 邮件列表中未答复的海报处于相同的位置,我试图找出如何“设计自定义路由”。给出的示例倾向于关注防火墙或重写数据包(如 NAT),而不是重新分配要使用的接口。即使是其他好书也帮不了我。
如果 PF 可以做到这一点,我想在那里做,因为不编写内核扩展更安全。我也知道IPNetSentryX,但据说它已经报废了,这意味着它可能使用了 IPFW 吗?它说它使用了 NKE,所以我认为这可能吗?
想法?我搜索了 Github,但我只找到了两个用于获取机器网络流量的存储库,一堆使用 TunTap 代码的 VPN 克隆,以及这篇关于构建扩展以侦听路由器广告的自述文件。遗憾的是,没有路由或更改流量接口的示例。想法?
更新 1:检查了 PF 上的 BSD 4.3 文档,它似乎没有我们需要的路由。查看关于备用路由的 IPNetRouterX 帮助页面,看起来我想使用 Apple Network Kext 接口过滤器。
更新 2:WWDC 有 3 个关于 Kext 开发的相关讨论,至少自 2010 年以来在线讨论:
- WWDC 2010 Session 203适用于 Mac OS X 的 I/O 套件设备驱动程序
- WWDC 2013 会议 707 Kext 开发中的新功能(最后三分之一涵盖了新的调试标志和 10.9 中的更改)
- WWDC 2015 Session 706安全和你的应用程序(其中简要提到了 kexts)
考虑到维护第二个 VM 来测试 kexts 需要做多少工作,我不确定我是否想在 kext 中完成这项工作。在 Linux 下使用 iproute2 用户空间工具实际上只是一两行代码,但在没有内核开发的 Mac 中似乎是不可能的。这基本上是我第一次对我在台式计算机上选择 OS X 而不是 Linux 感到恼火。
不过,如果有人在 macOS 开发指针上有任何 kext 网络路由,我会全神贯注。这可能会成为一个有趣的周末项目,看看我是否能做到。