OPNsense用户手册-流量管理

流量整形(也称为“分组整形”)是计算机网络流量的控制,以通过延迟满足特定标准的分组来优化或保证性能,降低延迟和/或增加可用带宽。更具体地,流量整形是对一组分组的任意动作,通过对这些分组施加额外的延迟,使得它们符合某些预定的约束。

../_images/traffic_shaping.png

概述

OPNsense的流量整形非常灵活,围绕管道,队列和相应的规则进行组织。管道定义允许的带宽,队列可用于在管道内设置权重,最后使用规则将整形应用于某个数据包流。整形规则独立于防火墙规则和其他设置进行处理。

OPNsense流量整形是限制带宽或确定流量优先级的可靠解决方案,可与其他功能(如强制网络门户或高可用性(CARP))结合使用。

可以基于接口、ip源和目的地、流量方向(输入/输出)和端口号(应用)来定义带宽限制。

可用带宽可以在所有用户上均匀分配,这样可以始终获得最佳性能。

还可以通过添加队列和定义权重来确定流量的优先级。严格来说,流量并不是真正的优先级,但是当总的可用带宽有限时,具有较高权重的应用可能比其他应用消耗更多带宽。

流量整形是使用IPFW和dummynet来提供具有低CPU容量的现代可靠解决方案。

Dummynet & ipfw

Dummynet首先使用防火墙对数据包进行分类,然后使用可在ipfw规则中使用的任意匹配模式将数据分成流。根据本地策略,流可以包含单个TCP连接的数据包,或从(到)给定主机,整个子网或协议类型等的数据包。

然后将属于同一流的数据包传递给两个不同对象中的任意一个,从而实现流量调节:

管道
管道模拟具有给定带宽,传播延迟,队列大小和丢包率的链路。当数据包从分类器中出来时,数据包在管道前面排队,然后根据管道的参数传输到管道。
队列
队列是用于实现WF2Q +(Worstcase公平加权公平排队)策略的抽象,该策略是WFQ策略的有效变体。队列将权重和引用管道关联到每个流,然后链接到同一管道的所有积压(排队的流量)流共享管道的带宽与其权重成比例。请注意,权重不是优先级; 即使权重较高的流量被永久积压,具有较低权重的流量仍可保证获得其带宽的一部分。

实际上,管道可用于设置流可以使用的带宽的硬限制,而队列可用于确定不同的流如何共享可用带宽。

可以在流量整形的规则部分中定义整形规则。

设置流量整形

如何设置流量整形,我们将分别研究以下不同的场景:

  1. 为实时流量保留专用带宽,例如(托管)IP语音(VOIP)服务器。
  2. 在用户之间均匀分享互联网带宽
  3. 限制用户可以使用的最大Internet带宽
  4. 使用队列确定应用程序的优先级(加权)
  5. 用于GuestNet的多接口整形

保留专用带宽

在这种情况下,我们将创建一个专用于进出实时应用程序的流量的管道。下面,我们假设SIP中继或托管的IP语音(VOIP)服务器。

对于这个例子,我们假设需要4个64Kbps的未压缩语音信道,总需求带宽为256Kbps。此示例中的Internet连接有10Mbps下载和1Mbps上载速度。

导航到Firewall->Shaper->Settings

第1步 – 创建上传和下载管道

在“ 管道”选项卡上,单击右下角的+按钮。将弹出一个空的“ 编辑管道”页面

创建上传管道(到我们的VOIP服务器)

启用 选中 设置以便启用管道
带宽 256 所需带宽的数值
单位 Kbit/s 与数值一起使用的度量标准
掩码 (留空) 用于自动排队
描述 PipeUp-256Kbps 输入描述性内容

创建上传管道(其他流量= 1024Kbps – 256Kbps = 768Kbps)

启用 选中 设置以便启用管道
带宽 768 所需带宽的数值
单位 Kbit/s 与数值一起使用的度量标准
掩码 (留空) 用于自动排队
描述

创建下载管道(来自我们的VOIP服务器)

启用 选中  选中以启用管道
带宽 256 所需带宽的数值
单位  Kbit/s 与数值一起使用的度量标准
掩码 (留空) 用于自动排队
描述 PipeDown-256Kbps 输入描述性内容

