<?xml version="1.0"?>
<rss version="2.0"><channel><title>MikroTik Latest Topics</title><link>https://it4it.club/forum/13-mikrotik/</link><description>MikroTik Latest Topics</description><language>en</language><item><title>Broker MQTT &#x43D;&#x430; Mikrotik</title><link>https://it4it.club/topic/113-broker-mqtt-na-mikrotik/</link><description><![CDATA[
<p>
	Добрый день!
</p>

<p>
	ESP заработало без сбоев, спасибо! Дома стоит роутер Mikrotic <span>2011UiAS-2HnD </span>RouterOS <span>v6.43.8</span><span>. В раздумье: перепрошить его на OpenWRT и добавить брокер MQTT, либо взять какой-нибудь роутер OpenWRT подешевле и добавить брокер MQTT, либо сделать брокер на малине, либо еще как-то? Подскажите, пожалуйста, менее "каменистый" путь. Хочу сохранять данные локально на диск, чтобы не зависить от внешнего интернета. Заранее благодарен за ответ!</span>
</p>
]]></description><guid isPermaLink="false">113</guid><pubDate>Fri, 26 Apr 2019 19:51:06 +0000</pubDate></item><item><title>&#x41D;&#x430;&#x441;&#x442;&#x440;&#x43E;&#x439;&#x43A;&#x430; DDNS</title><link>https://it4it.club/topic/5-%D0%BD%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0-ddns/</link><description><![CDATA[
<p>Начнем с прелюдии.<br>За благополучный доступ во всемирную паутину в моем жилище отвечает само сборный конструктор с операционной системой <strong>RouterOS v6.22</strong> на борту.<br>И настал тот кризисный день, когда понадобился доступ к устройству из вне (а может и за него), а денег на белый IP тратить не хочется т.к. цель должна сначала оправдать средства.<br>А на данный момент самый лучший вариант - использовать DDNS.<br>Для реализации задуманного решено использовать ресурс <strong>myddns.ru</strong> (и это не реклама, а первый попавшийся под руку).</p><p>И так к делу<br>Сервис <strong>myddns.ru</strong> предлагает несколько способов общения с ним. Но меня заинтересовал метод использования уникального ключа при обращения к сервису по http<br>Выглядит это так <a rel="external nofollow" href="http://myddns/key/%D0%BA%D1%83%D1%87%D0%B0_%D1%86%D0%B8%D1%84%D1%80_%D0%B8%D0%BB%D0%B8_%D0%B2%D0%B0%D1%88_%D1%83%D0%BD%D0%B8%D0%BA%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D0%B9_%D0%BA%D0%BB%D1%8E%D1%87">http://myddns/key/куча_цифр_или_ваш_уникальный_ключ</a><br><u><strong>Но есть ограничения</strong></u> - если в течении трех дней не поступают запросы на обновления IP адреса, то происходит делегирование записи в DNS на сервере. И это может показаться банально смешной вещью, но мой провайдер выдает адреса на 3 часа, при этом если я не ухожу в офлайн, то буду получать один и тоже адрес из пула до скончания веков (ну или +/- день от века).<br>Следовательно к моменту как произойдет смена IP адреса устройства, я уже потеряю запись в DNS на сервисе myddns и вся эта затея потеряет смысл. <strong>ЭТО НУЖНО УЧЕСТЬ! </strong></p><p>Нам понадобится всего две вещи:<br>1. создать скрипт в котором будет реализована вся логика<br>2. прописать его в планировщик задач RouterOS</p><p><strong>Пункт 1 (Скрипт)</strong><br>Суть его очень проста. При инициализации провести проверку соответствия текущего IP адреса интерфейса смотрящего во внешний и страшный мир и IP соответствующего нашему субдомену на myddns. Плюс к этому производить дополнительный запрос к сервису через каждый N-ый запуск скрипта.<br>Решено запускать скрипт каждую минуту для проверки условия соответствия IP адресов. И каждый 60-ый запуск скрипта должен вызывать принудительный запрос к DDNS сервису (и не важно, изменился мой адрес или нет), это поможет дополнительно поддерживать стабильность услуги.</p><pre class="ipsCode prettyprint">: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 &lt;= $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); }
}</pre><p>Параметры:<br><strong>1. ddnshost</strong> - соответствует Вашему субдомену myddns.ru<br><strong>2. ddnsid</strong> - Ваш уникальный ключ прописанный на сервисе ddns<br><strong>3. wan</strong> - содержит имя интерфейса Вашего MikroTik который смотрит в интернет<br><strong>4. tmpFile</strong> - имя временного файла который будет создаваться в ходе работы скрипта и содержать ответ сервера:</p><blockquote class="ipsQuote" data-cite="Цитата" data-ipsquote=""><p><span style="color:#008000;">noparametrs</span> - не хватает параметров.<br><span style="color:#008000;">nologinpass</span> - не верный логин или пароль.<br><span style="color:#008000;">nodomens</span> - не верный домен.Такого домена не существует или не принадлежит Вам.<br><span style="color:#008000;">update</span> - прошло обновление домена.IP поменялся.<br><span style="color:#008000;">noupdate</span> - нечего обновлять.IP не поменялся.</p></blockquote><p><strong>5. interval</strong> - как часто проводить принудительный запрос (измеряется в интервалах запуска помноженный на частоту запуска скрипта)<br>Все остальные значения не предназначены для редактирования.</p><p><strong>Планировщик задач MikroTik</strong><br>Консольный вариант расписывать не буду т.к используют winbox.<br>Проваливаемся в System -&gt; Scheduler и создаем новую задачу с произвольным именем в которую прописываем запуск скрипта с интервалом в 1 минуту и запуск самой задачи при старте OS. Вы можете указать иной интервал, но для меня важно не терять связь с устройством (учитывая, что если IP изменится во время работы, то связь и так будет потеряна на время до 15-20 минут), пока обновятся записи DNS на сервисе.</p><p>Команда запуска скрипта выглядит так</p><pre class="ipsCode prettyprint">/system script run myddns</pre><p>Где <span style="color:#008000;">myddns</span> - имя исполняемого скрипта<br><br>Привожу скин с настройками для наглядности<a class="ipsAttachLink ipsAttachLink_image" href="https://it4it.club/uploads/monthly_2015_08/MikroTik.png.67751122a2acfc02723c4d48bb4e9577.png"><img data-fileid="1" class="ipsImage ipsImage_thumbnailed" alt="MikroTik.thumb.png.825b542b272057d35c1e3" src="https://it4it.club/uploads/monthly_2015_08/MikroTik.thumb.png.825b542b272057d35c1e321af83259dc.png"></a></p><p> </p>
]]></description><guid isPermaLink="false">5</guid><pubDate>Fri, 14 Aug 2015 08:32:00 +0000</pubDate></item><item><title>&#x41F;&#x43E;&#x434;&#x43D;&#x438;&#x43C;&#x430;&#x435;&#x43C; &#x441;&#x435;&#x440;&#x432;&#x435;&#x440; &#x442;&#x43E;&#x447;&#x43D;&#x43E;&#x433;&#x43E; &#x432;&#x440;&#x435;&#x43C;&#x435;&#x43D;&#x438; Stratum 1 &#x43D;&#x430; RouterOS</title><link>https://it4it.club/topic/28-podnimaem-server-tochnogo-vremeni-stratum-1-na-routeros/</link><description><![CDATA[
<p>
	Точное время - всегда актуальный вопрос. В большинстве случаев высокая точность не нужна и настроить время на вашем оборудовании можно по наручным, кухонным или напольным с кукушкой часами, да хоть по положению солнца, и этого будет более чем достаточно для большинства людей.
