Перейти к публикации
iT4iT.CLUB
Kitsum

Настройка DDNS

Рекомендованные сообщения

Начнем с прелюдии.
За благополучный доступ во всемирную паутину в моем жилище отвечает само сборный конструктор с операционной системой RouterOS v6.22 на борту.
И настал тот кризисный день, когда понадобился доступ к устройству из вне (а может и за него), а денег на белый IP тратить не хочется т.к. цель должна сначала оправдать средства.
А на данный момент самый лучший вариант - использовать DDNS.
Для реализации задуманного решено использовать ресурс myddns.ru (и это не реклама, а первый попавшийся под руку).

И так к делу
Сервис myddns.ru предлагает несколько способов общения с ним. Но меня заинтересовал метод использования уникального ключа при обращения к сервису по http
Выглядит это так http://myddns/key/куча_цифр_или_ваш_уникальный_ключ
Но есть ограничения - если в течении трех дней не поступают запросы на обновления IP адреса, то происходит делегирование записи в DNS на сервере. И это может показаться банально смешной вещью, но мой провайдер выдает адреса на 3 часа, при этом если я не ухожу в офлайн, то буду получать один и тоже адрес из пула до скончания веков (ну или +/- день от века).
Следовательно к моменту как произойдет смена IP адреса устройства, я уже потеряю запись в DNS на сервисе myddns и вся эта затея потеряет смысл. ЭТО НУЖНО УЧЕСТЬ! 

Нам понадобится всего две вещи:
1. создать скрипт в котором будет реализована вся логика
2. прописать его в планировщик задач RouterOS

Пункт 1 (Скрипт)
Суть его очень проста. При инициализации провести проверку соответствия текущего IP адреса интерфейса смотрящего во внешний и страшный мир и IP соответствующего нашему субдомену на myddns. Плюс к этому производить дополнительный запрос к сервису через каждый N-ый запуск скрипта.
Решено запускать скрипт каждую минуту для проверки условия соответствия IP адресов. И каждый 60-ый запуск скрипта должен вызывать принудительный запрос к DDNS сервису (и не важно, изменился мой адрес или нет), это поможет дополнительно поддерживать стабильность услуги.

:local ddnshost "kitsum.myddns.ru";
:local ddnsid "2356273494558114944";
:local wan "ether1";
:local tmpFile "myddns.info";
:local interval 60;
:local ddnsip [:resolve $ddnshost];
:local localip [/ip addres get [/ip address find interface=$wan ] address];
:local localip [:pick $localip 0 [:find $localip "/"]];
:global ddnsinterval;
:if ($localip != $ddnsip) do={
    /tool fetch url="http://myddns.ru/key/$ddnsid" dst-path="$tmpFile"
    delay 2;
    :local fileid [/file find name="$tmpFile"];
    :local fileContent [/file get $fileid contents];
    /file remove $fileid;
    :if ($fileContent = "update") do={
        :log info "DDNS: mismatch DNS records, correction is made. $ddnshost ($ddnsip) changed to $localip";
    }
} else={
    :if ($interval <= $ddnsinterval) do={
        :log info "DDNS: launched additional check"
        :set ddnsinterval 1;
        /tool fetch url="http://myddns.ru/key/$ddnsid" dst-path="$tmpFile"
        delay 2;
        :local fileid [/file find name="$tmpFile"];
        :local fileContent [/file get $fileid contents];
        :log info "DDNS: server response '$fileContent'";
        /file remove $fileid;
    } else={ :set ddnsinterval ([$ddnsinterval] + 1); }
}

Параметры:
1. ddnshost - соответствует Вашему субдомену myddns.ru
2. ddnsid - Ваш уникальный ключ прописанный на сервисе ddns
3. wan - содержит имя интерфейса Вашего MikroTik который смотрит в интернет
4. tmpFile - имя временного файла который будет создаваться в ходе работы скрипта и содержать ответ сервера:

noparametrs - не хватает параметров.
nologinpass - не верный логин или пароль.
nodomens - не верный домен.Такого домена не существует или не принадлежит Вам.
update - прошло обновление домена.IP поменялся.
noupdate - нечего обновлять.IP не поменялся.

5. interval - как часто проводить принудительный запрос (измеряется в интервалах запуска помноженный на частоту запуска скрипта)
Все остальные значения не предназначены для редактирования.