创建下载管道(其他流量= 10240Kbps – 256Kbps = 9984Kbps)

启用 选中 选中以启用管道
带宽 9984 所需带宽的数值
单位  Kbit/s 与数值一起使用的度量标准
掩码 (留空) 用于自动排队
描述 PipeDown-9984Kbps 输入描述性内容

第2步 – 创建规则

在“ 规则”选项卡上,单击右下角的+按钮。将弹出一个空的编辑规则页面。

为指向VOIP服务器(上传)的流量创建规则。

序列 11 自动生成的数字,仅在需要时覆盖
接口 WAN 选择连接到互联网的接口
协议 IP 在我们的示例中选择协议ip
any 源ip,选any
源端口 any 源端口,选any
目标 172.10.2.1 我们的VOIP服务器的IP地址
目标端口 any 如果是静态的,请使用任意目标端口
管道或队列 PipeUP-256Kbps 选择上传256Kbps管道
描述 ShapeVOIPUpload 输入描述性名称

为来自VOIP服务器的流量创建规则(下载)。

序列 21 自动生成的数字,仅在需要时覆盖
接口 WAN 选择连接到互联网的接口
协议 IP 在我们的示例中选择协议ip
资源 172.10.2.1 我们的VOIP服务器的IP地址
源端口 any 源端口,选any
目标 any 选any
目标端口 any 选any
管道或队列 PipeDown256Kbps 选择下载256Kbps管道
描述 ShapeVOIPDown 输入描述性名称

为所有其他互联网上传流量创建规则

序列 31 自动生成的数字,仅在需要时覆盖
接口 广域网 选择连接到互联网的接口
协议 IP 在我们的示例中选择协议ip
192.168.1.0/24 源IP,我们的LAN网络
源端口 any 源端口,选any
目标 any 目标地址,选any
目标端口 any 如果是静态的,请使用any目标端口
管道或队列 PipeUp-768kbps 选择上传256Kbps管道
描述 ShapeUpload 输入描述性名称

为所有其他互联网下载流量创建规则

序列 41 自动生成的数字,仅在需要时覆盖
接口 广域网 选择连接到互联网的接口
协议 IP 在我们的示例中选择协议ip
any 源地址,选any
源端口 any 源端口,选any
目标 192.168.1.0/24 我们的lan网络
目标端口 any 目标端口,选any
管道或队列 PipeDown-9984Kbps 选择下载256Kbps管道
描述 ShapeDown 输入描述性名称

注意

注意顺序!确保将正确的流量传递到正确的管道非常重要。

现在按应用以激活流量整形规则。完成后如下图所示:

../../_images/shaping_rules_s1.png

均匀分享带宽

我们假设我们希望在所有用户之间均匀分享10Mbps下载和1Mbps上载的互联网连接。

导航到Firewall->Shaper->Settings

第1步 – 创建上传和下载管道

在“ 管道”选项卡上,单击右下角的+按钮。将弹出一个空的“ 编辑管道”页面

创建上传管道

启用 选中 选中以启用管道
带宽 1 所需带宽的数值
单位 Mbit / s 与数值一起使用的度量标准
掩码 留空 选择目标以共享带宽
描述 PipeUp-1Mbps 输入描述性内容

创建下载管道

启用 选中 选中以启用管道
带宽 10 所需带宽的数值
单位 Mbit / s 与数值一起使用的度量标准
掩码 留空 选择目标以共享带宽
描述 PipeDown-10Mbps 输入描述性内容

第2步 – 创建队列

在“ 队列”选项卡上,单击右下角的+按钮。将弹出一个空的编辑队列页面

创建上传队列

启用 选中 选中以启用管道
管道 PipeUp-1Mbps 选择我们的管道
权重 100 与数值一起使用的权重
掩码 每个来源都创造一个匹配
描述 QueueUp-1Mbps 输入描述性内容

创建下载队列

启用 选中 选中以启用管道
管道 PipeDown-10Mbps 选择我们的管道
权重 100 与数值一起使用的权重
掩码 目标 每个来源都创造一个匹配
描述 QueueDown-10Mbps 输入描述性内容

第3步 – 创建规则

在“ 规则”选项卡上,单击右下角的+按钮。将弹出一个空的编辑规则页面

