pfSense book之流量管理

流量管理

  • 流量管理可以为网络做些什么
  • 硬件限制
  • ALTQ调度程序类型
  • 使用向导配置ALTQ流量管理器
  • 监控队列
  • 高级定制
  • 限制器
  • 流量管理和整形器
  • 疑难解答

流量管理或网络服务质量(QoS)是优先考虑网络流量的一种手段。如果没有流量管理,数据包由防火墙以先入先出方式处理。 QoS为优先处理不同类型的流量提供了一种手段,确保高优先级服务在较低优先级服务之前获得所需的带宽。

流量管理类型

在pfSense软件中有两种类型的QoS:ALTQ和限制器。

ALTQ框架通过pf进行处理,并与网卡驱动程序密切相关。 ALTQ可以处理多种类型的调度程序和队列布局。 流量管理向导配置ALTQ,使防火墙管理员能够为常见场景快速配置QoS,并允许自定义规则处理更复杂的任务。 然而,ALTQ效率不高,因此防火墙处于活动状态时的最大潜在吞吐量会明显降低。

pfSense软件还支持称为限制器的独立流量管理概念。限制器对分组或每个IP地址或网络强制进行带宽限制。在这些带宽限制内,限制器还可以管理流量优先级。

流量管理基础

对于不熟悉流量调整的管理员来说,它就像是专属俱乐部的保镖。 VIP(非常重要)数据始终首先进入,而无需等待。 常规的数据包必须等待轮到它们,并且在真正的聚会结束之前,“不需要的”数据包可以保持不用。 一直以来,俱乐部都保持着足够的能力并且从未超负荷。 如果更多的VIP会在晚些时候出现,则可能需要抛出常规数据包以防止该地点过于拥挤。

起初ALTQ流量管理概念可能是违反直觉的,因为流量必须在操作系统可以控制数据包流的地方排队。 来自互联网的流入流量从防火墙的LAN接口离开,到达局域网上的主机(下载), 同样的方式,从LAN到Internet的流量(上传)在离开WAN时形成。

对于ALTQ,有流量管理队列和流量管理规则。 队列分配带宽和优先级。 管理规则控制流量如何分配到这些队列中。 流量管理的工作规则与防火墙规则相同,并允许相同的匹配特征。 如果数据包符合流量管理的规则,它将被分配到该规则指定的队列中。 在pfSense软件中,大多数情况下,流量管理规则在浮动选项卡上使用匹配操作进行处理,该操作将流量分配到队列中,但任何接口上的规则都可以使用通过操作将流量分配到队列中。

限制器规则的处理方式不同。 限制器适用于常规通行规则,并在进入和离开接口时对通信实施限制。 限制器几乎总是成对存在:一个用于限制“下载”方向的流量,另一个用于限制“上传”方向的流量。

流量管理可以为网络做些什么

流量管理基本思想是提高和降低数据包的优先级或保持一定的速度。 这个概念看起来很简单,但是,这个概念可以应用的方式数量巨大。 这些只是几个常见的例子,已经证明pfSense软件很受用户欢迎。

保持浏览流畅

不对称的链路,下载速度不同于上传速度,特别是对于DSL(数字用户线路)更是如此。 某些链路失衡以至于最高下载速度几乎无法实现,因为防火墙很难发送足够的ACK(确认)数据包来保持流量。 ACK数据包由接收主机发送回发送方,以指示数据已成功接收,并表示可以发送更多数据。 如果发送方没有及时收到ACK,TCP中的拥塞控制机制将启动并减慢连接速度。

这种情况很常见:通过具有非对称吞吐量功能的链接上传文件时,浏览和下载速度变慢。 发生这种情况的原因是线路的上传部分已经从文件上传完成,并且没有余地发送允许下载保持流动的ACK分组。 通过使用流量管理确定ACK数据包的优先级,防火墙可以在非对称链路上实现更快,更稳定的下载速度。

在上传和下载速度相同的对称链路上,这并不重要,但如果可用带宽被大量使用,则仍然可能是可取的。

保持VoIP呼叫清晰

如果IP语音电话使用与数据相同的线路,则上传和下载可能会降低通话质量。 pfSense软件可以优先处理高于其他协议的通话流量,并确保通话清晰无间断,即使在同时处理来自Netflix的高清视频时也是如此。 除了呼叫等待之外,流量管理器还会降低其他转接的速度,为通话留出空间。

减少游戏滞后

流量管理还可以选择优先考虑与网络游戏相关的流量。 与优先考虑VoIP呼叫类似,其效果是,即使网络上的用户正在播放或正在下载,游戏的响应时间仍应该几乎与其余连接闲置时一样快。

检查P2P应用程序

通过降低与已知对等端口关联的流量优先级,管理员可以更轻松地了解即使这些程序正在使用中,也不会妨碍网络上的其他流量。 由于其优先级较低,所以其他协议将比P2P流量更受欢迎,当其他服务需要带宽时,这将受到限制。

强制带宽限制

限制器可以将带宽限制应用于一组设备,例如接口上的所有流量,或者限制器上的掩码可以在每个IP地址或每个网络的基础上应用它们。 这样防火墙可以确保任何人都不会消耗所有可用的带宽。

硬件限制

流量管理是在ALTQ的帮助下完成的。 不幸的是,只有所有支持的网卡的一部分能够使用这些功能,因为必须改变驱动程序以支持ALTQ管理。 以下网卡可以支持:

ae(4)age(4)alc(4)ale(4)an(4)aue(4)axe(4)bce(4)bfe(4),

bge(4),bridge(4),cas(4)cpsw(4)cxl(4)dc(4)de(4)ed(4)em(4),

ep(4)epair(4),et(4)fxp(4),gem(4)hme(4)hn(4)igb(4)ix(4),

jme(4)l2tp(4)le(4),lem(4)msk(4)mxge(4),my(4)ndis(4)nfe(4),