Планировщик задач MikroTik
Консольный вариант расписывать не буду т.к используют winbox.
Проваливаемся в System -> Scheduler и создаем новую задачу с произвольным именем в которую прописываем запуск скрипта с интервалом в 1 минуту и запуск самой задачи при старте OS. Вы можете указать иной интервал, но для меня важно не терять связь с устройством (учитывая, что если IP изменится во время работы, то связь и так будет потеряна на время до 15-20 минут), пока обновятся записи DNS на сервисе.

Команда запуска скрипта выглядит так

/system script run myddns

Где myddns - имя исполняемого скрипта

Привожу скин с настройками для наглядностиMikroTik.thumb.png.825b542b272057d35c1e3

 

  • Like 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Продолжим тему и модернизируем скрипт так, чтобы он мог работать с сервисом no-ip.com

Ничего кардинально нового тут нет, скорее выбросили лишнее от предыдущего скрипта т.к логика работы сервиса проста и не требует принудительного "пинка" если ip адрес не менялся длительное время.

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

Для запроса обновления данных зоны используется следующий http запрос

http://username:password@dynupdate.no-ip.com/nic/update?hostname=mytest.testdomain.com&myip=1.2.3.4

Нам нужно передать

  1. логин учетной записи сервиса
  2. пароль
  3. dns имя обновляемого узла
  4. новый ip адрес

Все делаем по описанию в предыдущем посте за исключением самого скрипта.

:local login "login";
:local pass "password";
:local ddnshost "you_zone.ddns.net";
:local wan "wan";
:local tmpFile "myddns.info";
:local ddnsip [:resolve $ddnshost];
:local localip [/ip addres get [/ip address find interface=$wan ] address];
:local localip [:pick $localip 0 [:find $localip "/"]];
:global ddnsinterval;
:if ($localip != $ddnsip) do={
    /tool fetch url="http://$login:$pass@dynupdate.no-ip.com/nic/update?hostname=$ddnshost&myip=$localip" dst-path="$tmpFile"
    delay 2;
    :local fileid [/file find name="$tmpFile"];
    :local fileContent [/file get $fileid contents];
    /file remove $fileid;
    :log info "DDNS: mismatch DNS records, correction is made. $ddnshost ($ddnsip) changed to $localip";
}

Параметры:

  1. login - логин учетной записи no-ip.com
  2. pass - пароль
  3. ddnshost - Ваш домен. Указывается полностью. Помним, что no-ip.com предоставляет несколько зон для бесплатного использования
  4. wan - имя интерфейса, смотрящего в интернет 
  5. tmpFile - имя временного файла который будет создаваться в ходе работы скрипта и содержать ответ сервера