为指向互联网的流量创建规则(上传)。

序列 11 自动生成的数字,仅在需要时覆盖
接口 wan 选择连接到互联网的接口
协议 IP 在我们的示例中选择协议ip
192.168.1.0/24 选择局域网网络
源端口 any 源端口,选any
目标 any 选any
目标端口 any 如果是静态的,请使用any目标端口
管道或队列 QueueUp-1Mbps 选择Upload 1Mbps Queue
描述 ShapeUpload 输入描述性名称

为来自互联网的流量创建规则(下载)。

序列 21 自动生成的数字,仅在需要时覆盖
接口 wan 选择连接到互联网的接口
协议 IP 在我们的示例中选择协议ip
any 源地址,选any
源端口 any 整形的源端口,选any
目标 192.168.1.0/24 对目标ip进行整形,选择局域网
目标端口 any 要成型的目标端口,请保留任意内容
管道或队列 QueueDown-10Mbps 选择下载10Mbps队列
描述 ShapeDownload 输入描述性名称

现在按应用以激活流量整形规则。完成后如下图所示:

../../_images/shaping_rules_s2.png

限制每个用户的带宽

我们将在互连用户之间划分互联网下载流量,将每个用户的带宽限制在1Mbps的速率。

导航到Firewall->Shaper->Settings

第1步 – 创建上传和下载管道

在“ 管道”选项卡上,单击右下角的+按钮。将弹出一个空的“ 编辑管道”页面

创建下载管道

启用 选中 选中以启用管道
带宽 1 所需带宽的数值
单位 Mbit / s 与数值一起使用的度量标准
掩码 目标 选择目标以限制每个客户端的带宽
描述 PipeDown-1Mbps 输入描述性内容

第2步 – 创建规则

在“ 规则”选项卡上,单击右下角的+按钮。将弹出一个空的编辑规则页面。

为来自互联网的流量创建规则(下载)。

序列 21 自动生成的数字,仅在需要时覆盖
接口 wan 选择连接到互联网的接口
协议 IP 在我们的示例中选择协议ip
any 源地址,选any
源端口 any 选any
目标 192.168.1.0/24 选择局域网
目标端口 any 选any
管道或队列 PipeDown-1Mbps 选择下载1Mbps管道
描述 ShapeDownload 输入描述性名称

注意:如果要限制单个IP的流量,则只需在目标字段中输入IP地址,而不是整个LAN网络范围。

现在按应用来激活流量整形规则。完成后如下图所示:

../../_images/shaping_rules_s3.png

优先使用队列

通过利用队列,我们​​可以影响管道内的带宽,并且基于加权算法为某些应用提供比其他应用更多的带宽。

假设我们有一个10Mbps的管道和2个应用程序,例如smtp(电子邮件)和http(s)。http(s)流量的权重为1,smtp流量的权重为9,当我们管道的所有容量都在使用时,电子邮件流量的带宽将比我们的http流量多9倍,从而达到1Mbps用于http(s),9Mbps用于smtp。

在下面这个示例中,我们仅检查下载流量,但可以对上传流量执行完全相同的操作。

应用 权重 最小带宽
SMTP(端口25) 9 9Mbps
HTTP(80)
HTTPS(443)

导航到Firewall->Shaper->Settings

第1步 – 创建下载管道

在“ 管道”选项卡上,单击右下角的+按钮。将弹出一个空的“ 编辑管道”页面。

创建下载管道(10Mbps)

启用 选中 选中以启用管道
带宽 10 所需带宽的数值
单位 Mbit / s 与数值一起使用的度量标准
掩码 (空) 留空
描述 PipeDown-10Mbps 输入描述性内容

第2步 – 创建队列

在“ 队列”选项卡上,单击右下角的+按钮。将弹出一个空的编辑队列页面。

为SMTP创建队列

启用 选中 选中以启用管道
管道 PipeDown-10Mbps 选择我们的管道
权重 9 与数值一起使用的权重
掩码 (空) 留空
描述 Queue-SMTP 输入描述性内容

为HTTP创建队列

启用 选中 选中 以启用管道
管道 PipeDown-10Mbps的 选择我们的管道
权重 1 与数值一起使用的权重
掩码 (空) 留空
描述 Queue-HTTP 输入描述性内容