</p>

<p>
	<img alt="atom-clock.jpg" class="ipsImage ipsImage_thumbnailed" data-fileid="233" data-unique="sagzykwwf" src="https://it4it.club/uploads/monthly_2016_02/atom-clock.jpg.7f976aa9bb1f8fd92057dcd7f67f69db.jpg"></p>

<p>
	Но вот, что делать, если хочется высокой точности? Верно, начинаем синхронизироваться с любым попавшимся <strong>NTP</strong> сервером в интернете, он в свою очередь синхронизируется с другим (возможно даже более точным, а может быть и нет) сервером. Цепочка может быть достаточно длинной, но в один прекрасный день может появится желание убрать посредников и найти самые точные часы на планете и спрашивать время у них.
</p>

<p>
	А какие часы самые точные? Атомные! Кстати на <a href="https://ru.wikipedia.org/wiki/NTP" rel="external nofollow">wikipedia</a> имеется отличная статья про время! И вот тут пораскинув мозгами, начинаем судорожно вспоминать, в каком это супермаркете мы последний раз видели их в продаже и желательно с USB интерфейсом, можно даже розового цвета... Вы тоже не видели? Печаль.
</p>

<p>
	А ведь у нас над головой, на высоте порядка 19400 км висят куча спутников систем позиционирования (<strong>GPS </strong>/ <strong>ГЛОННАС</strong>), а чтобы они работали им нужно знать точное время. Именно для этой цели у каждого из этих трудяг на борту имеются атомные часы! Отлично, давайте узнавать время у этих ребят.
