Сброс зависших соединений mikrotik

Сброс зависших соединений mikrotik

Бесплатный чек-лист
по настройке RouterOS
на 28 пунктов

Сброс зависших соединений при переключ на резервный канал

Здравствуйте всем.
Основа http://mikrotik.ru/forum/posting.php?mo . =15&t=3938
«Переключение реализовано через Distance в роутах. «

Надо сделать так, пинговать только основной канал на несколько ресурсов и если все они не пингуются только! на одном канале, то выполнить команду по сбросу зависших соединений и выполнить когда соединение восстановилось

Я так понял пинги одновременно на все это так?
:local PingTargets <194.87.0.50; 87.250.250.203; 8.8.8.8; 93.158.134.11; шлюз провайдера>
Иногда у провайдера «заканчиваются деньги на интернет» по этому шлюз доступен

Сброс зависших соединений
foreach i in=[/ip firewall connection find] do=

Проблема в том, что sip телефон не подключается и вроде из-за этого ovpn на удалённой точке не хочет подключаться к резервному каналу. Хотя на другой точке проходит нормально.
Прошивка 5.25

Пишите свои варианты.

Это просто массив

foreach i in=[/ip firewall connection find] do=

с большой долей вероятности не отработает и вылетит с ошибкой но в этом методе можно прикрутить обработку ошибки, да и зачем грохать все соединения сразу то.

Опять же убить все соединения можно проще:
/ip firewall connection remove [find ]

Нашёл скрипт, немного подредактировал.
:log info «*************************************»
:log info » vvod peremennih»
:log info «*************************************»
#Glavniy interface name
:local MainIf «ISP1»

#shluz ISP1
:local PingTarget1 194.87.0.50

#ya.ru
:local PingTarget2 87.250.250.203

#google dns
:local PingTarget3 8.8.8.8
:log info «******* servers***********************»

#Check main internet connection
:local MainIfInetOk false;

:log info «pinguem internet»
:log info «******* ping***********************»
:local PingResult1 [/ping $PingTarget1 count=$PingCount interface=$MainIf]
:log info «******* ping $PingTarget1***********************»
:local PingResult2 [/ping $PingTarget2 count=$PingCount interface=$MainIf]
:log info «******* ping $PingTarget2***********************»
:local PingResult3 [/ping $PingTarget3 count=$PingCount interface=$MainIf]
:log info «******* ping $PingTarget3***********************»

:set MainIfInetOk (($PingResult1 + $PingResult2 + $PingResult3) >= (2 * $PingCount))

:log info «test internet $MainIfInetOk»
:if ($MainIfInetOk = false) do=<
/log error «Internet upal»
#Glavniy interface upal
/ip firewall connection remove [find ] (надо что бы тут находил соединения привязанные к не действующему шлюзу и грохал)
>
:log info «******* ping***********************»
:put «MainIfInetOk=$MainIfInetOk»

:if ($MainIfInetOk = true) do=<
/ip firewall connection remove [find ] (надо что бы тут находил соединения привязанные к не действующему шлюзу и грохал)
:log info «Internet OK»
>

Ну может кто подсказать строчку — находил соединения привязанные к не действующему шлюзу и грохал их?
И можно ли скрипт привязать к событию, что бы не каждую минуту включал скрипт?

Кто в скриптах разбирается, взгляните верно написал или где ошибка?
3 действия:
1 пингуем на главном интерфейсе ресурсы и пока пинг есть, то скрипт не выполняем
2 Если пинга нет, выполнить сброс «зависших» соединений (:foreach i in=[/ip firewall connection find assured=no] do= <
/ip firewall connection remove $i)
3 Если пинг появился то снова выполнить сброс соединений и ждать пока пинг пропадёт.

local ISPVT vt
:local PingCount 1
:local PingTargets <194.87.0.50; 87.250.250.203; 8.8.8.8; 93.158.134.11; 8.8.4.4>
:local ISPVTInetOk false
:local VTPings 0
:foreach host in=$PingTargets do=<

: local res [/ping $host count=$PingCount interface=$ISPVT]

: set VTPings ($VTPings + $res)
>

:set ISPVTInetOk ($VTPings >= 1)

:if ($ISPVTInetOk = false) do=<
:foreach i in=[/ip firewall connection find assured=no] do= <
/ip firewall connection remove $i
>