ng(4)nge(4)npe(4)nve(4),ovpnc(4)ovpns(4)ppp(4)pppoe(4),

pptp(4)re(4)rl(4)sf(4)sge(4)sis(4),sk(4)ste(4)stge(4),

ti(4)tun(4),txp(4)udav(4)ural(4)vge(4)vlan(4),

vmx(4)vr(4)vte(4)vtnet(4)xl(4)

限制器使用不同的后端系统,通过ipfw中的dummynet管道而不是通过ALTQ进行操作。 因此,所有网卡都可以用于限制器,没有限制。 如果防火墙包含不支持ALTQ的卡,则可以使用限制器。

ALTQ调度程序类型

pfSense包含几种ALTQ调度程序类型以涵盖大范围的流量管理场景。包括:

Priority Queuing (PRIQ):
管理连接的优先级
Class-Based Queuing (CBQ):
支持队列之间的带宽共享和带宽限制
Hierarchical Fair Service Curve (HFSC):
支持实时带宽保证以及嵌套队列的分层树
Controlled Delay (CoDel):
尝试命中缓冲区。
Fair Queuing (FAIRQ):
尝试在所有连接之间公平分配带宽。

PRIQ,CBQ和HFSC可以在流量管理向导中选择,向导将显示适当的选项并根据所选的ALTQ规则创建队列。

性能警告

启用ALTQ流量管理会给硬件带来额外的负担,并且会导致整体潜在的网络性能损失。 在有空余功率的系统上,这可能不明显。 在接近规格限制的系统上,防火墙可能会看到性能明显下降。

优先队列 (PRIQ)

PRIQ是配置和理解最简单的学科之一。 队列都直接位于根队列之下,没有结构在PRIQ的其他队列下有队列,就像HFSC和CBQ一样。 它并不关心接口的带宽,只关心队列的优先级。 优先级的值从0到15,并且优先级数越高,队列处理数据包的可能性就越大。

PRIQ对于较少的队列可能比较苛刻,当较高优先级的队列需要带宽时会使它们靠边。 在极端情况下,如果较高优先级队列正在占用所有可用资源,则较低优先级队列有可能处理很少或不处理数据包。

分层公平服务曲线 (HFSC)

HFSC的流量调整规定非常强大。 对于诸如VoIP和视频等服务来说,提供最低保证的带宽量非常有用。

HFSC中的队列按层次结构或树排列,每个接口具有根队列,下面可以有父队列以及嵌套在父队列(等等)之下的子队列。每个队列可以有一个设定的带宽和相关选项。

HFSC-特定的队列选项

HFSC支持一些其他流量管理技术不支持的队列选项。通过这些选项,它可以实现有保证的实时处理和链接共享。

服务曲线(sc)是调整该队列带宽需求的地方。

m1: 突发带宽限制
d: 突发带宽的时间限制,以毫秒为单位指定。 (例如1000 = 1秒)
m2: 正常带宽限制

例如,连接在d时间内需要m1带宽,但正常最大值为m2。 在由d设置的初始时间内,m2不被检查,只有m1。 在d过期后,如果流量仍然高于m2,它将被进行限制。 最常见的是,m1和d保留空白,以便只检查m2。

每个值都可以设置为以下用途:

Upper Limit: 队列允许的最大带宽。将做强制带宽限制。这里的m1参数也可以用来限制突发。在时间d中,连接不会超过m1带宽。
Real Time: 队列的最小带宽保证。 这只对子队列有效。 m1参数将在时间框架d中始终得到满足,m2是该规则允许使用的最大值。 注意m2的值不能超过父队列可用带宽的30%。
Link Share: 积压队列的带宽份额。 如果实时保证得到满足,将在各个类别之间共享带宽。Link Share(链接共享)的m2值将覆盖队列的带宽设置。 这两个设置相同,但如果两者均设置,则使用Link Share中的m2。

通过综合这些因素,队列将获得由实时因素指定的带宽,以及来自链路共享的带宽,最高为上限。 它可能需要进行大量的试验来不断进行修正和优化,也许需要大量的算术计算,但可以确保网络流量得到适当管理。

基于类的排队 (CBQ)

基于类的队列或CBQ类似于HFSC,因为可以在其他队列下嵌套一个队列树。 它支持带宽限制(不能像HFSC这样得到保证),队列的优先级,并且它有能力允许队列从父节点借用带宽。 由于队列配置更简单,它可以成为HFSC之外的一个很好的选择,特别是防火墙不需要保证最小带宽。

通过CBQ,队列优先级从0到7,较高的数字表示较高的优先级。以循环方式处理同等优先级的队列。

提示:尽管子队列可以从其父队列借用带宽,但子队列的带宽总和不能超过父队列的带宽。因此,对于个人(例如,每IP地址)带宽限制,CBQ不是限制器的替代方案。

特定于CBQ的队列选项

CBQ规则支持借用的概念,这意味着如果启用了从队列中可用的其他队列带宽的复选框,则队列将能够从其父队列中借用其他可用带宽。 这将允许子队列获得最大带宽,如果可用的话,它不会从其他父队列中再借用。

CoDel主动队列管理

CoDel主动队列管理(AQM)规则是Controlled Delay的缩写,并且发音为“coddle”。 它旨在解决与网络基础架构中的缓冲区溢出相关的问题。  简而言之,由于网络设备中缓冲区的大小,流量可能会堆积如山,而不是通畅的流动。 通过控制流量的延迟,可以减少这种影响。

CoDel没有特定的配置控制或选项。 激活队列后,它将自动尝试管理流量。 它试图保持低流量延迟,但允许突发,它控制延迟,但不关注往返延迟,负载或链路速度,并且它可以在链路速度改变时自动调整。

CoDel的目标是中级网络。它在低带宽(1Mbit / s或更低)下无法正常工作,并且不能正常处理大量同时发生的流量或数据中心级流量负载。