</p>

<p>
	И так, немного задержавшись на сайте <a href="http://www.mikrotik.com/download/archive" rel="external nofollow">MikroTik</a> можно найти пакет <span style="color:#008000;"><strong>gps-xx.xx.npk</strong></span> который позволяет расширить возможности маршрутизатора и позволит ему определять свои точные координаты на поверхности нашей планеты. Чтобы установить пакет, достаточно просто скопировать его на маршрутизатор (сделать это можно перетащив .npk файл в файловый менеджер WinBox) и перезагрузиться.
</p>

<p>
	Теперь нам нужен GPS приемник. Общение будет идти по протоколу <a href="https://ru.wikipedia.org/wiki/NMEA_0183" rel="external nofollow">NMEA 0183</a>, <a href="http://www8.garmin.com/support/pdf/NMEA_0183.pdf" rel="external nofollow">PDF</a>.
</p>

<div class="ipsSpoiler" data-ipsspoiler="">
	<div class="ipsSpoiler_header">
		<span>Скрытый текст</span>
	</div>

	<div class="ipsSpoiler_contents">
		<pre class="ipsCode" id="ips_uid_4129_10">

Simple Text Output Format:

The simple text (ASCII) output contains time, position, and velocity data in
the fixed width fields (not delimited) defined in the following table:

    FIELD DESCRIPTION:      WIDTH:  NOTES:
    ----------------------- ------- ------------------------
    Sentence start          1       Always '@'
    ----------------------- ------- ------------------------
   /Year                    2       Last two digits of UTC year
  | ----------------------- ------- ------------------------
  | Month                   2       UTC month, "01".."12"
T | ----------------------- ------- ------------------------
i | Day                     2       UTC day of month, "01".."31"
m | ----------------------- ------- ------------------------
e | Hour                    2       UTC hour, "00".."23"
  | ----------------------- ------- ------------------------
  | Minute                  2       UTC minute, "00".."59"
  | ----------------------- ------- ------------------------
   \Second                  2       UTC second, "00".."59"
    ----------------------- ------- ------------------------
   /Latitude hemisphere     1       'N' or 'S'
  | ----------------------- ------- ------------------------
  | Latitude position       7       WGS84 ddmmmmm, with an implied
  |                                 decimal after the 4th digit
  | ----------------------- ------- ------------------------
  | Longitude hemishpere    1       'E' or 'W'
  | ----------------------- ------- ------------------------
  | Longitude position      8       WGS84 dddmmmmm with an implied
P |                                 decimal after the 5th digit
o | ----------------------- ------- ------------------------
s | Position status         1       'd' if current 2D differential GPS position
i |                                 'D' if current 3D differential GPS position
t |                                 'g' if current 2D GPS position
i |                                 'G' if current 3D GPS position
o |                                 'S' if simulated position
n |                                 '_' if invalid position
  | ----------------------- ------- ------------------------
  | Horizontal posn error   3       EPH in meters
  | ----------------------- ------- ------------------------
  | Altitude sign           1       '+' or '-'
  | ----------------------- ------- ------------------------
  | Altitude                5       Height above or below mean
   \                                sea level in meters
    ----------------------- ------- ------------------------
   /East/West velocity      1       'E' or 'W'
  |     direction
  | ----------------------- ------- ------------------------
  | East/West velocity      4       Meters per second in tenths,
  |     magnitude                   ("1234" = 123.4 m/s)
V | ----------------------- ------- ------------------------
e | North/South velocity    1       'N' or 'S'
l |     direction
o | ----------------------- ------- ------------------------
c | North/South velocity    4       Meters per second in tenths,
i |     magnitude                   ("1234" = 123.4 m/s)
t | ----------------------- ------- ------------------------
y | Vertical velocity       1       'U' (up) or 'D' (down)
  |     direction
  | ----------------------- ------- ------------------------
  | Vertical velocity       4       Meters per second in hundredths,
   \    magnitude                   ("1234" = 12.34 m/s)
    ----------------------- ------- ------------------------
    Sentence end            2       Carriage return, '0x0D', and
                                    line feed, '0x0A'
    ----------------------- ------- ------------------------

If a numeric value does not fill its entire field width, the field is padded
with leading '0's (eg. an altitude of 50 meters above MSL will be output as
"+00050").

Any or all of the data in the text sentence (except for the sentence start
and sentence end fields) may be replaced with underscores to indicate
invalid data.</pre>

		<p>
			 
		</p>
	</div>
</div>

<p>
	Мой маршрутизатор собран на базе стационарного компьютера, а следовательно можно смело брать приемник с <strong>USB</strong> интерфейсом. В наличии имеется отличный экземпляр от <strong>GlobalSat</strong> - <strong>BU-353U4</strong>.
