流量整形,也称为packet shaping
,是一种带宽管理策略,它延迟特定网络数据包的流动,以确保更高优先级应用程序的网络性能。它通常用于确保与业务相关的网络流量获得高水平的服务。通过延迟某些数据包,流量整形可以增强或确保性能、减少延迟或增加关键应用程序的可用带宽。
由于网络资源有限,流量整形是网络防火墙的必备功能,可确保时间敏感数据的交付和关键应用程序的性能。它是防御分布式拒绝服务 ( DDoS ) 和确保服务质量的有力方法。它可以保护您的网络免受网络拥塞、限制滥用客户端并减少网络危害。
您可能需要限制某些用户的 Internet 带宽,同时为对延迟特别敏感的 IP 语音 (VoIP) 等业务关键型应用程序提供最大带宽。
OPNsense 是最好的开源防火墙之一,具有极其灵活和可靠的流量整形功能。整形规则与防火墙规则和其他配置分开处理。
在本教程中,我们将介绍 OPNsense 流量整形功能以及如何在 OPNsense 防火墙中针对以下情况配置流量整形器:
- 为实时流量(例如 VoIP)保留专用带宽
- 在客户端之间平均共享 Internet 带宽
- 优先考虑关键应用程序
- OPNsense 中基于网络接口的流量整形
OPNsense 中的流量整形器是什么?
OPNsense 流量整形是一种非常有用的解决方案,用于确定流量的优先级和限制带宽。此外,它还可以与其他功能相结合,例如强制门户。
OPNsense 流量整形器使用pipes
、queues
和相应的配置rules
:
- 管道(pipes):管道用于定义允许的带宽。
- 队列(queues):队列在管道内设置权重。可以通过创建队列并为其分配权重来确定流量的优先级。换句话说,当总可用带宽有限时,权重较高的应用程序可能会比其他应用程序消耗更多的带宽。
- 规则(rules):规则将整形应用于特定的数据包流。
可以根据以下标准设置带宽限制:
- 接口
- IP源和目标,
- 流量方向(进/出)
- 端口号(应用程序)
OPNsense 流量整形功能允许在所有用户之间平均分配可用带宽,确保始终保持最佳性能。
OPNsense 中的流量整形器如何工作?
OPNsense 流量整形器采用dummynet
和 ipfw
提供可靠的解决方案,CPU 占用率低。
Dummynet
ipfw
首先使用可以在规则中使用的任意匹配模式对数据包进行分类并将它们划分为流。根据本地策略,流可以包含特定协议类型的数据包、整个子网的数据包、进/出特定主机的数据包、单个 TCP 连接的数据包等。
然后将来自同一流的数据包路由到以下应用流量规则的对象之一:
- 管道:管道模拟具有指定带宽、队列大小、传播延迟和丢包率的连接。当网络数据包离开分类器时,它们在管道前面排队,然后根据管道的参数传输到管道。
-
队列:队列是用于实现
WF2Q
(Worstcase Fair Weighted Fair Queueing)策略的抽象。每个流由队列分配一个权重和一个参考管道。连接到同一管道的所有积压流与其权重成比例地共享管道的带宽。
提示:Weights
不是优先事项;即使具有较高权重的流被永久积压,具有较低权重的流仍然可以保证获得其带宽份额。
Pipes
可用于设置流可以使用多少带宽的强制限制Queues
,而可用于确定不同流如何共享可用带宽。
rules
可以在流量整形器的页面中定义整形规则。
如何在 OPNsense 中查看流量整形状态或统计数据?
查看流量整形器是否正常工作,可以导航至Firewall
> Shaper
> Status
。
在Status
流量整形器的页面中,可以查看以下详细信息:
- 配置管道、队列和规则。
- 自上次重新启动服务以来通过它们的流量。
- 发生时的时间戳。
图 1. 在 OPNsense 中查看流量整形状态
流量整形状态页面还提供以下选项:
-
显示活动流:通过选中
Show active flows
选项查看活动流详细信息;在修改后需要重新刷新视图。 -
显示规则:由于 ipfw 按规则跟踪数据,可以选中
Show rules
选项来启用规则以更轻松地识别错误配置。
如何为实时流量预留专用带宽?
如果总部办公室和托管 VoIP/SIP 服务器的远程数据中心之间存在 SIP 数据包丢失和延迟,可以为 VoIP 流量预留一个专用带宽。假设:
- HQ Office WAN 连接有
20 Mbps
下载和2 Mbps
上传带宽。 - HQ Office 有 10 个 64 kbps 的未压缩语音通道,总带宽为 640 kbps。
- 总部 LAN 使用
10.10.10.0/24
IP 地址。 - VoIP/SIP 服务器 IP 地址为
22.33.44.55
。
通过以下两个主要步骤,可以轻松地为 VoIP 流量预留专用带宽:
- 创建上传和下载管道
- 创建流量整形规则
这些步骤将在以下部分中进行简要说明。
1. 创建上传和下载管道
创建以下4 个管道:
- 到VoIP/SIP 服务器的上传管道限制为
640 kbps
。 - 从VoIP/SIP 服务器下载管道限制为
640 kbps
。 - 除VoIP外的所有上传流量的管道,限制为2048-640=
1.984 kbps
。 - 除VoIP外的所有下载流量的管道,限制为20480-640=
19.840 kbps
创建VoIP上传管道
按照下面的步骤添加管道来保留 VoIP 流量的上传带宽。
- 导航至
Firewall
→ Shaper
→ Pipes
。
图 2. 在 OPNsense 中创建流量整形器管道
- 单击表单右下角的 创建VoIP 上传管道。
- 单击复选框启用。以便启用此管道及其相关的队列和规则。
-
带宽设置
640
,该管道的总带宽。 -
带宽单位设置为
kbit/s
。 -
掩码保留为
none
,因为我们将创建一个具有固定带宽的管道。 - 输入描述,例如
640Kbps_VoIP_upload
。 - 单击
Save
。
图 3. 为VoIP 上传创建预留管道
创建VoIP下载管道
按照下面的步骤添加管道来保留 VoIP 流量的下载带宽。
- 导航至
Firewall
→ Shaper
→ Pipes
。 - 单击表单右下角 为 VoIP 创建下载管道。
- 单击复选框启用它。
-
带宽设置为
640
。 -
带宽单位设置为
kbit/s
。 -
掩码保留为
none
。 - 输入描述,例如
640Kbps_VoIP_download
。 - 单击
Save
。
图 4. 为 VoIP创建下载管道
创建除VoIP外所有其他上传流量的限制管道
按照下面的步骤添加除VoIP 之外的所有其他流量的上传限制管道。
- 导航至
Firewall
→ Shaper
→ Pipes
。 - 单击表单右下角的为其他上传流量创建管道。
- 单击复选框启用它。
-
带宽设置为
1984
。 -
带宽单位设置为
kbit/s
。 -
掩码保留为
none
。 - 输入描述,例如
1984Kbps_Other_upload
。 - 单击
Save
。
图 5. 创建其他上传流量限制管道
创建除VoIP外所有其他下载流量的限制管道
按照下面的步骤添加除 VoIP 之外的所有其他流量的下载限制管道。
- 导航至
Firewall
→ Shaper
→ Pipes
。 - 单击表单右下角的为其他下载流量创建管道。
- 单击复选框启用它。
-
带宽设置为
19840
。 -
带宽单位设置为
kbit/s
。 -
掩码保留为
none
。 - 输入描述,例如
19840Kbps_Other_download
。 - 单击
Save
。
图 6. 为除VoIP之外所有其他流量创建下载限制管道
Pipes
选项卡可以查看创建的所有管道。
图 7. 为带宽预留创建的管道
- 单击
Apply
应用更改。
2.创建流量整形规则
创建下面 4 条流量整形规则:
- VoIP到VoIP/SIP 服务器上传的流量规则。
- VoIP从VoIP/SIP 服务器下载的流量规则。
- LAN 中所有其他上传流量的规则。
- LAN 中所有其他下载流量的规则。
为VoIP上传流量创建规则
按照以下步骤为VoIP 上传流量创建流量整形器规则。
- 单击
Rules
选项卡。
图 8. OPNsense 中的流量整形规则
- 单击图标。
-
接口设置为
WAN
。 -
协议设置为
ip
。 -
源设置为
any
。 -
源端口设置为
any
。 -
目标设置为
22.33.44.55
。 -
目标端口设置为
any
。 -
目标设置为
640Kbps_VoIP_upload
。 - 输入描述
Shape_VoIP_upload
。 - 单击
Save
。
图 9. 为 VoIP 上传带宽预留创建流量整形器规则
为VoIP下载流量创建规则
按照以下步骤为VoIP 下载流量创建流量整形器规则。
- 单击“规则”选项卡。
- 单击图标。
-
接口设置为
WAN
。 -
协议设置为
ip
。 -
源设置为
22.33.44.55
。 -
源端口设置为
any
。 -
目标设置为
any
。 -
目标端口设置为
any
。 -
目标设置为
640Kbps_VoIP_download
。 - 输入描述
Shape_VoIP_download
。 - 单击
Save
。
图 10. 为VoIP下载带宽预留创建流量整形器规则
为其他所有上传流量创建规则
按照下面的步骤创建流量整形器规则,来限制网络上所有其他用户的上传带宽。
- 单击“规则”选项卡。
- 单击图标。
-
接口设置为
WAN
。 -
协议设置为
ip
。 -
源设置为
10.10.10.0/24
。 -
源端口设置为
any
。 -
目标设置为
any
。 -
目标端口设置为
any
。 -
目标设置为
1984Kbps_Other_upload
。 - 输入描述
Shape_Other_upload
。 - 单击
Save
。
图 11. 为其他所有 上传带宽创建流量整形规则
为其他所有下载流量创建规则
按照下面的步骤创建流量整形器规则,来限制网络上所有其他用户的下载带宽。
- 单击“规则”选项卡。
- 单击图标。
-
接口设置为
WAN
。 -
原型设置为
ip
。 -
源设置为
any
。 -
源端口设置为
any
。 -
目标设置为
10.10.10.0/24
。 -
目标端口设置为
any
。 -
目标设置为
19840Kbps_Other_download
。 - 输入描述
Shape_Other_download
。 - 单击
Save
。
图 12. 为其他所有下载带宽限制创建流量整形器规则
在Rules
选项卡中可以查看带宽限制和预留创建的所有规则。
图 13. 在 OPNsense 中为带宽预留和限制创建的规则
- 单击
Apply
以应用更改。
验证VoIP/SIP流量
导航到Firewall
> Shaper
> Status
。
在Status
流量整形器的页面中,可以查看类似于图 14 的流量。
图 14. 在 OPNsense中验证 VoIP/SIP 流量的带宽预留
如何在客户端之间平均共享 Internet 带宽
某些用户从 FTP 服务器下载大文件耗尽了Internet带宽,但是因为没有足够的预算来增加 带宽,为了解决这个问题,可以在所有用户之间平均分配带宽。
假定:
- 公司互联网有
20 Mbps
下载和2 Mbps
上传带宽。 - 公司LAN 网络为
10.10.10.0/24
。
执行下面 3 个步骤,在所有用户之间平均共享带宽:
- 创建上传和下载管道
- 创建队列
- 创建流量整形规则
1. 创建上传和下载管道
创建下面2个管道:
-
2 Mbps
上传流量的管道。 -
20 Mbps
下载流量管道。
创建上传管道
- 导航至
Firewall
→ Shaper
→ Pipes
。 - 单击表单右下角的流量创建管道。
- 单击复选框启用。
-
带宽设置为
2
。 -
带宽单位设置为
Mbit/s
。 -
掩码保留为
none
。 - 输入描述,例如
2Mbps_Internet_upload
。 - 单击
Save
。
图 15. 创建上传流量管道
创建下载管道
- 导航至
Firewall
→ Shaper
→ Pipes
。 - 单击表单右下角 创建管道。
- 单击复选框启用。
-
带宽设置为
20
。 -
带宽单位设置为
Mbit/s
。 -
掩码保留为
none
。 - 输入描述,例如
20Mbps_Internet_download
。 - 单击
Save
。
图 16. 创建下载流量管道
可以在Pipes
选项卡查看创建的所有管道。
图 17. 创建的管道
- 单击
Apply
以应用更改。
2. 创建上传和下载队列
创建2个队列:
- 权重为
100
的上传队列。 - 权重为
100
的下载队列。
创建上传队列
- 导航至
Firewall
→ Shaper
→ Queue
。
图 18. 在 OPNsense 中创建流量整形队列
- 单击表单右下角的创建队列。
- 单击复选框启用。
- 选择
2Mbps_Internet_upload
管道。 - 将权重设置为
100
。(1 最低,100 最高)。 - 将掩码设置为
source
,在规则的源字段中的所有 IP 地址之间平均共享指定的带宽。这通常用于上传队列。 - 输入描述,例如
Queue_2Mbps_Internet_upload
。 - 单击
Save
。
图 19. 创建流量整形上传队列
创建下载队列
- 导航至
Firewall
→ Shaper
→ Queue
。 - 单击表单右下角的创建队列。
- 单击复选框启用。
- 选择
20Mbps_Internet_download
管道。 -
权重设置为
100
。(1 最低,100 最高)。 -
掩码设置为
destination
,在规则的目标字段中的所有 IP 地址之间平均共享指定的带宽。管道将20Mbps
允许10
客户借出2Mbps
每个。这通常用于下载队列。 - 输入描述,例如
Queue_20Mbps_Internet_download
。 - 单击
Save
。
图 20. 创建下载队
可以在Queues
选项卡查看创建的所有队列。
图 21. 为 Internet带宽分配创建的队列
- 单击
Apply
以应用更改。
3. 创建流量整形规则
创建 2 条流量整形规则:
- 上传流量规则。
- 下载流量规则。
创建上传流量整形规则
- 单击“规则”选项卡。
- 单击图标。
-
接口设置为
WAN
。 -
协议设置为
ip
。 -
源设置为
10.10.10.0/24
。 -
源端口设置为
any。
-
目标设置为
any
。 -
目标端口设置为
any
。 - 将目标设置为
Queue_2Mbps_Internet_upload
。 - 输入说明
Shape_Internet_upload
。 - 单击
Save
。
图 22. 在 OPNsense 中创建流量整形规则,在 LAN 用户之间均匀分配 Internet 上传带宽
创建下载流量整形规则
- 单击“规则”选项卡。
- 单击图标。
-
接口设置为
WAN
。 -
原型设置为
ip
。 -
源设置为
any
。 -
源端口设置为
any
。 -
目标设置为
10.10.10.0/24
。 -
目标端口设置为
any
。 - 将目标设置为
Queue_20Mbps_Internet_download
。 - 输入描述
Shape_Internet_download
。 - 单击
Save
。
图 23. 创建流量整形规则,在 LAN用户之间平均分配 Internet下载流量带宽
可以在Rules
选项卡,查看所有创建的流量整形规则。
图 24. 为 LAN 用户之间平均分配 Internet 下载流量带宽而创建的规则
- 单击
Apply
以应用更改。
验证是否平均分配
导航到Firewall
> Shaper
> Status
。
如果其中一个客户端向/从 Internet 上传或下载大文件,可以在客户端 IP 地址的 Current Activity中看到丢弃的数据包,类似于图 25。
图 25. 验证 LAN 用户之间的 Internet 带宽均匀分布
提示:OPNsense流量整形器允许限制 LAN 或访客网络上的互联网带宽使用。那么用户不能消耗比分配更多的 Internet 带宽。
如何使用队列
假设您的老板抱怨观看远程办公室摄像头经常出现卡顿,经过调查确定是远程办公室和总部办公室之间的 WAN 连接存在大量视频流丢包,并且 HTTP(S) 连接正在消耗大部分带宽容量。但是老板不出钱增加 WAN 带宽。为了解决这个问题,可以决定优先考虑应用程序。
假定:
- WAN 有
10 Mbps
下载带宽。 - 公司总部 LAN 网络为
10.10.10.0/24
。 - 摄像机使用端口
TCP/37777
进行视频流的传输。
流量整形器允许通过使用队列来影响管道内的带宽,并基于加权算法为某些应用程序提供比其他应用程序更多的带宽。在本示例中,我们只考虑下载流量,并将视频流应用的权重参数设置为9
,HTTP(S) 设置1
为S) 流量,那么 HTTP(S) 限制为 1 Mbps带宽,视频流限制为 9 Mbps带宽。
应用 |
权量 |
最小带宽 |
视频流(端口 37777) |
9 |
9 Mbps |
HTTP (80) / HTTPS (443) |
1 |
1 Mbps |
|
|
|
按照以下步骤确定应用程序的带宽使用优先级:
- 创建下载管道
- 创建队列
- 创建流量整形规则
1. 创建下载管道
- 导航至
Firewall
→ Shaper
→ Pipes
。 - 单击表单右下角 创建下载管道。
- 单击复选框启用。
-
带宽设置为
10
。 -
带宽单位设置为
Mbit/s
。 -
掩码保留为
none
。 - 输入描述,例如
10Mbps_download
。 - 单击
Save
。
图 26. 创建10 Mbps下载管道
2. 创建视频流和 HTTP(S)队列
创建2 个队列:
- 权重为9的视频流流量队列。
- 权重为1的 HTTP(S) 流量队列。
设置视频流队列
- 导航至
Firewall
→ Shaper
→ Queue
- 单击单右下角的为视频流创建队列。
- 单击复选框启用。
- 选择
10Mbps_download
管道。 - 将权重设置为
9
。 - 将掩码设置为
none
。 - 输入描述,例如
Queue_Video_Streaming
。 - 单击
Save
。
图 27. 创建视频流队列
创建HTTP(S)流量队列
- 导航至
Firewall
→ Shaper
→ Queue
。 - 单击表单右下角的为 HTTP(S) 流量创建队列。
- 单击复选框启用。
- 选择
10Mbps_download
管道。 -
权重设置为
1
。 -
掩码设置为
none
。 - 输入描述,例如
Queue_HTTP
。 - 单击
Save
。
图 28. 为 HTTP(S) 流量创建流量整形队列
可以在Queues
选项卡查看创建的所有队列。
图 29. 在 OPNsense 中为应用程序优先级创建的队列
- 单击
Apply
应用更改。
3. 创建流量整形规则
创建下面 2 条流量整形规则:
- 视频流下载流量规则。
- HTTP/WEB 下载流量规则。
- HTTP(S)/WEB 下载流量规则
创建视频流下载规则
- 单击“规则”选项卡。
- 单击图标。
-
接口设置为
WAN
。 -
协议设置为
tcp
。 -
源设置为
any
。 -
源端口设置为
37777
。 -
目标设置为
any
。 -
目标端口设置为
any
。 -
目标设置为
Queue_Video_Streaming
。 - 输入描述
Shape_Video_Streaming
。 - 单击
Save
。
图 30. 为视频流创建流量整形规则
创建HTTP流量规则
- 单击“规则”选项卡。
- 单击图标。
-
接口设置为
WAN
。 -
协议设置为
ip
。 -
源设置为
any
。 -
源端口设置为
HTTP
。 -
目标设置为
any
。 -
目标端口设置为
any
。 -
目标设置为
Queue_HTTP
。 - 输入描述
Shape_HTTP
。 - 单击
Save
。
图 31. 为 HTTP流量创建流量整形规则
创建HTTPS流量规则
- 单击“规则”选项卡。
- 单击图标。
-
接口设置为
WAN
。 -
协议设置为
ip
。 -
源设置为
any
。 -
源端口设置为
HTTPS
。 -
目标设置为
any
。 -
目标端口设置为
any
。 -
目标设置为
Queue_HTTPS
。 - 设置描述
Shape_HTTPS
。 - 单击
Save
。
图 32. 为 HTTPS流量创建流量整形器规则
可以在Rules
选项卡查看创建的所有规则。
图 33. 在 OPNsense 中为应用程序优先级创建的规则
- 单击
Apply
激活设置。
如何在OPNsense中基于网络接口塑造流量
OPNsense 流量整形器允许根据流量在接口之间移动的方向对流量进行不同的整形。整形规则可以基于两个接口创建。
假设 OPNsense 中有两个本地网络接口,第一个 LAN 用于员工,第二个 GUESTNET 用于为访客提供免费的互联网连接。需要限制 GUESTNET 的互联网使用,以防止客人耗尽互联网连接。
假定:
- Internet 有
10 Mbps
下载带宽。 - LAN 网络可以不受限制。
- 访客网络将被限制为总共 2 Mbps 下载和 1 Mbps 上传带宽。
可以按照以下步骤确定应用程序的带宽使用优先级:
- 创建上传和下载管道
- 创建流量整形规则
1. 创建上传和下载管道
创建下面给出的 2 个管道:
- GUESTNET 具有
1 Mbps
带宽上传流量管道。 - GUESTNET 具有
2 Mbps
带宽下载流量管道。
为GUESTNET创建上传管道
- 导航至
Firewall
→ Shaper
→ Pipes
。 - 单击表单右下角的创建管道。
- 单击复选框启用。
-
带宽设置为
1
。 -
带宽单位设置为
Mbit/s
。 -
掩码保留为
none
。 - 输入描述,例如
1Mbps_GUESTNET_upload
。 - 单击
Save
。
图 34. 为 GUESTNET创建 上传流量管道
为GUESTNET创建下载管道
- 导航至
Firewall
→ Shaper
→ Pipes
。 - 单击表单右下角的 创建管道。
- 单击复选框启用。
-
带宽设置为
2
。 -
带宽单位设置为
Mbit/s
。 -
掩码保留为
none
。 - 输入描述,例如
2Mbps_GUESTNET_download
。 - 单击
Save
。
图 35. 为 GUESTNET创建下载流量管道
2.创建流量整形规则
创建 2 条流量整形规则:
- GUESTNET上传流量规则。
- GUESTNET 下载流量规则。
为GUESTNET创建上传规则
- 单击“规则”选项卡。
- 单击图标。
- 单击窗口左上角的
高级模式
切换按钮。 -
接口设置为
GUESTNET
。 -
接口2 设置为
WAN
。 -
协议设置为
ip
。 -
源设置为
any
。 -
源端口设置为
any
。
图 36. 为 GUESTNET创建流量整形器规则1
-
目标设置为
any
。 -
目标端口设置为
any
。 -
方向设置为
out
。 -
目标设置为
1Mbps_GUESTNET_upload
。 - 设置说明
Shape_GUESTNET_upload
。 - 单击
Save
。
图 37. 为 GUESTNET创建流量整形器规则2
创建下载流量规则
- 单击“规则”选项卡。
- 单击图标。
- 单击窗口左上角的
高级模式
切换按钮。 -
接口设置为
WAN
。 -
接口 2设置为
GUESTNET
。 -
协议设置为
ip
。 - 将源设置为
any
。 - 将源端口设置为
any
。
图 38. 为GUESTNET创建下载流量整形器规则1
-
目标设置为
any
。 -
目标端口设置为
any
。 -
方向设置为
in
。 -
目标设置为
2Mbps_GUESTNET_download
。 - 设置说明
Shape_GUESTNET_download
。 - 单击
Save
。
图 39. 为GUESTNET创建下载流量整形器规则2
可以在Rules
选项卡查看流量整形规则。
图 40. 为限制 GUESTNET用户使用而创建的规则
- 单击
Apply
应用更改。
验证测试
可以导航到Firewall
> Shaper
> Status
。
如果其中一个客户端耗尽了设定的Internet 带宽限制,可以在客户端 IP 地址的Current Activity
中看到丢弃的数据包,如图 41所示。
图 41. 在 OPNsense 中验证 GUESTNET 用户的互联网带宽限制
原文地址。