-
Публикации
42 -
Зарегистрирован
-
Посещение
Сообщения, опубликованные пользователем denisovvsh
-
-
В ДНС что прописано? может днс от первого оператора ? пропиши 8.8.8.8 и попропбуй
Естесссно днсы мы проверяли, мы даже на заводские настройки сбрасывали, я же писал)
Выложите конфиг, что у вас в файрволе вообще прописано.
Фаервол пуст, если не считать правила, которые создаются HotSpotом, автоматически, но и его мы отключали ради эксперемента.
Есть только одно правило маскарада в нате
-
Здравствуйте, уважаемые форумчане!
У меня странная проблема.
Есть сеть, состоящая из 18-и Микротиков, управляемая отдельным VLANом, организованная службой CAPsMAN в роуминг (1 главный 17 CAPов), с включенной службой HotSpot, с системой авторизации.
При использовании канала от Ростелекома все работает отлично, нет проблем. Когда решили переключить на запасной канал, то появилась странная проблема, ping и трассировки до различных хостов проходят, при подключении к ethernet портам главного Микротика Интернет есть, а через WiFi CAPов, Интернета нет, т.е. ping и трассировки, также проходят, а при открытии в браузере любой страницы пишет что доступа нет. Примечательно, что если подключиться к встроенному модулю WiFi главного Микротика, также подключенного к CAPsMAN, все работает, получается, что не работает через CAPы.
Выключили HotSpot, отключили авторизацию, очистили кэш DNS, итог тот же самый. Далее сбрасывали, главный Микротик, на заводские настройки, перенастраивали, все тоже самое. Поменяли MTU на VLANе с 1500 на 1480 и ниже, начали открываться страницы по https протоколу, а по http нет.
Подключили канал от третьего оператора, все тоже самое, вернули на Ростелеком, все заработало.
Вызвали специалиста из оператора связи, разводит руками, говорит - ограничений нет.
Подключаемые каналы рабочие, настройки локальной сети тоже рабочие, т.к. от Ростелекома работает.
Понятно одно, что дело в Микротиках.
Подскажите пожалуйста, была ли у кого нибудь такая проблема и как лечить.
Заранее благодарен.
-
Достаточно немного почитать матчасть, чтобы понять, что http совсем не то же самое, что https
Конечно, благодарю, за столь ценный совет, хоть бы ссылку на мат часть дал, раз такой умный.
Но вопрос не про то чем отличается http от https.
Как правильно настроить hotspot на mikrotik, чтобы пользователей, просто перекидывало на страницу авторизации по https протоколу, без дополнительных сообщений и предупреждений?
Сертификат есть, проверенный и установленный.
Похоже тех кто может просто ответить на вопрос нету.
-
204 это ожидаемый и нормальный ответ )
Как сделать так чтобы этот ответ не возникал, а происходил редирект?
Почему при работе по http не появляется такой ответ?
Подскажите пожалуйста.
-
Какая ошибка то ?
204
-
Здравствуйте уважаемые форумчане!
Не могу понять причину ошибки 74.125.232.233/generate_204 когда переключаю hotspot на https протокол.
Сертификат ssl установлен рабочий, должен хотя бы предупреждение выдавать а тут ошибка и все, никуда нет доступа.
-
Поставьте 10 half, мне помогало.
Благодарю, мне тоже помогло.
-
и свелись тоже хорошо?
-
Можно скрин с вкладкой статус Wireless iterfaces
-
Если на всю мощность стоит, то попробуй сделать по меньше, может поможет.
-
Может это глупый вопрос.
Но есть задача, при замыкании 1-го и 3-го пина, при заранее закороченном 2-го и 6-го, добиться Up link на порту, что собственно и происходит.
А вот при размыкании 1-го и 3-го линк падает, но почему-то поднимается кратковременно периодически и опять падает, а надо чтоб не поднимался.
Трафик на портах не ходит петли нет, важно просто включать и выключать линк, замыканием пар.
Отключал auto-negotiation, установил скорость 100 Мбит принудительно, 10 Мбит отключил, все равно прыгает.
Что самое интересное, есть роутеры где при таких же настройках порт не прыгает, т.е. или up или down.
Что это баг в роутере или в настройке?
Подскажите, пожалуйста, что еще настроить чтобы порт не поднимался?
-
Тех поддержка призналась, что был заблокирован порт на сервере.
-
Здравствуйте уважаемые форумчане!
Купил роутер mikrotik hap lite настроил как всегда, как многие другие роутеры. Настроил для мониторинга по порту 8728 API, а доступа нет!
Проверяю сервисом http://www.networkcenter.info/index порт открыт, а коннект не происходит.
В чем может быть проблема?
Оператор связи говорит что блокировок нет, ip статический.
Обновил прошивку.
Правил никаких дополнительно не создавал, только маскарад для доступа в глобал. Может что-то гдето по умолчанию изменилось в настройках.
-
Здравствуйте, уважаемые форумчане!
У меня не понятная проблема.
Есть скрипт, который запускается на микротике
/tool fetch host="mysite.ru" keep-result=no mode=http address="mysite.ru" src-path="/action.php?mac=$MAC"
Он отправляет мак клиента скрипту на сайте.
На других микротиках все работает, купил новый mikrotik hap lite, на нем не работает.
В логах сервера сайта пишет ошибка "client denied by server configuration:", тех поддержка хостинга утверждает, что с их стороны все без ограничений.
Проверил, сайт доступен для миротика, в .htaccess ограничений нет, с другого микротика все прилетает скрипту сайта без проблем.
У меня остался последний вариант, у микротика коряво работает ПО, нужна замена микротика, обновление прошивки не помогло.
Может кто подскаждет, в чем проблема, как лечить, может в новых микротиках что-то изменилось???
Заранее благодарен.
-
Я пользуюсь вот этой системой http://accessnetwork.ru/ все отлично работает, смс бесплатные, повторных регистраций пользователей нет, т.к. повторное подключение производится полностью автоматически. А то у других надо или заново регаться или надо браузер открывать чтоб интернет появился, не удобно если пользуешься приложением.
Сам себя не похвалишь - никто не похвалит.
Никаких преувеличений!
А еще в системе предусмотрен мониторинг датчиков Геркон, позволяет, через личный кабинет, отслеживать состояние дверей.
Эффективно на квартирах, которые сдаются в аренду, и Интернет под контролем и двери.
Датчики подключаются легко, к портам, любой витухой.
-
Я пользуюсь вот этой системой http://accessnetwork.ru/ все отлично работает, смс бесплатные, повторных регистраций пользователей нет, т.к. повторное подключение производится полностью автоматически. А то у других надо или заново регаться или надо браузер открывать чтоб интернет появился, не удобно если пользуешься приложением.
-
denisovvsh, если интерфейс независимый и имеет собственный IP - используйте netwatch.
Сама по себе запись строки лога в память трапов не вызывает.
А если подключено неуправляемое оборудование, без ip, как отследить запись в логи о падении линка и запустить скрипт по данному событию?
-
Доброго времени суток!
Подскажите пожалуйста, как запустить скрипт по событию падения линка на порту.
Желательно чтобы инициатором запуска скрипта была запись лога, link down
-
Есть сервис автоматизации http://accessnetwork.ru/
-
-
-
Опубликовано · Изменено пользователем denisovvsh · Жалоба на ответ
А вот как, извращенно решить многие задачи, одна из них, это удаление пассивных пользователей hotspot, если они не проявляли активности, заданное, в функции, время.
//Используя класс выше, создаем дочерний класс.
<?php class routeros_api_oversize extends routeros_api{ var $timeMask; function routeros_api_oversize(){ //конструктор $this->timeMask = '1d'; //сколько времени бездействует пользователь } function parseArrHotspotHost($routerArray){ $resultParseArrHotspot = array(); $client = array(); foreach($routerArray as $a => $b){ $val_arr = substr($b,1); $val_arr = substr($val_arr,strpos($val_arr,'=')+1); $sum_str = strlen($val_arr); $sum_str = "-".$sum_str - 1; $key_arr = substr($b, 1, $sum_str); if($key_arr == ".id"){$client[$key_arr] = $val_arr;} if($key_arr == "to-address"){$client[$key_arr] = $val_arr;} if($key_arr == "idle-time"){ $client[$key_arr] = $val_arr; array_push($resultParseArrHotspot, $client); } } return $resultParseArrHotspot; } } ?>
//запускаем, на каком нибудь сервере(хостинге), скрипт который будет выполнять проверку пользователей hotspot
//которые имеют статус bypassed и бездействуют 2 дня
//удаляем их при обнаружении
<?php $RAO = new routeros_api_oversize(); //создаем экземпляр класса $ipRouter = 'ip маршрутизатора микротик с включенным хотспот'; $usRouter = 'имя пользователя с правами на запись и чтение и выполнение'; $pasRouter = 'пароль'; if($RAO->connect($ipRouter, $usRouter, $pasRouter)){ //если подключение к маршрутизатору вернуло true $RAO->write('/ip/hotspot/host/print'); //отправляем команду $routerArr = $RAO->read(false); //получаем массив данных с пользователями hotspot $list_info = $RAO->parseArrHotspotHost($routerArr); //парсим полученный массив и получаем нужный нам массив пользователей на борту hotspot $k = 0; while(isset($list_info[$k])){ //проходим по массиву циклом и одновременно ищем пользователя среди пассивных //извлекаем данные о пользователе и присваиваем их переменным $ip = $list_info[$k]['to-address']; $idle = $list_info[$k]['idle-time']; //формат времени 1w1d1h1m1s $pos = strstr($idle, $RAO->timeMask); // ищем вхождение подстроки маски в строку времени простоя if($pos != false){ // если поиск вернул TRUE $RAO->write('/ip/hotspot/ip-binding/print'); // запрашиваем данные о пассивных пользователях $routerArr2 = $RAO->read(false); // получаем массив $list_info2 = $RAO->parseArrHotspotHost($routerArr2); // парсим $k2 = 0; while(isset($list_info2[$k2])){ // цикл прохождения по массиву для поиска по ip адресу $ip2 = $list_info2[$k2]['to-address']; if($ip2 == $ip){ // находим пользователя $id_ip = $k2; $RAO->comm('/ip/hotspot/ip-binding/remove', array('.id' => $id_ip,)); // удаляем пользователя из пассивных пользователей хотспота $k2++; break; } else{ $k2++; continue; } } $k++; continue; } else{ $k++; continue; // продолжаем проверять остальных пользователей hotspot } } $RAO->disconnect(); // отключаемся от маршрутизатора } ?>
-
Вот PHP класс для работы с RouterOS через API
<?php /***************************** * * RouterOS PHP API class v1.5 * Author: Denis Basta * Contributors: * Nick Barnes * Ben Menking (ben [at] infotechsc [dot] com) * Jeremy Jefferson (http://jeremyj.com) * Cristian Deluxe (djcristiandeluxe [at] gmail [dot] com) * * http://www.mikrotik.com * http://wiki.mikrotik.com/wiki/API_PHP_class * ******************************/ class routeros_api { var $debug = false; // Show debug information var $error_no; // Variable for storing connection error number, if any var $error_str; // Variable for storing connection error text, if any var $attempts = 5; // Connection attempt count var $connected = true; // Connection state var $delay = 3; // Delay between connection attempts in seconds var $port = 8728; // Port to connect to var $timeout = 3; // Connection attempt timeout and data read timeout var $socket; // Variable for storing socket resource /** * Print text for debug purposes * * @param string $text Text to print * * @return void */ function debug($text) { if ($this->debug) echo $text . "\n"; } /** * * * @param string $length * * @return void */ function encode_length($length) { if ($length < 0x80) { $length = chr($length); } else if ($length < 0x4000) { $length |= 0x8000; $length = chr(($length >> 8) & 0xFF) . chr($length & 0xFF); } else if ($length < 0x200000) { $length |= 0xC00000; $length = chr(($length >> 16) & 0xFF) . chr(($length >> 8) & 0xFF) . chr($length & 0xFF); } else if ($length < 0x10000000) { $length |= 0xE0000000; $length = chr(($length >> 24) & 0xFF) . chr(($length >> 16) & 0xFF) . chr(($length >> 8) & 0xFF) . chr($length & 0xFF); } else if ($length >= 0x10000000) $length = chr(0xF0) . chr(($length >> 24) & 0xFF) . chr(($length >> 16) & 0xFF) . chr(($length >> 8) & 0xFF) . chr($length & 0xFF); return $length; } /** * Login to RouterOS * * @param string $ip Hostname (IP or domain) of the RouterOS server * @param string $login The RouterOS username * @param string $password The RouterOS password * * @return boolean If we are connected or not */ function connect($ip, $login, $password) { for ($ATTEMPT = 1; $ATTEMPT <= $this->attempts; $ATTEMPT++) { $this->connected = false; $this->debug('Connection attempt #' . $ATTEMPT . ' to ' . $ip . ':' . $this->port . '...'); $this->socket = @fsockopen($ip, $this->port, $this->error_no, $this->error_str, $this->timeout); if ($this->socket) { socket_set_timeout($this->socket, $this->timeout); $this->write('/login'); $RESPONSE = $this->read(false); if ($RESPONSE[0] == '!done') { $MATCHES = array(); if (preg_match_all('/[^=]+/i', $RESPONSE[1], $MATCHES)) { if ($MATCHES[0][0] == 'ret' && strlen($MATCHES[0][1]) == 32) { $this->write('/login', false); $this->write('=name=' . $login, false); $this->write('=response=00' . md5(chr(0) . $password . pack('H*', $MATCHES[0][1]))); $RESPONSE = $this->read(false); if ($RESPONSE[0] == '!done') { $this->connected = true; break; } } } } fclose($this->socket); } sleep($this->delay); } if ($this->connected) $this->debug('Connected...'); else $this->debug('Error...'); return $this->connected; } /** * Disconnect from RouterOS * * @return void */ function disconnect() { fclose($this->socket); $this->connected = false; $this->debug('Disconnected...'); } /** * Parse response from Router OS * * @param array $response Response data * * @return array Array with parsed data */ function parse_response($response) { if (is_array($response)) { $PARSED = array(); $CURRENT = null; $singlevalue = null; foreach ($response as $x) { if (in_array($x, array( '!fatal', '!re', '!trap' ))) { if ($x == '!re') { $CURRENT =& $PARSED[]; } else $CURRENT =& $PARSED[$x][]; } else if ($x != '!done') { $MATCHES = array(); if (preg_match_all('/[^=]+/i', $x, $MATCHES)) { if ($MATCHES[0][0] == 'ret') { $singlevalue = $MATCHES[0][1]; } $CURRENT[$MATCHES[0][0]] = (isset($MATCHES[0][1]) ? $MATCHES[0][1] : ''); } } } if (empty($PARSED) && !is_null($singlevalue)) { $PARSED = $singlevalue; } return $PARSED; } else return array(); } /** * Parse response from Router OS * * @param array $response Response data * * @return array Array with parsed data */ function parse_response4smarty($response) { if (is_array($response)) { $PARSED = array(); $CURRENT = null; $singlevalue = null; foreach ($response as $x) { if (in_array($x, array( '!fatal', '!re', '!trap' ))) { if ($x == '!re') $CURRENT =& $PARSED[]; else $CURRENT =& $PARSED[$x][]; } else if ($x != '!done') { $MATCHES = array(); if (preg_match_all('/[^=]+/i', $x, $MATCHES)) { if ($MATCHES[0][0] == 'ret') { $singlevalue = $MATCHES[0][1]; } $CURRENT[$MATCHES[0][0]] = (isset($MATCHES[0][1]) ? $MATCHES[0][1] : ''); } } } foreach ($PARSED as $key => $value) { $PARSED[$key] = $this->array_change_key_name($value); } return $PARSED; if (empty($PARSED) && !is_null($singlevalue)) { $PARSED = $singlevalue; } } else { return array(); } } /** * Change "-" and "/" from array key to "_" * * @param array $array Input array * * @return array Array with changed key names */ function array_change_key_name(&$array) { if (is_array($array)) { foreach ($array as $k => $v) { $tmp = str_replace("-", "_", $k); $tmp = str_replace("/", "_", $tmp); if ($tmp) { $array_new[$tmp] = $v; } else { $array_new[$k] = $v; } } return $array_new; } else { return $array; } } /** * Read data from Router OS * * @param boolean $parse Parse the data? default: true * * @return array Array with parsed or unparsed data */ function read($parse = true) { $RESPONSE = array(); $receiveddone = false; while (true) { // Read the first byte of input which gives us some or all of the length // of the remaining reply. $BYTE = ord(fread($this->socket, 1)); $LENGTH = 0; // If the first bit is set then we need to remove the first four bits, shift left 8 // and then read another byte in. // We repeat this for the second and third bits. // If the fourth bit is set, we need to remove anything left in the first byte // and then read in yet another byte. if ($BYTE & 128) { if (($BYTE & 192) == 128) { $LENGTH = (($BYTE & 63) << 8) + ord(fread($this->socket, 1)); } else { if (($BYTE & 224) == 192) { $LENGTH = (($BYTE & 31) << 8) + ord(fread($this->socket, 1)); $LENGTH = ($LENGTH << 8) + ord(fread($this->socket, 1)); } else { if (($BYTE & 240) == 224) { $LENGTH = (($BYTE & 15) << 8) + ord(fread($this->socket, 1)); $LENGTH = ($LENGTH << 8) + ord(fread($this->socket, 1)); $LENGTH = ($LENGTH << 8) + ord(fread($this->socket, 1)); } else { $LENGTH = ord(fread($this->socket, 1)); $LENGTH = ($LENGTH << 8) + ord(fread($this->socket, 1)); $LENGTH = ($LENGTH << 8) + ord(fread($this->socket, 1)); $LENGTH = ($LENGTH << 8) + ord(fread($this->socket, 1)); } } } } else { $LENGTH = $BYTE; } // If we have got more characters to read, read them in. if ($LENGTH > 0) { $_ = ""; $retlen = 0; while ($retlen < $LENGTH) { $toread = $LENGTH - $retlen; $_ .= fread($this->socket, $toread); $retlen = strlen($_); } $RESPONSE[] = $_; $this->debug('>>> [' . $retlen . '/' . $LENGTH . '] bytes read.'); } // If we get a !done, make a note of it. if ($_ == "!done") $receiveddone = true; $STATUS = socket_get_status($this->socket); if ($LENGTH > 0) $this->debug('>>> [' . $LENGTH . ', ' . $STATUS['unread_bytes'] . ']' . $_); if ((!$this->connected && !$STATUS['unread_bytes']) || ($this->connected && !$STATUS['unread_bytes'] && $receiveddone)) break; } if ($parse) $RESPONSE = $this->parse_response($RESPONSE); return $RESPONSE; } /** * Write (send) data to Router OS * * @param string $command A string with the command to send * @param mixed $param2 If we set an integer, the command will send this data as a "tag" * If we set it to boolean true, the funcion will send the comand and finish * If we set it to boolean false, the funcion will send the comand and wait for next command * Default: true * * @return boolean Return false if no command especified */ function write($command, $param2 = true) { if ($command) { $data = explode("\n", $command); foreach ($data as $com) { $com = trim($com); fwrite($this->socket, $this->encode_length(strlen($com)) . $com); $this->debug('<<< [' . strlen($com) . '] ' . $com); } if (gettype($param2) == 'integer') { fwrite($this->socket, $this->encode_length(strlen('.tag=' . $param2)) . '.tag=' . $param2 . chr(0)); $this->debug('<<< [' . strlen('.tag=' . $param2) . '] .tag=' . $param2); } else if (gettype($param2) == 'boolean') fwrite($this->socket, ($param2 ? chr(0) : '')); return true; } else return false; } /** * Write (send) data to Router OS * * @param string $com A string with the command to send * @param array $arr An array with arguments or queries * * @return array Array with parsed */ function comm($com, $arr = array()) { $count = count($arr); $this->write($com, !$arr); $i = 0; foreach ($arr as $k => $v) { switch ($k[0]) { case "?": $el = "$k=$v"; break; case "~": $el = "$k~$v"; break; default: $el = "=$k=$v"; break; } $last = ($i++ == $count - 1); $this->write($el, $last); } return $this->read(); } } ?>
-
Такое попробуйте, должно выполнить задачу.
Сам не проверял.
/ip hotspot ip-binding remove [find [/ip hotspot host find idle-time>1d]
не работает
Как настроить Hotspot Mikrotik для корректной работы с Apple
в Mikrotik Wireless
Опубликовано · Жалоба на ответ
Я использую хотспот для организации авторизации пользователей, про закон, наверное все знают и все такое.
Устройства Apple, не подключаются, вернее подключаются, потом отключаются - после проверки доступности своих ресурсов, т.к. по умолчанию нет доступа к Интернет.
Для решения этой проблемы, раньше, достаточно было открыть доступ до ресурсов(ниже список), но с выходом последних версий ios, данный метод не подходит.
Подскажите пожалуйста, есть ли какое-то решение?
Может еще хосты нужно открыть или что-то другое.
Hotspot - > Walled Garden
*.apple.com
*.apple.com.edgekey.net
*.akamaiedge.net
*.akamaitechnologies.com
apple.com
airport.us
itools.info
appleiphonecell.com
captive.apple.com
thinkdifferent.us
ibook.info
Hotspot - > Walled Garden IP List
captive.apple.com
www.appleiphonecell.com
www.itools.info
www.ibook.info
www.airport.us
www.thinkdifferent.us
static.ess.apple.com
init-p01md.apple.com
ess.apple.com
apple.com
gps.apple.com