</p>

<div class="ipsSpoiler" data-ipsspoiler="">
	<div class="ipsSpoiler_header">
		<span>Скрытый текст</span>
	</div>

	<div class="ipsSpoiler_contents">
		<p>
			<img alt="m-ntp-gps-2.jpg" class="ipsImage ipsImage_thumbnailed" data-fileid="237" data-unique="qa0ygf7zi" src="https://it4it.club/uploads/monthly_2016_02/m-ntp-gps-2.jpg.7168ab2b63bbb31854128f18bdedec08.jpg"></p>
	</div>
</div>

<div class="ipsSpoiler" data-ipsspoiler="">
	<div class="ipsSpoiler_header">
		<span>Скрытый текст</span>
	</div>

	<div class="ipsSpoiler_contents">
		<p>
			<img alt="m-ntp-gps-1.jpg" class="ipsImage ipsImage_thumbnailed" data-fileid="234" data-unique="bcyh4bqr1" src="https://it4it.club/uploads/monthly_2016_02/m-ntp-gps-1.jpg.9cafccbfa77d30e5d708dee48e87d776.jpg"></p>
	</div>
</div>

<div class="ipsSpoiler" data-ipsspoiler="">
	<div class="ipsSpoiler_header">
		<span>Скрытый текст</span>
	</div>

	<div class="ipsSpoiler_contents">
		<p>
			<img alt="m-ntp-gps-3.jpg" class="ipsImage ipsImage_thumbnailed" data-fileid="236" data-unique="pe29xzoxp" src="https://it4it.club/uploads/monthly_2016_02/m-ntp-gps-3.jpg.7e5f558da8bc102ab477e31d949ac333.jpg"></p>
	</div>
</div>

<div class="ipsSpoiler" data-ipsspoiler="">
	<div class="ipsSpoiler_header">
		<span>Скрытый текст</span>
	</div>

	<div class="ipsSpoiler_contents">
		<p>
			<img alt="m-ntp-gps-4.jpg" class="ipsImage ipsImage_thumbnailed" data-fileid="235" data-unique="v1q8hxth4" src="https://it4it.club/uploads/monthly_2016_02/m-ntp-gps-4.jpg.be80381fb9f3faa51242a5e01e225925.jpg"></p>
	</div>
</div>

<p>
	После подключения приемника переходим к настройки маршрутизатора.
</p>

<pre class="ipsCode" id="ips_uid_4129_13">
[admin@Kitsum] &gt; port print
Flags: I - inactive 
 #   DEVICE NAME                              CHANNELS USED-BY                            BAUD-RATE
 0          serial0                                  1 Serial Console                     9600     
 1   3:2    usb2                                     1                                    4800     
</pre>

<p>
	Отлично, маршрутизатор видит что-то на порту <strong>usb2</strong>, запоминаем его <strong>Flag (1)</strong> и выставляем настройки согласно техническим характеристикам от производителя. Естественно, что для Вашего "свистка" настройки могут отличаться.
</p>

<pre class="ipsCode" id="ips_uid_4442_5">
[admin@Kitsum] &gt; /port
[admin@Kitsum] /port&gt; set numbers=1 baud-rate=4800 data-bits=8 parity=none flow-control=none stop-bitsrs=1</pre>

<p>
	Все настройки с портами Вы можете провести через Web интерфейс или WinBox в разделе <strong>System</strong> -&gt; <strong>Ports</strong>
</p>

<div class="ipsSpoiler" data-ipsspoiler="">
	<div class="ipsSpoiler_header">
		<span>Скрытый текст</span>
	</div>

	<div class="ipsSpoiler_contents">
		<p>
			<img alt="m-ntp-gps-5.png" class="ipsImage ipsImage_thumbnailed" data-fileid="239" data-unique="vb89sgh5b" src="https://it4it.club/uploads/monthly_2016_02/m-ntp-gps-5.png.a86e24fa3432384c1c36ef86f1278d94.png"></p>
	</div>
</div>

<p>
	Теперь осталось дело за малым. Сообщим маршрутизатору, что на порту <strong>usb2</strong> висит <strong>GPS</strong> приемник, и он может им овладеть, то есть воспользоваться, ... блин использовать! И естественно, мы желаем, чтобы время, полученное в телеграмме от спутников считалось эталонным и использовалось как системное.
</p>

<pre class="ipsCode" id="ips_uid_4442_7">
[admin@Kitsum] &gt; /system gps
[admin@Kitsum] /system gps&gt; set enabled=yes port=usb2 set-system-time=yes</pre>