:put «ISPVTInetOk=$ISPVTInetOk»
:if ($ISPVTInetOk = true) do=<
:foreach i in=[/ip firewall connection find assured=no] do= <
/ip firewall connection remove $i>
>

Добавлю скрипт по расписанию и пускай каждую минуту выполняет.
Заранее благодарю.

Источник

Сброс зависших соединений mikrotik

Mon Jun 07, 2010 10:18 pm

Читайте также:  Роутер huawei b311b 853

I am trying to write a script that will read IP addresses on an address list and then go to the /ip firewall connections and clear out those IP Addresses active connections.

The reason for this is, we have a couple of firewall rules that monitor the number of active sessions of an end user, if they violate this limit they are then blocked and all HTTP traffic is redirected to a web page letting them know that they are blocked for a specific time. This works fine, but there are times that I am noticing that they either continue to pass traffic because of the established connections, or when the time expires they are blocked again because of their open TCP connections still being «open» in the router.

I was hoping someone could give me some pointers on the best way to do this.

The first problem that I am having, is that it seams I am unable to delete connections based off of the IP of the end user. This is the string I am trying to use for that.

This works fine if i search for a connection mark or other things, but apparently not the IP address.

The second issue I am having is putting the address list into an array and reading out the IP addresses from that array to be used in clearing out the connections.

Any help in getting this script going would be greatly appreciated. Thanks.

Re: Script to clear out connections

Tue Jun 08, 2010 8:08 am

thank you for reporting it, we will look into problem.

try to use quotation and connection marks to match right connections.

Re: Script to clear out connections

Tue Jun 08, 2010 8:26 am