CoDel不能使用向导进行配置,但它不需要复杂的设置:

  • 导航到防火墙>流量管理,接口选项卡
  • 选择一个接口 (如 WAN)
  • 将计划程序类型设置为CODEL
  • 为带宽设置适当的值
  • 单击保存
  • 根据需要重复所有其他活动的WAN类型接口

公平排队 (FAIRQ)

在FAIRQ中,队列从最高优先级到最低优先级进行监控,但调度器试图公平分配所有连接之间的带宽。

当没有带宽竞争时,FAIRQ将发送所有等待的数据包。 当存在争用带宽时,FAIRQ将开始寻找没有超出其限制的队列,先从高优先级队列开始,然后向较低优先级队列寻找。 完全高优先级队列中的数据包在来自未满的低优先级队列的数据包之后进行处理。 如果所有队列都已满,FAIRQ将从最高优先级队列发送一个数据包。

FAIRQ允许连接超出队列带宽,但将保持平均消耗等于定义的队列带宽。

流量管理向导当前不支持FAIRQ,它需要手动配置。

使用向导配置ALTQ流量管理

我们建议首次使用时,用向导配置流量管理,该向导将引导管理员完成流量管理配置过程。

提示:由于流量管理队列和规则的复杂性,从头开始是非常复杂的。如果防火墙需要自定义规则,请逐步完成向导并接近要求,然后制定自定义规则。

向导的每一步都会设置独特的队列和规则,以控制将什么流量分配到这些队列中。 要手动配置所有内容,请在第一个页面上指定WAN速度,然后在剩下的所有步骤中单击下一步。 向导要求至少在一个步骤中启用选项,但哪一步没有关系。

注意:完成该向导并在最后单击完成将使用向导创建的所有现有流量管理队列和浮动规则(包括从向导规则克隆的规则),以及新向导配置中的队列和规则。

选择向导

要开始使用流量管理向导,请导航到防火墙>流量管理并单击向导选项卡。此页面显示可用流量管理向导的列表,其中包括:

Multiple LAN/WAN:
当防火墙有一个或多个WAN和一个或多个LAN时使用。这是最常见的向导,涵盖了大多数情况。
Dedicated Links:
在流量管理配置中应考虑特定的LAN + WAN配对时使用。

启动向导

每个向导名称后面跟着向导的文件名,这是一个链接。点击链接启动向导。这个例子使用多LAN / WAN向导,所以点击 traffic_shaper_wizard_multi_all.xml

接下来,向导启动,第一步提示防火墙上的WAN和LAN类型连接的数量,如下图所示。

  • 输入防火墙上WAN类型连接的数量。这些是与接口上配置的网关的连接,或动态WAN类型接口(如DHCP或PPPoE)
  • 输入LAN类型连接的数量。这些是接口上没有网关的本地网络接口
  • 单击下一步继续

在这个例子中,防火墙只有一个WAN和一个LAN接口。

网络和速度

如下图所示,此步骤定义了从流量管理角度来看内外网络接口以及给定WAN的下载和上传速度。当防火墙具有多个给定类型的接口时,该向导会在页面上显示多个部分以分别处理每个部分。

除了接口及其速度之外,还需为广域网和局域网选择一个ALTQ调度程序(ALTQ调度程序类型)。在每个接口上使用相同的调度程序。

根据连接类型的不同,真实的链接速度可能不是实际的可用速度。在PPPoE的情况下,该线路不仅具有PPPoE开销,而且还具有在大多数PPPoE部署中使用的底层ATM网络链路的开销。通过一些计算,在来自ATM,PPPoE,IP和TCP的开销之间,线路可能会损失提供商签约链路速度的13%。如果不确定如何设定速度,请使用保守设置。减少10-13%,并将其恢复到更大的值。如果防火墙有3Mbit / s线路,请将其设置为大约2.7 Mbit / s,然后进行测试。产生的父队列上的速度可以稍后编辑以调整带宽。如果数值较低,则连接将按照确定的速度最大化。将它稍微提高一点,直到防火墙不再看到任何性能提升。

接口速度可以指定为Kbit / s,Mbit / s或Gbit / s,但在每个页面上应使用相同的单位。

  • 为每个LAN类型接口(例如LAN,PRIQ)选择一个接口和调度程序
  • 为每个WAN类型接口(例如WAN,PRIQ)选择一个接口和调度程序
  • 定义每个WAN类型接口的上传速度和单位(例如1 Mbit / s)
  • 为每个WAN类型接口定义下载速度和单位(例如10 Mbit / s)
  • 单击下一步继续

IP语音

该向导包含几个用于处理VoIP呼叫流量的选项,如下图所示。 优先考虑IP语音流量建立队列和规则,优先考虑VoIP呼叫和相关流量。 可以通过向导的其他设置进行微调。

Enable:

在此步骤中启用VoIP设置的复选框。未选中时,选项被禁用,向导不会添加这些队列和规则。

Provider:

有几个知名供应商,包括Vonage,Voicepulse,PanasonicTDA和Asterisk服务器。如果此站点的VoIP提供商不在列表中,请选择“generic(通用)”。该选择基于已知由这些提供者使用的端口和协议来设置规则,而不是按地址进行匹配。

提示:此选项基于SIP和RTP端口等进行匹配,因此如果它们使用与选定服务相同的端口,则它可以匹配来自其他来源的流量。

Upstream SIP Server:

上游PBX或SIP中继的IP,或包含SIP中继的IP地址或网络的别名。设置后,将覆盖提供程序字段,并将根据这些地址匹配流量。

提示:该选择匹配所有来往于指定地址的UDP流量。在大多数情况下,这是可以的,但是如果在同一个远程地址上有其他基于非VoIP的UDP服务,它也可以匹配该流量。然而,这种情况很少见,所以这个选项往往比通过端口匹配更可靠。

WAN Connection Upload:

