关于RouterOS使用脚本判断无线网卡信号切换漫游
RouterOS提供了灵活的配置,特别是script脚本,本身很多功能配置是相互独立的,但通过脚本一结合就完成一个功能去触发另外一个功能!最近有人问了10多年前的一个无线漫游问题,如何判断station无线网卡的信号强度,来切换AP基站。
虽然现在RouterOS有一个漫游选项station-roaming,但不能按照自己需要的信号强度来切换,而且station-roaming需要定期进行背景扫描,会增加通信延迟。早期为了station能在多个AP间切换是通过判断信号强度低于一个阀门值,就执行删除当前连接AP,让station重新扫描信号更强的连接,当然这个肯定会出现1-2个丢包。使用这种RouterOS组建的无线漫游网络,大多是移动环境,例如驾校监控和区域移动环境监测,还有一些特别的移动信号采集等。
AP和station的配置是桥接,开启rstp,并设置rstp优先级,station在两个AP漫游,station需要通脚本来判断连接AP的信号阀门值,一个简单的网络组成如下,AP1,AP2和Station都是单无线网卡:
下面的配置非常简单,仅供参考
AP1配置
bridge配置
/interface bridge add name=bridge1 priority=0x6000 protocol-mode=rstp /interface bridge port add bridge=bridge1 interface=ether1
无线网卡配置
/interface wireless set [ find default-name=wlan1 ] area=mik band=2ghz-b/g/n channel-width=20/40mh disabled=no mode=ap-bridge radio-name=AP1 ssid=mik1 wds-default-bridg bridge1 wds-mode=dynamic-mesh wireless-protocol=802.11
AP2配置
bridge配置
/interface bridge add name=bridge1 priority=0x7000 protocol-mode=rstp /interface bridge port add bridge=bridge1 interface=ether1
无线网卡配置
/interface wireless set [ find default-name=wlan1 ] area=mik band=2ghz-b/g/n channel-width=20/40mh disabled=no mode=ap-bridge radio-name=AP2 ssid=mik1 wds-default-bridg bridge1 wds-mode=dynamic-mesh wireless-protocol=802.11
Station配置:
bridge配置
/interface bridge add name=bridge1 priority=0x8000 protocol-mode=rstp /interface bridge port add bridge=bridge1 interface=ether1
无线网卡配置
/interface wireless set [ find default-name=wlan1 ] area=mik band=2ghz-b/g/n disabled=no \ mode=station-wds radio-name=Client ssid=mik1 wds-default-bridge=bridge1 \ wds-mode=dynamic-mesh wireless-protocol=802.11
下面的脚本是一个非常简单的判断信号强度,Station设备剔除掉wlan1下连接的AP,此脚本只能判断连接一个AP信号,当信号强度低于-70就剔除
:loacl signal :set signal [/interface wireless registration-table get [/interface wireless registration-table find interface="wlan1"] signal-strength ] :set signal [:pick $signal 0 [:find $signal "d" ]] :if ($signal < -70) do={ /interface wireless registration-table remove [find interface=wlan1] }
脚本说明:
创建一个局部变量signal:
:loacl signal
从registration-table找到接口为wlan1的连接,并将信号强度赋值给signal
:set signal [/interface wireless registration-table get [/interface wireless registration-table find interface="wlan1"] signal-strength ]
signal取值带有字符,只取其中数字部分
:set signal [:pick $signal 0 [:find $signal "d" ]]
如果siginal小于-70,就剔除接口为wlan1的连接
:if ($signal < -70) do={ /interface wireless registration-table remove [find interface=wlan1] }
以上脚本在Station的计划任务添加,每间隔2秒执行一次,winbox配置如下:
关于station-roaming的配置可以参考 RouterOS Station Roaming无线漫游
这个方案是非常简单应用,如果在移动应用中,组网方式也决定了你的无线配置,例如station可以配置双网卡,一个对前一个对后,来来判断前后连接AP的信号强度,利用rstp协议,做不用剔除连接AP,完成流量从一个AP切换到另外一个。