/ip firewall connection remove [/ip firewall connection find scr-address

Re: Script to clear out connections

Tue Jun 08, 2010 4:57 pm

thank you for reporting it, we will look into problem.

try to use quotation and connection marks to match right connections.

/ip firewall connection remove [/ip firewall connection find scr-address

Tried it with the same results.

Once that’s taken care of, I just need to figure out how to pull the addresses from the address list and use that to clear out the connections .

Re: Script to clear out connections

Tue Jun 08, 2010 7:56 pm

do you get any errors when you run that command?

:put [:len [/ip firewall connection find scr-address

Re: Script to clear out connections

Tue Jun 08, 2010 8:18 pm

do you get any errors when you run that command?

:put [:len [/ip firewall connection find scr-address

No errors when the command is run. It accepts it, just nothing happens.

Running the command returns a number of 0. I’m looking at Winbox and there are a few open sessions for my test machine, so I’m assuming it should return some number.

Источник

Сброс зависших соединений mikrotik

Секреты настройки
файрвола через

Как сбрасывать подвисшие connections?

Правила форума
Как правильно оформить вопрос.
Прежде чем начать настройку роутера, представьте, как это работает. Попробуйте почитать статьи об устройстве интернет-сетей. Убедитесь, что всё, что Вы задумали выполнимо вообще и на данном оборудовании в частности.
Не нужно изначально строить Наполеоновских планов. Попробуйте настроить простейшую конфигурацию, а усложнения добавлять в случае успеха постепенно.
Пожалуйста, не игнорируйте правила русского языка. Отсутствие знаков препинания и неграмотность автора топика для многих гуру достаточный повод проигнорировать топик вообще.

1. Назовите технологию подключения (динамический DHCP, L2TP, PPTP или что-то иное)
2. Изучите темку «Действия до настройки роутера».
viewtopic.php?f=15&t=2083
3. Настройте согласно выбранного Вами мануала
4. Дочитайте мануал до конца и без пропусков, в 70% случаев люди просто не до конца читают статью и пропускают важные моменты.
5. Если не получается, в Winbox открываем терминал и вбиваем там /export hide-sensitive. Результат в топик под кат, интимные подробности типа личных IP изменить на другие, пароль забить звездочками.
6. Нарисуйте Вашу сеть, рисунок (схему) сюда. На словах может быть одно, в действительности другое.

Читайте также:  Роутер для модема huawei e3272

ip firewall connection tracking set enabled=no
ip firewall connection tracking set enabled=yes

Источник

MikroTik.by

For every complex problem, there is a solution that is simple, neat, and wrong.

Поясните строки в скрипте «удаление соединений»

Поясните строки в скрипте «удаление соединений»

Сообщение sasha300 » 28 апр 2016, 20:54

«, а не знак равно?

Re: Поясните строки в скрипте «удаление соединений»

Сообщение Chupaka » 28 апр 2016, 23:53

это реализация одного и того же удаления разными способами, причём первый предпочтительнее, насколько понимаю (как минимум он проще), хотя косяк у обоих может быть один и тот же: на большом объёме удаляемых данных может возникнуть ситуация, когда посреди процесса удаления очередное соединение досрочно вываливается из трекинга, например, по таймауту, и попытка удаления этой записи вызовет ошибку, останавливая остаток процесса

касательно тильды: к сожалению, src/dst-address в connections хранит не просто адрес, но и порт, при его наличии. поэтому строку «192.168.0.15:5060″ условие src-address=»192.168.0.15» не найдёт. приходится использовать не проверку на равенство («=»), а сравнение с регулярным выражением («

«). как следствие — лучше использовать что-то вроде

«^192.168.0.15:», это, по идее, менее затратно с точки зрения процессора (надо искать совпадение с начала строки, а не по всей строке; здесь могу ошибаться, регулярные выражения — жутко оптимизированная весчЪ), и не будет лишних совпадений (например,

«10.10.10.10» словит как указанный адрес, так и адреса вроде 110.10.10.10, 10.10.10.102, etc)

естественно, к udp регулярные выражения применять — расточительство, обычного сравнения хватит с лихвой

Источник

Сброс соединений на Mikrotik по звонку

Иногда при использовании АТС asterisk с сетевым оборудованием MikroTik подвисают NAT сессии. Это приводит к проблемам связанным с регистрацией SIP транков от операторов телефонии. Что в свою очередь оставляет компанию без связи.

В такой ситуации зачастую используют 2 варианта решения проблемы:

    1.Необходимо зайти на роутер и в ручном режиме сбросить подвисшие соединения. В winbox это делается следующим образом: ip -> firewall -> connections.В появившемся окне в окне поиска выбираем Dst. Address/Port в поле поиска вводим 5060. Далее выделяем все соединения и удаляем. Аналогично делаем для Src. Address/Port. Для тех, кто привык пользоваться консолью: /ip firewall connection remove [ find dst-address

«.*:5060» ]; /ip firewall connection remove [ find src-address

2.Если в компании нет системного администратора, сотрудники просто перезагружают роутер.

Есть еще один очень удобный способ требующий предварительной настройки. Сброс соединений по звонку с АТС. Этот вариант удобен, если у вас часто зависают NAT сессии или в компании нет специалиста, способного произвести это вручную.

Для реализация данного функционала необходимо произвести несколько шагов:

  1. Настроить возможность подключения АТС к маршрутизатору MikroTik в автоматическом режиме по ssh с использованием ключей.
  2. Создать внутренний номер на АТС.
  3. Прописать диалплан, который при звонке на наш созданный номер выполняет подключение к роутеру и передает ему команды на удаление соединений.

Хочется отметить, что в реализации диалплана необходимо применять аутентификацию по паролю, для того, чтобы ограничить круг лиц, способных производить сброс соединений.

Приступим к реализации первого пункта.

Для автоматического подключения АТС к роутеру нам необходимо:

  1. Создать публичный и приватный ключ.
  2. Публичный ключ необходимо загрузить в роутер.
  3. Приватный ключ остается на сервере АТС и используется при авторизации.
  4. Настроить файл конфигурации ssh для упрощения подключений.

Авторизуемся на Сервере АТС по ssh и создаем ключи выполнив команду:

# ssh-keygen –t rsa –b 2048

-t – алгоритм шифрования

-b – размер ключа

Далее команда у вас запросит путь и имя для сохранения ключей. Можете указать свой, а можно оставить по умолчанию. Я просто нажимаю Enter и перехожу к следующему шагу.

Читайте также:  Мобильный 3g роутер с sma

После этого программа попросит вас создать пароль для приватного ключа. Нам он не нужен, поэтому нашиваем 2 раза Enter. Ключи созданы.

Загружаем публичный ключ на MikroTik.

Открываем наш публичный ключ командой:

Копируем ключ и вставляем в блокнот на рабочей машине (если вы работаете в windows) и сохраняем с произвольным именем.

Далее через winbox заходим на mikrotik, кликаем в левом меню Files и вставляем публичный ключ в File List нажав на соответствующую кнопку.

Можно загрузить ключ на роутер проще. Для этого у вас должен быть открыт доступ ftp на роутере.
Открываем Midnight Commander командой
mc, подключаемся к рутеру по ftp и копируем файл.



Следующим шагом необходимо загруженный публичный ключ присвоить конкретному пользователю на mikrotik.

Заходим Systems-> users переходим на вкладку SSH Keys и нажимаем кнопку Import SSH Key.

В появившемся окне необходимо выбрать пользователя, которому присваиваете ключ, а также указать сам файл с публичным ключом.

Проверим работоспособность созданных ключей с помощью команды:

Где –i путь к приватному ключу.

Вход по ssh будет выполняться от пользователя asterisk, поэтому приватный ключ необходимо скопировать в корневую директорию этого пользователя, установить соответствующие права и пользователя:

# cp –i /root/.ssh/id_rsa /var/lib/asterisk/.ssh/
# chown asterisk:asterisk /var/lib/asterisk/.ssh/id_rsa
# chmod 600 /var/lib/asterisk/id_rsa

Проверьте на своей АТС от какого пользователя у вас запускается asterisk и разместите ключ и конфигурационный файл в соответствующей директории. Посмотреть корневую директорию пользователя можно в файле /etc/passwd.

При частом использовании ssh подключения к роутеру становится не удобным постоянный ввод ключа, имя пользователя и адреса. Эту процедуру можно упростить с помощью файла конфигурации, который необходимо создать в /var/lib/asterisk/.ssh/config выполнив команду:

Присвоим пользователя и группу:

# chown asterisk:asterisk /var/lib/asterisk/.ssh/config

Чтобы никто не “увел” у вас данные из этого файла, ему необходимо задать права 600:
# chmod 600 var/lib/asterisk/.ssh/config

Теперь внесем необходимые данные для подключения в файл config

Host mikrotik — имя нашего подключения (произвольное)
HostName 192.168.32.108 — адрес нашего микротика
Port 22 — порт подключения
User admin — Логин
IdentityFile

/.ssh/id_rsa — путь к приватному ключу

Для того чтобы АТС могла подключиться к роутеру по ssh необходимо в ручном режиме сделать первое подключение от пользователя asterisk. Это добавит отпечаток ключа в файл

/.ssh/known_host . Для этого заходим под нужным пользователем:

# su –l asterisk –s /bin/bash

Параметр –s /bin/bash в нашем случае обязательный т.к. пользователь asterisk по умолчанию имеет другую оболочку /sbin/nologin. При попытке авторизации с этой оболочной пользователь получит вежливое сообщение о том, что эта учетная запись в настоящее время недоступна. Узнать какую оболочку имеет ваш пользователь можно в файле /etc/passwd

Произведем первое подключение к роутеру:

Тут система у вас предупредит о том, что подлинность хоста не установлена, хотите вы соединиться? Вводим yes и отпечаток добавляется в вышесказанный файл. После чего при последующих авторизациях система будет вас соединять автоматически.

Теперь приступим к настройке Asterisk.

Для реализации задуманного необходимо написать диалплан со следующей логикой:

  1. При звонке на определенный номер производим авторизацию с использованием приложения asterisk Authenticate( )
  2. Далее воспроизводим сообщение о том, что авторизация пройдена.
  3. Подключаемся к роутеру и выполняем команды удаления соединений с помощью приложения System()
  4. Выводим статус запроса (для отладки)
  5. Воспроизводим сообщение об окончании выполнения диалплана

Открываем файл extensions_custom.conf:

[from-internal-custom]
exten => 100,1,Authenticate(0000) – авторизация по паролю
same => n,PlayBack(pin-number-accepted) — воспроизводим сообщение об удачной авторизации
same => n,System(ssh mikrotik ip firewall connection remove [ find dst-address

«.*:5060» ])
same =>n,NoOp($) – для отладки
same => n,System(ssh mikrotik ip firewall connection remove [ find src-address

«.*:5060» ])
same =>n,NoOp($) – для отладки
same => n,Playback(finish) – сообщение об окончании выполнения диалплана
Same => n,Macro(hangupcall,) – разъединение

Если вы используете не Freepbx, а обычный чистый астериск, то пишите диалплан в файле extensions.conf

Источник