<div class="ipsSpoiler" data-ipsspoiler="">
	<div class="ipsSpoiler_header">
		<span>Скрытый текст</span>
	</div>

	<div class="ipsSpoiler_contents">
		<p>
			<img alt="m-ntp-gps-6.png" class="ipsImage ipsImage_thumbnailed" data-fileid="241" data-unique="oyvrl6h7j" src="https://it4it.club/uploads/monthly_2016_02/m-ntp-gps-6.png.fc0a1a5ea97ea864d111973f9b91547a.png"></p>
	</div>
</div>

<p>
	Теперь мы может посмотреть, какими именно данными мы начали располагать в следствии, этих сверх сложных манипуляций!
</p>

<p>
	Внимание: естественно, что при холодном старте, данные начнут поступать не сразу.
</p>

<pre class="ipsCode" id="ips_uid_4129_19">
[admin@Kitsum] &gt; /system gps 
[admin@Kitsum] /system gps&gt; 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]</pre>

<p>
	В данном случае получилось поймать сигнал с 9 спутников. Каждый из них передает нам свои координаты, а самое главное - время со встроенных атомных часов. Большая часть информации вычисляется уже по месту (скорость, высота ...).  Мы практически добились нужного результата.
</p>

<p>
	Естественно мы получаем время по Гринвичу (<strong>UTC+0</strong>), меня это не устраивает, видимо и Вас тоже. Необходимо подправить часовой пояс. Это можно сделать в <strong>System</strong> -&gt; <strong>Clock</strong>
</p>

<pre class="ipsCode" id="ips_uid_4442_9">
[admin@Kitsum] &gt; /system clock
[admin@Kitsum] /system clock&gt; set time-zone-autodetect=no time-zone-name=Europe/Moscow</pre>

<div class="ipsSpoiler" data-ipsspoiler="">
	<div class="ipsSpoiler_header">
		<span>Скрытый текст</span>
	</div>

	<div class="ipsSpoiler_contents">
		<p>
			<img alt="m-ntp-gps-7.png" class="ipsImage ipsImage_thumbnailed" data-fileid="240" data-unique="nzzxtbjji" src="https://it4it.club/uploads/monthly_2016_02/m-ntp-gps-7.png.1d3560f1892ec9a48fa8fed124d6cd97.png"></p>
	</div>
</div>

<p>
	И так, теперь Ваш маршрутизатор знает самое точное время на планете и им стоит поделиться хотя бы со всеми желающими в локальной сети. А таких поверьте, будет не мало. В современном мире все устройства жаждут обладать этой информации. Как же без этого Вам кофеварка сварит благородный напиток, или телевизор выключится и оградит молодое поколение от всего того, что оно и так потом узнает, а пока должно делать уроки, ммм?
</p>

<p>
	Необходимо поднять собственный <strong>NTP</strong> сервер и делается это сверх сложной и длинной командой.
</p>

<pre class="ipsCode" id="ips_uid_4442_11">
[admin@Kitsum] &gt; /system ntp server
[admin@Kitsum] /system ntp server&gt; set enabled=yes manycast=yes</pre>

<p>
	Ну, или просто выставлением соответствующей галочки в <strong>System</strong> -&gt; <strong>NTP Server</strong>
</p>

<p>
	И все было бы просто великолепно, если бы устройства в сети знали, что мы владеем более точным временем, чем <strong>time.windows.com</strong>, <strong>time.nist.gov</strong> да и сотни других серверов. Первая мысль, которая посетила меня - просто подменю ip адреса в записях DNS и "вуаля", но я даже понятия не имею с чем синхронизируется мой телефон, телевизор и у кого, после очередного обновления, захочет узнать время мой компьютер.
</p>

<p>
	Мы знаем, что <strong>NTP </strong>протокол использует <strong>123 UDP</strong> порт для общения. Предлагаю перехватывать все запросы, из нашей локальной сети, адресованные на этот порт во внешний мир и заворачивать их на внутренний IP маршрутизатора!
</p>

<p>
	У меня все сетевые интерфейсы локальной сети объедены в <strong>Bridge</strong> и весь трафик ходит во внешний мир через через NAT и masquerade, внутренний адрес маршрутизатора <strong>10.10.10.1</strong>
</p>

<p>
	Добавим новое правило в <strong>NAT</strong>
</p>

<pre class="ipsCode" id="ips_uid_4442_13">
[admin@Kitsum] &gt; /ip firewall nat
[admin@Kitsum] /ip firewall nat&gt; add action=dst-nat chain=dstnat dst-port=123 in-interface=bridge1 protocol=udp to-addresses=10.10.10.1 to-ports=123</pre>

