我在 OpenBSD 上使用 pf/altq 时遇到了一些问题,但由于我是新手,我不确定是不是因为我误解了如何使用锚点,还是我的系统出了问题。
我正在尝试使用 pfctl 将 altq 规则添加到锚点,但当我尝试时,pfctl 一直说设备正忙。如果我在 pf.conf 中使用相同的规则,它就可以正常工作:
root@openbsd:~# uname -a
OpenBSD openbsd.my.domain 5.2 GENERIC.MP#368 amd64
# ---- Show current pf.conf rules -----
root@openbsd:~# cat /etc/pf.conf
pass out on re0
pass in on re0
anchor tshaping
# ---- Try to load altq rules into the anchor -----
root@openbsd:~# echo -n "altq on re0 cbq bandwidth 10Mb queue { myqueue }\nqueue myqueue bandwidth 1Mb cbq(default)\n" | pfctl -a tshaping -f -
pfctl: DIOCADDALTQ: Device busy
# ---- Change the pf.conf to include the altq rules without an anchor -----
root@openbsd:~# cat /etc/pf.conf
pass out on re0
pass in on re0
altq on re0 cbq bandwidth 10Mb queue { myqueue }
queue myqueue bandwidth 1Mb cbq(default)
# ---- Load the new pf.conf rules -----
root@openbsd:~# pfctl -f /etc/pf.conf
# ---- The new rules load fine from the config file with no anchor -----
root@openbsd:~# pfctl -sa | grep queue
queue root_re0 on re0 bandwidth 10Mb priority 0 cbq( wrr root ) {myqueue}
queue myqueue on re0 bandwidth 1Mb cbq( default )
答案1
根据http://lists.freebsd.org/pipermail/freebsd-pf/2008-October/004826.html您无法像我尝试的那样将队列加载到锚点中。
您必须将队列规则加载到主 pf.conf 文件中,并仅将分配流量到队列的过滤规则加载到锚点中。
答案2
你可以有多个 pf.conf 文件。例如:
/etc/pf.conf
/<whatever path>/tshaping.conf
/<whatever path>/other_rules.conf
然后运行:
pfctl -f /etc/pf.conf
pfctl -f /<whatever path>/tshaping.conf
pfctl -f /<whatever path>/other_rules.conf
然而,你可以操纵表格通过使用 pfctl(8)。
因此,你可以这样做:echo -n "altq on re0 cbq bandwidth 10Mb queue { myqueue }\nqueue myqueue bandwidth 1Mb cbq(default)\n" > /whatever path>/tshaping.conf; pfctl -f /<whatever path>/tshaping.conf