上传带宽的数量,以保证VoIP设备正常使用。这将根据网络上有多少VoIP设备以及每个会话需要多少带宽而有所不同。此设置由HFSC和CBQ使用,PRIQ应保留为空白。

提示:诸如VoIP之类的服务的带宽预留不能超过链路上可用带宽的30%。例如,在10Mbit / s链路上,不要超过3Mbit / s。

LAN Connection Download:

用于保证VoIP设备的下载带宽量。此设置由HFSC和CBQ使用,PRIQ应保留为空白。

注意

最佳做法是使用远程SIP中继或PBX地址,否则流量管理器可能无法正确匹配流量。 例如,使用电话的IP地址,流量管理器只能匹配一个方向的流量,或者根本不匹配。 这是由于流量管理器在出站方向上使用浮动规则匹配流量的方式。 NAT在退出WAN时匹配流量之前应用,因此流量管理规则无法匹配基于本地私有IP地址的出站连接。

要使用这些选项:

  • 设置优先处理IP话音业务
  • 选择下列其中一项:
  • 从列表中选择一个提供者或输入上游SIP服务器地址或包含远程SIP中继线或PBX的别名
  • 如果使用PRIQ,请将上传和下载留空,否则为每个连接输入适当的上传或下载值
  • 单击下一步继续

惩罚箱

下图描述的惩罚箱是一个放置行为不当用户或设备的地方,否则这些用户或设备会消耗不需要的带宽量。这些设备被分配一个他们不能超过的强制带宽上限。

Enable: 未选中时,选项被禁用,向导不会添加这些队列和规则。
Address: 要惩罚的IP地址,或包含多个地址的别名。
Bandwidth: 地址最多可以消耗的带宽量。

使用这些选项:

  • 设置处罚IP或别名
  • 在地址框中输入一个IP地址或别名
  • 输入带宽限制
  • 为带宽限制选择正确的单位
  • 单击下一步继续

点对点网络

下一步如下图所示,设置了点对点(P2P)网络协议的控制。 按照设计,P2P协议将利用所有可用带宽,除非有限制。 如果P2P流量出现在网络上,最好的做法是确保它不会降低其他应用的流量。

注意:P2P协议会故意尝试避免检测。 Bittorrent对这种行为应该承担责任。 它经常使用非标准或随机端口或与其他协议相关的端口。 识别所有P2P流量比较困难甚至是不可能的。

Enable: 未选中时,选项被禁用,向导不会添加这些队列和规则。
Peer-to-Peer Catch All:
将任何无法识别的流量视为P2P流量,并且这样的流量将相应地降低其优先级。

Bandwidth:当P2P Catch All处于活动状态时,最多可以占用流量未分类的带宽量。

注意:该选项有效接管默认流量管理队列并降低其优先级。 当此选项处于活动状态时,所有高于P2P优先级的合法流量都要通过规则进行匹配。

Enable/Disable specific P2P protocols:
这些选项可识别各种已知的P2P协议。防火墙会将每个启用的选项关联的端口和协议分配为P2P流量。

要使用此步骤中的选项:

  • 设置点对点流量的较低优先级
  • 可以选择启用p2p Catch All功能
  • 输入p2p的全部带宽限制(如果启用)
  • 为带宽限制选择正确的单位
  • 选择P2P流量防火墙的协议分类
  • 单击下一步继续

网络游戏

在线游戏通常依靠低延迟获得更好的游戏体验。 如果网络上的用户在播放时尝试下载大型文件或游戏补丁,则该流量很容易淹没与游戏本身相关的数据包,并导致滞后或断开连接。 如果防火墙给予游戏流量优先权,它可以确保流量以最快速度传递。

Enable: 未选中时,选项被禁用,向导不会添加这些队列和规则。
Enable/Disable specific game consoles and services:
这些选项可以匹配整个游戏控制的流量,可以匹配所有或至少大部分游戏使用的通用端口和协议在线服务。
Enable/Disable specific games:
这些选项匹配特定游戏的流量,这些游戏与前一节中的常规类别不同。

提示:要优先考虑未列出的游戏,请检查列表中的任何其他游戏,以便该向导将创建用作参考基准的队列和规则。完成向导后,编辑结果规则以匹配未列出的游戏。

要使用此步骤中的选项:

  • 设置优先考虑网络游戏流量
  • 从启用/禁用特定游戏控制和服务列表中选择网络上的任何游戏控制
  • 从启用/禁用特定游戏列表中选择网络上的任何游戏
  • 单击下一步继续

提高或降低其他应用程序优先级

在下面的图中会看到的流量管理向导的最后一个配置页面,列出了许多其他常用的应用程序和协议。

特定网络的需求决定了防火墙应如何处理每个协议。 例如,在公司环境中,管理层可能希望降低诸如电子邮件之类的非交互式业务的优先级,其中速度的降低通常不会被用户注意到,并且他们可能还想提高交互式业务的优先级,如RDP。 在家庭中,多媒体流式传输可能更重要,其他服务可以通过流量管理降低其优先级。

提示:与流量管理向导的其他步骤一样,如果协议未列出,请选择一个类似的协议,然后在完成向导后调整规则。

Enable: 未选中时,选项被禁用,向导不会添加这些队列和规则。
Protocol Categories:
每个部分都包含众所周知的协议,按其通用功能分组。

有超过40个协议可供选择,并且每个协议都可以被赋予更高的优先级,更低的优先级或保留为默认优先级。

提示:如果p2pCatchAll处于活动状态,我们强烈建议使用此步骤来确保正常识别和处理这些其他协议,而不是通过默认的p2pCatchAll规则来惩罚。

要使用此步骤中的选项:

  • 设置其他网络协议
  • 在列表中找到特定协议以更改优先级。
  • 对于每个协议,请选择较高优先级、较低优先级或将其保留为默认优先级。
  • 单击下一步继续

完成向导

完成向导设置后,防火墙将为启用的选项创建所有规则和队列,然后它将重新加载规则集以激活新的流量管理设置。