<p>
	На этом все.
</p>

<p>
	<strong>PS</strong>: зачем? потому что хочется и есть возможность!
</p>

<p>
<script src="https://www.ntp-servers.net/infoscript.js?type=1&amp;bg=ffffff&amp;c=000000&amp;c1=df0007&amp;c2=000000"></script></p>
]]></description><guid isPermaLink="false">28</guid><pubDate>Mon, 08 Feb 2016 16:12:12 +0000</pubDate></item><item><title>&#x41D;&#x435;&#x43E;&#x431;&#x44B;&#x447;&#x43D;&#x44B;&#x439; &#x441;&#x43F;&#x43E;&#x441;&#x43E;&#x431; &#x432;&#x43E;&#x441;&#x441;&#x442;&#x430;&#x43D;&#x43E;&#x432;&#x43B;&#x435;&#x43D;&#x438;&#x44F; &#x442;&#x43E;&#x43D;&#x43D;&#x435;&#x43B;&#x44F; &#x43C;&#x435;&#x436;&#x434;&#x443; MikroTik &#x438; Cisco</title><link>https://it4it.club/topic/14-%D0%BD%D0%B5%D0%BE%D0%B1%D1%8B%D1%87%D0%BD%D1%8B%D0%B9-%D1%81%D0%BF%D0%BE%D1%81%D0%BE%D0%B1-%D0%B2%D0%BE%D1%81%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D1%8F-%D1%82%D0%BE%D0%BD%D0%BD%D0%B5%D0%BB%D1%8F-%D0%BC%D0%B5%D0%B6%D0%B4%D1%83-mikrotik-%D0%B8-cisco/</link><description><![CDATA[
<p style="line-height:16.8pt;"><span style="font-size:10.5pt;font-family:Helvetica, sans-serif;">Необычные проблемы требуют необычных решений.</span></p><p style="line-height:16.8pt;"><a class="ipsAttachLink ipsAttachLink_image" href="https://it4it.club/uploads/monthly_2015_09/Tunnel_bouwen_cartoon.jpg.f771cb583c86d2be14a115b9f4a529ec.jpg"><img data-fileid="47" class="ipsImage ipsImage_thumbnailed" alt="Tunnel_bouwen_cartoon.thumb.jpg.190c8d38" src="https://it4it.club/uploads/monthly_2015_09/Tunnel_bouwen_cartoon.thumb.jpg.190c8d38b2de64525d8f0ed210fbf99b.jpg"></a></p><p style="line-height:16.8pt;"><strong><span style="font-size:10.5pt;font-family:Helvetica, sans-serif;">Начнем с прелюдии</span></strong></p><p><span style="font-size:10.5pt;font-family:Helvetica, sans-serif;">На определенном удалении друг от друга имеются две локальные домашние сети. Во главе одной стоит маршрутизатор на базе стационарного компьютера с RouterOS на борту, а сердцем второй является Cisco 800-ой серии (далее просто Кошка). В каждой из сетей имеются ресурсы представляющие интерес друг для друга. И вот настал прекрасный момент,  была приобретена статика, и начался процесс поднятия GRE тоннеля. Все завелось с первого раза, пакетики побежали между сетями. Данное событие было отмечено, как подобает Русскому представителю IT сообщества и все разошлись заниматься своими делами.</span></p><p><span style="font-size:10.5pt;font-family:Helvetica, sans-serif;">Но счастье было не долгим. Через пару дней, из-за не преодолимых обстоятельств, произошло отключение питания на стороне "Кошки" и MikroTik начал скучать и ждать своего боевого товарища. После проведения аварийно-восстановительных работ "Кошка" радостно заурчала, но пакетики не побежали. </span></p><p><span style="font-size:10.5pt;font-family:Helvetica, sans-serif;">Вскрытие показало, что провайдер не поддерживает адекватную работу с DHCP семейства кошачьих и в панике выдавал первый свободный IP из пула, со всеми вытекающими последствиями. Несколько недель велись переговоры с провайдером, и раз эта статья была написана, значит, провайдер пока не добился положительного результата.</span></p><p><span style="font-size:10.5pt;font-family:Helvetica, sans-serif;">Решено разбираться самостоятельно и попробовать поднимать тоннель, основываясь только на одном статическом адресе. Ведь в цирке медведи ездят на одноколесных велосипедах? А чем мы хуже медведей?!</span></p><p><strong>Реализация</strong></p><p style="line-height:16.8pt;">Кошка будет гулять по всему пулу адресов провайдера, следовательно, приспосабливаться к этим загулам придется MiktoTik-у. Средствами RouterOS решить эту проблему сходу не получилось и решено вводить в бой тяжелую артиллерию, это сверх мощный и производительный сервер Raspberry Pi <img title=":$" alt=":$" src="https://it4it.club/uploads/emoticons/blush.png"> А Вы, что подумали?) Эта игрушка с 512mb RAM, 800мГц CPU, Lunux-ом на борту и питанием от USB разъема самого MikroTik-а очень сильно расширяет функционал маршрутизатора, не повышая расходы на электроэнергию и общую стоимость проекта. </p><p style="line-height:16.8pt;">Если быть серьезным, то MikroTik API + <span style="line-height:22.3999996185303px;">R</span><span style="line-height:22.3999996185303px;">aspberry Pi (далее просто Малина) позволяют реализовать практически любую Вашу фантазию.</span></p><p style="line-height:16.8pt;"><em><span style="line-height:22.3999996185303px;">Фото моего роутера</span></em></p><blockquote class="ipsStyle_spoiler" data-ipsspoiler=""><p style="line-height:16.8pt;"><span style="line-height:22.3999996185303px;"><a class="ipsAttachLink ipsAttachLink_image" href="https://it4it.club/uploads/monthly_2015_09/DSC_0382.jpg.021719256d046173c55477af6d0eda13.jpg"><img data-fileid="44" class="ipsImage ipsImage_thumbnailed" alt="DSC_0382.thumb.jpg.9a01371273d962d6518e2" src="https://it4it.club/uploads/monthly_2015_09/DSC_0382.thumb.jpg.9a01371273d962d6518e2cda5e23d626.jpg"></a><a class="ipsAttachLink ipsAttachLink_image" href="https://it4it.club/uploads/monthly_2015_09/DSC_0387.jpg.80ab552ee35d68510aa85e441a84fad7.jpg"><img data-fileid="46" class="ipsImage ipsImage_thumbnailed" alt="DSC_0387.thumb.jpg.257a52ba00f7f089191e5" src="https://it4it.club/uploads/monthly_2015_09/DSC_0387.thumb.jpg.257a52ba00f7f089191e5b1645b7ae19.jpg"></a></span></p></blockquote><blockquote class="ipsStyle_spoiler" data-ipsspoiler=""><p style="line-height:16.8pt;"><a class="ipsAttachLink ipsAttachLink_image" href="https://it4it.club/uploads/monthly_2015_09/DSC_0385.jpg.f0ceea17da67894d33ce4b5563a04404.jpg"><img data-fileid="45" class="ipsImage ipsImage_thumbnailed" alt="DSC_0385.thumb.jpg.6c1943f1d67cb1b3d1fb1" src="https://it4it.club/uploads/monthly_2015_09/DSC_0385.thumb.jpg.6c1943f1d67cb1b3d1fb1ef9c635e384.jpg"></a></p></blockquote><blockquote class="ipsStyle_spoiler" data-ipsspoiler=""><p style="line-height:16.8pt;"><a class="ipsAttachLink ipsAttachLink_image" href="https://it4it.club/uploads/monthly_2015_09/DSC_0381.jpg.182e5d51c5e76be0c32345615df49a41.jpg"><img data-fileid="43" class="ipsImage ipsImage_thumbnailed" alt="DSC_0381.thumb.jpg.74f0b91cfae38c892ab21" src="https://it4it.club/uploads/monthly_2015_09/DSC_0381.thumb.jpg.74f0b91cfae38c892ab21bcebc3ab2fc.jpg"></a></p></blockquote><p style="line-height:16.8pt;">Поведение будет следующим:</p><ol><li style="line-height:16.8pt;">На MikroTik-е настраивается проброс 80 порта до Малины.</li><li style="line-height:16.8pt;">Cisco каждые N минут будет обращаться по протоколу http на <span style="line-height:22.3999996185303px;">R</span><span style="line-height:22.3999996185303px;">aspberry Pi и методом GET передавать секретный ключ.</span></li><li style="line-height:16.8pt;"><span style="line-height:22.3999996185303px;">На борту Малинки крутится Apache + PHP. Последний проверяет корректность ключа, реализуя идентификацию кошки по схеме "Свой\Чужой".</span></li><li style="line-height:16.8pt;">Если идентификация пройдена успешно, то по средствам API маршрутизатора происходит перенастройка GRE тоннеля.</li></ol><p><span style="color:#008000;">Хочу отметить, что таким способом можно производить конфигурацию всего маршрутизатора, а не только GRE.</span></p><p><em>Проброс портов на MikroTik-е</em></p><pre class="ipsCode prettyprint">/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</pre><ol><li><strong>in-interface</strong> - имя интерфейса смотрящего в интернет</li><li><strong>to-addresses</strong> - внутренний адрес малинки</li></ol><p><em>Не забудьте активировать сервис API у маршрутизатора.</em></p><pre class="ipsCode prettyprint">/ip service enable 5 </pre><p><em>Настройка Cisco</em></p><pre class="ipsCode prettyprint">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
</pre><blockquote class="ipsStyle_spoiler" data-ipsspoiler=""><pre class="ipsCode prettyprint">cisco-test#more ?
  /ascii    Display binary files in ascii
  /binary   Force display to hex/text format
  /ebcdic   Display binary files in ebcdic
  archive:  File to display
  cns:      File to display
  flash:    File to display
  ftp:      File to display
  http:     File to display
  https:    File to display
  null:     File to display
  nvram:    File to display
  rcp:      File to display
  scp:      File to display
  system:   File to display
  tar:      File to display
  tftp:     File to display
  xmodem:   File to display
  ymodem:   File to display
