MikroTik RouterOS应用事例讲解.docx
《MikroTik RouterOS应用事例讲解.docx》由会员分享,可在线阅读,更多相关《MikroTik RouterOS应用事例讲解.docx(72页珍藏版)》请在冰豆网上搜索。
![MikroTik RouterOS应用事例讲解.docx](https://file1.bdocx.com/fileroot1/2023-4/18/cd6fb355-41c3-4c62-8aec-a298eeca328e/cd6fb355-41c3-4c62-8aec-a298eeca328e1.gif)
MikroTikRouterOS应用事例讲解
MikroTikRouterOS应用事例讲解
导航:
防火墙配置规则
防火墙Tracking设置
双线备份自动切换配置
源地址双线应用配置
端口策略路由配置
透明传输整形器配置
电信网通流量控制
动态流量控制
PPTP借线配置
Hotspot服务器配置
PPPoE服务器配置
EoIP隧道配置
UserManager操作配置
Webbox配置无线网络
PPTP远程办公互联配置
1:
1NAT实例
防火墙规则
下面是三条预先设置好了的chains,他们是不被能删除的:
∙input–用于处理进入路由器的数据包,即数据包目标IP地址是到达路由器一个接口的IP地址,经过路由器的数据包不会在input-chains处理。
∙forward–用于处理通过路由器的数据包
∙output–用于处理源于路由器并从其中一个接口出去的数据包。
他们具体的区别如下:
当处理一个chain(数据链),策略是从chain列表的顶部从上而下执行的。
如果一个数据包满足策略的条件,这时会执行该操作。
我们来看看防火墙过滤原则:
现在我来看事例中的防火墙规则:
我先从input链表开始,这里是对所有访问路由的数据进行过滤和处理:
从input链表的第一条开始执行,这里一共有三条规则:
0;;;接受你信任的IP地址访问(src-address=填写信任IP,默认允许任何地址)
chain=inputsrc-address=192.168.100.2action=accept
1;;;丢弃非法连接
chain=inputconnection-state=invalidaction=drop
2;;;丢弃任何访问数据
chain=inputaction=drop
下面是forward链表
forward链表,一共有7条规则,包括两个跳转到自定义链表ICMP和virus链表:
0;;;接受已建立连接的数据
chain=forwardconnection-state=establishedaction=accept
1;;;接受相关数据
chain=forwardconnection-state=relatedaction=accept
2;;;丢弃非法数据包
chain=forwardconnection-state=invalidaction=drop
3;;;限制每个主机TCP连接数为80条
chain=forwardprotocol=tcpconnection-limit=80,32action=drop
4;;;丢弃掉所有非单播数据
chain=forwardsrc-address-type=!
unicastaction=drop
5;;;跳转到ICMP链表
chain=forwardprotocol=icmpaction=jumpjump-target=ICMP
6;;;跳转到病毒链表
chain=forwardaction=jumpjump-target=virus
forward工作过程如下:
在自定义链表ICMP中,是定义所有ICMP(Internet控制报文协议),ICMP经常被认为是IP层的一个组成部分。
它传递差错报文以及其他需要注意的信息。
ICMP报文通常被IP层或更高层协议(TCP或UDP)使用。
例如:
ping、traceroute、traceTTL等。
我们通过ICMP链表来过滤所有的ICMP协议:
ICMP链表操作过程:
0;;;Ping应答限制为每秒5个包
chain=ICMPprotocol=icmpicmp-options=0:
0-255limit=5,5action=accept
1;;;Traceroute限制为每秒5个包
chain=ICMPprotocol=icmpicmp-options=3:
3limit=5,5action=accept
2;;;MTU线路探测限制为每秒5个包
chain=ICMPprotocol=icmpicmp-options=3:
4limit=5,5action=accept
3;;;Ping请求限制为每秒5个包
chain=ICMPprotocol=icmpicmp-options=8:
0-255limit=5,5action=accept
4;;;TraceTTL限制为每秒5个包
chain=ICMPprotocol=icmpicmp-options=11:
0-255limit=5,5action=accept
5;;;丢弃掉任何ICMP数据
chain=ICMPprotocol=icmpaction=drop
在virus链表中过滤常见的病毒,我可以根据需要在该链表中添加新的病毒对他们做过滤:
Tracking设置
这里我们可以设置是否启用tracking连接跟踪,以及TCP、UDP和ICMP等协议的timeout时间,和TCP-syncookie设置,RouterOS在2.9.16中增加了TCP-syncookie参数。
在使用NAT时需要启用Tracking连接跟踪,如果你的RouterOS没有使用NAT(如在使用bridge模式下),可以选择关闭tracking,降低系统资源。
SYNCookie原理
SYNFlood是一种非常危险而常见的DoS攻击方式。
到目前为止,能够有效防范SYNFlood攻击的手段并不多,而SYNCookie就是其中最著名的一种
SYNCookie是对TCP服务器端的三次握手协议作一些修改,专门用来防范SYNFlood攻击的一种手段。
它的原理是,在TCP服务器收到TCPSYN包并返回TCPSYN+ACK包时,不分配一个专门的数据区,而是根据这个SYN包计算出一个cookie值。
在收到TCPACK包时,TCP服务器在根据那个cookie值检查这个TCPACK包的合法性。
如果合法,再分配专门的数据区进行处理未来的TCP连接。
事例操作
双线备份自动切换配置
RouterOS2.9中路由规则增加的两点功能:
1、在RouterOS2.9路由规则中增加了check-gateway的功能,能检测到网关的线路状态,如果网关无法探测到,便认为网关无法连接,会自动禁止访问网关的数据通过,check-gateway功能的探测时间为10s一个周期。
2、在RouterOS2.9中具备了对缺省网关的判断,在RouterOS2.9的任何一个路由表中只能存在一个缺省网关,即到任何目标地址为0.0.0.0/0,没有做路由标记(routing-mark)的规则,如果存在另一个缺省网关则认为是错误,路由将不予以执行。
如下图:
从上图我们可以看到,所有访问电信的IP段从10.200.15.1出去,其他的数据走网通的缺省网关出去,在我们可以这些网关的前缀都为“AS”,即确定的静态路由,而在第二排可以看到蓝色一行,他也是一个缺省网关,但因为一个路由表中只能存在一个缺省网关,所有前缀为“S”即静态但不确定的网关,被认为位非法的。
如果当202.112.12.12.11网关断线,则10.200.15.1会自动启用,变为缺省路由,实现现在的切换,如下:
当202.112.12.11断线后,check-gateway在10s一个周期后探测到,并将10.200.15.11设置为缺省路由,如果202.112.12.11正常后,系统也将会将202.112.12.11设置为缺省路由,因为他是先于10.200.15.1添加入路由表中。
源地址双线应用案例
这是一个典型的通过一个路由器并使用两条ISP线路接入的环境(比如都是两条电线的ADSL或者LAN接入):
当然,你可以选择负载均衡!
这里有多种方法可以选择,只是根据你的环境,选择最适合你解决方案。
基于用户端IP地址的策略路由
如果你有很多的主机地址,你可以通过IP地址将他们分组。
这时,指定源IP地址,发送的传输通过ISP1或者ISP2的网关出去。
让我们假设终端电脑的网络地址段为192.168.100.0/24,IP分配如下:
∙192.168.100.1-127分配到A组
∙192.168.100.128-253分配到B组
∙192.168.100.254路由器本地IP地址(即内网的网关)
现在,我们通过子网划分的方式,将终端电脑进行分组:
∙A组为192.168.100.0/25,地址范围:
192.168.100.0-127
∙B组为192.168.100.128/25,地址范围:
192.168.100.128-255
如果你不能理解,请你查阅TCP/IP的相关教材或通过网上查找相关的子网划分资料!
我们需要添加两个ipfirewallmangle的规则,标记来至A组和B组终端电脑的数据包。
定义A组:
链表为chain=prerouting,源地址:
src-address=192.168.100.0/25
操作为Action=markrouting并定义新的路由标记GroupA.
最好做一个注释,以便以后便于你自己或者别人查看和处理。
定义B组:
链表为chain=prerouting,源地址:
src-address=192.168.100.128/25
操作为Action=markrouting并定义新的路由标记GroupB
所有来至终端电脑的IP传输都通过路由标记为GroupA或者GroupB。
这样我们可以标记到路由表中(routingtable)。
下面,我们需要定义两个默认路给相应的路由标记和网关:
到这里,如果你没有对路由器做NAT的伪装,请在/ipfirewallnat里添加src-Address=192.168.100.0/24action=masquerade,在终端电脑上测试一下跟踪路由是否正确定义两个分组的默认路由:
A组测试如下情况:
C:
\>tracert-d8.8.8.8
Tracingrouteto8.8.8.8overamaximumof30hops
12ms2ms2ms192.168.100.254
210ms4ms3ms10.1.0.1
...
B组测试如下情况:
C:
\>tracert-d8.8.8.8
Tracingrouteto8.8.8.8overamaximumof30hops
12ms2ms2ms192.168.100.254
210ms4ms3ms10.5.8.1
...
如何做端口的策略路由:
MikroTikRouterOS可以支持多种策略路由,如我们常见的源地址、目标地址,同样支持端口的策略路由,多种规则可以根据用户情况配合使用,如下图:
现在我们通过下面的图解一步步实现端口的策略路由:
我们有两个ISP接入的线路,一个是WAN1:
211.162.172.23,一个是WAN2:
218.112.109.27(地址为假设),我们让默认的数据通过WAN1,让访问网页的数据通过WAN2。
现在我们定义访问网页的端口,访问网页的端口是TCP80端口,我们进入/ipfirewallmangle中做数据标记
首先我们标记80端口的连接,标记名为“http”然后我们从这些连接中提取我们想要的数据:
之后我们从标记中提取路由标记,命名为“web”,因为我们在前面的连接标记中做过了passthrough的设置,在这里就不用在重复设置。
然后我们进入/iproute,配置路由我们让标记好的80端口路由去WAN2的线路:
在这里,我们也可以通过/iprouterule来定义端口的规则:
让定义的web标记在一次回到web路由表中去查找网关。
透明传输整形器(TransparentTrafficShaper)
这个事例将介绍如何配置一个透明传输整形器。
透明整形器是建立在一个桥上,能区分和优先考虑什么样的传输通过。
现在考虑下面的网络拓扑:
在这里配置一组队列限制,一个客户端的总的通过量和三个子队列(HTTP、P2P和其他的传输数据),HTTP传输将优先在其他传输之上。
快速配置
配置代码(可以复制到MikroTikRouterOS执行):
/interfacebridge
addname="bridge1"
/interfacebridgeport
addinterface=ether2bridge=bridge1
addinterface=ether3bridge=bridge1
/ipfirewallmangle
addchain=preroutingprotocol=tcpdst-port=80action=mark-connection\
new-connection-mark=http_connpassthrough=yes
addchain=preroutingconnection-mark=http_connaction=mark-packet\
new-packet-mark=httppassthrough=no
addchain=preroutingp2p=all-p2paction=mark-connection\
new-connection-mark=p2p_connpassthrough=yes
addchain=preroutingconnection-mark=p2p_connaction=mark-packet\
new-packet-mark=p2ppassthrough=no
addchain=preroutingaction=mark-connectionnew-connection-mark=other_conn\
passthrough=yes
addchain=preroutingconnection-mark=other_connaction=mark-packet\
new-packet-mark=otherpassthrough=no
/queuesimple
addname="main"target-addresses=10.0.0.12/32max-limit=256000/512000
addname="http"parent=mainpacket-marks=httpmax-limit=240000/500000
addname="p2p"parent=mainpacket-marks=p2pmax-limit=64000/64000
addname="other"parent=mainpacket-marks=othermax-limit=128000/128000
分析
下面将解释每段代码的具体实现:
Bridge
/interfacebridge
addname="bridge1"
/interfacebridgeport
addinterface=ether2bridge=bridge1
addinterface=ether3bridge=bridge1
建立一个新的bridge接口,并分配2个以太网卡给他:
这样可以在两个网络间实现透明桥的功能
Mangle
/ipfirewallmangle
addchain=preroutingprotocol=tcpdst-port=80action=mark-connection\
new-connection-mark=http_connpassthrough=yes
addchain=preroutingconnection-mark=http_connaction=mark-packet\
new-packet-mark=httppassthrough=no
所有符合TCP端口80及HTTP协议传输的数据,将标记为数据包标记为http,注意:
第一条规则设置为passthrough=yes,第二条为passthrough=no.
/ipfirewallmangle
addchain=preroutingp2p=all-p2paction=mark-connection\
new-connection-mark=p2p_connpassthrough=yes
addchain=preroutingconnection-mark=p2p_connaction=mark-packet\
new-packet-mark=p2ppassthrough=no
addchain=preroutingaction=mark-connectionnew-connection-mark=other_conn\
passthrough=yes
addchain=preroutingconnection-mark=other_connaction=mark-packet\
new-packet-mark=otherpassthrough=no
同上面所述,P2P传输被标记为数据包标记p2p并将剩下的传输标记为other.
Queues
/queuesimple
addname="main"target-addresses=10.0.0.12/32max-limit=256000/512000
创建一个队列,限制所有聪客户端来的流量传输为(指定客户端的target-address)256k/512k.
/queuesimple
addname="http"parent=mainpacket-marks=httpmax-limit=240000/500000
addname="p2p"parent=mainpacket-marks=p2pmax-limit=64000/64000
addname="other"parent=mainpacket-marks=othermax-limit=128000/128000
所有子队列排列入main父系,因此所有的带宽流量不会超过指定的main队列注意:
http队列优先级高于其他队列,级HTTP流量将优先考虑。
如果配置到电信网通的流量控制
对于电信和网通的IP地址段是已知,那么我们可以通过通过地址标记来实现对这些地址的流量控制,首先我们将电信和网通的地址段导入RouterOS的address-list中(可以在下载到)
通过import命令,导入地址列表:
导入后我们可以在/ipfirewalladdress-list中找到:
配置数据标记mangle
进入/ipfirewallmangle设置,这里我们定义访问电信的流量控制,我们的内网地址段为192.168.0.0/24,所有这里我们配置源地址src-address=192.168.0.0/24。
在mangle中先标记连接,然后在从连接中提取数据包:
定义标记类型:
源代码:
/ipfirewallmangle
addchain=preroutingsrc-address=192.168.0.0/24dst-address-list=Telecomaction=mark-connectionnew-connection-mark=Telecompassthrough=yescomment=""disabled=no
现在从标记的连接Telecom中提取数据包:
源代码:
/ipfirewallmangle
addchain=preroutingconnection-mark=Telecomaction=mark-packetnew-packet-mark=TELpassthrough=nocomment=""disabled=no
配置simplequeue
现在我们进入/queuesimple对列中配置流控规则,在这里我们把到电信的带宽控制在1M上行和2M下行
源代码:
/queuesimple
addname="telecom"dst-address=0.0.0.0/0interface=allparent=nonepacket-marks=TELdirection=bothpriority=8queue=default-small/default-smalllimit-at=0/0max-limit=1000000/2000000total-queue=default-smalldisabled=no
这样对电信的带宽控制便完成,控制网通带宽同样的
如何实现RouterOS的动态流量控制
在局域网中因为网络带宽的问题,需要对网络流做控制,但又因为做固定的流量控制的时候,会造成在上网空闲时候带宽的浪费,这里我们可以同RouterOS的PCQ算法完成对内部局域网流量的动态分配,如下图所示:
通过上图,我们可以看到当PCQ的速率设定为128k的时候,平均每个用户将会得到同样的带宽128k,当上网高峰期的时候PCQ才会做二次流量分配,如果PCQ的速率在开始就设定为0k,这样在一个用户的时候就可以得到全部带宽,之后是2个用户平均分配,依次类推,但最后带宽会控制在73k的范围内,控制最小使用带宽,保证用户正常使用。
首先进入QueueType中配置PCQ的上行和下行:
在配置PCQ的速率的时候将rate=0,即每个用户不用配置流量速率,下面是down即下行的配置:
同样在上行配置如下:
在配置好QueueType后我们进入SimpleQueue中配置流量控制规则,这里我们的总出口带宽假设为1M,上行带宽为512k,内网地址段为192.168.10.0/24:
接下来配置Interface和QueueType,选择上行和下行的PCQ类型分别为Up和Down:
这样PCQ的动态流量控制就设定完成了,这样就能实现根据用户数占用流量来动态分配带宽,这样能达到带宽的有效分配和利用。
PPTP借线操作
假设一个接入点A有电信和网通两条线路,并做了以网通为主,电信为静态路由策略设置。
而另一个接入点B接入了网通的线路,并且想通过PPTP隧道的方式借用接入点A的电信线路,现在看下面的图例
根据上面的案例,接入点A和B他们都是共同使用了网通的线路,这里网通两个点之间的延迟小于10ms,网络延迟小才能保证足够的网速给B做电信的访问。
首先建立从接入点B到A的PPTP隧道,我们在接入点A设置PPTP服务器,在接入点B设置客户端。
这里接入点A的网通IP地址为202.112.12.10,B网通地址为202.112.12.12。
配置PPPTP-Server
在接入点A启用PPTP