Как и в предыдущий раз, прописываем удобный интервал запуска и тестируем.

  • Like 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас

  • Похожие публикации

    • Автор: Kitsum
      Точное время - всегда актуальный вопрос. В большинстве случаев высокая точность не нужна и настроить время на вашем оборудовании можно по наручным, кухонным или напольным с кукушкой часами, да хоть по положению солнца, и этого будет более чем достаточно для большинства людей.

      Но вот, что делать, если хочется высокой точности? Верно, начинаем синхронизироваться с любым попавшимся NTP сервером в интернете, он в свою очередь синхронизируется с другим (возможно даже более точным, а может быть и нет) сервером. Цепочка может быть достаточно длинной, но в один прекрасный день может появится желание убрать посредников и найти самые точные часы на планете и спрашивать время у них.
      А какие часы самые точные? Атомные! Кстати на wikipedia имеется отличная статья про время! И вот тут пораскинув мозгами, начинаем судорожно вспоминать, в каком это супермаркете мы последний раз видели их в продаже и желательно с USB интерфейсом, можно даже розового цвета... Вы тоже не видели? Печаль.
      А ведь у нас над головой, на высоте порядка 19400 км висят куча спутников систем позиционирования (GPS / ГЛОННАС), а чтобы они работали им нужно знать точное время. Именно для этой цели у каждого из этих трудяг на борту имеются атомные часы! Отлично, давайте узнавать время у этих ребят.
      И так, немного задержавшись на сайте MikroTik можно найти пакет gps-xx.xx.npk который позволяет расширить возможности маршрутизатора и позволит ему определять свои точные координаты на поверхности нашей планеты. Чтобы установить пакет, достаточно просто скопировать его на маршрутизатор (сделать это можно перетащив .npk файл в файловый менеджер WinBox) и перезагрузиться.
      Теперь нам нужен GPS приемник. Общение будет идти по протоколу NMEA 0183, PDF.
      Мой маршрутизатор собран на базе стационарного компьютера, а следовательно можно смело брать приемник с USB интерфейсом. В наличии имеется отличный экземпляр от GlobalSat - BU-353U4.
      После подключения приемника переходим к настройки маршрутизатора.
      [admin@Kitsum] > port print Flags: I - inactive # DEVICE NAME CHANNELS USED-BY BAUD-RATE 0 serial0 1 Serial Console 9600 1 3:2 usb2 1 4800 Отлично, маршрутизатор видит что-то на порту usb2, запоминаем его Flag (1) и выставляем настройки согласно техническим характеристикам от производителя. Естественно, что для Вашего "свистка" настройки могут отличаться.
      [admin@Kitsum] > /port [admin@Kitsum] /port> set numbers=1 baud-rate=4800 data-bits=8 parity=none flow-control=none stop-bitsrs=1 Все настройки с портами Вы можете провести через Web интерфейс или WinBox в разделе System -> Ports
      Теперь осталось дело за малым. Сообщим маршрутизатору, что на порту usb2 висит GPS приемник, и он может им овладеть, то есть воспользоваться, ... блин использовать! И естественно, мы желаем, чтобы время, полученное в телеграмме от спутников считалось эталонным и использовалось как системное.
      [admin@Kitsum] > /system gps [admin@Kitsum] /system gps> set enabled=yes port=usb2 set-system-time=yes Теперь мы может посмотреть, какими именно данными мы начали располагать в следствии, этих сверх сложных манипуляций!
      Внимание: естественно, что при холодном старте, данные начнут поступать не сразу.
      [admin@Kitsum] > /system gps [admin@Kitsum] /system gps> monitor date-and-time: feb/08/2016 14:44:42 latitude: N 00 18' 13.236'' longitude: E 00 54' 5.236'' altitude: 325.299988m speed: 0.000000 km/h destination-bearing: none true-bearing: 133.419998 deg. True magnetic-bearing: none valid: yes satellites: 9 -- [Q quit|D dump|C-z pause] В данном случае получилось поймать сигнал с 9 спутников. Каждый из них передает нам свои координаты, а самое главное - время со встроенных атомных часов. Большая часть информации вычисляется уже по месту (скорость, высота ...).  Мы практически добились нужного результата.
      Естественно мы получаем время по Гринвичу (UTC+0), меня это не устраивает, видимо и Вас тоже. Необходимо подправить часовой пояс. Это можно сделать в System -> Clock
      [admin@Kitsum] > /system clock [admin@Kitsum] /system clock> set time-zone-autodetect=no time-zone-name=Europe/Moscow И так, теперь Ваш маршрутизатор знает самое точное время на планете и им стоит поделиться хотя бы со всеми желающими в локальной сети. А таких поверьте, будет не мало. В современном мире все устройства жаждут обладать этой информации. Как же без этого Вам кофеварка сварит благородный напиток, или телевизор выключится и оградит молодое поколение от всего того, что оно и так потом узнает, а пока должно делать уроки, ммм?
      Необходимо поднять собственный NTP сервер и делается это сверх сложной и длинной командой.
      [admin@Kitsum] > /system ntp server [admin@Kitsum] /system ntp server> set enabled=yes manycast=yes Ну, или просто выставлением соответствующей галочки в System -> NTP Server
      И все было бы просто великолепно, если бы устройства в сети знали, что мы владеем более точным временем, чем time.windows.com, time.nist.gov да и сотни других серверов. Первая мысль, которая посетила меня - просто подменю ip адреса в записях DNS и "вуаля", но я даже понятия не имею с чем синхронизируется мой телефон, телевизор и у кого, после очередного обновления, захочет узнать время мой компьютер.
      Мы знаем, что NTP протокол использует 123 UDP порт для общения. Предлагаю перехватывать все запросы, из нашей локальной сети, адресованные на этот порт во внешний мир и заворачивать их на внутренний IP маршрутизатора!
      У меня все сетевые интерфейсы локальной сети объедены в Bridge и весь трафик ходит во внешний мир через через NAT и masquerade, внутренний адрес маршрутизатора 10.10.10.1
      Добавим новое правило в NAT
      [admin@Kitsum] > /ip firewall nat [admin@Kitsum] /ip firewall nat> add action=dst-nat chain=dstnat dst-port=123 in-interface=bridge1 protocol=udp to-addresses=10.10.10.1 to-ports=123 На этом все.
      PS: зачем? потому что хочется и есть возможность!

    • Автор: Kitsum
      Представьте ситуацию, что Вам необходимо получить доступ к закрытому ресурсу. Это может быть, как компьютер находящийся в частной локальной сети (например, на работе), так и сервер находящийся в интернете и доступ к нему закрыт в связи с разного рода санкциями и прочей чепухой не имеющей ничего общего со здравым смыслом. Некоторые пользователи скатываются настолько низко, что могут закрыть видео на YouTube для граждан той или иной страны. Ну да Бог с ними, сама реализация описанная ниже намного более интереснее чем закрытый видеоролик и, тем более имеет намного более широкие перспективы!

      Все эти проблемы решает VPN, заодно он является самым распространенным способом для организации удаленных рабочих мест разными работодателями. В подавляющем большинстве случаев при использовании VPN Ваш компьютер становится частью чужой локальной сети, следовательно, маршрутизация всего трафика уже идет по чужим правилам.
      В рабочей обстановке это может выражаться в виде отсутствия доступа в интернет через сеть работодателя или между Вами и остальным интернетом вдруг появляется чужой Firewall и блокирует доступ к: ICQ, IRC, Skype или другим законным ресурсам.  А вот если Вы используете в интернете бесплатные VPN сервера (да и платные тоже) для Ваших личных нужд, то стоит помнить о том, что весь трафик проходит где-то там и все, что Вы делаете становится известно всем заграничным друзьям. В список раскрытой информации также входят cookie используемые Вашим браузером, платежные реквизиты от электронной коммерции до банковских карт, различные ключи и много всего интересного. Кстати, отечественные сервера тоже не брезгуют воспользоваться этими данными. Самое логичное решение на мой взгляд - составить список ресурсов, с которыми необходимо работать через VPN и заворачивать их трафик в тоннель, а все остальное пускать классическим способом через местного провайдера. Сам VPN тоннель поднимать только в том случае, если появляется трафик для него. Это позволит не держать постоянно поднятый канал и сэкономит ресурсы.

      Приступим к реализации
      Первым делом нам необходимо создать список сетей, в которые мы хотим ходить через VPN. Условно назовем этот список "blackHole". Список подсетей работодателя можно узнать у самого работодателя или его IT специалистов. Но вот, что делать если необходимо получить доступ к закрытому иностранному ресурсу? Для наглядности эксперимента пусть его роль сыграет https://2ip.ru/ т.к это покажет наглядную работу системы.
      Давно не новость, что за DNS именем ресурса может находится несколько IP адресов, иногда даже десятки или сотни. Все их необходимо добавить. В этом случае очень хорошо, если у Вас под рукой имеется машина с UNIX подобной операционной системой с установленными утилитами Host и Whois. Если таковой нету, то утилиты нам заменят:
      Host:
      http://www.digwebinterface.com/ Whois:
      https://www.reg.ru/whois/ https://www.nic.ru/whois/ Узнаем список используемых IP адресов с помощью утилиты Host
      root@linuxPC:/# host 2ip.ru 2ip.ru has address 178.63.151.224 2ip.ru mail is handled by 10 aspmx3.googlemail.com. 2ip.ru mail is handled by 5 alt1.aspmx.l.google.com. 2ip.ru mail is handled by 5 alt2.aspmx.l.google.com. 2ip.ru mail is handled by 1 aspmx.l.google.com. 2ip.ru mail is handled by 10 aspmx2.googlemail.com. Узнаем список всех подсетей с помощью утилиты Whois. Если предыдущая операция показала наличие более одного IP адреса, то данную процедуру нужно провести для всего списка.
      root@linuxPC:/# whois 178.63.151.224 % This is the RIPE Database query service. % The objects are in RPSL format. % % The RIPE Database is subject to Terms and Conditions. ... route: 178.63.0.0/16 Будет очень много информации, но нас интересует только строка с параметром route. Именно эту подсеть с указанием маски мы и добавляем в список "blackHole" маршрутизатора.
      /ip firewall address-list add address=178.63.0.0/16 comment=2ip.ru disabled=no list=blackHole Или через WinBox в разделе IP -> Firewall -> Address List
      Теперь необходимо промаркировать пакеты, это позволит повлиять в дальнейшем на их маршрутизацию. Каждому пакету, который предназначается для подсети из списка "blackHole" мы дадим маркер с именем "bh".
      /ip firewall mangle add action=mark-routing chain=prerouting dst-address-list=blackHole log=no \ new-routing-mark=bh Или через WinBox в разделе IP -> Firewall -> Mangle
      Теперь нам необходимо создать подключение к VPN серверу. В сети большой выбор как бесплатных серверов с периодически меняющимися учетными данными для подключения, так и платных к которым тоже нет особого доверия. В идеале конечно лучше держать свой собственный сервер, но это требует некоторых затрат средств и выгодно только в том случае, если такой доступ необходим целой компании или организации.
      Настройка будет зависеть от Вашего выбора. Я нашел первый попавшийся PPTP сервер и подключился к нему.
      /interface pptp-client add comment="VPN blackHole" connect-to=serverName\ disabled=yes name=pptp-out1 password=password\ user=login dial-on-demand=yes keepalive-timeout=60 comment - комментарий к подключению connect-to - адрес PPTP сервера disabled - устанавливаем yes пока не закончим настройку (сюрпризы не нужны) name - имя интерфейса password - пароль user - логин dial-on-demand - связь с сервером устанавливается только при необходимости keepalive-timeout - время удержания соединения в секунда до разрыва связи в случае не использования соединения Или через WinBox в разделе Interface
      Учитывайте, что для разных серверов одного типа настройки могут сильно отличаться.
      Добавляем запись Masquerade в NAT для нашего нового интерфейса.
      /ip firewall nat add action=masquerade chain=srcnat dst-address-list=blackHole out-interface=\ pptp-out1 Или через WinBox в разделе IP -> Firewall -> NAT
      Осталось дело за малым, добавить новую запись в лист маршрутизации и заворачивать пакеты с маркером "bh" на интерфейс pptp-out1
      /ip route add distance=1 gateway=pptp-out1 routing-mark=bh Или через WinBox в разделе IP -> Routes
      Поднимаем интерфейс (естественно, что у Вас его порядковый номер может отличаться)
      /interface pptp-client set numbers=0 disabled=no После всех манипуляций идем на любой адрес из списка "blackHole", в нашем случае это http://2ip.ru и сравниваем адрес с данными например на http://myip.ru 
      Возможно, что при первом доступе к серверу, вы не получите ожидаемого результата, это связанно с тем, что у нас выставлен в интерфейсе PPTP клиента параметр dial-on-demand и необходимо некоторое время, чтобы тоннель поднялся для вашей сессии.
      Теперь трафик перераспределяется нужным нам образом и можно приступить к поднятию необходимых тоннелей с серверами и маршрутизаторами на работе, в удаленных офисах и вообще с чем душе угодно.
    • Автор: Kitsum
      Необычные проблемы требуют необычных решений.

      Начнем с прелюдии
      На определенном удалении друг от друга имеются две локальные домашние сети. Во главе одной стоит маршрутизатор на базе стационарного компьютера с RouterOS на борту, а сердцем второй является Cisco 800-ой серии (далее просто Кошка). В каждой из сетей имеются ресурсы представляющие интерес друг для друга. И вот настал прекрасный момент,  была приобретена статика, и начался процесс поднятия GRE тоннеля. Все завелось с первого раза, пакетики побежали между сетями. Данное событие было отмечено, как подобает Русскому представителю IT сообщества и все разошлись заниматься своими делами.
      Но счастье было не долгим. Через пару дней, из-за не преодолимых обстоятельств, произошло отключение питания на стороне "Кошки" и MikroTik начал скучать и ждать своего боевого товарища. После проведения аварийно-восстановительных работ "Кошка" радостно заурчала, но пакетики не побежали. 
      Вскрытие показало, что провайдер не поддерживает адекватную работу с DHCP семейства кошачьих и в панике выдавал первый свободный IP из пула, со всеми вытекающими последствиями. Несколько недель велись переговоры с провайдером, и раз эта статья была написана, значит, провайдер пока не добился положительного результата.
      Решено разбираться самостоятельно и попробовать поднимать тоннель, основываясь только на одном статическом адресе. Ведь в цирке медведи ездят на одноколесных велосипедах? А чем мы хуже медведей?!
      Реализация
      Кошка будет гулять по всему пулу адресов провайдера, следовательно, приспосабливаться к этим загулам придется MiktoTik-у. Средствами RouterOS решить эту проблему сходу не получилось и решено вводить в бой тяжелую артиллерию, это сверх мощный и производительный сервер Raspberry Pi  А Вы, что подумали?) Эта игрушка с 512mb RAM, 800мГц CPU, Lunux-ом на борту и питанием от USB разъема самого MikroTik-а очень сильно расширяет функционал маршрутизатора, не повышая расходы на электроэнергию и общую стоимость проекта. 
      Если быть серьезным, то MikroTik API + Raspberry Pi (далее просто Малина) позволяют реализовать практически любую Вашу фантазию.
      Фото моего роутера
      Поведение будет следующим:
      На MikroTik-е настраивается проброс 80 порта до Малины. Cisco каждые N минут будет обращаться по протоколу http на Raspberry Pi и методом GET передавать секретный ключ. На борту Малинки крутится Apache + PHP. Последний проверяет корректность ключа, реализуя идентификацию кошки по схеме "Свой\Чужой". Если идентификация пройдена успешно, то по средствам API маршрутизатора происходит перенастройка GRE тоннеля. Хочу отметить, что таким способом можно производить конфигурацию всего маршрутизатора, а не только GRE.
      Проброс портов на MikroTik-е
      /ip firewall nat add action=netmap chain=dstnat disabled=no dst-port=80 in-interface=ether1 protocol=tcp to-addresses=192.168.1.100 to-ports=80 in-interface - имя интерфейса смотрящего в интернет to-addresses - внутренний адрес малинки Не забудьте активировать сервис API у маршрутизатора.
      /ip service enable 5 Настройка Cisco
      cisco-test#configure terminal cisco-test(config)#kron policy-list gre cisco-test(config-kron-policy)#cli more http://64.64.64.64/?key=a7656fafe94dae72b1e1487670148412 cisco-test(config-kron-policy)#exit cisco-test(config)#kron occurrence gre in 015 recurring cisco-test(config-kron-occurrence)#policy-list gre cisco-test(config-kron-occurrence)#^Z cisco-test#write В данном случае настраивается задание для планировщика KRON на выполнение команды more каждые 15 минут. Сама команда просто выводит на экран содержимое из различных источников. Естественно необходимо изменить IP адрес на актуальный для Вас.
      Значение key необходимо изменить на Ваш ключ, указанный в PHP скрипте ниже и закодированный в md5!
      Еще один важный момент. В GET запросе, символ вопроса "?" обозначает, что начинается передача параметров. В Cisco это спец символ показывающий справку по командам и чтобы его ввести, необходимо перед его написанием нажать Ctrl + V
      PHP Script для Raspberry Pi
      Нам понадобится PHP class для работы с RouterOS API https://github.com/BenMenking/routeros-api
      <?PHP /** * @copyright: iT4iT.CLUB (c) 2015 * @author: https://it4it.club */ # Данные для подключения к API RouterOS $host = '192.168.0.1'; $login = 'login'; $pass = 'password'; # Уникальный ключ для проверки "Свой\Чужой". Удаленный маршрутизатор обязан передавать его в md5 $key = 'secret key'; # Интерфейс, который необходимо переконфигурировать $interfaceName = 'gre-tunnel1'; if(isset($_GET['key']) and $_GET['key'] == md5($key)) { require('./routeros_api.class.php'); $API = new RouterosAPI(); if($API->connect($host, $login, $pass)) { $API->write('/interface/gre/print'); foreach($API->read() as $id => $param) { if($param['name'] == $interfaceName and $param["remote-address"] != $_SERVER['REMOTE_ADDR']) { $API->comm("/interface/gre/set", array( "numbers" => $id, "remote-address" => $_SERVER['REMOTE_ADDR'], )); break; } } $API->disconnect(); } } ?> В данном скрипте при совпадении ключей происходит поиск интерфейса gre-tunnel1 в ветке /interface/gre и в случае его обнаружения следует изменение параметра remote-address на IP клиента передавшего верный ключ в формате md5.
      Более подробно почитать об API можно на официальном сайте http://wiki.mikrotik.com/wiki/Manual:API
      PS: Данный вариант управления маршрутизатором довольно забавен и очень гибок, но будьте очень осторожны, "друзья" Эдварда не дремлют! Советую также использовать https, фильтр по IP (провайдера) в коде скрипта и в фаерволе MikroTik-а.
      routeros_cisco_rpi.zip
  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу.

×