脚本1
改自 官方脚本
https://wiki.mikrotik.com/wiki/Manual:PCC
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66
|
重置 ROS [admin@MikroTik] > /system reset-configuration
设置 IP 供 SSH 访问 /ip address add address=192.168.88.100/24 interface=LAN network=192.168.88.0
开始: /interface ethernet set [ find mac-address=00:88:3A:B8:33:C8 ] name=LAN set [ find mac-address=00:88:3A:B8:33:C9 ] name=ISP1 set [ find mac-address=00:88:3A:B8:33:CA ] name=ISP2
/ip dhcp-client add add-default-route=no dhcp-options=hostname,clientid disabled=no interface=ISP1 add add-default-route=no dhcp-options=hostname,clientid disabled=no interface=ISP2
#### 设置DHCP (非必须) #### /ip pool add name=dhcp_pool1 ranges=192.168.88.200-192.168.88.254
/ip dhcp-server add address-pool=dhcp_pool1 disabled=no interface=LAN name=dhcp1
/ip dhcp-server lease add address=192.168.88.99 mac-address=8C:89:A5:1D:FA:DC server=dhcp1 add address=192.168.88.97 mac-address=52:54:00:6B:92:2A server=dhcp1 add address=192.168.88.101 mac-address=F0:76:1C:38:5A:64 server=dhcp1 add address=192.168.88.105 mac-address=52:54:00:F6:58:9D server=dhcp1
/ip dhcp-server network add address=192.168.88.0/24 dns-server=192.168.88.1 gateway=192.168.88.1 ###########################
/ip dns set allow-remote-requests=yes
/ip firewall mangle add action=accept chain=prerouting dst-address=192.168.1.0/24 in-interface=LAN add action=accept chain=prerouting dst-address=192.168.188.0/24 in-interface=LAN
add chain=prerouting in-interface=ISP1 connection-mark=no-mark action=mark-connection new-connection-mark=ISP1_conn add chain=prerouting in-interface=ISP2 connection-mark=no-mark action=mark-connection new-connection-mark=ISP2_conn add chain=prerouting in-interface=LAN connection-mark=no-mark dst-address-type=!local per-connection-classifier=both-addresses:2/0 action=mark-connection new-connection-mark=ISP1_conn add chain=prerouting in-interface=LAN connection-mark=no-mark dst-address-type=!local per-connection-classifier=both-addresses:2/1 action=mark-connection new-connection-mark=ISP2_conn
add chain=prerouting connection-mark=ISP1_conn in-interface=LAN action=mark-routing new-routing-mark=to_ISP1 add chain=prerouting connection-mark=ISP2_conn in-interface=LAN action=mark-routing new-routing-mark=to_ISP2
add chain=output connection-mark=ISP1_conn action=mark-routing new-routing-mark=to_ISP1 add chain=output connection-mark=ISP2_conn action=mark-routing new-routing-mark=to_ISP2
/ ip route add dst-address=0.0.0.0/0 gateway=192.168.1.1 routing-mark=to_ISP1 check-gateway=ping add dst-address=0.0.0.0/0 gateway=192.168.188.253 routing-mark=to_ISP2 check-gateway=ping add dst-address=0.0.0.0/0 gateway=192.168.1.1 distance=1 check-gateway=ping add dst-address=0.0.0.0/0 gateway=192.168.188.253 distance=2 check-gateway=ping
/ ip firewall nat add chain=srcnat out-interface=ISP1 action=masquerade add chain=srcnat out-interface=ISP2 action=masquerade
|
多线负载测试:

