BakaCai
RouterOS v7.5 新版Netwatch使用技巧 [根据ping和丢包率切换路由]

access_time
brush 806个字
whatshot 4724 ℃

从RouterOS v7.4beta 4开始的新版Netwatch, 增加了 http/tcp-conn/icmp 三种检测方式.

虽然到了7.6rc2依然存在一些Bug, 比如 ICMP模式下 RTT.MAX 无论你设置多少ms, 状态永远是Down.
不过基本上可以用了, 官方还出了个教学视频, 主要讲解http模式的用法 :
https://www.youtube.com/watch?v=qK0aUo4B5Tc

既然他讲解完了http模式, 我就来讲解一下"更贴近生活"的ICMP模式吧 ~

由于国情特殊, 国际出口会随机出现拥堵, 很多小伙伴都准备了多条海外线路. 梦想着有一种路由器能用非常简单的方式, 根据ping和丢包率全自动化的切换路由.

传统的方式有两种 :
1 OSPF + BFD - 只能在丢包产生时切换路由, 并不能探测延迟.新手非常不友好.
2 Babel - 欢迎加入DN42大家庭, 开始你的奇幻路由之旅...

不过以上两种方式比较正规, 采用动态路由协议属于企业级方案. 用Netwatch+Script只能算野路子, 好在这个方法人人都能学会.

接下来根据两个场景我们分别来学习一下RouterOS被人遗忘的好功能Netwatch和ssh-exec ~


Scenario 1

Rosv7上有两条Wireguard隧道一条到日本一条到韩国. 日本的线路偶尔会爆炸, 韩国的非常稳定但是流量费很贵, 意思就是非必要不走韩国.
这个场景针对新手用户, 提供了从创建路由表分流到配置脚本的全过程.

准备工作 :
RouterOS v7 下 /routing table 相当于 RouterOS v6下 /ip route 中的Routing Mark .
先创建2个table , 务必选上FIB
1table.png
创建2条Route , 选择对应table, gateway写interface名
2route.png
创建mangle规则mark-routing,记得写一个comment, 比如japanip 用于find命令.
3mangle.png

创建脚本 :
4script.png
创建2个脚本, 分别用于把路由切到韩国, 切回日本.

/ip firewall mangle set [find comment=japanip] new-routing-mark=wgkorea
/ip firewall mangle set [find comment=japanip] new-routing-mark=wgjapan

脚本名就暂定为tokorea 和 tojapan 接下来 Netwatch里要用到 .

设置Netwatch :
Netwatch 选用日本隧道的公网IP作为监测点, 假定IP是 45.32.66.1, Thr.Avg 设定到60ms.
新版Netwatch默认每10秒间隔, 连ping10次目标IP, 每次ping间隔0.2秒.
当然你还能再添加一些条件比如 Thr. Loss Percent .
切记这些条件之间的关系是"or"不是"and", 满足一项即触发"Down"状态.
在这10次当中, 如果平均ping值超过了之前设定的60ms 即判定为Down.
5netwatch.png
接下来设置在down&up的时候要运行的脚本
6run.png
这样在到日本线路延迟超过60ms的之后自动切换路由到韩国. 等到延迟低于60ms后自动切换回日本.


Scenario 2

RouterOS 需要根据延迟对远端Linux服务器进行一定的操作.
从RouterOS 6.45开始新增指令"ssh-exec", 也就是发送ssh指令到指定ip, 例如:

/system ssh-exec address=xxx.xxx.xxx.xxx user=root command="wg-quick down wg1"

出于安全原因, RouterOS是不允许直接在命令行里写明文密码的.
使用这个功能之前, 必须把服务器对端的privatekey导入到RouterOS中.
导入Key的官方教程 :
https://wiki.mikrotik.com/wiki/Use_SSH_to_execute_commands_(public/private_key_login)
使用winbox会更简单一点, 直接将key上传到winbox.
7key.png
user保持默认的admin, 如果被控端有多台Linux, 请使用同样的钥匙对.
做好配对工作之后我们可以先在RouterOS cli里做一下测试, 确认能正常登录:
8cli.png
一切正常cli会如图所示返回结果.

之后将指令写在Script或者Scheduler中与Netwatch的UP和Down相结合...那真是有无限的可能无限的组合, 你可以充分发挥自己的想象力...


Bakacai
v1.1
2024/09/07

#如无特别声明,该文章均为 BakaCai 原创,转载请遵循 署名-非商业性使用 4.0 国际(CC BY-NC 4.0) 协议,即转载请注明文章来源。
#最后编辑时间为: 2024 年 09 月 07 日





关于 DreamCat

主题名称:DreamCat | 版本:2.8.221001(LTS)

主题开发:HanFengA7 | TeddyNight | Dev-Leo | CornWorld | WhiteBearcn | DFFZMXJ

Designed by HanFengA7 Power by Typecho

Copyright © 2015-2024 by LychApe All rights reserved!

加我的QQ
加我的微博
加我的支付宝
加我的微信