第3步 – 创建规则

在“ 规则”选项卡上,单击右下角的+按钮。将弹出一个空的编辑规则页面。

为smtp下载流量创建规则(电子邮件)

序列 11 自动生成的数字,仅在需要时覆盖
接口 wan 选择连接到互联网的接口
协议 IP 在我们的示例中选择协议ip
any 源地址,选any
源端口 SMTP 源端口,smtp或25
目标 any 选any
目标端口 any 目标端口,请保留为任意
管道或队列 Queue-SMTP 选择SMTP队列
描述 ShapeSMTPDownload 输入描述性名称

为http下载流量创建规则

序列 21 自动生成的数字,仅在需要时覆盖
接口 wan 选择连接到互联网的接口
协议 IP 在我们的示例中选择协议ip
any 源地址,选any
源端口 HTTP http或80
目标 any 目的地ip,选any
目标端口 any 目标端口,请保留为任意
管道或队列 Queue-HTTP 选择HTTP队列
描述 ShapeHTTPDownload 输入描述性名称

为https流量添加额外规则很简单,因为我们可以使用相同的http队列:

序列 31 自动生成的数字,仅在需要时覆盖
接口 wan 选择连接到互联网的接口
协议 IP 在我们的示例中选择协议ip
any 源地址,选any
源端口 HTTPS 源端口,https或443
目标 any 目的地ip,选any
目标端口 any 目标端口,请保留为任意
管道或队列 Queue-HTTP 选择HTTP队列
描述 ShapeHTTPSDownload 输入描述性名称

这样,http和https流量将被视为相同(总计1Mbps)。

现在点击应用以激活流量整形规则。完成后如下图所示:

../../_images/shaping_rules_s4.png

访客网络的多接口整形

OPNsense流量整形器的一个选项是它能够根据两个接口添加整形规则。此选项允许您根据流量在接口之间移动的方向来不同地调整流量。

在下面这个示例中,我们将使用此功能在主LAN网络和访客网络之间共享对称的10Mbps Internet连接。

LAN网络不受限制,来自我们的访客网络上的用户的流量将限制为总共2Mbps的下载和1Mbps的上传。

第1步 – 创建上传和下载管道

在“ 管道”选项卡上,单击右下角的+按钮。将弹出一个空的“ 编辑管道”页面。

创建上传管道(GuestNet – em2)

启用 选中 选中以启用管道
带宽 1 所需带宽的数值
单位 Mbit / s 与数值一起使用的度量标准
掩码 (空) 留空
描述 PipeUp-1Mbps 输入描述性内容

创建下载管道(GuestNet – em2)

启用 选中 选中以启用管道
带宽 2 所需带宽的数值
单位 Mbit / s 与数值一起使用的度量标准
掩码 (空) 留空
描述 PipeDown-2Mbps 输入描述性内容

第2步 – 创建规则

在“ 规则”选项卡上,单击右下角的+按钮。将弹出一个空的编辑规则页面。

重要 – 继续之前!
首先将模式更改为高级,在对话框左上角的进行切换。单击一下即可将其从红色(禁用)切换为绿色(启用)。

为下载流量创建规则

序列 11 自动生成的数字,仅在需要时覆盖
接口 wan 选择连接到互联网的接口
接口2 GuestNet 选择与您的GuestNet匹配的接口
协议 IP 在我们的示例中选择协议ip
any 源地址,选any
源端口 any 源端口,选any
目标 any 目的地ip,选any
目标端口 any 目标端口,请保留为任意
方向 匹配入站的数据包(下载)
管道或队列 PipeDown-2Mbps 选择下载管道
描述 GuestNetDownload 输入描述性名称

为上传流量创建规则

序列 21 自动生成的数字,仅在需要时覆盖
接口 wan 选择与您的GuestNet匹配的接口
接口2 GuestNet 选择连接到互联网的接口
协议 IP 在我们的示例中选择协议ip
any 源地址,选any
源端口 any 源端口,选any
目标 any 目的地ip,选any
目标端口 any 目标端口,请保留为任意
方向 匹配出站的数据包(上传)
管道或队列 PipeUp-1Mbps 选择下载管道
描述 GuestNetUpload 输入描述性名称

现在按应用来激活流量整形规则。

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