</pre></blockquote><p><span style="line-height:22.3999996185303px;">В данном случае настраивается задание для планировщика </span><strong style="line-height:22.3999996185303px;">KRON</strong><span style="line-height:22.3999996185303px;"> на выполнение команды </span><strong style="line-height:22.3999996185303px;">more</strong><span style="line-height:22.3999996185303px;"> каждые</span><span style="line-height:22.3999996185303px;"> </span><strong style="line-height:22.3999996185303px;">15 минут</strong><span style="line-height:22.3999996185303px;">. Сама команда просто выводит на экран содержимое из различных источников. Естественно необходимо изменить IP адрес на актуальный для Вас.</span></p><p><font color="#ff0000"><span style="line-height:22.3999996185303px;">Значение </span></font><strong style="color:rgb(255,0,0);line-height:22.3999996185303px;">key</strong><font color="#ff0000"><span style="line-height:22.3999996185303px;"> необходимо изменить на Ваш ключ, указанный в PHP скрипте ниже и </span>закодированный<span style="line-height:22.3999996185303px;"> в </span></font><strong style="color:rgb(255,0,0);line-height:22.3999996185303px;">md5!</strong></p><p><span style="color:#FF0000;">Еще один важный момент. В <strong>GET</strong> запросе, символ вопроса <strong>"?"</strong> обозначает, что начинается передача параметров. В <strong>Cisco</strong> это спец символ показывающий справку по командам и чтобы его ввести, необходимо перед его написанием нажать <strong>Ctrl + V</strong></span></p><p><em>PHP Script для <span style="line-height:22.3999996185303px;">Raspberry Pi</span></em></p><p>Нам понадобится PHP class для работы с RouterOS API <a rel="external nofollow" href="https://github.com/BenMenking/routeros-api">https://github.com/BenMenking/routeros-api</a></p><pre class="ipsCode prettyprint">&lt;?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-&gt;connect($host, $login, $pass)) {
        $API-&gt;write('/interface/gre/print');
        foreach($API-&gt;read() as $id =&gt; $param) {
            if($param['name'] == $interfaceName and $param["remote-address"] != $_SERVER['REMOTE_ADDR']) {
                $API-&gt;comm("/interface/gre/set", array(
                    "numbers" =&gt; $id, 
                    "remote-address" =&gt; $_SERVER['REMOTE_ADDR'],
                ));
                break;
            }
        }        
        $API-&gt;disconnect();
    }
}
?&gt;</pre><p>В данном скрипте при совпадении ключей происходит поиск интерфейса <span style="color:#008000;">gre-tunnel1</span> в ветке <span style="color:#008000;">/interface/gre</span> и в случае его обнаружения следует изменение параметра <span style="color:#008000;">remote-address</span> на IP клиента передавшего верный ключ в формате <span style="color:#008000;">md5</span>.</p><p>Более подробно почитать об API можно на официальном сайте <a rel="external nofollow" href="http://wiki.mikrotik.com/wiki/Manual:API">http://wiki.mikrotik.com/wiki/Manual:API</a></p><p><strong>PS</strong>: Данный вариант управления маршрутизатором довольно забавен и очень гибок, но будьте очень осторожны, "друзья" Эдварда не дремлют! <span style="color:#FF0000;">Советую также использовать https, фильтр по IP (провайдера) в коде скрипта и в фаерволе MikroTik-а.</span></p><p><a class="ipsAttachLink" href="https://it4it.club/applications/core/interface/file/attachment.php?id=48">routeros_cisco_rpi.zip</a></p>
]]></description><guid isPermaLink="false">14</guid><pubDate>Thu, 10 Sep 2015 11:28:35 +0000</pubDate></item></channel></rss>