由于防火墙以有状态方式运行,因此防火墙只能将流量管理中的更改应用于新连接。 为了使新的流量管理设置在所有连接上完全激活,请清除这些状态。

要重置状态表内容:

  • 导航到系统诊断>状态
  • 点击重置状态标签
  • 选中重置防火墙状态表
  • 点击重置

流量管理向导和IPv6

流量向导仅为IPv4流量创建规则。规则可以手动调整或克隆然后设置为IPv6。

监控队列

进入系统状态>队列状态菜单,查看流量管理情况,确保流量管理按预期工作。如下图所示,此页面显示按名称、当前使用情况以及其他相关统计信息列出的每个队列。

Queue: 流量管理队列的名称。
Statistics: 显示此队列“完整”的图形栏。
PPS: 以每秒数据包(PPS)排队的数据速率
Bandwidth: 以每秒位数(例如Mbps,Kbps,bps)排队的数据的速率。
Borrows: 当相邻队列不满时,从那里借用的带宽。
Suspends: 暂停计数器指示何时发生延迟动作。 挂起计数器仅用于CBQ调度程序,当其他调度程序正在使用时应该为零。
Drops:  队列中丢弃的流量,以支持更高优先级的流量。 丢弃是正常的,这并不意味着一个完整的连接被丢弃,只有一个数据包。 通常,连接的一端会看到丢失了一个包,然后重新发送,通常在这个过程中放慢速度以避免将来掉线。
Length: 等待传输的队列中的数据包数量,超过队列的总大小。

高级定制

流量管理向导生成的规则和队列可能并不完全适合网络。 网络设备使用向导可能未列出需要的流量管理服务,使用不同端口的游戏或需要限制的其他协议,在向导创建基本规则后,编辑或复制这些规则可以较容易对其他协议进行调整。

编辑流量管理队列

队列是流量管理分配带宽和优先级的地方。 每个队列都具有特定于在向导中选择的计划调度的设置(ALTQ计划程序类型)。 队列还可以分配其他属性来控制它们的行为。 队列可以在防火墙>流量管理上进行管理。 单击按接口或按队列选项卡上显示的列表或树中的队列名称,如下图所示:

注意:创建或编辑队列仅适用于高级用户。 这项设置具有一定的复杂性。如果不彻底了解所涉及的设置,最佳做法是坚持使用向导生成的队列,而不是尝试创建新的队列。

要编辑队列,请在列表/树中单击其名称。要删除队列,请单击一次编辑队列,然后单击“删除此队列”。如果队列仍然被防火墙规则引用,则不要删除该队列。

要添加新队列,请单击要放置新队列的接口或父队列,然后单击添加新队列。

编辑队列时,必须仔细考虑每个选项。

Name: 队列名称必须在1-15个字符之间,并且不能包含空格。最常见的约定是使用字母“q”开始队列的名称,以便在规则集中更加容易识别。
Priority: 队列的优先级。 可以是CBQ的0-7和PRIQ的0-15。 尽管HFSC可以支持优先级,但当前代码在执行流量管理时不会遵守它们。 当存在过载时,流量管理器会优先选择数量较高的队列,因此可以相应地排队。 例如,VoIP流量是最高优先级,因此它将在CBQ上设置为7,或在PRIQ上设置为15。 点对点网络流量可能会延迟以支持其他协议,因此将设置为1。
Bandwidth (root queues):
此接口在出站方向上的可用带宽量。例如,WAN型接口根队列列表上传速度。 LAN型接口列出所有WAN接口下载带宽的总和。
Queue Limit: 可以保留在队列中等待由流量管理器发送的数据包数量。默认大小是50。
Scheduler Options:
有五种不同的调度程序选项可以设置:

Default Queue:选择此队列作为默认值,它将处理接口上所有不匹配的数据包。 每个接口必须有且仅有一个默认队列。

Random Early Detection (RED):一种避免链路拥堵的方法。 设置时,流量管理器将主动尝试确保队列未满。 如果带宽高于队列的最大值,则会发生丢弃。 另外,如果平均队列大小接近最大值,则可能发生丢弃。 丢弃的数据包是随机选择的,因此使用更多带宽的连接更容易出现丢包。 最终结果是带宽受到公平限制,从而促进了平衡。 RED只能与TCP连接一起使用,因为TCP能够处理丢失的数据包,并且主机可以在需要时重新发送TCP数据包。

Random Early Detection In and Out (RIO):使用输入/输出启用RED,这会导致维护队列平均值并检查输入和输出数据包。

Explicit Congestion Notification (ECN):与RED一起,它允许发送控制消息,以便在两端都支持ECN时节制连接。 通常情况下,RED不会丢弃数据包,而是在数据包中设置一个标志,指示网络拥堵。 如果对方看到并服从这个指示标志,正在进行的传递速度将会降低。

Codel Active Queue:将此队列标记为Codel流量管理规则的活动队列的标志。

Description: 描述队列用途的可选文本。
Bandwidth (Service Curve/Scheduler):
“带宽”设置应该是父队列中可用带宽的一小部分,但它也必须结合其他相邻队列的设置。 使用百分比时,给定父项下所有队列的总数不能超过100%。 使用绝对限制时,总数不能超过父队列中可用的带宽。
Scheduler-specific Options:
调度程序特定的选项。 它们根据队列是使用HFSC,CBQ还是PRIQ而改变。 它们都在ALTQ计划调度程序类型中进行了描述。

单击保存设置并返回到队列列表,然后单击应用更改,重新加载队列并激活更改。

编辑流量管理规则

流量管理规则控制流量如何分配到队列中。 如果新连接符合流量管理规则,防火墙会将该连接的数据包分配到该规则指定的队列中。

