转载:http://www.360doc.com/content/17/1218/19/1394672_714293886.shtml
https://www.mobile01.com/topicdetail.php?f=110&t=3265327
[前言]
Quality of Service, QoS是让网路顺畅的重要课题,也是小弟最感兴趣的。
现在普遍大家的频宽越来越大,但如果没有妥善的规划频宽,还是可能会让自己的网路塞车、不顺。
比如说现在明明您正在使用视讯,但却是P2P用掉大部分的频宽,结果可想而知。
电脑不会这么聪明知道什么服务对您来说是重要的,什么是可以等的,甚至什么是可有可无的。
这一切都必须先跟电脑约法三章,先约定好频宽使用的原则,这就是所谓QoS的概念了。
实现QoS手段很多,常见的有"频宽管理"、"优先权管理"、"拥塞控制管理"、"流量策略与整型"等。
本篇要介绍的是RouterO中S的HTB(Hierarchical Token Bucket)。
HTB可以让使用者简单的建立一个优先顺序的队列,各种服务在队列中有不同的优先权,进而达成QoS。
在RouterOS中其实有另一个简单的Simple Queues(请看pctine的分享)可以使用。
但Simple Queues是对整个IP或网段做频宽管理,没有办法做到HTB以封包来做管理。
所以如果要很精细的控管网路各流量优先顺序的话,HTB的Queues Tree是唯一的选择了。
[基础认知]
在进一步的介绍HTB实作前,我们必须先了解资料如何进出我们的RouterOS。
了解Packet Flow这对于学习ROS的Firewall与mangle等很重要。
1. "Download"
当资料下载的时候,WAN端就是来源端,LAN就是目的端。
资料会从RouterOS的WAN interface进入,而从LAN interface离开。
换句话说in-interface就是WAN,out-interface就是LAN。
WAN使用的是Public IP,LAN端使用的是Private IP。
所以要将资料由WAN送到LAN的某机器时,还必须将外部IP转换为内部IP。
这转换就是所谓的Destination Network Address Translation, DNAT。
2. "Upload"
当资料上传的时候,LAN端就是来源端,WAN就是目的端。
资料会从RouterOS的LAN interface进入,而从WAN interface离开。
换句话说in-interface就是LAN,out-interface就是WAN。
同样的,这时必须要将内部IP转为外部IP。
这转换就是所谓的Source Network Address Translation, SNAT。
3.另外在建立连线的时候还必须有port的对接,以我们浏览网页来说。
我们会连到网页伺服器的80port,同时自己的电脑会开启一个大于1024号的port。
网页伺服器的IP就是来源IP(Src.Arrdess),80 port就是来源port(Src.Port)。
我们自己电脑的IP就是目的IP(Dst.Address),我们开启的port就是目的port(Dst.port)。
这来源IP,来源port与目的IP,目的port,合起来建立了一条连线( Socket pair )!
以下是mikrotik原厂的说明图。(原厂的说明)
[标记,Mangle]
我们必须将封包先做标记(Mark),然后再依照这些标记来做后续处理。
所以封包是否标记正确,会直接导致后面QoS的成败。
小弟努力找了很久的资料,网路资料关于ROS标记的细节并没有很详细的说明,大都是直接操作而已。
在标记封包时,我们主要会使用到五种chain:prerouting、forward、postrouting、input、output。
以下是小弟自己的结论,我就简单讲了。
1.prerouting:用来标记下载的封包,但无法以内部IP为范围来标记。因为prerouting是在
DNAT(外部IP转内部IP)之前。在使用prerouting时记得搭配in-interface来使用。
2.postrouting:用来标记上传的封包,在使用postrouting时要搭配out-interface使用。
3.forward:用来标记内部特定IP的封包使用,尤其是用在标记内部特定IP下载封包。
在标记封包时,最常使用的就是forward了,因为搭配interface与Port就可以轻易的标示出上下载。
这里有篇文章简单的说明了Forward的使用:ros标记细节解读(ros mangle),大家参考一下。
不过小弟个人不太常用forward,总觉得似乎用forward比较不精确,这有空再来实验看看。
4.input:直接进入ROS而不是进入LAN主机的封包,这个比较少用。
5.output:直接由ROS发出,而不是由LAN主机发出的封包,比如如果您有用ROS的DNS代理功能。
区网的电脑就不会直接向WAN做DNS的请求,而是向ROS请求,然后ROS再向WAN请求。
这时DNS封包就是直接由ROS发出,所以标记DNS封包时要使用output这条链。
6.所以如果您是单纯的向WAN端的Server上下传资料,标记的方法如下:
A.标记下载:prerouting+Src.Port+in-interface="您的WAN接口"。
或:forward+Dst.Address(要标记某范围IP才需要)+Src.port+in-interface="您的WAN接口"。
B.标记上传:postrouting+Dst.Port+out-interface="您的WAN接口"。
或:forward+Src.Address(要标记某范围IP才需要)+Dst.port+out-interface="您的WAN接口"。
如果是要标记自己LAN的Server封包,则又略有不同,容后再叙。
[Winbox操作]
以下以标记浏览网页的封包(tcp 80port)为例。
开启Winbox登入ROS,选择IP-->Firewall-->Mangle-->新增规则。
虽然有网友说不需要先标记连结再标记封包,但我们还是按部就班来,先标连结再标封包。
1.先来标记"下载"连结。
由下图可以知道,下载的封包是从我们WAN进入,从LAN离开。
所以标记下载时in-interface要选WAN或者out-interface要选LAN。
因为没有标记特定网段的需求,所以chain选prerouting。
如果要标记某个网段下载的话,就选forward,然后把网段地址打在Dst.Address.
Protocol选tcp,因为是去浏览网页,所以资料会从远端来源的80port送过来,所以选Src.Port=80。
FTTH是小弟的PPPoE拨号介面,所以in-interface选择您的PPPoE介面。
2.
Passthrough要打勾,表示这标记后续还要再处理,所以要把这封包继续往下传。
3.再新增一个Mangle规则,chain跟刚才一致。
Connection Mark是我们要标记的连结,所以选刚刚的那个连结名称。
4.Action选择标记封包,封包名称自己取。
因为到这里就算标记完成,所以Passthrough不要打勾!
5.再来网页标记上传,如果未来没有特别要保障网页上传的话,其实可以不用标记。
chain选择postrouting,与prerouting不同的是,这里如果要标特定网段是可以
在Src.Address输入要标记的范围。
6.以下步骤跟刚刚一样,另外不要忘记还要再新增一个规则来标记封包。
7.如果标记正确的话,应该可以在Statistics统计的页面看到流量。
但有流量不要高兴的太早,还是必须自己再多方验证看看这流量是否正确。
有时我们前面标记参数设错的话,我们可能标示到的不是我们想要的封包。
8.大家可以反覆上面的步骤,将自己重要的封包都标记出来。
这些重要的封包都取好名字以后,等下要它们排队就简单了^^
在Queues tree的规则里,封包是以mark package的名字来识别,
而不是用mark connection的名字,所以标记完连结,务必要记得标记封包!
9.在标记封包的时候有一个好用的页面可以辅助我们,在Firewall的"Connections"页面。
可以自订很多条件来过滤(Filter)观察所有的连线,从这里可以检查自己的标记是否正确?
[区网内部Server的标记方法]
对小弟来说标记server的封包才是最重要的,因为小弟自己有很多服务必须保障。
比如说NAS必须提供影片,IPCam必须提供监视画面,网路电视盒可以让我在外面看第四台....
当我们向WAN的Server连线时,对方预设的连接Port是固定的,但我们的连接port是随机的。
但当我们自己担任Server时,我们预设的连接Port是固定的,对方的连接Port是随机的。
下图为以自己区网的网页伺服器为例,预设的连接Port固定为80。
所以在标记的时候要稍微换个方式。
Server要标记连结的话,跟前面Client标记方法不同,详如下:
1.标记下载:prerouting+Dst.Port+in-interface="您的WAN接口"。
或:forward+Dst.Address="server IP"+Dst.port+in-interface="您的WAN接口"。
2.标记上传:postrouting+Src.Address="Server IP"+Src.Port+out-interface="您的WAN接口"。
或:forward+Src.Address="Server IP"+Src.port+out-interface="您的WAN接口"。
这篇分享到这里好像已经太长了,所以其他的就留到下篇吧。
非特殊说明,本博所有文章均为博主原创。
如若转载,请注明出处:https://www.3rc.cc/?p=369
共有 0 条评论