PCC 掉线检测 参数切换 脚本(在线方式: 基于ping 远程主机IP)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71
| 版本1 ################################################################# { :local str {"ISP1"; "ISP2"}; :local GatewayNum [:len $str]; :local GatewayOnline 0; :local GatewayIndex 0; :local NameServer 180.76.76.76;
# get online foreach i in=$str do={ if ([/ping $NameServer interface=$i interval=1 count=2] != 0) do={ set $GatewayOnline ($GatewayOnline+1); } }
#disable or enable foreach i in=$str do={ if ([/ping $NameServer interface=$i interval=1 count=2] = 0) do={ #offline --> disable /ip firewall mangle set [find new-connection-mark=($i."_conn")] disable=yes /ip firewall mangle set [find new-routing-mark=("to_".$i)] disable=yes } else={ #online --> enable /ip firewall mangle set [find new-connection-mark=($i."_conn") per-connection-classifier~("both-addresses")] per-connection-classifier=("both-addresses:".$GatewayOnline."/".$GatewayIndex) disable=no /ip firewall mangle set [find new-connection-mark=($i."_conn")] disable=no /ip firewall mangle set [find new-routing-mark=("to_".$i)] disable=no set $GatewayIndex ($GatewayIndex+1); } } } #################################################################
版本2. 避免频繁修改PCC参数. ################################################################# { :local str {"ISP1"; "ISP2"}; :local GatewayNum [:len $str]; :local GatewayOnline 0; :local GatewayIndex 0; :local NameServer 180.76.76.76;
# get online foreach i in=$str do={ if ([/ping $NameServer interface=$i interval=1 count=2] != 0) do={ set $GatewayOnline ($GatewayOnline+1); } }
# good checking if ($GatewayNum=$GatewayOnline && [:len [/ip firewall mangle find disabled=no per-connection-classifier~"both-addresses"]]=$GatewayNum) do={ :return 0 }
#disable or enable foreach i in=$str do={ if ([/ping $NameServer interface=$i interval=1 count=2] = 0) do={ #offline --> disable /ip firewall mangle set [find new-connection-mark=($i."_conn")] disable=yes /ip firewall mangle set [find new-routing-mark=("to_".$i)] disable=yes } else={ #online --> enable /ip firewall mangle set [find new-connection-mark=($i."_conn") per-connection-classifier~("both-addresses")] per-connection-classifier=("both-addresses:".$GatewayOnline."/".$GatewayIndex) disable=no /ip firewall mangle set [find new-connection-mark=($i."_conn")] disable=no /ip firewall mangle set [find new-routing-mark=("to_".$i)] disable=no set $GatewayIndex ($GatewayIndex+1); } } } #################################################################
|
添加自动执行脚本:
30 秒检查一次
点击:system -> scheduler -> add -> interval=30s name=PCC_check
内容: 粘贴进来
掉线测试方法(严谨法):
ISP1 --> 光纤 --> 光猫1(DHCP) --> 交换机1 --> mikrotik_ISP1(网口 通过DHCP获取ip地址)
ISP2 --> 光纤 --> 光猫2(DHCP) --> 交换机2 --> mikrotik_ISP2(网口 通过DHCP获取ip地址)
为什么中间引入交换机?
为了方便制造网路断开, 直接拔光纤不太合适。光纤插口太脆弱,不折腾(因为光纤断了我不会熔接)。
所以要把从光猫 到 mikrotik的网口 线路断开。
直接拔网线从光猫接到mikrotik的网口不可以吗,中间引入交换机岂不是多此一举?
中间引入交换机是为了保持链路link信号, 让mikrotik以为网口一致存在, 不要让网卡down掉。
如果网卡down掉, mikrotik会触发其他机制, 影响评测.
测试用例1:
只拔掉 光猫1(DHCP) --> 交换机1 的网线,执行脚本, PC机执行网速测试。
预期: ISP1失活,跑满ISP2的带宽。
测试用例2:
只拔掉 光猫2(DHCP) --> 交换机2 的网线, 执行脚本, PC机执行网速测试。
预期: ISP2失活,跑满ISP1的带宽。
测试用例3:
拔掉 光猫1(DHCP) --> 交换机1 的网线,执行脚本, PC机执行网速测试。
拔掉 光猫2(DHCP) --> 交换机2 的网线,执行脚本, PC机执行网速测试。
预期:ISP1失活, ISP2失活. 无法通信。
测试用例1:
恢复 光猫1(DHCP) --> 交换机1 的网线,执行脚本, PC机执行网速测试。
恢复 光猫1(DHCP) --> 交换机1 的网线,执行脚本, PC机执行网速测试。
预期:ISP1激活, ISP2激活. 带宽叠加。