数据包匹配由防火墙规则处理,特别是在浮动选项卡上。 编辑流量管理规则:

  • 导航到防火墙>规则策略
  • 点击浮动选项卡
  • 在列表中找到要编辑的规则,如下图所示
  • 单击 编辑现有规则 ,单击 创建规则的副本
  • 进行必要的调整以匹配不同的连接
  • 编辑防火墙规则应保存并应用更改

可以将接口选项卡的通过(pass)规则应用到队列,但向导仅使用不影响连接是否通过或阻止的匹配操作在“浮动”选项卡上创建规则;它只排队流量。 因为这些规则与任何其他规则的操作相同,所以可以使用用于匹配连接的任何标准来排队。

流量管理规则匹配技巧

由于以下几个因素,可能会难以满足对规则的匹配要求:

  • NAT在出站防火墙规则可以匹配连接之前应用,因此对于具有出站NAT的连接在离开WAN类型接口时应用,私有IP地址源被NAT隐藏并且无法与规则匹配。
  • 某些协议(例如Bittorrent)将使用随机端口或与其他服务相同的端口。
  • 防火墙无法区分使用相同端口的多个协议。
  • 协议使用的端口太宽泛,以至于无法与其他流量区分开来。

尽管这些方法不能直接由防火墙解决,但在少数情况下,有办法解决这些限制。

  • 要通过WAN浮动规则中出站的私有地址源进行匹配,请首先在流量通过本地接口时标记流量。例如,匹配局域网入站并使用高级标记字段设置值,然后使用WAN侧浮动规则上的标记字段匹配退出防火墙时的相同连接。或者,在流量进入LAN时使用通过规则排队,而不是在退出WAN时排队。
  • 在可能的情况下,通过地址而不是端口/协议进行匹配,以找出不明确的协议。在这些情况下,本地源或远程目标可能是单个地址或一小组地址。例如,如果防火墙可以匹配远程SIP中继或PBX,而不是尝试匹配RTP的各种端口(例如10000-20000),则匹配VoIP流量要简单得多。
  • 如果网络上允许使用bittorrent,但必须对其进行管理,然后指定允许使用bittorrent的特定本地设备,然后将所有与该设备的连接设置为点对点流量。

删除流量管理设置

要删除由向导创建的所有流量管理器队列和规则,请执行以下操作:

  • 导航到防火墙>流量管理
  • 单击按接口选项卡
  • 单击  删除流量管理器
  • 在确认提示上单击确定

限制器

限制器是流量管理的另一种方法。限制器使用dummynet(4)来制定带宽限制并执行其他优先级任务,而且它们不依赖于ALTQ。限制器是目前使用pfSense软件实现每个IP地址或每个网络带宽速率限制的唯一方法。限制器也被入网门户内部用于每个用户的带宽限制。

限制器在防火墙>流量管理,限制器选项卡上进行管理。

像HFSC和CBQ一样,限制器可以与其他队列中的队列嵌套。根级限制器(也称为管道)可能具有带宽限制和延迟,而子限制器(也称为队列)可能具有优先级(也称为权重)。带宽限制可以由源IP地址或目标IP地址选择性地进行屏蔽,以便限制可以应用在每个IP地址或网络基础上,而不是作为一般组。

限制器几乎总是成对使用:一个用于下载流量,一个用于上传流量。

dummynet(4)系统最初被设计为一种测试TCP拥堵控制的手段,现在已经逐渐完善。由于这个初始设计目的,限制器的独特之处在于它们可以用来诱发人为丢包和延迟网络流量。这主要用于故障排除和测试(或者恶意并在某人身上玩恶作剧),并且在生产中不常见。

限制器的用途

限制器的主要用途是为用户或特定协议应用带宽限制,例如, “SMTP最大1Mbit / s”或“Joe的PC只能使用5Mbit / s”。限制器可以应用到每个IP地址或每个网络,例如“192.168.50.0/24中的所有用户每个最多可以使用3Mbit / s”或“访客网络和公共网络可以为每个网段使用1Mbit / s”。

限制器是pfSense软件中唯一能够以这种方式进行超额订购的流量管理器。。 ALTQ流量管理器要求所有子队列的总和不超过父队列的速度,但是被屏蔽的限制器允许设定限制到通过防火墙规则通过限制器输入的尽可能多的IP地址。

从概念上讲,将限制器视为一个管道。所有流经非屏蔽限制器的流量都会从同一个管道中获取带宽。屏蔽限制器可以有效地设置多个相同大小的管道,每个被屏蔽组一个管道。无论是单个主机还是整个网络取决于掩码值。

限制器还可以通过限制除特定协议之外的所有内容来允许保留带宽,然后消耗所有剩余带宽。在10Mbit / s线路上的这种类型的设置中,防火墙将传送来自例如没有限制器的SIP服务器的流量。然后,防火墙将对所有其他流量使用通过规则,限制为8Mbit / s。这将让SIP服务器使用它想要的所有带宽,但它本身至少会有2Mbit / s的带宽。

限制器如何工作

与ALTQ一样,限制器通过丢弃或延迟数据包来实现特定的线路速率,从而将流量保持在某个值。 通常利用协议中的内置机制来检测丢包并回退到可持续的速度。

在数据包在同一父管道下排队的情况下,防火墙在发送数据包之前先考虑它们的权重。 与CBQ和PRIQ的优先级不同,限制器中队列的权重绝不会因带宽而使其不足。

限制器和IPv6

限制器在IPv6下正常工作,但它需要单独的IPv4和IPv6规则来正确应用限制器。

限制的局限性

  • 限制器管道没有借用其他管道带宽的概念。 限制总是有一个强制的上限。
  • 限制器使用IPFW,所以IPFW内核模块会有额外的(尽管很小的)开销并涉及额外的数据包处理任务。
  • 限制器不能有效保证管道或队列的最小带宽量,只有最大值。
  • 子队列不能有带宽值,所以管道不能按队列拆分成更小的管道。 子队列只能使用权重来确定管道中的数据包的优先级。
  • 延迟和排队数据包造成的开销可能会导致mbuf使用率增加。

