Ниже представлен готовый Markdown-код для статьи в Wiki.js. Он включает форматирование схем, списков, кода и интерфейсных элементов для удобного чтения.
[ DHCP-сервер / Провайдер ]
|
[ Неуправляемый Switch 1 (Шкаф связи) ]
|-------------------------------------\
| (ether1) |
[ MikroTik AP1 ] |
IP: DHCP + 192.168.99.1 |
| (wlan1 - Защита от шторма) | [ Основной медный кабель ]
( РАДИО ) |
| (wlan1 - Выключается скриптом) |
[ MikroTik AP2 ] |
IP: DHCP + 192.168.99.2 |
| (ether1) |
|-------------------------------------/
[ Неуправляемый Switch 2 (Шкаф управления) ]
|
[ PC Linux ]
bridge1, добавь в него порты ether1 и wlan1.bridge1.192.168.99.1/30 на bridge1.bridge (SSID: ZavodEkranov, пароль: SN2008@+).bridge1, добавь в него ether1.station-bridge и не отключай сам интерфейс wlan1.wlan1 в bridge1, задай ему комментарий BACKUP_RADIO и сразу отключи этот порт (disabled=yes). Радиолинк будет висеть в воздухе, но трафик через него не пойдет.192.168.99.2/30 на bridge1 и включи DHCP-клиент.FailoverScript и планировщик (Scheduler), который будет запускать его каждые 10 секунд.Внимание: Скопируй блоки целиком и вставь в New Terminal.
Команды для AP1 (Шкаф связи):
/interface bridge add name=bridge1 protocol-mode=rstp
/interface bridge port add bridge=bridge1 interface=ether1
/interface bridge port add bridge=bridge1 interface=wlan1
/ip dhcp-client add disabled=no interface=bridge1
/ip address add address=192.168.99.1/30 interface=bridge1
/interface wireless security-profiles add authentication-types=wpa2-psk mode=dynamic-keys name=PTP_Profile wpa2-pre-shared-key="SN2008@+"
/interface wireless set [ find default-name=wlan1 ] band=5ghz-a/n/ac channel-width=20/40/80mhz-Ceee disabled=no hide-ssid=yes mode=bridge security-profile=PTP_Profile ssid="ZavodEkranov" wireless-protocol=802.11
/interface bridge filter add action=accept chain=forward comment="Storm Control" in-interface=wlan1 limit=50/1s,50 packet-type=broadcast
/interface bridge filter add action=drop chain=forward in-interface=wlan1 packet-type=broadcast
Команды для AP2 (Шкаф управления):
/interface bridge add name=bridge1 protocol-mode=rstp
/interface bridge port add bridge=bridge1 interface=ether1
/interface bridge port add bridge=bridge1 comment=BACKUP_RADIO disabled=yes interface=wlan1
/ip dhcp-client add disabled=no interface=bridge1
/ip address add address=192.168.99.2/30 interface=bridge1
/interface wireless security-profiles add authentication-types=wpa2-psk mode=dynamic-keys name=PTP_Profile wpa2-pre-shared-key="SN2008@+"
/interface wireless set [ find default-name=wlan1 ] band=5ghz-a/n/ac channel-width=20/40/80mhz-Ceee disabled=no mode=station-bridge security-profile=PTP_Profile ssid="ZavodEkranov" wireless-protocol=802.11
/system script add name=FailoverScript policy=read,write,policy,test source=":global copperDown\r\
\n:global testTimer\r\
\n\r\
\n:if ([:typeof \$copperDown] = \"nothing\") do={ :set copperDown false }\r\
\n:if ([:typeof \$testTimer] = \"nothing\") do={ :set testTimer 0 }\r\
\n\r\
\n:if (\$copperDown = false) do={\r\
\n :local pingCount [/ping 192.168.99.1 count=3]\r\
\n :if (\$pingCount = 0) do={\r\
\n :log warning \"COPPER DOWN: Enabling Backup Radio\"\r\
\n /interface bridge port set [find comment=\"BACKUP_RADIO\"] disabled=no\r\
\n :set copperDown true\r\
\n :set testTimer 0\r\
\n }\r\
\n} else={\r\
\n :set testTimer (\$testTimer + 10)\r\
\n :if (\$testTimer >= 900) do={\r\
\n :log info \"TESTING COPPER: Disabling Radio for 5s...\"\r\
\n /interface bridge port set [find comment=\"BACKUP_RADIO\"] disabled=yes\r\
\n :delay 5s\r\
\n :local testPing [/ping 192.168.99.1 count=3]\r\
\n :if (\$testPing > 0) do={\r\
\n :log warning \"COPPER UP: Keeping Radio Disabled\"\r\
\n :set copperDown false\r\
\n } else={\r\
\n :log info \"COPPER STILL DOWN: Re-enabling Radio\"\r\
\n /interface bridge port set [find comment=\"BACKUP_RADIO\"] disabled=no\r\
\n :set testTimer 0\r\
\n }\r\
\n }\r\
\n}"
/system scheduler add interval=10s name=RunFailover on-event=FailoverScript policy=read,write,policy,test
FailoverScript должен иметь счетчик Run Count, который увеличивается каждые 10 секунд.wlan1 (с комментарием BACKUP_RADIO) должен быть выключен (серый цвет).COPPER DOWN: Enabling Backup Radio. Порт wlan1 включится, связь восстановится по радио.TESTING COPPER.... Радио отключится. Скрипт сделает паузу 5 секунд (чтобы свитчи подняли линк), проверит пинг по меди и напишет COPPER UP: Keeping Radio Disabled. Трафик останется на медном кабеле.Логика скрипта гарантирует 15-минутный тайм-аут (testTimer >= 900). Даже если медный порт моргает каждую секунду, скрипт переключит трафик на стабильное радио и не будет пытаться вернуться обратно на "искрящий" порт чаще, чем раз в 15 минут.
Принудительное отключение радио перед проверкой полностью исключает встречу пакетов в L2-кольце.
Если скрипт ведет себя не так, как ожидается, или нужно жестко зафиксировать работу только по меди:
RunFailover (крестиком).wlan1 (крестиком).После этого сеть будет работать как обычный проводной линк, автоматика выключится.