如何在 Mac OS X 的 pf.conf 中使用新关键字 dummynet-anchor

Yao*_*ocl 6 firewall pf macos

Mac OS X 在pf.conf文件中引入了一个新的关键字“dummynet-anchor”,在 FreeBSD 和 OpenBSD 中没有使用。将ipfw在Mac OS X中去除10.10,如何使用“Dummynet在锚定”?

更新:规则集的哪一部分将由“dummynet-anchor”执行?

Mec*_*cki 0

以下是我迄今为止所发现的有关该主题的信息:

dummynet您可以使用命令行工具设置配置dnctl以了解详细信息。查看man dnctl。该工具允许您配置管道和队列。每个管道/队列都有一个数字名称,以及一组属性(例如带宽、延迟、丢包率等)

手册页中的示例:

dnctl pipe 1 config bw 14Kbit/s queue 10Kbytes
Run Code Online (Sandbox Code Playgroud)

这将创建一个最大带宽为 14 kbps 的管道1和 10 KB 的积压缓冲区(或者可能是 10 KiB,该页面对此并不清楚)。

现在您只需要一种方法来告诉系统哪些网络数据包必须通过该管道,这可以使用以下命令完成pf

dummynet in all pipe 1
Run Code Online (Sandbox Code Playgroud)

这会将所有传入流量重定向到名为 的管道1

即使没有记录,-s选项pfctl也知道一个dummynet参数。例如,要查看Apple 开发工具中的网络链接调节器(ncl) 设置的虚拟网络条目,只需运行:

sudo pfctl -a com.apple.nlc/base -s dummynet
Run Code Online (Sandbox Code Playgroud)

这是一个示例输出:

no dummynet quick on lo0 all
dummynet in quick inet all allow-opts pipe 40269
dummynet in quick inet6 all allow-opts pipe 40269
dummynet out quick inet all allow-opts pipe 40270
dummynet out quick inet6 all allow-opts pipe 40270
Run Code Online (Sandbox Code Playgroud)

现在让我们看看它配置了哪些管道:

40269:   1.000 Mbit/s  500 ms   50 sl.plr 0.100000 1 queues (1 buckets) droptail
    mask: 0x00 0x00000000/0x0000 -> 0x00000000/0x0000
40270:   1.000 Mbit/s  500 ms   50 sl.plr 0.100000 1 queues (1 buckets) droptail
    mask: 0x00 0x00000000/0x0000 -> 0x00000000/0x0000
Run Code Online (Sandbox Code Playgroud)

这与我的配置完全匹配: 在此输入图像描述 好吧,a 是什么dummynet-anchor?嗯,我认为这只是规则anchor的一个但dummynet,类似于nat-anchorsNAT(网络地址转换)规则。跑步:

sudo pfctl -sa
Run Code Online (Sandbox Code Playgroud)

我得到这个输出:

TRANSLATION RULES:
nat-anchor "com.apple/*" all
rdr-anchor "com.apple/*" all

FILTER RULES:
scrub-anchor "com.apple/*" all fragment reassemble
anchor "com.apple/*" all

DUMMYNET RULES:
dummynet-anchor "com.apple/*" all
Run Code Online (Sandbox Code Playgroud)

所以你会看到有不同类型的锚属于不同的规则部分。这些规则实际上是从哪里加载的对我来说仍然是个谜。macOS 上有一个目录/etc/pf.anchors,但这个目录只包含一个文件com.apple,并且该文件仅引用更多锚点:

#
# AirDrop anchor point.
#
anchor "200.AirDrop/*"

#
# Application Firewall anchor point.
#
anchor "250.ApplicationFirewall/*"
Run Code Online (Sandbox Code Playgroud)

搜索250.ApplicationFirewall在我的系统上找不到任何具有该名称的文件或文件夹。

所以很抱歉,这并不是你问题的真正答案,我也真的不知道答案。然而这个问题已经存在了 3 年多了,根本没有人回答它,所以我想我在这里分享我的发现,也许有人可以接受它并通过这种方式获得一些新的见解。