注意:目前,限制器与pfsync状态同步不兼容。对于使用高可用性的防火墙集群,使用限制器时必须禁用状态同步。

限制器和多WAN

在使用多WAN的限制器时,必须使用为默认网关设置的浮动规则应用非默认网关的限制,并配置相应的网关。

创建限制器

限制器在防火墙>流量管理,限制器选项卡上进行管理。

  • 要创建新的根级限制器(管道),请单击添加限制器。
  • 要创建子限制器(队列),请单击可在其下创建的限制器,然后单击添加新队列。

提示:在几乎所有情况下,限制器都在同一级别成对存在(例如两个管道或两个队列):一个用于入站流量,一个用于出站流量。创建新的限制器或队列时,请为每个方向创建一个限制器或队列。

Enable: 选中该框以启用此限制器。如果禁用,它将不可用于防火墙规则。
Name: 定义限制器的名称,因为它将显示在防火墙规则用于选择。名称必须是字母数字,并且还可以包含 – 和_。

提示

在选择名称时,避免使用In和Out,因为如果在WAN和LAN上使用相同的限制器,则会在一个接口上使用In方向,而在另一个接口上使用Out方向。最佳做法是使用Down 或Download ,Up或upload。

Bandwidth (Pipes):
本节定义了管道的带宽值,或者涉及到时间表的多个带宽。编辑子限制器(队列)时不显示此选项。

Bandwidth:管道带宽的数字部分,例如3或500。

Bw Type:带宽字段的单位,如Mbit / s,Kbit / s或Bit / s。

Schedule:如果防火墙具有定义的时间表(基于时间规则),则防火墙会在此列表中提供它们。 当防火墙正在使用时间表时,限制器可以为每个潜在时间表设置一个带宽值。 通过点击来添加计划表。如果限制器包含多个带宽要求,则它们必须分别使用不同的时间表。 例如,如果防火墙具有“工作日”计划,则它还必须具有“关闭时间”计划,其中包含第二个带宽规范的“工作日”中未包括的所有时间。

Mask: 该下拉列表控制限制器如何屏蔽管道或队列中的地址。

None:设置为无时,限制器不执行任何屏蔽。管道带宽将作为一个整体应用于所有流量。

Source / Destination address:当为源地址或目标地址设置限制器时,根据屏蔽位,使用屏蔽中选择的方向,管道带宽限制将应用于每IP地址或子网的基础上。通常,限制器应在LAN类型接口上限制上传和下载。 与在局域网和广域网上应用限制器时交换限制的方向类似,掩码也是交换的,因此为LAN上的同一个掩码设置的限制器也可以用于WAN出站。

Mask Bits:有单独的框来控制IPv4和IPv6的地址屏蔽。 对于IPv4,IPv4掩码位的值为32,则会设置每IPv4的地址限制,这是最常见的用法。 对于每IPv6地址限制,使用128作为IPv6掩码位值。要创建每个子网或类似的掩码,请在IPv4或IPv6掩码位(如24)的相应字段中输入子网位,以限制/ 24个子网组中的IPv4。

Description:

可选文本来解释限制器的用途。

Advanced Options:
编辑管道或队列时会有所不同的其他选项。

Delay (Pipes):延迟选项只能在限制器管道上找到。 它将以毫秒为单位的仿真延迟(延迟)引入限制器管道中任何数据包的传输。 这通常是空白的,以便防火墙尽可能快地传输数据包。 这可用于模拟实验室测试等高延迟连接,如卫星上行链路。

Weight (Queues):权重选项只能在子限制器(队列)上找到。 该值可以在1到100的范围内。较高的值给予给定队列中数据包的优先级。 与PRIQ和CBQ优先级不同,低权重队列不会受到防火墙带宽的限制。

Packet loss rate:另一种人为降低流量的方法。 数据包丢失率可以配置为丢弃进入限制器的一定比例的数据包。 该值以百分比的十进制表示形式表示,因此0.01为1%,或百分之一的数据包被丢弃。 此字段通常保留为空,因此每个数据包都由防火墙提供。

Queue Size:设置队列slots指定的队列大小,用于处理排队延迟。 留空,默认为50个slots,这是推荐值。 低速链接可能需要较低的队列大小才能高效运行。 高速链路可能需要更多的slots。

Bucket Size:Bucket Size也在slots中指定,设置用于队列存储的哈希表的大小。默认值是64。它必须是介于16和65536之间的数字值。该值通常保留为空白。

分配和使用限制器

限制器通过高级选项下的输入/输出管道选择器使用防火墙规则进行分配。防火墙规则支持的任何潜在匹配标准都可以将流量分配给限制器。

将限制器分配给规则时要记住的最重要的事情是,In和Out字段是从防火墙本身的角度指定的。

例如,在具有单个LAN和单个WAN的防火墙配置中,LAN接口上的入站流量正在离开互联网,即上传的数据。 LAN接口上的出站流量正在流向客户端PC,即下载的数据。在WAN接口上,方向被颠倒;入站流量从Internet到客户端(下载),出站流量从客户端到Internet(上传)。

在大多数情况下,防火墙规则将同时具有In限制器和Out限制器,但防火墙只需要In限制器就可以将流量限制在单一方向。

限制器可能适用于正常的接口规则或浮动规则。在出站方向上,In / Out选择在概念上被反转。

检查限制器使用情况

关于有效限制器的信息可以在诊断>限制器信息下找到。 这里,每个限制器和子队列都以文本格式显示。

每个限制器的设置带宽和参数由页面显示,以及在限制器内移动的当前流量级别。 在屏蔽限制器的情况下,防火墙会显示每个IP地址或屏蔽组的带宽。

流量管理和VPNs

以下讨论主要涉及ALTQ流量管理。限制器可以像使用任何其他接口和规则一样使用***。只有ALTQ流量管理器需要特殊考虑。

使用VPN进行流量管理器是一个棘手的话题,因为VPN流量被视为与流量相分离,但也是流量的一部分。如果WAN为10 Mbit / s,那么VPN也可以使用10 Mbit / s,但实际上并没有考虑20 Mbit / s的带宽,只有10 Mbit / s。因此,比带宽更重视优先级的流量管理方法更可靠,如PRIQ或某些情况下的CBQ。

如果VPN内的所有流量必须由防火墙确定优先级,那么仅考虑直接在WAN上的VPN流量本身就足够了,而不是单独尝试在VPN上排队流量。在这些情况下,请在WAN上使用浮动规则来匹配VPN流量本身。确切的流量类型取决于VPN的类型。 WAN上的IPsec和PPTP流量都可以通过整形器向导进行优先级排序,这些规则可用作匹配其他协议的示例。

OpenVPN

使用OpenVPN,操作系统上存在多个接口,每个VPN一个接口。这可以使某些情况下的管理更容易。 OpenVPN的功能还可以更容易地形成WAN上的流量并忽略隧道本身。

隧道内流量管理

如果隧道上承载了多类流量,则必须对隧道内的流量进行优先级划分。 为了使向导以这种方式考虑流量,必须在GUI中将VPN指定为其自己的接口。 要完成此操作,请按照接口分配和配置中的说明进行分配,然后使用整形器向导,就好像它是一个单独的WAN接口一样,并像往常一样对流量进行分类。

隧道外流量管理 (passtos)

如果主要关注的是通过整形器形成VoIP流量,则需要考虑的另一个选择是OpenVPN中的passtos选项,称为OpenVPN客户端或服务器选项中的服务类型。 此选项将内部数据包的TOS位复制到VPN的外部数据包。 因此,如果VoIP流量具有分组头部集的TOS(DSCP)部分,则OpenVPN分组也将具有相同的值。

但是,该选项对于向中间路由器发送关于QoS需求的信号更有用。 虽然防火墙规则上的DSCP选项可以基于TOS位进行匹配,如Diffserv代码点中所述,但这种匹配必须发生在创建防火墙状态的数据包中,而不是发生在流经该状态的特定数据包上。

注意:因为这个选项告诉OpenVPN将数据从内部数据包复制到外部数据包,它确实暴露了一些关于穿越VPN的通信类型的信息。 信息披露虽然较小,但是值得冒险分享正确的数据包优先级,这取决于网络环境的需求。

IPsec

无论配置多少个隧道,也不管隧道使用哪个WAN,IPsec都会在单个接口上呈现给操作系统。 这使得管理IPsec流量变得困难,特别是当试图在一个特定的IPsec隧道内形成流量时。

IPsec接口也无法单独作为与向导的接口使用。 浮动规则可以对IPsec接口上的流量进行匹配和排队,但在大多数情况下,只有入站流量才会按预期排队。 实际结果可能不同。

疑难解答

流量管理/ QoS是一个棘手的话题,并且可能很难在第一时间得到正确的结果。本节涵盖了几个常见的问题。

Bittorrent流量不使用P2P队列

Bittorrent以不使用标准端口而闻名。 客户端可以声明其他客户端使用哪个端口来访问它们,这意味着网络管理员无法基于端口来跟踪混乱的流量。 客户也可以选择加密他们的流量。 没有任何方法来检查数据包,以告知流量是什么程序运行产生的,所以它被迫依赖于端口。 这就是为什么使用P2P Catchall规则和/或为每种类型的期望流量制定规则并将默认队列视为低优先级是一个好主意。

UPnP 流量管理

UPnP守护程序允许的流量将在默认队列中结束。 发生这种情况是因为UPnP守护程序动态生成的规则不具备任何队列知识,除非将UPnP配置为将流量发送到特定队列。

根据客户端设备在网络上使用UPnP的情况,这可能是像Bittorrent这样的低优先级流量,或者像Skype这样的游戏控制台或语音聊天程序等高优先级流量。

配置UPnP以使用特定的ALTQ队列:

  • 设置ALTQ流量管理并决定将哪个队列用于UPnP和NAT-PMP
  • 导航至系统服务> UPnP和NAT-PMP
  • 在Traffic Shaping字段中输入所选的ALTQ队列名称
  • 点击保存

这个技巧只适用于ALTQ流量管理器。目前,防火墙不能将UPnP流量分配给限制器。

ACK队列带宽计算

这是一个复杂的话题,大部分用户都会对此置之不理。

为什么<x>形状不正确?

原因几乎总是这些选择之一:

  • 流量符合不同于预期的规则
  • 流量与任何规则都不符

与本节中的其他问题一样,这往往是由于内部输入的规则或其他不知道队列的数据包所导致的规则而发生的。 由于没有为规则指定队列,因此它将在默认队列或根队列中结束,而不是流量管理。

解决此限制可能需要更改规则以更好地匹配流量,或者禁用以意外方式匹配流量的内部规则。 另一种策略是识别所有其他流量,然后在默认队列上使用不同的选项。

在极少数情况下,例如BitTorrent,可能无法准确识别给定类型的所有流量。 一种解决方法是将通信隔离到网络上的一个特定设备,然后根据该客户端设备地址进行匹配。

WAN连接速度变化

要更新WAN接口的速度(如果更改),请编辑防火墙>流量管理下的相应队列以反映新设定速度的变化。

需要更新的队列是:

  • 用于上传速度的每个WAN接口的根队列
  • 每个LAN接口的根队列的下载速度
  • 为每个LAN接口提供下载速度的qInternet队列

如果此防火墙具有多个WAN,则LAN Root和qInternet队列必须使用所有WAN的总下载速度。

或者,如果向导创建了所有队列和规则并且这些规则尚未更改,则再次完成向导并使用向导更新速度。

此条目发表在pfSense分类目录。将固定链接加入收藏夹。