<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
	<id>https://wiki.entcor.ru/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Dima</id>
	<title>EWiki - Вклад [ru]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.entcor.ru/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Dima"/>
	<link rel="alternate" type="text/html" href="https://wiki.entcor.ru/index.php/%D0%A1%D0%BB%D1%83%D0%B6%D0%B5%D0%B1%D0%BD%D0%B0%D1%8F:%D0%92%D0%BA%D0%BB%D0%B0%D0%B4/Dima"/>
	<updated>2026-06-12T14:07:57Z</updated>
	<subtitle>Вклад</subtitle>
	<generator>MediaWiki 1.45.3</generator>
	<entry>
		<id>https://wiki.entcor.ru/index.php?title=%D0%9E%D0%B1%D1%8A%D0%B5%D0%BA%D1%82%D1%8B_%D0%BA%D0%B0%D1%80%D1%82_E-NODE_Firewall&amp;diff=489</id>
		<title>Объекты карт E-NODE Firewall</title>
		<link rel="alternate" type="text/html" href="https://wiki.entcor.ru/index.php?title=%D0%9E%D0%B1%D1%8A%D0%B5%D0%BA%D1%82%D1%8B_%D0%BA%D0%B0%D1%80%D1%82_E-NODE_Firewall&amp;diff=489"/>
		<updated>2025-10-22T12:39:26Z</updated>

		<summary type="html">&lt;p&gt;Dima: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Объекты на картах E-NODE Firewall ==&lt;br /&gt;
&lt;br /&gt;
=== Терминология: ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Карта политик (firewallMap)&#039;&#039;&#039; - графическое представление информационного взаимодействия компонентов карты и их принадлежности к тем или иным функциональным зонам.   &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Простой компонент карты&#039;&#039;&#039; -  компонент карты, графически представляющий на карте объект брандмауэра. При &amp;quot;проваливании&amp;quot; внутрь простого компонента карты можно получить доступ к информации о связанном объекте брандмауэра и выполнить его редактирование.    &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Составной компонент карты&#039;&#039;&#039; - компонент карты, графически представляющий на карте сетевой объект брандмауэра. При &amp;quot;проваливании&amp;quot; внутрь составного компонента карты можно получить доступ к информации о связанном сетевом объекте брандмауэра и выполнить его редактирование.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Объект  брандмауэра (firewallEntity)&#039;&#039;&#039; - внутренний объект ПО E-NODE Firewall, который представляет собой абстрактный объект, участвующий в информационном взаимодействии и связанный с внутренним объектом типа хост (host).    &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Хост (host)&#039;&#039;&#039;  - внутренний объект ПО E-NODE Firewall, представляющий собой связь с одним из экземпляров установленного ПО Хост-агент, для  которого определяется принадлежность к той или иной функциональной зоне. Посредством данного объекта на ПО Хост-агент передаются правила МСЭ, генерируемые политиками соответствующих зон, а также с автоматически собирается различная информация о работе ПО.    &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Сетевой объект  брандмауэра (firewallNetEntity)&#039;&#039;&#039; - внутренний объект ПО E-NODE Firewall, который представляет собой абстрактный объект (в т.ч. составной), участвующий в информационном взаимодействии и обладающий единой точкой приема-передачи информационных потоков для всех составляющих его элементов. Основными типами сетевых объектов, применяемых в ПО E-NODE Firewall, являются:  &lt;br /&gt;
&lt;br /&gt;
* Сеть - представляет собой совокупность хостов, определяемых на основе IP/маски и совместно участвующих в информационном взаимодействии по общим для всех хостов правилам;&lt;br /&gt;
* Сервис - представляет собой составной объект, компоненты которого в совокупности обеспечивают функциональность единого информационного сервиса (например, совокупность Web-сервера, сервера базы данных и сервера балансировки обеспечивают работу Web-ресурса как единого объекта информационного взаимодействия);&lt;br /&gt;
&#039;&#039;&#039;Функциональная зона&#039;&#039;&#039; (сегмент, plane) - элемент карты (а также внутренний объект ПО E-NODE Firewall), определяющий политику информационного взаимодействия  объектов, входящих в зону. При создании зоны предполагается, что ко всем объектам, входящим в зону, применяется единая политика информационного взаимодействия (например, для всех серверов, входящих в зону Control Plane, разрешается доступ по протоколу SSH по 22 порту). &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Политика&#039;&#039;&#039; - набор правил информационного взаимодействия, определяемых для каждой зоны и автоматически распространяющихся на все  объекты, относящиеся к данной зоне. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Правило информационного взаимодействия&#039;&#039;&#039;  - определяет разрешенный вид информационного взаимодействия между сетевыми объектами на основе заданных IP, маски, порта и вида протокола. &lt;br /&gt;
&lt;br /&gt;
=== Иерархия объектов карты ===&lt;br /&gt;
&lt;br /&gt;
При построении и работе с картой формируется следующая иерархия объектов:  &lt;br /&gt;
&lt;br /&gt;
* Карта является высшим уровнем иерархии и включает в себя связанные между собой простые и составные компоненты, а также функциональные зоны, в которые они входят. При этом порядок информационного взаимодействия между компонентами определяется принадлежностью их внутренних объектов к той или иной зоне;&lt;br /&gt;
* Простой компонент карты включает в себя объект брандмауэра, который можно просматривать и редактировать и через который осуществляется доступ к объекту типа хост;&lt;br /&gt;
* Объект брандмауэра включает в себя объект типа хост, который непосредственно связан с физическим/виртуальным хостом, на котором развернуто ПО Хост-агент. При генерации правил информационного взаимодействия для того или иного хоста они будут автоматически применяться на связанном с ним экземпляре ПО Хост-агент.&lt;br /&gt;
* Составной компонент включает в себя внутренний(ие) сетевой(ые) объект(ы), которые описывают сущности,  непосредственно участвующие в сетевом взаимодействии (серверы, сети, сервисы и т.п.);&lt;br /&gt;
* Для объектов брандмауэра и сетевых объектов брандмауэра генерируются правила межсетевого экрана, которые определяют их информационное взаимодействие.&lt;/div&gt;</summary>
		<author><name>Dima</name></author>
	</entry>
	<entry>
		<id>https://wiki.entcor.ru/index.php?title=%D0%9E%D0%B1%D1%8A%D0%B5%D0%BA%D1%82%D1%8B_%D0%BA%D0%B0%D1%80%D1%82_E-NODE_Firewall&amp;diff=488</id>
		<title>Объекты карт E-NODE Firewall</title>
		<link rel="alternate" type="text/html" href="https://wiki.entcor.ru/index.php?title=%D0%9E%D0%B1%D1%8A%D0%B5%D0%BA%D1%82%D1%8B_%D0%BA%D0%B0%D1%80%D1%82_E-NODE_Firewall&amp;diff=488"/>
		<updated>2025-10-22T12:22:23Z</updated>

		<summary type="html">&lt;p&gt;Dima: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Объекты на картах E-NODE Firewall ==&lt;br /&gt;
&lt;br /&gt;
=== Терминология: ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Карта политик (firewallMap)&#039;&#039;&#039; - графическое представление информационного взаимодействия компонентов карты и их принадлежности к тем или иным функциональным зонам.   &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Простой компонент карты&#039;&#039;&#039; -  компонент карты, графически представляющий на карте объект брандмауэра. При &amp;quot;проваливании&amp;quot; внутрь простого компонента карты можно получить доступ к информации о связанном объекте брандмауэра и выполнить его редактирование.    &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Составной компонент карты&#039;&#039;&#039; - компонент карты, графически представляющий на карте сетевой объект брандмауэра. При &amp;quot;проваливании&amp;quot; внутрь составного компонента карты можно получить доступ к информации о связанном сетевом объекте брандмауэра и выполнить его редактирование.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Объект  брандмауэра (firewallEntity)&#039;&#039;&#039; - внутренний объект ПО E-NODE Firewall, который представляет собой абстрактный объект, участвующий в информационном взаимодействии и связанный с внутренним объектом типа хост (host).    &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Хост (host)&#039;&#039;&#039;  - внутренний объект ПО E-NODE Firewall, представляющий собой отдельный хост, с установленным на нем ПО Хост-агент и для  которого определяется принадлежность к той или иной функциональной зоне. На такой хост передаются правила МСЭ, генерируемые политиками соответствующих зон, а также с такого хоста можно автоматически получать различную информацию о его работе.    &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Сетевой объект  брандмауэра (firewallNetEntity)&#039;&#039;&#039; - внутренний объект ПО E-NODE Firewall, который представляет собой абстрактный объект (в т.ч. составной), участвующий в информационном взаимодействии и обладающий единой точкой приема-передачи информационных потоков для всех составляющих его элементов. Основными типами сетевых объектов, применяемых в ПО E-NODE Firewall, являются:  &lt;br /&gt;
&lt;br /&gt;
* Сеть - представляет собой совокупность хостов, определяемых на основе IP/маски и совместно участвующих в информационном взаимодействии по общим для всех хостов правилам;&lt;br /&gt;
* Сервис - представляет собой составной объект, компоненты которого в совокупности обеспечивают функциональность единого информационного сервиса (например, совокупность Web-сервера, сервера базы данных и сервера балансировки обеспечивают работу Web-ресурса как единого объекта информационного взаимодействия);&lt;br /&gt;
&#039;&#039;&#039;Функциональная зона&#039;&#039;&#039; (сегмент, plane) - элемент карты (а также внутренний объект ПО E-NODE Firewall), определяющий политику информационного взаимодействия  объектов, входящих в зону. При создании зоны предполагается, что ко всем объектам, входящим в зону, применяется единая политика информационного взаимодействия (например, для всех серверов, входящих в зону Control Plane, разрешается доступ по протоколу SSH по 22 порту). &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Политика&#039;&#039;&#039; - набор правил информационного взаимодействия, определяемых для каждой зоны и автоматически распространяющихся на все  объекты, относящиеся к данной зоне. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Правило информационного взаимодействия&#039;&#039;&#039;  - определяет разрешенный вид информационного взаимодействия между сетевыми объектами на основе заданных IP, маски, порта и вида протокола. &lt;br /&gt;
&lt;br /&gt;
=== Иерархия объектов карты ===&lt;br /&gt;
&lt;br /&gt;
При построении и работе с картой формируется следующая иерархия объектов:  &lt;br /&gt;
&lt;br /&gt;
* Карта является высшим уровнем иерархии и включает в себя абстрактные сетевые объекты и зоны, в которые они входят, при этом порядок информационного взаимодействия между сетевыми объектами определяется принадлежностью сетевых объектов к той или иной зоне; &lt;br /&gt;
* Сетевой объект включает в себя внутренний объекты/объекты, непосредственно участвующие в сетевом взаимодействии (серверы, сети и т.п.), а также те или иные хосты с установленными агентами; &lt;br /&gt;
* Хост с агентом как объект ПО E-NODE Firewall непосредственно связан с физическим/виртуальным хостом, на котором развернуто ПО Хост-агент. При генерации правил информационного взаимодействия для того или иного хоста с агентом они будут автоматически применяться на связанном с ним экземпляре ПО Хост-агент.&lt;/div&gt;</summary>
		<author><name>Dima</name></author>
	</entry>
	<entry>
		<id>https://wiki.entcor.ru/index.php?title=%D0%9E%D0%B1%D1%8A%D0%B5%D0%BA%D1%82%D1%8B_%D0%BA%D0%B0%D1%80%D1%82_E-NODE_Firewall&amp;diff=487</id>
		<title>Объекты карт E-NODE Firewall</title>
		<link rel="alternate" type="text/html" href="https://wiki.entcor.ru/index.php?title=%D0%9E%D0%B1%D1%8A%D0%B5%D0%BA%D1%82%D1%8B_%D0%BA%D0%B0%D1%80%D1%82_E-NODE_Firewall&amp;diff=487"/>
		<updated>2025-10-22T12:02:52Z</updated>

		<summary type="html">&lt;p&gt;Dima: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Объекты на картах E-NODE Firewall ==&lt;br /&gt;
&lt;br /&gt;
=== Терминология: ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Карта политик (firewallMap)&#039;&#039;&#039; - графическое представление информационного взаимодействия компонентов карты и их принадлежности к тем или иным функциональным зонам.   &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Сетевой компонент карты&#039;&#039;&#039; -    &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Сервисный компоненты карты&#039;&#039;&#039; -    &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Сетевой объект  брандмауэра (firewallNetEntity)&#039;&#039;&#039; - внутренний объект ПО E-NODE Firewall, который представляет собой абстрактный объект, участвующий в информационном взаимодействии и обладающий единой точкой приема-передачи информационных потоков. Основными типами сетевых объектов, применяемых в ПО E-NODE Firewall, являются:&lt;br /&gt;
&lt;br /&gt;
* Сеть - представляет собой совокупность хостов, определяемых на основе IP/маски и совместно участвующих в информационном взаимодействии по общим для всех хостов правилам;&lt;br /&gt;
* Сервис - представляет собой составной объект, компоненты которого в совокупности обеспечивают функциональность единого информационного сервиса (например, совокупность Web-сервера, сервера базы данных и сервера балансировки обеспечивают работу Web-ресурса как единого объекта информационного взаимодействия);&lt;br /&gt;
&#039;&#039;&#039;Зона&#039;&#039;&#039; (сегмент, plane) - элемент карты (а также внутренний объект ПО E-NODE Firewall), определяющий политику информационного взаимодействия сетевых объектов, входящих в зону. При создании зоны предполагается, что ко всем сетевым объектам, входящим в зону, применяется единая политика информационного взаимодействия (например, для всех серверов, входящих в зону Control Plane, разрешается доступ по протоколу SSH по 22 порту). &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Хост с агентом&#039;&#039;&#039; - элемент карты (а также внутренний объект ПО E-NODE Firewall), представляющий собой отдельный хост, с установленным на нем ПО Хост-агент. На такой хост передаются правила МСЭ, генерируемые политиками соответствующих зон, а также с такого хоста можно автоматически получать различную информацию о его работе. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Политика&#039;&#039;&#039; - набор правил информационного взаимодействия, определяемых для каждой зоны и автоматически распространяющихся на все сетевые объекты, относящиеся к данной зоне.  &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Правило информационного взаимодействия&#039;&#039;&#039;  - определяет разрешенный вид информационного взаимодействия между сетевыми объектами на основе заданных IP, маски, порта и вида протокола. &lt;br /&gt;
&lt;br /&gt;
=== Иерархия объектов карты ===&lt;br /&gt;
&lt;br /&gt;
При построении и работе с картой формируется следующая иерархия объектов:  &lt;br /&gt;
&lt;br /&gt;
* Карта является высшим уровнем иерархии и включает в себя абстрактные сетевые объекты и зоны, в которые они входят, при этом порядок информационного взаимодействия между сетевыми объектами определяется принадлежностью сетевых объектов к той или иной зоне; &lt;br /&gt;
* Сетевой объект включает в себя внутренний объекты/объекты, непосредственно участвующие в сетевом взаимодействии (серверы, сети и т.п.), а также те или иные хосты с установленными агентами; &lt;br /&gt;
* Хост с агентом как объект ПО E-NODE Firewall непосредственно связан с физическим/виртуальным хостом, на котором развернуто ПО Хост-агент. При генерации правил информационного взаимодействия для того или иного хоста с агентом они будут автоматически применяться на связанном с ним экземпляре ПО Хост-агент.&lt;/div&gt;</summary>
		<author><name>Dima</name></author>
	</entry>
	<entry>
		<id>https://wiki.entcor.ru/index.php?title=%D0%9E%D0%B1%D1%8A%D0%B5%D0%BA%D1%82%D1%8B_%D0%BA%D0%B0%D1%80%D1%82_E-NODE_Firewall&amp;diff=486</id>
		<title>Объекты карт E-NODE Firewall</title>
		<link rel="alternate" type="text/html" href="https://wiki.entcor.ru/index.php?title=%D0%9E%D0%B1%D1%8A%D0%B5%D0%BA%D1%82%D1%8B_%D0%BA%D0%B0%D1%80%D1%82_E-NODE_Firewall&amp;diff=486"/>
		<updated>2025-10-18T06:38:53Z</updated>

		<summary type="html">&lt;p&gt;Dima: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Объекты на картах E-NODE Firewall ==&lt;br /&gt;
&lt;br /&gt;
=== Терминология: ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Карта&#039;&#039;&#039; - графическое представление информационного взаимодействия сетевых объектов (элементов карты) и их принадлежности к тем или иным зонам.   &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Сетевой объект&#039;&#039;&#039; - элемент карты (а также внутренний объект ПО E-NODE Firewall), который представляет собой абстрактный объект, участвующий в информационном взаимодействии и обладающий единой точкой приема-передачи информационных потоков. Основными типами сетевых объектов, применяемых в ПО E-NODE Firewall, являются:&lt;br /&gt;
&lt;br /&gt;
* Хост - представляет собой простой объект, участвующий в информационном взаимодействии как отдельный хост, предоставляющий (например, сервер базы данных) или запрашивающий (например, компьютер администратора) ту или иную функциональность;&lt;br /&gt;
* Сервис - представляет собой составной объект, компоненты которого в совокупности обеспечивают функциональность единого информационного сервиса (например, совокупность Web-сервера, сервера базы данных и сервера балансировки обеспечивают работу Web-ресурса как единого объекта информационного взаимодействия);&lt;br /&gt;
* Приложение - представляет собой составной объект, компоненты которого в совокупности обеспечивают функциональность единого приложения (например, совокупность Web-сервера, сервера базы данных и сервера 1С обеспечивают работу 1С как единого объекта информационного взаимодействия);&lt;br /&gt;
* Сеть - представляет собой совокупность хостов, определяемых на основе IP/маски и совместно участвующих в информационном взаимодействии по общим для всех хостов правилам;&lt;br /&gt;
&#039;&#039;&#039;Зона&#039;&#039;&#039; (сегмент, plane) - элемент карты (а также внутренний объект ПО E-NODE Firewall), определяющий политику информационного взаимодействия сетевых объектов, входящих в зону. При создании зоны предполагается, что ко всем сетевым объектам, входящим в зону, применяется единая политика информационного взаимодействия (например, для всех серверов, входящих в зону Control Plane, разрешается доступ по протоколу SSH по 22 порту). &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Хост с агентом&#039;&#039;&#039; - элемент карты (а также внутренний объект ПО E-NODE Firewall), представляющий собой отдельный хост, с установленным на нем ПО Хост-агент. На такой хост передаются правила МСЭ, генерируемые политиками соответствующих зон, а также с такого хоста можно автоматически получать различную информацию о его работе. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Политика&#039;&#039;&#039; - набор правил информационного взаимодействия, определяемых для каждой зоны и автоматически распространяющихся на все сетевые объекты, относящиеся к данной зоне.  &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Правило информационного взаимодействия&#039;&#039;&#039;  - определяет разрешенный вид информационного взаимодействия между сетевыми объектами на основе заданных IP, маски, порта и вида протокола. &lt;br /&gt;
&lt;br /&gt;
=== Иерархия объектов карты ===&lt;br /&gt;
&lt;br /&gt;
При построении и работе с картой формируется следующая иерархия объектов:  &lt;br /&gt;
&lt;br /&gt;
* Карта является высшим уровнем иерархии и включает в себя абстрактные сетевые объекты и зоны, в которые они входят, при этом порядок информационного взаимодействия между сетевыми объектами определяется принадлежностью сетевых объектов к той или иной зоне; &lt;br /&gt;
* Сетевой объект включает в себя внутренний объекты/объекты, непосредственно участвующие в сетевом взаимодействии (серверы, сети и т.п.), а также те или иные хосты с установленными агентами; &lt;br /&gt;
* Хост с агентом как объект ПО E-NODE Firewall непосредственно связан с физическим/виртуальным хостом, на котором развернуто ПО Хост-агент. При генерации правил информационного взаимодействия для того или иного хоста с агентом они будут автоматически применяться на связанном с ним экземпляре ПО Хост-агент.&lt;/div&gt;</summary>
		<author><name>Dima</name></author>
	</entry>
	<entry>
		<id>https://wiki.entcor.ru/index.php?title=%D0%9E%D0%B1%D1%8A%D0%B5%D0%BA%D1%82%D1%8B_%D0%BA%D0%B0%D1%80%D1%82_E-NODE_Firewall&amp;diff=485</id>
		<title>Объекты карт E-NODE Firewall</title>
		<link rel="alternate" type="text/html" href="https://wiki.entcor.ru/index.php?title=%D0%9E%D0%B1%D1%8A%D0%B5%D0%BA%D1%82%D1%8B_%D0%BA%D0%B0%D1%80%D1%82_E-NODE_Firewall&amp;diff=485"/>
		<updated>2025-10-18T06:38:07Z</updated>

		<summary type="html">&lt;p&gt;Dima: /* Терминология: */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Объекты на картах E-NODE Firewall ==&lt;br /&gt;
&lt;br /&gt;
=== Терминология: ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Карта&#039;&#039;&#039; - графическое представление информационного взаимодействия сетевых объектов (элементов карты) и их принадлежности к тем или иным зонам.   &#039;&#039;&#039;Сетевой объект&#039;&#039;&#039; - элемент карты (а также внутренний объект ПО E-NODE Firewall), который представляет собой абстрактный объект, участвующий в информационном взаимодействии и обладающий единой точкой приема-передачи информационных потоков. Основными типами сетевых объектов, применяемых в ПО E-NODE Firewall, являются:&lt;br /&gt;
&lt;br /&gt;
* Хост - представляет собой простой объект, участвующий в информационном взаимодействии как отдельный хост, предоставляющий (например, сервер базы данных) или запрашивающий (например, компьютер администратора) ту или иную функциональность; &lt;br /&gt;
* Сервис - представляет собой составной объект, компоненты которого в совокупности обеспечивают функциональность единого информационного сервиса (например, совокупность Web-сервера, сервера базы данных и сервера балансировки обеспечивают работу Web-ресурса как единого объекта информационного взаимодействия);&lt;br /&gt;
* Приложение - представляет собой составной объект, компоненты которого в совокупности обеспечивают функциональность единого приложения (например, совокупность Web-сервера, сервера базы данных и сервера 1С обеспечивают работу 1С как единого объекта информационного взаимодействия);&lt;br /&gt;
* Сеть - представляет собой совокупность хостов, определяемых на основе IP/маски и совместно участвующих в информационном взаимодействии по общим для всех хостов правилам;  &lt;br /&gt;
* &#039;&#039;&#039;Зона&#039;&#039;&#039; (сегмент, plane) - элемент карты (а также внутренний объект ПО E-NODE Firewall), определяющий политику информационного взаимодействия сетевых объектов, входящих в зону. При создании зоны предполагается, что ко всем сетевым объектам, входящим в зону, применяется единая политика информационного взаимодействия (например, для всех серверов, входящих в зону Control Plane, разрешается доступ по протоколу SSH по 22 порту).  &#039;&#039;&#039;Хост с агентом&#039;&#039;&#039; - элемент карты (а также внутренний объект ПО E-NODE Firewall), представляющий собой отдельный хост, с установленным на нем ПО Хост-агент. На такой хост передаются правила МСЭ, генерируемые политиками соответствующих зон, а также с такого хоста можно автоматически получать различную информацию о его работе.  &#039;&#039;&#039;Политика&#039;&#039;&#039; - набор правил информационного взаимодействия, определяемых для каждой зоны и автоматически распространяющихся на все сетевые объекты, относящиеся к данной зоне.  &#039;&#039;&#039;Правило информационного взаимодействия&#039;&#039;&#039;  - определяет разрешенный вид информационного взаимодействия между сетевыми объектами на основе заданных IP, маски, порта и вида протокола.  ===&lt;br /&gt;
&lt;br /&gt;
=== Иерархия объектов карты ===&lt;br /&gt;
&lt;br /&gt;
===  При построении и работе с картой формируется следующая иерархия объектов:  &lt;br /&gt;
&lt;br /&gt;
* Карта является высшим уровнем иерархии и включает в себя абстрактные сетевые объекты и зоны, в которые они входят, при этом порядок информационного взаимодействия между сетевыми объектами определяется принадлежностью сетевых объектов к той или иной зоне; &lt;br /&gt;
* Сетевой объект включает в себя внутренний объекты/объекты, непосредственно участвующие в сетевом взаимодействии (серверы, сети и т.п.), а также те или иные хосты с установленными агентами; &lt;br /&gt;
* Хост с агентом как объект ПО E-NODE Firewall непосредственно связан с физическим/виртуальным хостом, на котором развернуто ПО Хост-агент. При генерации правил информационного взаимодействия для того или иного хоста с агентом они будут автоматически применяться на связанном с ним экземпляре ПО Хост-агент.  ===&lt;/div&gt;</summary>
		<author><name>Dima</name></author>
	</entry>
	<entry>
		<id>https://wiki.entcor.ru/index.php?title=%D0%9E%D0%B1%D1%8A%D0%B5%D0%BA%D1%82%D1%8B_%D0%BA%D0%B0%D1%80%D1%82_E-NODE_Firewall&amp;diff=484</id>
		<title>Объекты карт E-NODE Firewall</title>
		<link rel="alternate" type="text/html" href="https://wiki.entcor.ru/index.php?title=%D0%9E%D0%B1%D1%8A%D0%B5%D0%BA%D1%82%D1%8B_%D0%BA%D0%B0%D1%80%D1%82_E-NODE_Firewall&amp;diff=484"/>
		<updated>2025-10-17T03:14:26Z</updated>

		<summary type="html">&lt;p&gt;Dima: Новая страница: «== Объекты на картах E-NODE Firewall ==  === Терминология: ===»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Объекты на картах E-NODE Firewall ==&lt;br /&gt;
&lt;br /&gt;
=== Терминология: ===&lt;/div&gt;</summary>
		<author><name>Dima</name></author>
	</entry>
	<entry>
		<id>https://wiki.entcor.ru/index.php?title=%D0%97%D0%B0%D0%B3%D0%BB%D0%B0%D0%B2%D0%BD%D0%B0%D1%8F_%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%B8%D1%86%D0%B0&amp;diff=483</id>
		<title>Заглавная страница</title>
		<link rel="alternate" type="text/html" href="https://wiki.entcor.ru/index.php?title=%D0%97%D0%B0%D0%B3%D0%BB%D0%B0%D0%B2%D0%BD%D0%B0%D1%8F_%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%B8%D1%86%D0%B0&amp;diff=483"/>
		<updated>2025-10-17T03:13:42Z</updated>

		<summary type="html">&lt;p&gt;Dima: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;strong&amp;gt;Разделы:&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Документация по Блокиратору [[Blocker]]&lt;br /&gt;
# Документация по системе мониторинга качества измерений [[МКИ|eNode.МКИ]]&lt;br /&gt;
# Документация по системе мониторинга [[nms]]&lt;br /&gt;
# Документация по системе e-core [[e-core]]&lt;br /&gt;
# Документация по SD-WAN [[sdwan]]&lt;br /&gt;
# Документация по командам docker [[Dockercompose]]&lt;br /&gt;
# Сетевые записи [[network]]&lt;br /&gt;
# Настройки разных подсистем [[systems]]&lt;br /&gt;
# [[Список серверов]] proxmox&lt;br /&gt;
# Агент [[host-agent]]&lt;br /&gt;
# [[Pnet|Pnetlab]]&lt;br /&gt;
# [[Установка сертификата]]&lt;br /&gt;
# [[Установка node-js]]&lt;br /&gt;
# [[Установка Docker]]&lt;br /&gt;
# [[Continent]]&lt;br /&gt;
# [[Формирование путей устройств]]&lt;br /&gt;
# [[Backup/Restore MongoDB|Backup\Restore MongoDB]]&lt;br /&gt;
# [[Mirror]]&lt;br /&gt;
# [[Документация Alarm Server|Документация entcor]]&lt;br /&gt;
# [[Документы по E-node|Документы по E-node]]&lt;br /&gt;
# [[MQTT]]&lt;br /&gt;
# [[Дистрибутивы]]&lt;br /&gt;
# Документация по настройке VPP в [[VYOS-VPP|VYOS]]&lt;br /&gt;
# Описание объектов на [[Объекты карт E-NODE Firewall|картах E-NODE Firewall]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Информацию по работе с этой вики можно найти в [[mediawikiwiki:Special:MyLanguage/Help:Contents|справочном руководстве]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Общая информация&lt;br /&gt;
&lt;br /&gt;
# договор на интернет [[Internet settings]]&lt;br /&gt;
&lt;br /&gt;
== Начало работы ==&lt;br /&gt;
&lt;br /&gt;
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Список возможных настроек];&lt;br /&gt;
* [https://www.mediawiki.org/wiki/Manual:FAQ/ru Часто задаваемые вопросы и ответы по MediaWiki];&lt;br /&gt;
* [https://lists.wikimedia.org/postorius/lists/mediawiki-announce.lists.wikimedia.org/ Рассылка уведомлений о выходе новых версий MediaWiki].&lt;br /&gt;
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Перевод MediaWiki на свой язык]&lt;br /&gt;
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam Узнайте, как бороться со спамом в вашей вики]&lt;/div&gt;</summary>
		<author><name>Dima</name></author>
	</entry>
	<entry>
		<id>https://wiki.entcor.ru/index.php?title=VYOS-VPP&amp;diff=480</id>
		<title>VYOS-VPP</title>
		<link rel="alternate" type="text/html" href="https://wiki.entcor.ru/index.php?title=VYOS-VPP&amp;diff=480"/>
		<updated>2025-06-17T01:49:02Z</updated>

		<summary type="html">&lt;p&gt;Dima: /* 3. Настройка работы сетевых карт в режиме VFIO */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Подготовка сервера с VYOS для работы с VPP ==&lt;br /&gt;
&lt;br /&gt;
=== 1. Настройки BIOS ===&lt;br /&gt;
В BIOS включить настройку Intel VT-d (или как там она называется)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Примечание:&#039;&#039;&#039; на всякий случай можно еще включить X2APIC = Enable (непонятно, влияет или нет - но лучше включить)&lt;br /&gt;
&lt;br /&gt;
=== 2. Настройки ядра VYOS ===&lt;br /&gt;
В файле &#039;&#039;&#039;/boot/grub/grub.cfg.d/vyos-versions&#039;&#039;&#039; найти следующую строчку:&lt;br /&gt;
&lt;br /&gt;
set boot_opts=&amp;quot;boot=live rootdelay=5 noautologin net.ifnames=0 biosdevname=0 vyos-union=/boot/VYOS-1.5-Rolling&amp;quot;&lt;br /&gt;
&lt;br /&gt;
и добавить в конец: &amp;quot; intel_iommu=on iommu=pt&amp;quot;&lt;br /&gt;
&lt;br /&gt;
т.е. полная строка должна быть:&lt;br /&gt;
&lt;br /&gt;
set boot_opts=&amp;quot;boot=live rootdelay=5 noautologin net.ifnames=0 biosdevname=0 vyos-union=/boot/VYOS-1.5-Rolling intel_iommu=on iommu=pt&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Далее выполнить перезагрузку.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Примечание:&#039;&#039;&#039; после перезагрузки файл &#039;&#039;&#039;/boot/grub/grub.cfg.d/vyos-versions&#039;&#039;&#039; перезаписывается, так что придется потом снова строку &lt;br /&gt;
&lt;br /&gt;
&amp;quot;set boot_opts = ...&amp;quot; перезаписывать, пока не придумается как ее там зафиксировать. В противном случае после следующей перезагрузки поддержка IOMMU опять слетит.&lt;br /&gt;
&lt;br /&gt;
После перезагрузки нужно убедиться, что режим IOMMU включен, для этого выполнить команду:&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
dmesg | grep IOMMU&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Вывод должен быть примерно таким:&amp;lt;blockquote&amp;gt;&#039;&#039;&#039;[    0.046990] DMAR: IOMMU enabled&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[    0.109294] DMAR-IR: IOAPIC id 1 under DRHD base  0xfbffc000 IOMMU 1&lt;br /&gt;
&lt;br /&gt;
[    0.109297] DMAR-IR: IOAPIC id 2 under DRHD base  0xfbffc000 IOMMU 1&lt;br /&gt;
&lt;br /&gt;
[    0.372778] DMAR: IOMMU feature sc_support inconsistent&lt;br /&gt;
&lt;br /&gt;
[    0.372779] DMAR: IOMMU feature dev_iotlb_support inconsistent&lt;br /&gt;
&lt;br /&gt;
[    0.386236] AMD-Vi: AMD IOMMUv2 functionality not available on this system - This is not a bug.&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 3. Настройка работы сетевых карт в режиме VFIO ===&lt;br /&gt;
Проверка сетевых карт через ip link (обращаем внимание на eth0 и eth1):&amp;lt;blockquote&amp;gt;1: lo: &amp;lt;LOOPBACK,UP,LOWER_UP&amp;gt; mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000&lt;br /&gt;
&lt;br /&gt;
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00&lt;br /&gt;
&lt;br /&gt;
2: eth2: &amp;lt;BROADCAST,MULTICAST,UP,LOWER_UP&amp;gt; mtu 1500 qdisc fq_codel state UP mode DEFAULT group default qlen 1000&lt;br /&gt;
&lt;br /&gt;
    link/ether 22:41:4d:03:1d:70 brd ff:ff:ff:ff:ff:ff&lt;br /&gt;
&lt;br /&gt;
    altname enp6s0&lt;br /&gt;
&lt;br /&gt;
3: eth0: &amp;lt;BROADCAST,MULTICAST,UP,LOWER_UP&amp;gt; mtu 1500 qdisc mq state UP mode DEFAULT group default qlen 1000&lt;br /&gt;
&lt;br /&gt;
    link/ether 40:a6:b7:93:42:44 brd ff:ff:ff:ff:ff:ff&lt;br /&gt;
&lt;br /&gt;
    altname enp3s0f0&lt;br /&gt;
&lt;br /&gt;
    altname ens4f0&lt;br /&gt;
&lt;br /&gt;
4: eth1: &amp;lt;NO-CARRIER,BROADCAST,MULTICAST,UP&amp;gt; mtu 1500 qdisc mq state DOWN mode DEFAULT group default qlen 1000&lt;br /&gt;
&lt;br /&gt;
    link/ether 40:a6:b7:93:42:45 brd ff:ff:ff:ff:ff:ff&lt;br /&gt;
&lt;br /&gt;
    altname enp3s0f1&lt;br /&gt;
&lt;br /&gt;
    altname ens4f1&lt;br /&gt;
&lt;br /&gt;
5: pim6reg@NONE: &amp;lt;NOARP,UP,LOWER_UP&amp;gt; mtu 1452 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000&amp;lt;/blockquote&amp;gt;Убеждаемся, что загружены модули ядра для VFIO:&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
sudo modprobe vfio&lt;br /&gt;
sudo modprobe vfio-pci&lt;br /&gt;
sudo modprobe vfio_iommu_type1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Проверяем, что PCI-код соответствует устройству (eth0 = 0000:03:00.0, eth1 = 0000:03:00.1):&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
lspci -k -v -s 0000:03:00.0&lt;br /&gt;
lspci -k -v -s 0000:03:00.1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Вывод должен быть примерно таким (обращаем внимание на текущий Kernel driver in use):&amp;lt;blockquote&amp;gt;03:00.0 Ethernet controller: Intel Corporation Ethernet Controller X710 for 10GbE SFP+ (rev 02)&lt;br /&gt;
&lt;br /&gt;
        Subsystem: Intel Corporation Ethernet Converged Network Adapter X710-2&lt;br /&gt;
&lt;br /&gt;
        Physical Slot: 4&lt;br /&gt;
&lt;br /&gt;
        Flags: bus master, fast devsel, latency 0, IRQ 27, NUMA node 0, IOMMU group 28&lt;br /&gt;
&lt;br /&gt;
        Memory at 383ffe800000 (64-bit, prefetchable) [size=8M]&lt;br /&gt;
&lt;br /&gt;
        Memory at 383fff808000 (64-bit, prefetchable) [size=32K]&lt;br /&gt;
&lt;br /&gt;
        Expansion ROM at fbd80000 [disabled] [size=512K]&lt;br /&gt;
&lt;br /&gt;
        Capabilities: &amp;lt;access denied&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        &#039;&#039;&#039;Kernel driver in use: i40e&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
        Kernel modules: i40e&amp;lt;/blockquote&amp;gt;Для обеих сетевух отвязываем их от текущего драйвера и привязываем к VFIO:&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
echo 0000:03:00.0 | sudo tee /sys/bus/pci/devices/0000:03:00.0/driver/unbind&lt;br /&gt;
&lt;br /&gt;
# 2. Привязываем к vfio-pci&lt;br /&gt;
echo vfio-pci | sudo tee /sys/bus/pci/devices/0000:03:00.0/driver_override&lt;br /&gt;
echo 0000:03:00.0 | sudo tee /sys/bus/pci/drivers/vfio-pci/bind&lt;br /&gt;
&lt;br /&gt;
# 3. Проверяем&lt;br /&gt;
lspci -k -s 03:00.0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Те же манипуляции делаем для 0000:03:00.1 (не забываем в путях к файлам настроек корректно прописать каталог устройства &#039;&#039;&#039;0000:03:00.1&#039;&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
Убеждаемся, что для обеих сетевух теперь используется драйвер VFIO:&amp;lt;blockquote&amp;gt;03:00.0 Ethernet controller: Intel Corporation Ethernet Controller X710 for 10GbE SFP+ (rev 02)&lt;br /&gt;
&lt;br /&gt;
        Subsystem: Intel Corporation Ethernet Converged Network Adapter X710-2&lt;br /&gt;
&lt;br /&gt;
        Physical Slot: 4&lt;br /&gt;
&lt;br /&gt;
        Flags: fast devsel, IRQ 27, NUMA node 0, IOMMU group 28&lt;br /&gt;
&lt;br /&gt;
        Memory at 383ffe800000 (64-bit, prefetchable) [size=8M]&lt;br /&gt;
&lt;br /&gt;
        Memory at 383fff808000 (64-bit, prefetchable) [size=32K]&lt;br /&gt;
&lt;br /&gt;
        Expansion ROM at fbd80000 [disabled] [size=512K]&lt;br /&gt;
&lt;br /&gt;
        Capabilities: &amp;lt;access denied&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        &#039;&#039;&#039;Kernel driver in use: vfio-pci&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
        Kernel modules: i40e&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Примечание:&#039;&#039;&#039; Также в выводе команды ip link интерфейсов eth0 и eth1 теперь не будет, так как они перешли под управление VFIO.&lt;br /&gt;
&lt;br /&gt;
=== 4. Запуск контейнера для VPP ===&lt;br /&gt;
Создаем сетевое пространство имен NGFW (нужно для корректного запуска контейнера):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
sudo ip netns add ngfw&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Выполняем запуск контейнера с VPP:&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
sudo podman run -d --name vpp --network host --privileged --restart always --ulimit core=0:0 --shm-size 4g --volume /var/run/netns:/var/run/netns --volume /var/vpp/netplan:/etc/vpp/netplan --volume /var/log:/var/log --volume /var:/config/shared --env-file /config/vpp/env docker-archive:/home/vyos/vpp-image.tar&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&#039;&#039;&#039;Примечания:&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
# Необходимо убедиться, что все монтируемые каталоги, а также образ и файл env, указанные в команде, лежат на своих местах.&lt;br /&gt;
# В случае ошибки запуска (может ругаться на то, что контейнер VPP уже существует) следует добавить в команду параметр &#039;&#039;&#039;--replace&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Проверяем состояние контейнера:&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
sudo podman ps&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Настраиваем контейнер:&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
sudo podman cp /home/vyos/vpp.conf vpp:/config/vpp.conf&lt;br /&gt;
sudo podman restart vpp&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 5. Настройка интерфейсов внутри контейнера VPP: ===&lt;br /&gt;
Заходим внутрь запущенного контейнера:&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
sudo podman exec -it vpp vppctl&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Проверяем состояние интерфейсов:&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
show interface&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Вывод должен быть примерно таким:&amp;lt;blockquote&amp;gt;vpp# show interface&lt;br /&gt;
&lt;br /&gt;
              Name               Idx    State  MTU (L3/IP4/IP6/MPLS)     Counter          Count&lt;br /&gt;
&lt;br /&gt;
data1                             1     down         2026/0/0/0&lt;br /&gt;
&lt;br /&gt;
data2                             2     down         2026/0/0/0&lt;br /&gt;
&lt;br /&gt;
local0                            0     down          0/0/0/0&amp;lt;/blockquote&amp;gt;Включаем интерфейс data1 (ранее в ip link отображался как eth0, подключен к серверу Proxmox #20) и настраиваем IP:&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
vpp# set interface state data1 up&lt;br /&gt;
vpp# set interface ip address data1 10.1.100.130/24&lt;br /&gt;
&lt;br /&gt;
show interface address&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Выполняем пинг до сетевухи на сервере Proxmox #20 и убеждаемся, что все работает:&amp;lt;blockquote&amp;gt;vpp# ping 10.1.100.25&lt;br /&gt;
&lt;br /&gt;
116 bytes from 10.1.100.25: icmp_seq=1 ttl=64 time=4.1699 ms&lt;br /&gt;
&lt;br /&gt;
116 bytes from 10.1.100.25: icmp_seq=2 ttl=64 time=7.1989 ms&lt;br /&gt;
&lt;br /&gt;
116 bytes from 10.1.100.25: icmp_seq=3 ttl=64 time=1.2026 ms&lt;br /&gt;
&lt;br /&gt;
116 bytes from 10.1.100.25: icmp_seq=4 ttl=64 time=4.1920 ms&lt;br /&gt;
&lt;br /&gt;
116 bytes from 10.1.100.25: icmp_seq=5 ttl=64 time=8.2405 ms&lt;br /&gt;
&lt;br /&gt;
Statistics: 5 sent, 5 received, 0% packet loss&amp;lt;/blockquote&amp;gt;&lt;/div&gt;</summary>
		<author><name>Dima</name></author>
	</entry>
	<entry>
		<id>https://wiki.entcor.ru/index.php?title=VYOS-VPP&amp;diff=479</id>
		<title>VYOS-VPP</title>
		<link rel="alternate" type="text/html" href="https://wiki.entcor.ru/index.php?title=VYOS-VPP&amp;diff=479"/>
		<updated>2025-06-17T01:48:14Z</updated>

		<summary type="html">&lt;p&gt;Dima: /* = */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Подготовка сервера с VYOS для работы с VPP ==&lt;br /&gt;
&lt;br /&gt;
=== 1. Настройки BIOS ===&lt;br /&gt;
В BIOS включить настройку Intel VT-d (или как там она называется)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Примечание:&#039;&#039;&#039; на всякий случай можно еще включить X2APIC = Enable (непонятно, влияет или нет - но лучше включить)&lt;br /&gt;
&lt;br /&gt;
=== 2. Настройки ядра VYOS ===&lt;br /&gt;
В файле &#039;&#039;&#039;/boot/grub/grub.cfg.d/vyos-versions&#039;&#039;&#039; найти следующую строчку:&lt;br /&gt;
&lt;br /&gt;
set boot_opts=&amp;quot;boot=live rootdelay=5 noautologin net.ifnames=0 biosdevname=0 vyos-union=/boot/VYOS-1.5-Rolling&amp;quot;&lt;br /&gt;
&lt;br /&gt;
и добавить в конец: &amp;quot; intel_iommu=on iommu=pt&amp;quot;&lt;br /&gt;
&lt;br /&gt;
т.е. полная строка должна быть:&lt;br /&gt;
&lt;br /&gt;
set boot_opts=&amp;quot;boot=live rootdelay=5 noautologin net.ifnames=0 biosdevname=0 vyos-union=/boot/VYOS-1.5-Rolling intel_iommu=on iommu=pt&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Далее выполнить перезагрузку.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Примечание:&#039;&#039;&#039; после перезагрузки файл &#039;&#039;&#039;/boot/grub/grub.cfg.d/vyos-versions&#039;&#039;&#039; перезаписывается, так что придется потом снова строку &lt;br /&gt;
&lt;br /&gt;
&amp;quot;set boot_opts = ...&amp;quot; перезаписывать, пока не придумается как ее там зафиксировать. В противном случае после следующей перезагрузки поддержка IOMMU опять слетит.&lt;br /&gt;
&lt;br /&gt;
После перезагрузки нужно убедиться, что режим IOMMU включен, для этого выполнить команду:&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
dmesg | grep IOMMU&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Вывод должен быть примерно таким:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[    0.046990] DMAR: IOMMU enabled&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[    0.109294] DMAR-IR: IOAPIC id 1 under DRHD base  0xfbffc000 IOMMU 1&lt;br /&gt;
&lt;br /&gt;
[    0.109297] DMAR-IR: IOAPIC id 2 under DRHD base  0xfbffc000 IOMMU 1&lt;br /&gt;
&lt;br /&gt;
[    0.372778] DMAR: IOMMU feature sc_support inconsistent&lt;br /&gt;
&lt;br /&gt;
[    0.372779] DMAR: IOMMU feature dev_iotlb_support inconsistent&lt;br /&gt;
&lt;br /&gt;
[    0.386236] AMD-Vi: AMD IOMMUv2 functionality not available on this system - This is not a bug.&lt;br /&gt;
&lt;br /&gt;
=== 3. Настройка работы сетевых карт в режиме VFIO ===&lt;br /&gt;
Проверка сетевых карт через ip link (обращаем внимание на eth0 и eth1):&amp;lt;blockquote&amp;gt;1: lo: &amp;lt;LOOPBACK,UP,LOWER_UP&amp;gt; mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000&lt;br /&gt;
&lt;br /&gt;
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00&lt;br /&gt;
&lt;br /&gt;
2: eth2: &amp;lt;BROADCAST,MULTICAST,UP,LOWER_UP&amp;gt; mtu 1500 qdisc fq_codel state UP mode DEFAULT group default qlen 1000&lt;br /&gt;
&lt;br /&gt;
    link/ether 22:41:4d:03:1d:70 brd ff:ff:ff:ff:ff:ff&lt;br /&gt;
&lt;br /&gt;
    altname enp6s0&lt;br /&gt;
&lt;br /&gt;
3: eth0: &amp;lt;BROADCAST,MULTICAST,UP,LOWER_UP&amp;gt; mtu 1500 qdisc mq state UP mode DEFAULT group default qlen 1000&lt;br /&gt;
&lt;br /&gt;
    link/ether 40:a6:b7:93:42:44 brd ff:ff:ff:ff:ff:ff&lt;br /&gt;
&lt;br /&gt;
    altname enp3s0f0&lt;br /&gt;
&lt;br /&gt;
    altname ens4f0&lt;br /&gt;
&lt;br /&gt;
4: eth1: &amp;lt;NO-CARRIER,BROADCAST,MULTICAST,UP&amp;gt; mtu 1500 qdisc mq state DOWN mode DEFAULT group default qlen 1000&lt;br /&gt;
&lt;br /&gt;
    link/ether 40:a6:b7:93:42:45 brd ff:ff:ff:ff:ff:ff&lt;br /&gt;
&lt;br /&gt;
    altname enp3s0f1&lt;br /&gt;
&lt;br /&gt;
    altname ens4f1&lt;br /&gt;
&lt;br /&gt;
5: pim6reg@NONE: &amp;lt;NOARP,UP,LOWER_UP&amp;gt; mtu 1452 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000&amp;lt;/blockquote&amp;gt;Убеждаемся, что загружены модули ядра для VFIO:&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
sudo modprobe vfio&lt;br /&gt;
sudo modprobe vfio-pci&lt;br /&gt;
sudo modprobe vfio_iommu_type1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Проверяем, что PCI-код соответствует устройству (eth0 = 0000:03:00.0, eth1 = 0000:03:00.1):&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
lspci -k -v -s 0000:03:00.0&lt;br /&gt;
lspci -k -v -s 0000:03:00.1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Вывод должен быть примерно таким (обращаем внимание на текущий Kernel driver in use):&amp;lt;blockquote&amp;gt;03:00.0 Ethernet controller: Intel Corporation Ethernet Controller X710 for 10GbE SFP+ (rev 02)&lt;br /&gt;
&lt;br /&gt;
        Subsystem: Intel Corporation Ethernet Converged Network Adapter X710-2&lt;br /&gt;
&lt;br /&gt;
        Physical Slot: 4&lt;br /&gt;
&lt;br /&gt;
        Flags: bus master, fast devsel, latency 0, IRQ 27, NUMA node 0, IOMMU group 28&lt;br /&gt;
&lt;br /&gt;
        Memory at 383ffe800000 (64-bit, prefetchable) [size=8M]&lt;br /&gt;
&lt;br /&gt;
        Memory at 383fff808000 (64-bit, prefetchable) [size=32K]&lt;br /&gt;
&lt;br /&gt;
        Expansion ROM at fbd80000 [disabled] [size=512K]&lt;br /&gt;
&lt;br /&gt;
        Capabilities: &amp;lt;access denied&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        &#039;&#039;&#039;Kernel driver in use: i40e&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
        Kernel modules: i40e&amp;lt;/blockquote&amp;gt;Для обеих сетевух отвязываем их от текущего драйвера и привязываем к VFIO:&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
echo 0000:03:00.0 | sudo tee /sys/bus/pci/devices/0000:03:00.0/driver/unbind&lt;br /&gt;
&lt;br /&gt;
# 2. Привязываем к vfio-pci&lt;br /&gt;
echo vfio-pci | sudo tee /sys/bus/pci/devices/0000:03:00.0/driver_override&lt;br /&gt;
echo 0000:03:00.0 | sudo tee /sys/bus/pci/drivers/vfio-pci/bind&lt;br /&gt;
&lt;br /&gt;
# 3. Проверяем&lt;br /&gt;
lspci -k -s 03:00.0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Те же манипуляции делаем для 0000:03:00.1 (не забываем в путях к файлам настроек корректно прописать каталог устройства &#039;&#039;&#039;0000:03:00.1&#039;&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
Убеждаемся, что для обеих сетевух теперь используется драйвер VFIO:&amp;lt;blockquote&amp;gt;03:00.0 Ethernet controller: Intel Corporation Ethernet Controller X710 for 10GbE SFP+ (rev 02)&lt;br /&gt;
&lt;br /&gt;
        Subsystem: Intel Corporation Ethernet Converged Network Adapter X710-2&lt;br /&gt;
&lt;br /&gt;
        Physical Slot: 4&lt;br /&gt;
&lt;br /&gt;
        Flags: fast devsel, IRQ 27, NUMA node 0, IOMMU group 28&lt;br /&gt;
&lt;br /&gt;
        Memory at 383ffe800000 (64-bit, prefetchable) [size=8M]&lt;br /&gt;
&lt;br /&gt;
        Memory at 383fff808000 (64-bit, prefetchable) [size=32K]&lt;br /&gt;
&lt;br /&gt;
        Expansion ROM at fbd80000 [disabled] [size=512K]&lt;br /&gt;
&lt;br /&gt;
        Capabilities: &amp;lt;access denied&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        &#039;&#039;&#039;Kernel driver in use: vfio-pci&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
        Kernel modules: i40e&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Примечание:&#039;&#039;&#039; Также в выводе команды ip link интерфейсов eth0 и eth1 теперь не будет, так как они перешли под управление VFIO.&lt;br /&gt;
&lt;br /&gt;
=== 4. Запуск контейнера для VPP ===&lt;br /&gt;
Создаем сетевое пространство имен NGFW (нужно для корректного запуска контейнера):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
sudo ip netns add ngfw&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Выполняем запуск контейнера с VPP:&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
sudo podman run -d --name vpp --network host --privileged --restart always --ulimit core=0:0 --shm-size 4g --volume /var/run/netns:/var/run/netns --volume /var/vpp/netplan:/etc/vpp/netplan --volume /var/log:/var/log --volume /var:/config/shared --env-file /config/vpp/env docker-archive:/home/vyos/vpp-image.tar&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&#039;&#039;&#039;Примечания:&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
# Необходимо убедиться, что все монтируемые каталоги, а также образ и файл env, указанные в команде, лежат на своих местах.&lt;br /&gt;
# В случае ошибки запуска (может ругаться на то, что контейнер VPP уже существует) следует добавить в команду параметр &#039;&#039;&#039;--replace&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Проверяем состояние контейнера:&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
sudo podman ps&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Настраиваем контейнер:&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
sudo podman cp /home/vyos/vpp.conf vpp:/config/vpp.conf&lt;br /&gt;
sudo podman restart vpp&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 5. Настройка интерфейсов внутри контейнера VPP: ===&lt;br /&gt;
Заходим внутрь запущенного контейнера:&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
sudo podman exec -it vpp vppctl&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Проверяем состояние интерфейсов:&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
show interface&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Вывод должен быть примерно таким:&amp;lt;blockquote&amp;gt;vpp# show interface&lt;br /&gt;
&lt;br /&gt;
              Name               Idx    State  MTU (L3/IP4/IP6/MPLS)     Counter          Count&lt;br /&gt;
&lt;br /&gt;
data1                             1     down         2026/0/0/0&lt;br /&gt;
&lt;br /&gt;
data2                             2     down         2026/0/0/0&lt;br /&gt;
&lt;br /&gt;
local0                            0     down          0/0/0/0&amp;lt;/blockquote&amp;gt;Включаем интерфейс data1 (ранее в ip link отображался как eth0, подключен к серверу Proxmox #20) и настраиваем IP:&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
vpp# set interface state data1 up&lt;br /&gt;
vpp# set interface ip address data1 10.1.100.130/24&lt;br /&gt;
&lt;br /&gt;
show interface address&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Выполняем пинг до сетевухи на сервере Proxmox #20 и убеждаемся, что все работает:&amp;lt;blockquote&amp;gt;vpp# ping 10.1.100.25&lt;br /&gt;
&lt;br /&gt;
116 bytes from 10.1.100.25: icmp_seq=1 ttl=64 time=4.1699 ms&lt;br /&gt;
&lt;br /&gt;
116 bytes from 10.1.100.25: icmp_seq=2 ttl=64 time=7.1989 ms&lt;br /&gt;
&lt;br /&gt;
116 bytes from 10.1.100.25: icmp_seq=3 ttl=64 time=1.2026 ms&lt;br /&gt;
&lt;br /&gt;
116 bytes from 10.1.100.25: icmp_seq=4 ttl=64 time=4.1920 ms&lt;br /&gt;
&lt;br /&gt;
116 bytes from 10.1.100.25: icmp_seq=5 ttl=64 time=8.2405 ms&lt;br /&gt;
&lt;br /&gt;
Statistics: 5 sent, 5 received, 0% packet loss&amp;lt;/blockquote&amp;gt;&lt;/div&gt;</summary>
		<author><name>Dima</name></author>
	</entry>
	<entry>
		<id>https://wiki.entcor.ru/index.php?title=VYOS-VPP&amp;diff=478</id>
		<title>VYOS-VPP</title>
		<link rel="alternate" type="text/html" href="https://wiki.entcor.ru/index.php?title=VYOS-VPP&amp;diff=478"/>
		<updated>2025-06-17T01:41:01Z</updated>

		<summary type="html">&lt;p&gt;Dima: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Подготовка сервера с VYOS для работы с VPP ==&lt;br /&gt;
&lt;br /&gt;
=== 1. Настройки BIOS ===&lt;br /&gt;
В BIOS включить настройку Intel VT-d (или как там она называется)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Примечание:&#039;&#039;&#039; на всякий случай можно еще включить X2APIC = Enable (непонятно, влияет или нет - но лучше включить)&lt;br /&gt;
&lt;br /&gt;
=== 2. Настройки ядра VYOS ===&lt;br /&gt;
В файле &#039;&#039;&#039;/boot/grub/grub.cfg.d/vyos-versions&#039;&#039;&#039; найти следующую строчку:&lt;br /&gt;
&lt;br /&gt;
set boot_opts=&amp;quot;boot=live rootdelay=5 noautologin net.ifnames=0 biosdevname=0 vyos-union=/boot/VYOS-1.5-Rolling&amp;quot;&lt;br /&gt;
&lt;br /&gt;
и добавить в конец: &amp;quot; intel_iommu=on iommu=pt&amp;quot;&lt;br /&gt;
&lt;br /&gt;
т.е. полная строка должна быть:&lt;br /&gt;
&lt;br /&gt;
set boot_opts=&amp;quot;boot=live rootdelay=5 noautologin net.ifnames=0 biosdevname=0 vyos-union=/boot/VYOS-1.5-Rolling intel_iommu=on iommu=pt&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Далее выполнить перезагрузку.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Примечание:&#039;&#039;&#039; после перезагрузки файл &#039;&#039;&#039;/boot/grub/grub.cfg.d/vyos-versions&#039;&#039;&#039; перезаписывается, так что придется потом снова строку &lt;br /&gt;
&lt;br /&gt;
&amp;quot;set boot_opts = ...&amp;quot; перезаписывать, пока не придумается как ее там зафиксировать. В противном случае после следующей перезагрузки поддержка IOMMU опять слетит.&lt;br /&gt;
&lt;br /&gt;
После перезагрузки нужно убедиться, что режим IOMMU включен, для этого выполнить команду:&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
dmesg | grep IOMMU&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Вывод должен быть примерно таким:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[    0.046990] DMAR: IOMMU enabled&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[    0.109294] DMAR-IR: IOAPIC id 1 under DRHD base  0xfbffc000 IOMMU 1&lt;br /&gt;
&lt;br /&gt;
[    0.109297] DMAR-IR: IOAPIC id 2 under DRHD base  0xfbffc000 IOMMU 1&lt;br /&gt;
&lt;br /&gt;
[    0.372778] DMAR: IOMMU feature sc_support inconsistent&lt;br /&gt;
&lt;br /&gt;
[    0.372779] DMAR: IOMMU feature dev_iotlb_support inconsistent&lt;br /&gt;
&lt;br /&gt;
[    0.386236] AMD-Vi: AMD IOMMUv2 functionality not available on this system - This is not a bug.&lt;br /&gt;
&lt;br /&gt;
=== 3. Настройка работы сетевых карт в режиме VFIO ===&lt;br /&gt;
Проверка сетевых карт через ip link (обращаем внимание на eth0 и eth1):&amp;lt;blockquote&amp;gt;1: lo: &amp;lt;LOOPBACK,UP,LOWER_UP&amp;gt; mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000&lt;br /&gt;
&lt;br /&gt;
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00&lt;br /&gt;
&lt;br /&gt;
2: eth2: &amp;lt;BROADCAST,MULTICAST,UP,LOWER_UP&amp;gt; mtu 1500 qdisc fq_codel state UP mode DEFAULT group default qlen 1000&lt;br /&gt;
&lt;br /&gt;
    link/ether 22:41:4d:03:1d:70 brd ff:ff:ff:ff:ff:ff&lt;br /&gt;
&lt;br /&gt;
    altname enp6s0&lt;br /&gt;
&lt;br /&gt;
3: eth0: &amp;lt;BROADCAST,MULTICAST,UP,LOWER_UP&amp;gt; mtu 1500 qdisc mq state UP mode DEFAULT group default qlen 1000&lt;br /&gt;
&lt;br /&gt;
    link/ether 40:a6:b7:93:42:44 brd ff:ff:ff:ff:ff:ff&lt;br /&gt;
&lt;br /&gt;
    altname enp3s0f0&lt;br /&gt;
&lt;br /&gt;
    altname ens4f0&lt;br /&gt;
&lt;br /&gt;
4: eth1: &amp;lt;NO-CARRIER,BROADCAST,MULTICAST,UP&amp;gt; mtu 1500 qdisc mq state DOWN mode DEFAULT group default qlen 1000&lt;br /&gt;
&lt;br /&gt;
    link/ether 40:a6:b7:93:42:45 brd ff:ff:ff:ff:ff:ff&lt;br /&gt;
&lt;br /&gt;
    altname enp3s0f1&lt;br /&gt;
&lt;br /&gt;
    altname ens4f1&lt;br /&gt;
&lt;br /&gt;
5: pim6reg@NONE: &amp;lt;NOARP,UP,LOWER_UP&amp;gt; mtu 1452 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000&amp;lt;/blockquote&amp;gt;Убеждаемся, что загружены модули ядра для VFIO:&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
sudo modprobe vfio&lt;br /&gt;
sudo modprobe vfio-pci&lt;br /&gt;
sudo modprobe vfio_iommu_type1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Проверяем, что PCI-код соответствует устройству (eth0 = 0000:03:00.0, eth1 = 0000:03:00.1):&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
lspci -k -v -s 0000:03:00.0&lt;br /&gt;
lspci -k -v -s 0000:03:00.1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Вывод должен быть примерно таким (обращаем внимание на текущий Kernel driver in use):&amp;lt;blockquote&amp;gt;03:00.0 Ethernet controller: Intel Corporation Ethernet Controller X710 for 10GbE SFP+ (rev 02)&lt;br /&gt;
&lt;br /&gt;
        Subsystem: Intel Corporation Ethernet Converged Network Adapter X710-2&lt;br /&gt;
&lt;br /&gt;
        Physical Slot: 4&lt;br /&gt;
&lt;br /&gt;
        Flags: bus master, fast devsel, latency 0, IRQ 27, NUMA node 0, IOMMU group 28&lt;br /&gt;
&lt;br /&gt;
        Memory at 383ffe800000 (64-bit, prefetchable) [size=8M]&lt;br /&gt;
&lt;br /&gt;
        Memory at 383fff808000 (64-bit, prefetchable) [size=32K]&lt;br /&gt;
&lt;br /&gt;
        Expansion ROM at fbd80000 [disabled] [size=512K]&lt;br /&gt;
&lt;br /&gt;
        Capabilities: &amp;lt;access denied&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        &#039;&#039;&#039;Kernel driver in use: i40e&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
        Kernel modules: i40e&amp;lt;/blockquote&amp;gt;Для обеих сетевух отвязываем их от текущего драйвера и привязываем к VFIO:&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
echo 0000:03:00.0 | sudo tee /sys/bus/pci/devices/0000:03:00.0/driver/unbind&lt;br /&gt;
&lt;br /&gt;
# 2. Привязываем к vfio-pci&lt;br /&gt;
echo vfio-pci | sudo tee /sys/bus/pci/devices/0000:03:00.0/driver_override&lt;br /&gt;
echo 0000:03:00.0 | sudo tee /sys/bus/pci/drivers/vfio-pci/bind&lt;br /&gt;
&lt;br /&gt;
# 3. Проверяем&lt;br /&gt;
lspci -k -s 03:00.0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Те же манипуляции делаем для 0000:03:00.1 (не забываем в путях к файлам настроек корректно прописать каталог устройства &#039;&#039;&#039;0000:03:00.1&#039;&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
Убеждаемся, что для обеих сетевух теперь используется драйвер VFIO:&amp;lt;blockquote&amp;gt;03:00.0 Ethernet controller: Intel Corporation Ethernet Controller X710 for 10GbE SFP+ (rev 02)&lt;br /&gt;
&lt;br /&gt;
        Subsystem: Intel Corporation Ethernet Converged Network Adapter X710-2&lt;br /&gt;
&lt;br /&gt;
        Physical Slot: 4&lt;br /&gt;
&lt;br /&gt;
        Flags: fast devsel, IRQ 27, NUMA node 0, IOMMU group 28&lt;br /&gt;
&lt;br /&gt;
        Memory at 383ffe800000 (64-bit, prefetchable) [size=8M]&lt;br /&gt;
&lt;br /&gt;
        Memory at 383fff808000 (64-bit, prefetchable) [size=32K]&lt;br /&gt;
&lt;br /&gt;
        Expansion ROM at fbd80000 [disabled] [size=512K]&lt;br /&gt;
&lt;br /&gt;
        Capabilities: &amp;lt;access denied&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        &#039;&#039;&#039;Kernel driver in use: vfio-pci&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
        Kernel modules: i40e&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Примечание:&#039;&#039;&#039; Также в выводе команды ip link интерфейсов eth0 и eth1 теперь не будет, так как они перешли под управление VFIO.&lt;br /&gt;
&lt;br /&gt;
=== 4. Запуск контейнера для VPP ===&lt;br /&gt;
Создаем сетевое пространство имен NGFW (нужно для корректного запуска контейнера):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
sudo ip netns add ngfw&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Выполняем запуск контейнера с VPP:&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
sudo podman run -d --name vpp --network host --privileged --restart always --ulimit core=0:0 --shm-size 4g --volume /var/run/netns:/var/run/netns --volume /var/vpp/netplan:/etc/vpp/netplan --volume /var/log:/var/log --volume /var:/config/shared --env-file /config/vpp/env docker-archive:/home/vyos/vpp-image.tar&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&#039;&#039;&#039;Примечания:&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
# Необходимо убедиться, что все монтируемые каталоги, а также образ и файл env, указанные в команде, лежат на своих местах.&lt;br /&gt;
# В случае ошибки запуска (может ругаться на то, что контейнер VPP уже существует) следует добавить в команду параметр &#039;&#039;&#039;--replace&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Проверяем состояние контейнера:&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
sudo podman ps&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Настраиваем контейнер:&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
sudo podman cp /home/vyos/vpp.conf vpp:/config/vpp.conf&lt;br /&gt;
sudo podman restart vpp&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 5. Настройка интерфейсов внутри контейнера VPP: ===&lt;br /&gt;
Заходим внутрь запущенного контейнера:&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
sudo podman exec -it vpp vppctl&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &lt;br /&gt;
&amp;lt;nowiki&amp;gt;#########################################################################################&amp;lt;/nowiki&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
=== test web server (для проверки работы vyos) ===&lt;br /&gt;
while true; do { echo -e &#039;HTTP/1.1 200 OK\r\nContent-Length: 13\r\n\r\nHello, World!&#039;; } | nc -l 8081; done&lt;br /&gt;
&lt;br /&gt;
=== надо будет еще ядро перенастраивать (но пока рано) ===&lt;br /&gt;
sudo grub-probe --device /dev/sda3&lt;br /&gt;
&lt;br /&gt;
=== это мое ! ===&lt;br /&gt;
podman cp /home/vyos/vpp.conf vpp:/config/vpp.conf&lt;br /&gt;
&lt;br /&gt;
конфигурирование podman&lt;br /&gt;
&lt;br /&gt;
sudo nano /etc/containers/containers.conf&lt;br /&gt;
&lt;br /&gt;
dns_bind_port=54&lt;br /&gt;
&lt;br /&gt;
sudo chattr +i /etc/containers/containers.conf&lt;br /&gt;
&lt;br /&gt;
ip netns add ngfw&lt;br /&gt;
&lt;br /&gt;
podman rm vpp -f&lt;br /&gt;
&lt;br /&gt;
=== создание host interface ===&lt;br /&gt;
ip netns exec ngfw bash&lt;br /&gt;
&lt;br /&gt;
ip link add name http1out type veth peer name http1host&lt;br /&gt;
&lt;br /&gt;
ip link set dev http1out up&lt;br /&gt;
&lt;br /&gt;
ip link set dev http1host up&lt;br /&gt;
&lt;br /&gt;
ip addr add 10.10.10.10/24 dev http1host&lt;br /&gt;
&lt;br /&gt;
ip addr show http1host&lt;br /&gt;
&lt;br /&gt;
podman run -d --name vpp --network host --privileged --restart always --ulimit core=0:0 --shm-size 4g --volume /var/run/netns:/var/run/netns --volume /var/vpp/netplan:/etc/vpp/netplan --volume /var/log:/var/log --volume /var:/config/shared --env-file /config/vpp/env docker-archive:/home/vyos/vpp-image.tar&lt;br /&gt;
&lt;br /&gt;
=== vpp: ===&lt;br /&gt;
create host-interface name http1out&lt;br /&gt;
&lt;br /&gt;
set interface state host-http1out up&lt;br /&gt;
&lt;br /&gt;
podman cp /home/vyos/vpp.conf vpp:/config/vpp.conf&lt;br /&gt;
&lt;br /&gt;
podman restart vpp&lt;br /&gt;
&lt;br /&gt;
=== назначаем адрес для теста (data2 в бридже loop10) ===&lt;br /&gt;
podman exec -it vpp vppctl&lt;br /&gt;
&lt;br /&gt;
set interface ip address loop10 10.1.100.125/24&lt;br /&gt;
&lt;br /&gt;
show int addr&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#########################################################################################&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;##########&amp;lt;/nowiki&amp;gt; enode on podman -----------------------------&lt;br /&gt;
&lt;br /&gt;
=== включение разрешений для podman ===&lt;br /&gt;
set nat source rule 100 source address &#039;10.88.0.0/16&#039;&lt;br /&gt;
&lt;br /&gt;
set nat source rule 100 translation address &#039;masquerade&#039;&lt;br /&gt;
&lt;br /&gt;
commit&lt;br /&gt;
&lt;br /&gt;
save&lt;br /&gt;
&lt;br /&gt;
=== для traefik нуже сервис podman api ===&lt;br /&gt;
podman system service -t 0 unix:///run/user/1000/podman/podman.sock &amp;amp;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
vyos|vyos&lt;br /&gt;
&lt;br /&gt;
sudo podman exec -it vpp vppctl&lt;br /&gt;
&lt;br /&gt;
show acl-plugin acl&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#########################################################################################&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;###&amp;lt;/nowiki&amp;gt; пример лога vpp контейнера &lt;br /&gt;
&lt;br /&gt;
[INFO    ] root.main: Loading configfile /etc/vpp/netplan/netplan.yaml&lt;br /&gt;
&lt;br /&gt;
[INFO    ] vppcfg.config.valid_config: Configuration validated successfully&lt;br /&gt;
&lt;br /&gt;
[INFO    ] root.main: Configuration is valid&lt;br /&gt;
&lt;br /&gt;
[INFO    ] vppcfg.vppapi.connect: VPP version is 24.02-release&lt;br /&gt;
&lt;br /&gt;
[INFO    ] vppcfg.reconciler.write: Wrote 46 lines to /etc/vpp/applynetplan.yaml&lt;br /&gt;
&lt;br /&gt;
[INFO    ] root.main: Planning succeeded&lt;br /&gt;
&lt;br /&gt;
api_response =&amp;gt; lcp_itf_pair_get []&lt;br /&gt;
&lt;br /&gt;
111111111111111111 create sub data1 109 dot1q 109 exact-match&lt;br /&gt;
&lt;br /&gt;
111111111111111111 create sub data1 110 dot1q 110 exact-match&lt;br /&gt;
&lt;br /&gt;
111111111111111111 create sub data1 10 dot1q 10 exact-match&lt;br /&gt;
&lt;br /&gt;
create loopback interface instance 110&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: mtu_change: sw loop110 0&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: mtu_change: si loop110 hi loop110, syncing children&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: sync_state_hw: hi loop110&lt;br /&gt;
&lt;br /&gt;
loop110&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: interface_add: sw data1.109 parent data1&lt;br /&gt;
&lt;br /&gt;
data1.109&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: interface_add: sw data1.110 parent data1&lt;br /&gt;
&lt;br /&gt;
data1.110&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: interface_add: sw data1.10 parent data1&lt;br /&gt;
&lt;br /&gt;
data1.10&lt;br /&gt;
&lt;br /&gt;
bridge-domain 10&lt;br /&gt;
&lt;br /&gt;
bridge-domain 109&lt;br /&gt;
&lt;br /&gt;
bridge-domain 110&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: mtu_change: sw tap4 0&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: mtu_change: si tap4 hi tap4, syncing children&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: sync_state_hw: hi data1.109&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [info  ]: pair create: {loop10, tap4, vlaneth0}&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [info  ]: add: host:tap4 phy:loop10, host_if:vlaneth0 vif:7 ns:ngfw&lt;br /&gt;
&lt;br /&gt;
linux-cp/mpls-sync   [debug ]: pair_add_cb: mpls enabled 0, parent itf-pair: [0] loop10 tap4 vlaneth0 7 type tap netns ngfw&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [info  ]: pair create: itf-pair: [0] loop10 tap4 vlaneth0 7 type tap netns ngfw sw-flags 0 hw-flags 1&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: admin_state_change: sw tap4 1&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: mtu_change: sw tap5 0&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: mtu_change: si tap5 hi tap5, syncing children&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: sync_state_hw: hi data1.110&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [info  ]: pair create: {loop109, tap5, vlaneth99}&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [info  ]: add: host:tap5 phy:loop109, host_if:vlaneth99 vif:8 ns:ngfw&lt;br /&gt;
&lt;br /&gt;
linux-cp/mpls-sync   [debug ]: pair_add_cb: mpls enabled 0, parent itf-pair: [1] loop109 tap5 vlaneth99 8 type tap netns ngfw&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [info  ]: pair create: itf-pair: [1] loop109 tap5 vlaneth99 8 type tap netns ngfw sw-flags 0 hw-flags 1&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: admin_state_change: sw tap5 1&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: mtu_change: sw tap6 0&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: mtu_change: si tap6 hi tap6, syncing children&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: sync_state_hw: hi data1.10&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [info  ]: pair create: {loop110, tap6, vlaneth100}&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [info  ]: add: host:tap6 phy:loop110, host_if:vlaneth100 vif:9 ns:ngfw&lt;br /&gt;
&lt;br /&gt;
linux-cp/mpls-sync   [debug ]: pair_add_cb: mpls enabled 0, parent itf-pair: [2] loop110 tap6 vlaneth100 9 type tap netns ngfw&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [info  ]: pair create: itf-pair: [2] loop110 tap6 vlaneth100 9 type tap netns ngfw sw-flags 0 hw-flags 1&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: admin_state_change: sw tap6 1&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: mtu_change: sw data1 0&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: mtu_change: si data1 hi data1, syncing children&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: sync_state_hw: hi data1&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: mtu_change: sw data1.10 0&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: mtu_change: sw data1.110 0&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: mtu_change: sw data1.109 0&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: mtu_change: sw data2 0&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: mtu_change: si data2 hi data2, syncing children&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: sync_state_hw: hi data2&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: mtu_change: sw host-http1out 0&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: mtu_change: si host-http1out hi host-http1out, syncing children&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: sync_state_hw: hi host-http1out&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: mtu_change: sw loop10 0&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: mtu_change: si loop10 hi loop10, syncing children&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: sync_state_hw: hi loop10&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [info  ]: sync_state: itf-pair: [0] loop10 tap4 vlaneth0 7 type tap netns ngfw flags 0 sup-flags 0 mtu 1500 sup-mtu 1500&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: mtu_change: sw tap4 0&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: mtu_change: si tap4 hi tap4, syncing children&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: sync_state_hw: hi data1.109&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: mtu_change: sw loop109 0&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: mtu_change: si loop109 hi loop109, syncing children&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: sync_state_hw: hi loop109&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [info  ]: sync_state: itf-pair: [1] loop109 tap5 vlaneth99 8 type tap netns ngfw flags 0 sup-flags 0 mtu 1500 sup-mtu 1500&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: mtu_change: sw tap5 0&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: mtu_change: si tap5 hi tap5, syncing children&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: sync_state_hw: hi data1.110&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: mtu_change: sw loop110 0&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: mtu_change: si loop110 hi loop110, syncing children&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: sync_state_hw: hi loop110&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [info  ]: sync_state: itf-pair: [2] loop110 tap6 vlaneth100 9 type tap netns ngfw flags 0 sup-flags 0 mtu 1500 sup-mtu 1500&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: mtu_change: sw tap6 0&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: mtu_change: si tap6 hi tap6, syncing children&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: sync_state_hw: hi data1.10&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: ip4_addr_add: si:loop109 172.16.99.1/24&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: ip4_addr_add: itf-pair: [1] loop109 tap5 vlaneth99 8 type tap netns ngfw ip4 172.16.99.1/24&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: ip4_addr_add: si:loop110 172.16.100.1/24&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: ip4_addr_add: itf-pair: [2] loop110 tap6 vlaneth100 9 type tap netns ngfw ip4 172.16.100.1/24&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: admin_state_change: sw data1 1&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;###&amp;lt;/nowiki&amp;gt; пример конфигурации vpp&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;##&amp;lt;/nowiki&amp;gt; sudo podman exec vpp vppctl show int&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
              Name               Idx    State  MTU (L3/IP4/IP6/MPLS)     Counter          Count     &lt;br /&gt;
&lt;br /&gt;
data1                             1      up          1500/0/0/0     tx-error                      40&lt;br /&gt;
&lt;br /&gt;
data1.109                         7      up          1500/0/0/0     &lt;br /&gt;
&lt;br /&gt;
data1.110                         8      up          1500/0/0/0     &lt;br /&gt;
&lt;br /&gt;
data1.10                          9      up          1500/0/0/0     &lt;br /&gt;
&lt;br /&gt;
data2                             2      up          1500/0/0/0     tx packets                    13&lt;br /&gt;
&lt;br /&gt;
                                                                    tx bytes                    1086&lt;br /&gt;
&lt;br /&gt;
host-http1out                     3      up          1500/0/0/0     rx packets                     4&lt;br /&gt;
&lt;br /&gt;
                                                                    rx bytes                     280&lt;br /&gt;
&lt;br /&gt;
                                                                    drops                          4&lt;br /&gt;
&lt;br /&gt;
                                                                    ip6                            4&lt;br /&gt;
&lt;br /&gt;
local0                            0     down          0/0/0/0       &lt;br /&gt;
&lt;br /&gt;
loop109                           5      up          1500/0/0/0     tx packets                    26&lt;br /&gt;
&lt;br /&gt;
                                                                    tx bytes                    2172&lt;br /&gt;
&lt;br /&gt;
                                                                    drops                         13&lt;br /&gt;
&lt;br /&gt;
                                                                    tx-error                       1&lt;br /&gt;
&lt;br /&gt;
loop10                            4      up          1500/0/0/0     tx packets                    26&lt;br /&gt;
&lt;br /&gt;
                                                                    tx bytes                    2172&lt;br /&gt;
&lt;br /&gt;
                                                                    drops                         13&lt;br /&gt;
&lt;br /&gt;
                                                                    tx-error                       1&lt;br /&gt;
&lt;br /&gt;
loop110                           6      up          1500/0/0/0     tx packets                    28&lt;br /&gt;
&lt;br /&gt;
                                                                    tx bytes                    2352&lt;br /&gt;
&lt;br /&gt;
                                                                    drops                         14&lt;br /&gt;
&lt;br /&gt;
tap4                              10     up          1500/0/0/0     rx packets                    13&lt;br /&gt;
&lt;br /&gt;
                                                                    rx bytes                    1046&lt;br /&gt;
&lt;br /&gt;
                                                                    drops                          1&lt;br /&gt;
&lt;br /&gt;
                                                                    ip6                           13&lt;br /&gt;
&lt;br /&gt;
tap5                              11     up          1500/0/0/0     rx packets                    13&lt;br /&gt;
&lt;br /&gt;
                                                                    rx bytes                    1046&lt;br /&gt;
&lt;br /&gt;
                                                                    drops                          1&lt;br /&gt;
&lt;br /&gt;
                                                                    ip6                           13&lt;br /&gt;
&lt;br /&gt;
tap6                              12     up          1500/0/0/0     rx packets                    13&lt;br /&gt;
&lt;br /&gt;
                                                                    rx bytes                    1046&lt;br /&gt;
&lt;br /&gt;
                                                                    ip6                           13&lt;/div&gt;</summary>
		<author><name>Dima</name></author>
	</entry>
	<entry>
		<id>https://wiki.entcor.ru/index.php?title=VYOS-VPP&amp;diff=477</id>
		<title>VYOS-VPP</title>
		<link rel="alternate" type="text/html" href="https://wiki.entcor.ru/index.php?title=VYOS-VPP&amp;diff=477"/>
		<updated>2025-06-17T01:37:22Z</updated>

		<summary type="html">&lt;p&gt;Dima: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Подготовка сервера с VYOS для работы с VPP ==&lt;br /&gt;
&lt;br /&gt;
=== 1. Настройки BIOS ===&lt;br /&gt;
В BIOS включить настройку Intel VT-d (или как там она называется)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Примечание:&#039;&#039;&#039; на всякий случай можно еще включить X2APIC = Enable (непонятно, влияет или нет - но лучше включить)&lt;br /&gt;
&lt;br /&gt;
=== 2. Настройки ядра VYOS ===&lt;br /&gt;
В файле &#039;&#039;&#039;/boot/grub/grub.cfg.d/vyos-versions&#039;&#039;&#039; найти следующую строчку:&lt;br /&gt;
&lt;br /&gt;
set boot_opts=&amp;quot;boot=live rootdelay=5 noautologin net.ifnames=0 biosdevname=0 vyos-union=/boot/VYOS-1.5-Rolling&amp;quot;&lt;br /&gt;
&lt;br /&gt;
и добавить в конец: &amp;quot; intel_iommu=on iommu=pt&amp;quot;&lt;br /&gt;
&lt;br /&gt;
т.е. полная строка должна быть:&lt;br /&gt;
&lt;br /&gt;
set boot_opts=&amp;quot;boot=live rootdelay=5 noautologin net.ifnames=0 biosdevname=0 vyos-union=/boot/VYOS-1.5-Rolling intel_iommu=on iommu=pt&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Далее выполнить перезагрузку.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Примечание:&#039;&#039;&#039; после перезагрузки файл &#039;&#039;&#039;/boot/grub/grub.cfg.d/vyos-versions&#039;&#039;&#039; перезаписывается, так что придется потом снова строку &lt;br /&gt;
&lt;br /&gt;
&amp;quot;set boot_opts = ...&amp;quot; перезаписывать, пока не придумается как ее там зафиксировать. В противном случае после следующей перезагрузки поддержка IOMMU опять слетит.&lt;br /&gt;
&lt;br /&gt;
После перезагрузки нужно убедиться, что режим IOMMU включен, для этого выполнить команду:&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
dmesg | grep IOMMU&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Вывод должен быть примерно таким:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[    0.046990] DMAR: IOMMU enabled&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[    0.109294] DMAR-IR: IOAPIC id 1 under DRHD base  0xfbffc000 IOMMU 1&lt;br /&gt;
&lt;br /&gt;
[    0.109297] DMAR-IR: IOAPIC id 2 under DRHD base  0xfbffc000 IOMMU 1&lt;br /&gt;
&lt;br /&gt;
[    0.372778] DMAR: IOMMU feature sc_support inconsistent&lt;br /&gt;
&lt;br /&gt;
[    0.372779] DMAR: IOMMU feature dev_iotlb_support inconsistent&lt;br /&gt;
&lt;br /&gt;
[    0.386236] AMD-Vi: AMD IOMMUv2 functionality not available on this system - This is not a bug.&lt;br /&gt;
&lt;br /&gt;
=== 3. Настройка работы сетевых карт в режиме VFIO ===&lt;br /&gt;
Проверка сетевых карт через ip link (обращаем внимание на eth0 и eth1):&amp;lt;blockquote&amp;gt;1: lo: &amp;lt;LOOPBACK,UP,LOWER_UP&amp;gt; mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000&lt;br /&gt;
&lt;br /&gt;
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00&lt;br /&gt;
&lt;br /&gt;
2: eth2: &amp;lt;BROADCAST,MULTICAST,UP,LOWER_UP&amp;gt; mtu 1500 qdisc fq_codel state UP mode DEFAULT group default qlen 1000&lt;br /&gt;
&lt;br /&gt;
    link/ether 22:41:4d:03:1d:70 brd ff:ff:ff:ff:ff:ff&lt;br /&gt;
&lt;br /&gt;
    altname enp6s0&lt;br /&gt;
&lt;br /&gt;
3: eth0: &amp;lt;BROADCAST,MULTICAST,UP,LOWER_UP&amp;gt; mtu 1500 qdisc mq state UP mode DEFAULT group default qlen 1000&lt;br /&gt;
&lt;br /&gt;
    link/ether 40:a6:b7:93:42:44 brd ff:ff:ff:ff:ff:ff&lt;br /&gt;
&lt;br /&gt;
    altname enp3s0f0&lt;br /&gt;
&lt;br /&gt;
    altname ens4f0&lt;br /&gt;
&lt;br /&gt;
4: eth1: &amp;lt;NO-CARRIER,BROADCAST,MULTICAST,UP&amp;gt; mtu 1500 qdisc mq state DOWN mode DEFAULT group default qlen 1000&lt;br /&gt;
&lt;br /&gt;
    link/ether 40:a6:b7:93:42:45 brd ff:ff:ff:ff:ff:ff&lt;br /&gt;
&lt;br /&gt;
    altname enp3s0f1&lt;br /&gt;
&lt;br /&gt;
    altname ens4f1&lt;br /&gt;
&lt;br /&gt;
5: pim6reg@NONE: &amp;lt;NOARP,UP,LOWER_UP&amp;gt; mtu 1452 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000&amp;lt;/blockquote&amp;gt;Убеждаемся, что загружены модули ядра для VFIO:&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
sudo modprobe vfio&lt;br /&gt;
sudo modprobe vfio-pci&lt;br /&gt;
sudo modprobe vfio_iommu_type1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Проверяем, что PCI-код соответствует устройству (eth0 = 0000:03:00.0, eth1 = 0000:03:00.1):&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
lspci -k -v -s 0000:03:00.0&lt;br /&gt;
lspci -k -v -s 0000:03:00.1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Вывод должен быть примерно таким (обращаем внимание на текущий Kernel driver in use):&amp;lt;blockquote&amp;gt;03:00.0 Ethernet controller: Intel Corporation Ethernet Controller X710 for 10GbE SFP+ (rev 02)&lt;br /&gt;
&lt;br /&gt;
        Subsystem: Intel Corporation Ethernet Converged Network Adapter X710-2&lt;br /&gt;
&lt;br /&gt;
        Physical Slot: 4&lt;br /&gt;
&lt;br /&gt;
        Flags: bus master, fast devsel, latency 0, IRQ 27, NUMA node 0, IOMMU group 28&lt;br /&gt;
&lt;br /&gt;
        Memory at 383ffe800000 (64-bit, prefetchable) [size=8M]&lt;br /&gt;
&lt;br /&gt;
        Memory at 383fff808000 (64-bit, prefetchable) [size=32K]&lt;br /&gt;
&lt;br /&gt;
        Expansion ROM at fbd80000 [disabled] [size=512K]&lt;br /&gt;
&lt;br /&gt;
        Capabilities: &amp;lt;access denied&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        &#039;&#039;&#039;Kernel driver in use: i40e&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
        Kernel modules: i40e&amp;lt;/blockquote&amp;gt;Для обеих сетевух отвязываем их от текущего драйвера и привязываем к VFIO:&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
echo 0000:03:00.0 | sudo tee /sys/bus/pci/devices/0000:03:00.0/driver/unbind&lt;br /&gt;
&lt;br /&gt;
# 2. Привязываем к vfio-pci&lt;br /&gt;
echo vfio-pci | sudo tee /sys/bus/pci/devices/0000:03:00.0/driver_override&lt;br /&gt;
echo 0000:03:00.0 | sudo tee /sys/bus/pci/drivers/vfio-pci/bind&lt;br /&gt;
&lt;br /&gt;
# 3. Проверяем&lt;br /&gt;
lspci -k -s 03:00.0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Те же манипуляции делаем для 0000:03:00.1 (не забываем в путях к файлам настроек корректно прописать каталог устройства &#039;&#039;&#039;0000:03:00.1&#039;&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
Убеждаемся, что для обеих сетевух теперь используется драйвер VFIO:&amp;lt;blockquote&amp;gt;03:00.0 Ethernet controller: Intel Corporation Ethernet Controller X710 for 10GbE SFP+ (rev 02)&lt;br /&gt;
&lt;br /&gt;
        Subsystem: Intel Corporation Ethernet Converged Network Adapter X710-2&lt;br /&gt;
&lt;br /&gt;
        Physical Slot: 4&lt;br /&gt;
&lt;br /&gt;
        Flags: fast devsel, IRQ 27, NUMA node 0, IOMMU group 28&lt;br /&gt;
&lt;br /&gt;
        Memory at 383ffe800000 (64-bit, prefetchable) [size=8M]&lt;br /&gt;
&lt;br /&gt;
        Memory at 383fff808000 (64-bit, prefetchable) [size=32K]&lt;br /&gt;
&lt;br /&gt;
        Expansion ROM at fbd80000 [disabled] [size=512K]&lt;br /&gt;
&lt;br /&gt;
        Capabilities: &amp;lt;access denied&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        &#039;&#039;&#039;Kernel driver in use: vfio-pci&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
        Kernel modules: i40e&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Примечание:&#039;&#039;&#039; Также в выводе команды ip link интерфейсов eth0 и eth1 теперь не будет, так как они перешли под управление VFIO.&lt;br /&gt;
&lt;br /&gt;
=== 4. Запуск контейнера для VPP ===&lt;br /&gt;
Создаем сетевое пространство имен NGFW (нужно для корректного запуска контейнера):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
sudo ip netns add ngfw&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Выполняем запуск контейнера с VPP:&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
sudo podman run -d --name vpp --network host --privileged --restart always --ulimit core=0:0 --shm-size 4g --volume /var/run/netns:/var/run/netns --volume /var/vpp/netplan:/etc/vpp/netplan --volume /var/log:/var/log --volume /var:/config/shared --env-file /config/vpp/env docker-archive:/home/vyos/vpp-image.tar&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&#039;&#039;&#039;Примечания:&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
# Необходимо убедиться, что все монтируемые каталоги, а также образ и файл env, указанные в команде лежат на своих местах.&lt;br /&gt;
# В случае ошибки запуска (может ругаться на то, что контейнер VPP уже существует) следует добавить в команду параметр &#039;&#039;&#039;--replace&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Проверяем состояние контейнера:&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
sudo podman ps&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#########################################################################################&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== test web server (для проверки работы vyos) ===&lt;br /&gt;
while true; do { echo -e &#039;HTTP/1.1 200 OK\r\nContent-Length: 13\r\n\r\nHello, World!&#039;; } | nc -l 8081; done&lt;br /&gt;
&lt;br /&gt;
=== надо будет еще ядро перенастраивать (но пока рано) ===&lt;br /&gt;
sudo grub-probe --device /dev/sda3&lt;br /&gt;
&lt;br /&gt;
=== это мое ! ===&lt;br /&gt;
podman cp /home/vyos/vpp.conf vpp:/config/vpp.conf&lt;br /&gt;
&lt;br /&gt;
конфигурирование podman&lt;br /&gt;
&lt;br /&gt;
sudo nano /etc/containers/containers.conf&lt;br /&gt;
&lt;br /&gt;
dns_bind_port=54&lt;br /&gt;
&lt;br /&gt;
sudo chattr +i /etc/containers/containers.conf&lt;br /&gt;
&lt;br /&gt;
ip netns add ngfw&lt;br /&gt;
&lt;br /&gt;
podman rm vpp -f&lt;br /&gt;
&lt;br /&gt;
=== создание host interface ===&lt;br /&gt;
ip netns exec ngfw bash&lt;br /&gt;
&lt;br /&gt;
ip link add name http1out type veth peer name http1host&lt;br /&gt;
&lt;br /&gt;
ip link set dev http1out up&lt;br /&gt;
&lt;br /&gt;
ip link set dev http1host up&lt;br /&gt;
&lt;br /&gt;
ip addr add 10.10.10.10/24 dev http1host&lt;br /&gt;
&lt;br /&gt;
ip addr show http1host&lt;br /&gt;
&lt;br /&gt;
podman run -d --name vpp --network host --privileged --restart always --ulimit core=0:0 --shm-size 4g --volume /var/run/netns:/var/run/netns --volume /var/vpp/netplan:/etc/vpp/netplan --volume /var/log:/var/log --volume /var:/config/shared --env-file /config/vpp/env docker-archive:/home/vyos/vpp-image.tar&lt;br /&gt;
&lt;br /&gt;
=== vpp: ===&lt;br /&gt;
create host-interface name http1out&lt;br /&gt;
&lt;br /&gt;
set interface state host-http1out up&lt;br /&gt;
&lt;br /&gt;
podman cp /home/vyos/vpp.conf vpp:/config/vpp.conf&lt;br /&gt;
&lt;br /&gt;
podman restart vpp&lt;br /&gt;
&lt;br /&gt;
=== назначаем адрес для теста (data2 в бридже loop10) ===&lt;br /&gt;
podman exec -it vpp vppctl&lt;br /&gt;
&lt;br /&gt;
set interface ip address loop10 10.1.100.125/24&lt;br /&gt;
&lt;br /&gt;
show int addr&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#########################################################################################&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;##########&amp;lt;/nowiki&amp;gt; enode on podman -----------------------------&lt;br /&gt;
&lt;br /&gt;
=== включение разрешений для podman ===&lt;br /&gt;
set nat source rule 100 source address &#039;10.88.0.0/16&#039;&lt;br /&gt;
&lt;br /&gt;
set nat source rule 100 translation address &#039;masquerade&#039;&lt;br /&gt;
&lt;br /&gt;
commit&lt;br /&gt;
&lt;br /&gt;
save&lt;br /&gt;
&lt;br /&gt;
=== для traefik нуже сервис podman api ===&lt;br /&gt;
podman system service -t 0 unix:///run/user/1000/podman/podman.sock &amp;amp;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
vyos|vyos&lt;br /&gt;
&lt;br /&gt;
sudo podman exec -it vpp vppctl&lt;br /&gt;
&lt;br /&gt;
show acl-plugin acl&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#########################################################################################&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;###&amp;lt;/nowiki&amp;gt; пример лога vpp контейнера &lt;br /&gt;
&lt;br /&gt;
[INFO    ] root.main: Loading configfile /etc/vpp/netplan/netplan.yaml&lt;br /&gt;
&lt;br /&gt;
[INFO    ] vppcfg.config.valid_config: Configuration validated successfully&lt;br /&gt;
&lt;br /&gt;
[INFO    ] root.main: Configuration is valid&lt;br /&gt;
&lt;br /&gt;
[INFO    ] vppcfg.vppapi.connect: VPP version is 24.02-release&lt;br /&gt;
&lt;br /&gt;
[INFO    ] vppcfg.reconciler.write: Wrote 46 lines to /etc/vpp/applynetplan.yaml&lt;br /&gt;
&lt;br /&gt;
[INFO    ] root.main: Planning succeeded&lt;br /&gt;
&lt;br /&gt;
api_response =&amp;gt; lcp_itf_pair_get []&lt;br /&gt;
&lt;br /&gt;
111111111111111111 create sub data1 109 dot1q 109 exact-match&lt;br /&gt;
&lt;br /&gt;
111111111111111111 create sub data1 110 dot1q 110 exact-match&lt;br /&gt;
&lt;br /&gt;
111111111111111111 create sub data1 10 dot1q 10 exact-match&lt;br /&gt;
&lt;br /&gt;
create loopback interface instance 110&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: mtu_change: sw loop110 0&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: mtu_change: si loop110 hi loop110, syncing children&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: sync_state_hw: hi loop110&lt;br /&gt;
&lt;br /&gt;
loop110&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: interface_add: sw data1.109 parent data1&lt;br /&gt;
&lt;br /&gt;
data1.109&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: interface_add: sw data1.110 parent data1&lt;br /&gt;
&lt;br /&gt;
data1.110&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: interface_add: sw data1.10 parent data1&lt;br /&gt;
&lt;br /&gt;
data1.10&lt;br /&gt;
&lt;br /&gt;
bridge-domain 10&lt;br /&gt;
&lt;br /&gt;
bridge-domain 109&lt;br /&gt;
&lt;br /&gt;
bridge-domain 110&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: mtu_change: sw tap4 0&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: mtu_change: si tap4 hi tap4, syncing children&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: sync_state_hw: hi data1.109&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [info  ]: pair create: {loop10, tap4, vlaneth0}&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [info  ]: add: host:tap4 phy:loop10, host_if:vlaneth0 vif:7 ns:ngfw&lt;br /&gt;
&lt;br /&gt;
linux-cp/mpls-sync   [debug ]: pair_add_cb: mpls enabled 0, parent itf-pair: [0] loop10 tap4 vlaneth0 7 type tap netns ngfw&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [info  ]: pair create: itf-pair: [0] loop10 tap4 vlaneth0 7 type tap netns ngfw sw-flags 0 hw-flags 1&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: admin_state_change: sw tap4 1&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: mtu_change: sw tap5 0&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: mtu_change: si tap5 hi tap5, syncing children&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: sync_state_hw: hi data1.110&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [info  ]: pair create: {loop109, tap5, vlaneth99}&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [info  ]: add: host:tap5 phy:loop109, host_if:vlaneth99 vif:8 ns:ngfw&lt;br /&gt;
&lt;br /&gt;
linux-cp/mpls-sync   [debug ]: pair_add_cb: mpls enabled 0, parent itf-pair: [1] loop109 tap5 vlaneth99 8 type tap netns ngfw&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [info  ]: pair create: itf-pair: [1] loop109 tap5 vlaneth99 8 type tap netns ngfw sw-flags 0 hw-flags 1&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: admin_state_change: sw tap5 1&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: mtu_change: sw tap6 0&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: mtu_change: si tap6 hi tap6, syncing children&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: sync_state_hw: hi data1.10&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [info  ]: pair create: {loop110, tap6, vlaneth100}&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [info  ]: add: host:tap6 phy:loop110, host_if:vlaneth100 vif:9 ns:ngfw&lt;br /&gt;
&lt;br /&gt;
linux-cp/mpls-sync   [debug ]: pair_add_cb: mpls enabled 0, parent itf-pair: [2] loop110 tap6 vlaneth100 9 type tap netns ngfw&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [info  ]: pair create: itf-pair: [2] loop110 tap6 vlaneth100 9 type tap netns ngfw sw-flags 0 hw-flags 1&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: admin_state_change: sw tap6 1&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: mtu_change: sw data1 0&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: mtu_change: si data1 hi data1, syncing children&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: sync_state_hw: hi data1&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: mtu_change: sw data1.10 0&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: mtu_change: sw data1.110 0&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: mtu_change: sw data1.109 0&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: mtu_change: sw data2 0&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: mtu_change: si data2 hi data2, syncing children&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: sync_state_hw: hi data2&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: mtu_change: sw host-http1out 0&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: mtu_change: si host-http1out hi host-http1out, syncing children&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: sync_state_hw: hi host-http1out&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: mtu_change: sw loop10 0&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: mtu_change: si loop10 hi loop10, syncing children&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: sync_state_hw: hi loop10&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [info  ]: sync_state: itf-pair: [0] loop10 tap4 vlaneth0 7 type tap netns ngfw flags 0 sup-flags 0 mtu 1500 sup-mtu 1500&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: mtu_change: sw tap4 0&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: mtu_change: si tap4 hi tap4, syncing children&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: sync_state_hw: hi data1.109&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: mtu_change: sw loop109 0&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: mtu_change: si loop109 hi loop109, syncing children&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: sync_state_hw: hi loop109&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [info  ]: sync_state: itf-pair: [1] loop109 tap5 vlaneth99 8 type tap netns ngfw flags 0 sup-flags 0 mtu 1500 sup-mtu 1500&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: mtu_change: sw tap5 0&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: mtu_change: si tap5 hi tap5, syncing children&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: sync_state_hw: hi data1.110&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: mtu_change: sw loop110 0&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: mtu_change: si loop110 hi loop110, syncing children&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: sync_state_hw: hi loop110&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [info  ]: sync_state: itf-pair: [2] loop110 tap6 vlaneth100 9 type tap netns ngfw flags 0 sup-flags 0 mtu 1500 sup-mtu 1500&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: mtu_change: sw tap6 0&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: mtu_change: si tap6 hi tap6, syncing children&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: sync_state_hw: hi data1.10&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: ip4_addr_add: si:loop109 172.16.99.1/24&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: ip4_addr_add: itf-pair: [1] loop109 tap5 vlaneth99 8 type tap netns ngfw ip4 172.16.99.1/24&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: ip4_addr_add: si:loop110 172.16.100.1/24&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: ip4_addr_add: itf-pair: [2] loop110 tap6 vlaneth100 9 type tap netns ngfw ip4 172.16.100.1/24&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: admin_state_change: sw data1 1&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;###&amp;lt;/nowiki&amp;gt; пример конфигурации vpp&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;##&amp;lt;/nowiki&amp;gt; sudo podman exec vpp vppctl show int&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
              Name               Idx    State  MTU (L3/IP4/IP6/MPLS)     Counter          Count     &lt;br /&gt;
&lt;br /&gt;
data1                             1      up          1500/0/0/0     tx-error                      40&lt;br /&gt;
&lt;br /&gt;
data1.109                         7      up          1500/0/0/0     &lt;br /&gt;
&lt;br /&gt;
data1.110                         8      up          1500/0/0/0     &lt;br /&gt;
&lt;br /&gt;
data1.10                          9      up          1500/0/0/0     &lt;br /&gt;
&lt;br /&gt;
data2                             2      up          1500/0/0/0     tx packets                    13&lt;br /&gt;
&lt;br /&gt;
                                                                    tx bytes                    1086&lt;br /&gt;
&lt;br /&gt;
host-http1out                     3      up          1500/0/0/0     rx packets                     4&lt;br /&gt;
&lt;br /&gt;
                                                                    rx bytes                     280&lt;br /&gt;
&lt;br /&gt;
                                                                    drops                          4&lt;br /&gt;
&lt;br /&gt;
                                                                    ip6                            4&lt;br /&gt;
&lt;br /&gt;
local0                            0     down          0/0/0/0       &lt;br /&gt;
&lt;br /&gt;
loop109                           5      up          1500/0/0/0     tx packets                    26&lt;br /&gt;
&lt;br /&gt;
                                                                    tx bytes                    2172&lt;br /&gt;
&lt;br /&gt;
                                                                    drops                         13&lt;br /&gt;
&lt;br /&gt;
                                                                    tx-error                       1&lt;br /&gt;
&lt;br /&gt;
loop10                            4      up          1500/0/0/0     tx packets                    26&lt;br /&gt;
&lt;br /&gt;
                                                                    tx bytes                    2172&lt;br /&gt;
&lt;br /&gt;
                                                                    drops                         13&lt;br /&gt;
&lt;br /&gt;
                                                                    tx-error                       1&lt;br /&gt;
&lt;br /&gt;
loop110                           6      up          1500/0/0/0     tx packets                    28&lt;br /&gt;
&lt;br /&gt;
                                                                    tx bytes                    2352&lt;br /&gt;
&lt;br /&gt;
                                                                    drops                         14&lt;br /&gt;
&lt;br /&gt;
tap4                              10     up          1500/0/0/0     rx packets                    13&lt;br /&gt;
&lt;br /&gt;
                                                                    rx bytes                    1046&lt;br /&gt;
&lt;br /&gt;
                                                                    drops                          1&lt;br /&gt;
&lt;br /&gt;
                                                                    ip6                           13&lt;br /&gt;
&lt;br /&gt;
tap5                              11     up          1500/0/0/0     rx packets                    13&lt;br /&gt;
&lt;br /&gt;
                                                                    rx bytes                    1046&lt;br /&gt;
&lt;br /&gt;
                                                                    drops                          1&lt;br /&gt;
&lt;br /&gt;
                                                                    ip6                           13&lt;br /&gt;
&lt;br /&gt;
tap6                              12     up          1500/0/0/0     rx packets                    13&lt;br /&gt;
&lt;br /&gt;
                                                                    rx bytes                    1046&lt;br /&gt;
&lt;br /&gt;
                                                                    ip6                           13&lt;/div&gt;</summary>
		<author><name>Dima</name></author>
	</entry>
	<entry>
		<id>https://wiki.entcor.ru/index.php?title=VYOS-VPP&amp;diff=476</id>
		<title>VYOS-VPP</title>
		<link rel="alternate" type="text/html" href="https://wiki.entcor.ru/index.php?title=VYOS-VPP&amp;diff=476"/>
		<updated>2025-06-17T01:28:39Z</updated>

		<summary type="html">&lt;p&gt;Dima: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Подготовка сервера с VYOS для работы с VPP ==&lt;br /&gt;
&lt;br /&gt;
=== 1. Настройки BIOS ===&lt;br /&gt;
В BIOS включить настройку Intel VT-d (или как там она называется)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Примечание:&#039;&#039;&#039; на всякий случай можно еще включить X2APIC = Enable (непонятно, влияет или нет - но лучше включить)&lt;br /&gt;
&lt;br /&gt;
=== 2. Настройки ядра VYOS ===&lt;br /&gt;
В файле &#039;&#039;&#039;/boot/grub/grub.cfg.d/vyos-versions&#039;&#039;&#039; найти следующую строчку:&lt;br /&gt;
&lt;br /&gt;
set boot_opts=&amp;quot;boot=live rootdelay=5 noautologin net.ifnames=0 biosdevname=0 vyos-union=/boot/VYOS-1.5-Rolling&amp;quot;&lt;br /&gt;
&lt;br /&gt;
и добавить в конец: &amp;quot; intel_iommu=on iommu=pt&amp;quot;&lt;br /&gt;
&lt;br /&gt;
т.е. полная строка должна быть:&lt;br /&gt;
&lt;br /&gt;
set boot_opts=&amp;quot;boot=live rootdelay=5 noautologin net.ifnames=0 biosdevname=0 vyos-union=/boot/VYOS-1.5-Rolling intel_iommu=on iommu=pt&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Далее выполнить перезагрузку.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Примечание:&#039;&#039;&#039; после перезагрузки файл &#039;&#039;&#039;/boot/grub/grub.cfg.d/vyos-versions&#039;&#039;&#039; перезаписывается, так что придется потом снова строку &lt;br /&gt;
&lt;br /&gt;
&amp;quot;set boot_opts = ...&amp;quot; перезаписывать, пока не придумается как ее там зафиксировать. В противном случае после следующей перезагрузки поддержка IOMMU опять слетит.&lt;br /&gt;
&lt;br /&gt;
После перезагрузки нужно убедиться, что режим IOMMU включен, для этого выполнить команду:&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
dmesg | grep IOMMU&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Вывод должен быть примерно таким:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[    0.046990] DMAR: IOMMU enabled&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[    0.109294] DMAR-IR: IOAPIC id 1 under DRHD base  0xfbffc000 IOMMU 1&lt;br /&gt;
&lt;br /&gt;
[    0.109297] DMAR-IR: IOAPIC id 2 under DRHD base  0xfbffc000 IOMMU 1&lt;br /&gt;
&lt;br /&gt;
[    0.372778] DMAR: IOMMU feature sc_support inconsistent&lt;br /&gt;
&lt;br /&gt;
[    0.372779] DMAR: IOMMU feature dev_iotlb_support inconsistent&lt;br /&gt;
&lt;br /&gt;
[    0.386236] AMD-Vi: AMD IOMMUv2 functionality not available on this system - This is not a bug.&lt;br /&gt;
&lt;br /&gt;
=== 3. Настройка работы сетевых карт в режиме VFIO ===&lt;br /&gt;
Проверка сетевых карт через ip link (обращаем внимание на eth0 и eth1):&amp;lt;blockquote&amp;gt;1: lo: &amp;lt;LOOPBACK,UP,LOWER_UP&amp;gt; mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000&lt;br /&gt;
&lt;br /&gt;
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00&lt;br /&gt;
&lt;br /&gt;
2: eth2: &amp;lt;BROADCAST,MULTICAST,UP,LOWER_UP&amp;gt; mtu 1500 qdisc fq_codel state UP mode DEFAULT group default qlen 1000&lt;br /&gt;
&lt;br /&gt;
    link/ether 22:41:4d:03:1d:70 brd ff:ff:ff:ff:ff:ff&lt;br /&gt;
&lt;br /&gt;
    altname enp6s0&lt;br /&gt;
&lt;br /&gt;
3: eth0: &amp;lt;BROADCAST,MULTICAST,UP,LOWER_UP&amp;gt; mtu 1500 qdisc mq state UP mode DEFAULT group default qlen 1000&lt;br /&gt;
&lt;br /&gt;
    link/ether 40:a6:b7:93:42:44 brd ff:ff:ff:ff:ff:ff&lt;br /&gt;
&lt;br /&gt;
    altname enp3s0f0&lt;br /&gt;
&lt;br /&gt;
    altname ens4f0&lt;br /&gt;
&lt;br /&gt;
4: eth1: &amp;lt;NO-CARRIER,BROADCAST,MULTICAST,UP&amp;gt; mtu 1500 qdisc mq state DOWN mode DEFAULT group default qlen 1000&lt;br /&gt;
&lt;br /&gt;
    link/ether 40:a6:b7:93:42:45 brd ff:ff:ff:ff:ff:ff&lt;br /&gt;
&lt;br /&gt;
    altname enp3s0f1&lt;br /&gt;
&lt;br /&gt;
    altname ens4f1&lt;br /&gt;
&lt;br /&gt;
5: pim6reg@NONE: &amp;lt;NOARP,UP,LOWER_UP&amp;gt; mtu 1452 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000&amp;lt;/blockquote&amp;gt;Убеждаемся, что загружены модули ядра для VFIO:&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
sudo modprobe vfio&lt;br /&gt;
sudo modprobe vfio-pci&lt;br /&gt;
sudo modprobe vfio_iommu_type1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Проверяем, что PCI-код соответствует устройству (eth0 = 0000:03:00.0, eth1 = 0000:03:00.1):&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
lspci -k -v -s 0000:03:00.0&lt;br /&gt;
lspci -k -v -s 0000:03:00.1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Вывод должен быть примерно таким (обращаем внимание на текущий Kernel driver in use):&amp;lt;blockquote&amp;gt;03:00.0 Ethernet controller: Intel Corporation Ethernet Controller X710 for 10GbE SFP+ (rev 02)&lt;br /&gt;
&lt;br /&gt;
        Subsystem: Intel Corporation Ethernet Converged Network Adapter X710-2&lt;br /&gt;
&lt;br /&gt;
        Physical Slot: 4&lt;br /&gt;
&lt;br /&gt;
        Flags: bus master, fast devsel, latency 0, IRQ 27, NUMA node 0, IOMMU group 28&lt;br /&gt;
&lt;br /&gt;
        Memory at 383ffe800000 (64-bit, prefetchable) [size=8M]&lt;br /&gt;
&lt;br /&gt;
        Memory at 383fff808000 (64-bit, prefetchable) [size=32K]&lt;br /&gt;
&lt;br /&gt;
        Expansion ROM at fbd80000 [disabled] [size=512K]&lt;br /&gt;
&lt;br /&gt;
        Capabilities: &amp;lt;access denied&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        &#039;&#039;&#039;Kernel driver in use: i40e&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
        Kernel modules: i40e&amp;lt;/blockquote&amp;gt;Для обеих сетевух отвязываем их от текущего драйвера и привязываем к VFIO:&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
echo 0000:03:00.0 | sudo tee /sys/bus/pci/devices/0000:03:00.0/driver/unbind&lt;br /&gt;
&lt;br /&gt;
# 2. Привязываем к vfio-pci&lt;br /&gt;
echo vfio-pci | sudo tee /sys/bus/pci/devices/0000:03:00.0/driver_override&lt;br /&gt;
echo 0000:03:00.0 | sudo tee /sys/bus/pci/drivers/vfio-pci/bind&lt;br /&gt;
&lt;br /&gt;
# 3. Проверяем&lt;br /&gt;
lspci -k -s 03:00.0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Те же манипуляции делаем для 0000:03:00.1 (не забываем в путях к файлам настроек корректно прописать каталог устройства &#039;&#039;&#039;0000:03:00.1&#039;&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
Убеждаемся, что для обеих сетевух теперь используется драйвер VFIO:&amp;lt;blockquote&amp;gt;03:00.0 Ethernet controller: Intel Corporation Ethernet Controller X710 for 10GbE SFP+ (rev 02)&lt;br /&gt;
&lt;br /&gt;
        Subsystem: Intel Corporation Ethernet Converged Network Adapter X710-2&lt;br /&gt;
&lt;br /&gt;
        Physical Slot: 4&lt;br /&gt;
&lt;br /&gt;
        Flags: fast devsel, IRQ 27, NUMA node 0, IOMMU group 28&lt;br /&gt;
&lt;br /&gt;
        Memory at 383ffe800000 (64-bit, prefetchable) [size=8M]&lt;br /&gt;
&lt;br /&gt;
        Memory at 383fff808000 (64-bit, prefetchable) [size=32K]&lt;br /&gt;
&lt;br /&gt;
        Expansion ROM at fbd80000 [disabled] [size=512K]&lt;br /&gt;
&lt;br /&gt;
        Capabilities: &amp;lt;access denied&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        &#039;&#039;&#039;Kernel driver in use: vfio-pci&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
        Kernel modules: i40e&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#########################################################################################&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== test web server (для проверки работы vyos) ===&lt;br /&gt;
while true; do { echo -e &#039;HTTP/1.1 200 OK\r\nContent-Length: 13\r\n\r\nHello, World!&#039;; } | nc -l 8081; done&lt;br /&gt;
&lt;br /&gt;
=== надо будет еще ядро перенастраивать (но пока рано) ===&lt;br /&gt;
sudo grub-probe --device /dev/sda3&lt;br /&gt;
&lt;br /&gt;
=== это мое ! ===&lt;br /&gt;
podman cp /home/vyos/vpp.conf vpp:/config/vpp.conf&lt;br /&gt;
&lt;br /&gt;
конфигурирование podman&lt;br /&gt;
&lt;br /&gt;
sudo nano /etc/containers/containers.conf&lt;br /&gt;
&lt;br /&gt;
dns_bind_port=54&lt;br /&gt;
&lt;br /&gt;
sudo chattr +i /etc/containers/containers.conf&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#########################################################################################&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== порядок биндинья карт ===&lt;br /&gt;
1) серевые карты VPP долюжы быть переведены в down (ip l set state eth1 down)&lt;br /&gt;
&lt;br /&gt;
2) вклчаем драйвер&lt;br /&gt;
&lt;br /&gt;
sudo modprobe vfio-pci&lt;br /&gt;
&lt;br /&gt;
3) потом делаем бинд&lt;br /&gt;
&lt;br /&gt;
так можно но не получилось т.к. с iommq проблемы&lt;br /&gt;
&lt;br /&gt;
sudo echo &amp;quot;0000:00:12.0&amp;quot; &amp;gt; /sys/bus/pci/drivers/virtio-pci/bind&lt;br /&gt;
&lt;br /&gt;
делал так:&lt;br /&gt;
&lt;br /&gt;
качал dpdk c github&lt;br /&gt;
&lt;br /&gt;
cd /home/vyos/dpdk-24.11/usertools&lt;br /&gt;
&lt;br /&gt;
python3 dpdk-devbind.py -b vfio-pci 0000:03:00.0 --noiommu-mode&lt;br /&gt;
&lt;br /&gt;
перечень карт можно увидеть&lt;br /&gt;
&lt;br /&gt;
lspci | grep Eth&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#########################################################################################&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== запуск vpp (далее сделаем через podman-compose) тут порядок в куче ===&lt;br /&gt;
ip l set dev eth1 down&lt;br /&gt;
&lt;br /&gt;
ip l set dev eth2 down&lt;br /&gt;
&lt;br /&gt;
modprobe vfio-pci&lt;br /&gt;
&lt;br /&gt;
python3 dpdk-devbind.py -b vfio-pci 0000:03:00.0 --noiommu-mode&lt;br /&gt;
&lt;br /&gt;
python3 dpdk-devbind.py -b vfio-pci 0000:03:00.1 --noiommu-mode&lt;br /&gt;
&lt;br /&gt;
=== создание ngfw пространства имен ===&lt;br /&gt;
ip netns add ngfw&lt;br /&gt;
&lt;br /&gt;
podman rm vpp -f&lt;br /&gt;
&lt;br /&gt;
=== создание host interface ===&lt;br /&gt;
ip netns exec ngfw bash&lt;br /&gt;
&lt;br /&gt;
ip link add name http1out type veth peer name http1host&lt;br /&gt;
&lt;br /&gt;
ip link set dev http1out up&lt;br /&gt;
&lt;br /&gt;
ip link set dev http1host up&lt;br /&gt;
&lt;br /&gt;
ip addr add 10.10.10.10/24 dev http1host&lt;br /&gt;
&lt;br /&gt;
ip addr show http1host&lt;br /&gt;
&lt;br /&gt;
podman run -d --name vpp --network host --privileged --restart always --ulimit core=0:0 --shm-size 4g --volume /var/run/netns:/var/run/netns --volume /var/vpp/netplan:/etc/vpp/netplan --volume /var/log:/var/log --volume /var:/config/shared --env-file /config/vpp/env docker-archive:/home/vyos/vpp-image.tar&lt;br /&gt;
&lt;br /&gt;
=== vpp: ===&lt;br /&gt;
create host-interface name http1out&lt;br /&gt;
&lt;br /&gt;
set interface state host-http1out up&lt;br /&gt;
&lt;br /&gt;
podman cp /home/vyos/vpp.conf vpp:/config/vpp.conf&lt;br /&gt;
&lt;br /&gt;
podman restart vpp&lt;br /&gt;
&lt;br /&gt;
=== назначаем адрес для теста (data2 в бридже loop10) ===&lt;br /&gt;
podman exec -it vpp vppctl&lt;br /&gt;
&lt;br /&gt;
set interface ip address loop10 10.1.100.125/24&lt;br /&gt;
&lt;br /&gt;
show int addr&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#########################################################################################&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;##########&amp;lt;/nowiki&amp;gt; enode on podman -----------------------------&lt;br /&gt;
&lt;br /&gt;
=== включение разрешений для podman ===&lt;br /&gt;
set nat source rule 100 source address &#039;10.88.0.0/16&#039;&lt;br /&gt;
&lt;br /&gt;
set nat source rule 100 translation address &#039;masquerade&#039;&lt;br /&gt;
&lt;br /&gt;
commit&lt;br /&gt;
&lt;br /&gt;
save&lt;br /&gt;
&lt;br /&gt;
=== для traefik нуже сервис podman api ===&lt;br /&gt;
podman system service -t 0 unix:///run/user/1000/podman/podman.sock &amp;amp;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
vyos|vyos&lt;br /&gt;
&lt;br /&gt;
sudo podman exec -it vpp vppctl&lt;br /&gt;
&lt;br /&gt;
show acl-plugin acl&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#########################################################################################&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;###&amp;lt;/nowiki&amp;gt; пример лога vpp контейнера &lt;br /&gt;
&lt;br /&gt;
[INFO    ] root.main: Loading configfile /etc/vpp/netplan/netplan.yaml&lt;br /&gt;
&lt;br /&gt;
[INFO    ] vppcfg.config.valid_config: Configuration validated successfully&lt;br /&gt;
&lt;br /&gt;
[INFO    ] root.main: Configuration is valid&lt;br /&gt;
&lt;br /&gt;
[INFO    ] vppcfg.vppapi.connect: VPP version is 24.02-release&lt;br /&gt;
&lt;br /&gt;
[INFO    ] vppcfg.reconciler.write: Wrote 46 lines to /etc/vpp/applynetplan.yaml&lt;br /&gt;
&lt;br /&gt;
[INFO    ] root.main: Planning succeeded&lt;br /&gt;
&lt;br /&gt;
api_response =&amp;gt; lcp_itf_pair_get []&lt;br /&gt;
&lt;br /&gt;
111111111111111111 create sub data1 109 dot1q 109 exact-match&lt;br /&gt;
&lt;br /&gt;
111111111111111111 create sub data1 110 dot1q 110 exact-match&lt;br /&gt;
&lt;br /&gt;
111111111111111111 create sub data1 10 dot1q 10 exact-match&lt;br /&gt;
&lt;br /&gt;
create loopback interface instance 110&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: mtu_change: sw loop110 0&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: mtu_change: si loop110 hi loop110, syncing children&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: sync_state_hw: hi loop110&lt;br /&gt;
&lt;br /&gt;
loop110&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: interface_add: sw data1.109 parent data1&lt;br /&gt;
&lt;br /&gt;
data1.109&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: interface_add: sw data1.110 parent data1&lt;br /&gt;
&lt;br /&gt;
data1.110&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: interface_add: sw data1.10 parent data1&lt;br /&gt;
&lt;br /&gt;
data1.10&lt;br /&gt;
&lt;br /&gt;
bridge-domain 10&lt;br /&gt;
&lt;br /&gt;
bridge-domain 109&lt;br /&gt;
&lt;br /&gt;
bridge-domain 110&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: mtu_change: sw tap4 0&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: mtu_change: si tap4 hi tap4, syncing children&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: sync_state_hw: hi data1.109&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [info  ]: pair create: {loop10, tap4, vlaneth0}&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [info  ]: add: host:tap4 phy:loop10, host_if:vlaneth0 vif:7 ns:ngfw&lt;br /&gt;
&lt;br /&gt;
linux-cp/mpls-sync   [debug ]: pair_add_cb: mpls enabled 0, parent itf-pair: [0] loop10 tap4 vlaneth0 7 type tap netns ngfw&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [info  ]: pair create: itf-pair: [0] loop10 tap4 vlaneth0 7 type tap netns ngfw sw-flags 0 hw-flags 1&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: admin_state_change: sw tap4 1&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: mtu_change: sw tap5 0&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: mtu_change: si tap5 hi tap5, syncing children&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: sync_state_hw: hi data1.110&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [info  ]: pair create: {loop109, tap5, vlaneth99}&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [info  ]: add: host:tap5 phy:loop109, host_if:vlaneth99 vif:8 ns:ngfw&lt;br /&gt;
&lt;br /&gt;
linux-cp/mpls-sync   [debug ]: pair_add_cb: mpls enabled 0, parent itf-pair: [1] loop109 tap5 vlaneth99 8 type tap netns ngfw&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [info  ]: pair create: itf-pair: [1] loop109 tap5 vlaneth99 8 type tap netns ngfw sw-flags 0 hw-flags 1&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: admin_state_change: sw tap5 1&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: mtu_change: sw tap6 0&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: mtu_change: si tap6 hi tap6, syncing children&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: sync_state_hw: hi data1.10&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [info  ]: pair create: {loop110, tap6, vlaneth100}&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [info  ]: add: host:tap6 phy:loop110, host_if:vlaneth100 vif:9 ns:ngfw&lt;br /&gt;
&lt;br /&gt;
linux-cp/mpls-sync   [debug ]: pair_add_cb: mpls enabled 0, parent itf-pair: [2] loop110 tap6 vlaneth100 9 type tap netns ngfw&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [info  ]: pair create: itf-pair: [2] loop110 tap6 vlaneth100 9 type tap netns ngfw sw-flags 0 hw-flags 1&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: admin_state_change: sw tap6 1&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: mtu_change: sw data1 0&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: mtu_change: si data1 hi data1, syncing children&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: sync_state_hw: hi data1&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: mtu_change: sw data1.10 0&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: mtu_change: sw data1.110 0&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: mtu_change: sw data1.109 0&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: mtu_change: sw data2 0&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: mtu_change: si data2 hi data2, syncing children&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: sync_state_hw: hi data2&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: mtu_change: sw host-http1out 0&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: mtu_change: si host-http1out hi host-http1out, syncing children&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: sync_state_hw: hi host-http1out&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: mtu_change: sw loop10 0&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: mtu_change: si loop10 hi loop10, syncing children&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: sync_state_hw: hi loop10&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [info  ]: sync_state: itf-pair: [0] loop10 tap4 vlaneth0 7 type tap netns ngfw flags 0 sup-flags 0 mtu 1500 sup-mtu 1500&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: mtu_change: sw tap4 0&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: mtu_change: si tap4 hi tap4, syncing children&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: sync_state_hw: hi data1.109&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: mtu_change: sw loop109 0&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: mtu_change: si loop109 hi loop109, syncing children&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: sync_state_hw: hi loop109&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [info  ]: sync_state: itf-pair: [1] loop109 tap5 vlaneth99 8 type tap netns ngfw flags 0 sup-flags 0 mtu 1500 sup-mtu 1500&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: mtu_change: sw tap5 0&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: mtu_change: si tap5 hi tap5, syncing children&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: sync_state_hw: hi data1.110&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: mtu_change: sw loop110 0&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: mtu_change: si loop110 hi loop110, syncing children&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: sync_state_hw: hi loop110&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [info  ]: sync_state: itf-pair: [2] loop110 tap6 vlaneth100 9 type tap netns ngfw flags 0 sup-flags 0 mtu 1500 sup-mtu 1500&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: mtu_change: sw tap6 0&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: mtu_change: si tap6 hi tap6, syncing children&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: sync_state_hw: hi data1.10&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: ip4_addr_add: si:loop109 172.16.99.1/24&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: ip4_addr_add: itf-pair: [1] loop109 tap5 vlaneth99 8 type tap netns ngfw ip4 172.16.99.1/24&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: ip4_addr_add: si:loop110 172.16.100.1/24&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: ip4_addr_add: itf-pair: [2] loop110 tap6 vlaneth100 9 type tap netns ngfw ip4 172.16.100.1/24&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: admin_state_change: sw data1 1&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;###&amp;lt;/nowiki&amp;gt; пример конфигурации vpp&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;##&amp;lt;/nowiki&amp;gt; sudo podman exec vpp vppctl show int&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
              Name               Idx    State  MTU (L3/IP4/IP6/MPLS)     Counter          Count     &lt;br /&gt;
&lt;br /&gt;
data1                             1      up          1500/0/0/0     tx-error                      40&lt;br /&gt;
&lt;br /&gt;
data1.109                         7      up          1500/0/0/0     &lt;br /&gt;
&lt;br /&gt;
data1.110                         8      up          1500/0/0/0     &lt;br /&gt;
&lt;br /&gt;
data1.10                          9      up          1500/0/0/0     &lt;br /&gt;
&lt;br /&gt;
data2                             2      up          1500/0/0/0     tx packets                    13&lt;br /&gt;
&lt;br /&gt;
                                                                    tx bytes                    1086&lt;br /&gt;
&lt;br /&gt;
host-http1out                     3      up          1500/0/0/0     rx packets                     4&lt;br /&gt;
&lt;br /&gt;
                                                                    rx bytes                     280&lt;br /&gt;
&lt;br /&gt;
                                                                    drops                          4&lt;br /&gt;
&lt;br /&gt;
                                                                    ip6                            4&lt;br /&gt;
&lt;br /&gt;
local0                            0     down          0/0/0/0       &lt;br /&gt;
&lt;br /&gt;
loop109                           5      up          1500/0/0/0     tx packets                    26&lt;br /&gt;
&lt;br /&gt;
                                                                    tx bytes                    2172&lt;br /&gt;
&lt;br /&gt;
                                                                    drops                         13&lt;br /&gt;
&lt;br /&gt;
                                                                    tx-error                       1&lt;br /&gt;
&lt;br /&gt;
loop10                            4      up          1500/0/0/0     tx packets                    26&lt;br /&gt;
&lt;br /&gt;
                                                                    tx bytes                    2172&lt;br /&gt;
&lt;br /&gt;
                                                                    drops                         13&lt;br /&gt;
&lt;br /&gt;
                                                                    tx-error                       1&lt;br /&gt;
&lt;br /&gt;
loop110                           6      up          1500/0/0/0     tx packets                    28&lt;br /&gt;
&lt;br /&gt;
                                                                    tx bytes                    2352&lt;br /&gt;
&lt;br /&gt;
                                                                    drops                         14&lt;br /&gt;
&lt;br /&gt;
tap4                              10     up          1500/0/0/0     rx packets                    13&lt;br /&gt;
&lt;br /&gt;
                                                                    rx bytes                    1046&lt;br /&gt;
&lt;br /&gt;
                                                                    drops                          1&lt;br /&gt;
&lt;br /&gt;
                                                                    ip6                           13&lt;br /&gt;
&lt;br /&gt;
tap5                              11     up          1500/0/0/0     rx packets                    13&lt;br /&gt;
&lt;br /&gt;
                                                                    rx bytes                    1046&lt;br /&gt;
&lt;br /&gt;
                                                                    drops                          1&lt;br /&gt;
&lt;br /&gt;
                                                                    ip6                           13&lt;br /&gt;
&lt;br /&gt;
tap6                              12     up          1500/0/0/0     rx packets                    13&lt;br /&gt;
&lt;br /&gt;
                                                                    rx bytes                    1046&lt;br /&gt;
&lt;br /&gt;
                                                                    ip6                           13&lt;/div&gt;</summary>
		<author><name>Dima</name></author>
	</entry>
	<entry>
		<id>https://wiki.entcor.ru/index.php?title=VYOS-VPP&amp;diff=475</id>
		<title>VYOS-VPP</title>
		<link rel="alternate" type="text/html" href="https://wiki.entcor.ru/index.php?title=VYOS-VPP&amp;diff=475"/>
		<updated>2025-06-17T01:19:53Z</updated>

		<summary type="html">&lt;p&gt;Dima: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Подготовка сервера с VYOS для работы с VPP ==&lt;br /&gt;
&lt;br /&gt;
=== 1. Настройки BIOS ===&lt;br /&gt;
В BIOS включить настройку Intel VT-d (или как там она называется)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Примечание:&#039;&#039;&#039; на всякий случай можно еще включить X2APIC = Enable (непонятно, влияет или нет - но лучше включить)&lt;br /&gt;
&lt;br /&gt;
=== 2. Настройки ядра VYOS ===&lt;br /&gt;
В файле &#039;&#039;&#039;/boot/grub/grub.cfg.d/vyos-versions&#039;&#039;&#039; найти следующую строчку:&lt;br /&gt;
&lt;br /&gt;
set boot_opts=&amp;quot;boot=live rootdelay=5 noautologin net.ifnames=0 biosdevname=0 vyos-union=/boot/VYOS-1.5-Rolling&amp;quot;&lt;br /&gt;
&lt;br /&gt;
и добавить в конец: &amp;quot; intel_iommu=on iommu=pt&amp;quot;&lt;br /&gt;
&lt;br /&gt;
т.е. полная строка должна быть:&lt;br /&gt;
&lt;br /&gt;
set boot_opts=&amp;quot;boot=live rootdelay=5 noautologin net.ifnames=0 biosdevname=0 vyos-union=/boot/VYOS-1.5-Rolling intel_iommu=on iommu=pt&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Далее выполнить перезагрузку.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Примечание:&#039;&#039;&#039; после перезагрузки файл &#039;&#039;&#039;/boot/grub/grub.cfg.d/vyos-versions&#039;&#039;&#039; перезаписывается, так что придется потом снова строку &lt;br /&gt;
&lt;br /&gt;
&amp;quot;set boot_opts = ...&amp;quot; перезаписывать, пока не придумается как ее там зафиксировать. В противном случае после следующей перезагрузки поддержка IOMMU опять слетит.&lt;br /&gt;
&lt;br /&gt;
После перезагрузки нужно убедиться, что режим IOMMU включен, для этого выполнить команду:&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
dmesg | grep IOMMU&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Вывод должен быть примерно таким:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[    0.046990] DMAR: IOMMU enabled&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[    0.109294] DMAR-IR: IOAPIC id 1 under DRHD base  0xfbffc000 IOMMU 1&lt;br /&gt;
&lt;br /&gt;
[    0.109297] DMAR-IR: IOAPIC id 2 under DRHD base  0xfbffc000 IOMMU 1&lt;br /&gt;
&lt;br /&gt;
[    0.372778] DMAR: IOMMU feature sc_support inconsistent&lt;br /&gt;
&lt;br /&gt;
[    0.372779] DMAR: IOMMU feature dev_iotlb_support inconsistent&lt;br /&gt;
&lt;br /&gt;
[    0.386236] AMD-Vi: AMD IOMMUv2 functionality not available on this system - This is not a bug.&lt;br /&gt;
&lt;br /&gt;
=== 3. Настройка работы сетевых карт в режиме VFIO ===&lt;br /&gt;
Проверка сетевых карт через ip link (обращаем внимание на eth0 и eth1):&amp;lt;blockquote&amp;gt;1: lo: &amp;lt;LOOPBACK,UP,LOWER_UP&amp;gt; mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000&lt;br /&gt;
&lt;br /&gt;
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00&lt;br /&gt;
&lt;br /&gt;
2: eth2: &amp;lt;BROADCAST,MULTICAST,UP,LOWER_UP&amp;gt; mtu 1500 qdisc fq_codel state UP mode DEFAULT group default qlen 1000&lt;br /&gt;
&lt;br /&gt;
    link/ether 22:41:4d:03:1d:70 brd ff:ff:ff:ff:ff:ff&lt;br /&gt;
&lt;br /&gt;
    altname enp6s0&lt;br /&gt;
&lt;br /&gt;
3: eth0: &amp;lt;BROADCAST,MULTICAST,UP,LOWER_UP&amp;gt; mtu 1500 qdisc mq state UP mode DEFAULT group default qlen 1000&lt;br /&gt;
&lt;br /&gt;
    link/ether 40:a6:b7:93:42:44 brd ff:ff:ff:ff:ff:ff&lt;br /&gt;
&lt;br /&gt;
    altname enp3s0f0&lt;br /&gt;
&lt;br /&gt;
    altname ens4f0&lt;br /&gt;
&lt;br /&gt;
4: eth1: &amp;lt;NO-CARRIER,BROADCAST,MULTICAST,UP&amp;gt; mtu 1500 qdisc mq state DOWN mode DEFAULT group default qlen 1000&lt;br /&gt;
&lt;br /&gt;
    link/ether 40:a6:b7:93:42:45 brd ff:ff:ff:ff:ff:ff&lt;br /&gt;
&lt;br /&gt;
    altname enp3s0f1&lt;br /&gt;
&lt;br /&gt;
    altname ens4f1&lt;br /&gt;
&lt;br /&gt;
5: pim6reg@NONE: &amp;lt;NOARP,UP,LOWER_UP&amp;gt; mtu 1452 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000&amp;lt;/blockquote&amp;gt;Убеждаемся, что загружены модули ядра для VFIO:&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
sudo modprobe vfio&lt;br /&gt;
sudo modprobe vfio-pci&lt;br /&gt;
sudo modprobe vfio_iommu_type1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Проверяем, что PCI-код соответствует устройству (eth0 = 0000:03:00.0, eth1 = 0000:03:00.1):&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
lspci -k -v -s 0000:03:00.0&lt;br /&gt;
lspci -k -v -s 0000:03:00.1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&amp;lt;blockquote&amp;gt;03:00.0 Ethernet controller: Intel Corporation Ethernet Controller X710 for 10GbE SFP+ (rev 02)&lt;br /&gt;
&lt;br /&gt;
        Subsystem: Intel Corporation Ethernet Converged Network Adapter X710-2&lt;br /&gt;
&lt;br /&gt;
        Physical Slot: 4&lt;br /&gt;
&lt;br /&gt;
        Flags: bus master, fast devsel, latency 0, IRQ 27, NUMA node 0, IOMMU group 28&lt;br /&gt;
&lt;br /&gt;
        Memory at 383ffe800000 (64-bit, prefetchable) [size=8M]&lt;br /&gt;
&lt;br /&gt;
        Memory at 383fff808000 (64-bit, prefetchable) [size=32K]&lt;br /&gt;
&lt;br /&gt;
        Expansion ROM at fbd80000 [disabled] [size=512K]&lt;br /&gt;
&lt;br /&gt;
        Capabilities: &amp;lt;access denied&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        Kernel driver in use: i40e&lt;br /&gt;
&lt;br /&gt;
        Kernel modules: i40e&amp;lt;/blockquote&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
echo 0000:03:00.1 | sudo tee /sys/bus/pci/devices/0000:03:00.1/driver/unbind&lt;br /&gt;
&lt;br /&gt;
# 2. Привязываем к vfio-pci&lt;br /&gt;
echo vfio-pci | sudo tee /sys/bus/pci/devices/0000:03:00.1/driver_override&lt;br /&gt;
echo 0000:03:00.1 | sudo tee /sys/bus/pci/drivers/vfio-pci/bind&lt;br /&gt;
&lt;br /&gt;
# 3. Проверяем&lt;br /&gt;
lspci -k -s 03:00.1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#########################################################################################&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== test web server (для проверки работы vyos) ===&lt;br /&gt;
while true; do { echo -e &#039;HTTP/1.1 200 OK\r\nContent-Length: 13\r\n\r\nHello, World!&#039;; } | nc -l 8081; done&lt;br /&gt;
&lt;br /&gt;
=== надо будет еще ядро перенастраивать (но пока рано) ===&lt;br /&gt;
sudo grub-probe --device /dev/sda3&lt;br /&gt;
&lt;br /&gt;
=== это мое ! ===&lt;br /&gt;
podman cp /home/vyos/vpp.conf vpp:/config/vpp.conf&lt;br /&gt;
&lt;br /&gt;
конфигурирование podman&lt;br /&gt;
&lt;br /&gt;
sudo nano /etc/containers/containers.conf&lt;br /&gt;
&lt;br /&gt;
dns_bind_port=54&lt;br /&gt;
&lt;br /&gt;
sudo chattr +i /etc/containers/containers.conf&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#########################################################################################&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== порядок биндинья карт ===&lt;br /&gt;
1) серевые карты VPP долюжы быть переведены в down (ip l set state eth1 down)&lt;br /&gt;
&lt;br /&gt;
2) вклчаем драйвер&lt;br /&gt;
&lt;br /&gt;
sudo modprobe vfio-pci&lt;br /&gt;
&lt;br /&gt;
3) потом делаем бинд&lt;br /&gt;
&lt;br /&gt;
так можно но не получилось т.к. с iommq проблемы&lt;br /&gt;
&lt;br /&gt;
sudo echo &amp;quot;0000:00:12.0&amp;quot; &amp;gt; /sys/bus/pci/drivers/virtio-pci/bind&lt;br /&gt;
&lt;br /&gt;
делал так:&lt;br /&gt;
&lt;br /&gt;
качал dpdk c github&lt;br /&gt;
&lt;br /&gt;
cd /home/vyos/dpdk-24.11/usertools&lt;br /&gt;
&lt;br /&gt;
python3 dpdk-devbind.py -b vfio-pci 0000:03:00.0 --noiommu-mode&lt;br /&gt;
&lt;br /&gt;
перечень карт можно увидеть&lt;br /&gt;
&lt;br /&gt;
lspci | grep Eth&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#########################################################################################&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== запуск vpp (далее сделаем через podman-compose) тут порядок в куче ===&lt;br /&gt;
ip l set dev eth1 down&lt;br /&gt;
&lt;br /&gt;
ip l set dev eth2 down&lt;br /&gt;
&lt;br /&gt;
modprobe vfio-pci&lt;br /&gt;
&lt;br /&gt;
python3 dpdk-devbind.py -b vfio-pci 0000:03:00.0 --noiommu-mode&lt;br /&gt;
&lt;br /&gt;
python3 dpdk-devbind.py -b vfio-pci 0000:03:00.1 --noiommu-mode&lt;br /&gt;
&lt;br /&gt;
=== создание ngfw пространства имен ===&lt;br /&gt;
ip netns add ngfw&lt;br /&gt;
&lt;br /&gt;
podman rm vpp -f&lt;br /&gt;
&lt;br /&gt;
=== создание host interface ===&lt;br /&gt;
ip netns exec ngfw bash&lt;br /&gt;
&lt;br /&gt;
ip link add name http1out type veth peer name http1host&lt;br /&gt;
&lt;br /&gt;
ip link set dev http1out up&lt;br /&gt;
&lt;br /&gt;
ip link set dev http1host up&lt;br /&gt;
&lt;br /&gt;
ip addr add 10.10.10.10/24 dev http1host&lt;br /&gt;
&lt;br /&gt;
ip addr show http1host&lt;br /&gt;
&lt;br /&gt;
podman run -d --name vpp --network host --privileged --restart always --ulimit core=0:0 --shm-size 4g --volume /var/run/netns:/var/run/netns --volume /var/vpp/netplan:/etc/vpp/netplan --volume /var/log:/var/log --volume /var:/config/shared --env-file /config/vpp/env docker-archive:/home/vyos/vpp-image.tar&lt;br /&gt;
&lt;br /&gt;
=== vpp: ===&lt;br /&gt;
create host-interface name http1out&lt;br /&gt;
&lt;br /&gt;
set interface state host-http1out up&lt;br /&gt;
&lt;br /&gt;
podman cp /home/vyos/vpp.conf vpp:/config/vpp.conf&lt;br /&gt;
&lt;br /&gt;
podman restart vpp&lt;br /&gt;
&lt;br /&gt;
=== назначаем адрес для теста (data2 в бридже loop10) ===&lt;br /&gt;
podman exec -it vpp vppctl&lt;br /&gt;
&lt;br /&gt;
set interface ip address loop10 10.1.100.125/24&lt;br /&gt;
&lt;br /&gt;
show int addr&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#########################################################################################&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;##########&amp;lt;/nowiki&amp;gt; enode on podman -----------------------------&lt;br /&gt;
&lt;br /&gt;
=== включение разрешений для podman ===&lt;br /&gt;
set nat source rule 100 source address &#039;10.88.0.0/16&#039;&lt;br /&gt;
&lt;br /&gt;
set nat source rule 100 translation address &#039;masquerade&#039;&lt;br /&gt;
&lt;br /&gt;
commit&lt;br /&gt;
&lt;br /&gt;
save&lt;br /&gt;
&lt;br /&gt;
=== для traefik нуже сервис podman api ===&lt;br /&gt;
podman system service -t 0 unix:///run/user/1000/podman/podman.sock &amp;amp;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
vyos|vyos&lt;br /&gt;
&lt;br /&gt;
sudo podman exec -it vpp vppctl&lt;br /&gt;
&lt;br /&gt;
show acl-plugin acl&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#########################################################################################&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;###&amp;lt;/nowiki&amp;gt; пример лога vpp контейнера &lt;br /&gt;
&lt;br /&gt;
[INFO    ] root.main: Loading configfile /etc/vpp/netplan/netplan.yaml&lt;br /&gt;
&lt;br /&gt;
[INFO    ] vppcfg.config.valid_config: Configuration validated successfully&lt;br /&gt;
&lt;br /&gt;
[INFO    ] root.main: Configuration is valid&lt;br /&gt;
&lt;br /&gt;
[INFO    ] vppcfg.vppapi.connect: VPP version is 24.02-release&lt;br /&gt;
&lt;br /&gt;
[INFO    ] vppcfg.reconciler.write: Wrote 46 lines to /etc/vpp/applynetplan.yaml&lt;br /&gt;
&lt;br /&gt;
[INFO    ] root.main: Planning succeeded&lt;br /&gt;
&lt;br /&gt;
api_response =&amp;gt; lcp_itf_pair_get []&lt;br /&gt;
&lt;br /&gt;
111111111111111111 create sub data1 109 dot1q 109 exact-match&lt;br /&gt;
&lt;br /&gt;
111111111111111111 create sub data1 110 dot1q 110 exact-match&lt;br /&gt;
&lt;br /&gt;
111111111111111111 create sub data1 10 dot1q 10 exact-match&lt;br /&gt;
&lt;br /&gt;
create loopback interface instance 110&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: mtu_change: sw loop110 0&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: mtu_change: si loop110 hi loop110, syncing children&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: sync_state_hw: hi loop110&lt;br /&gt;
&lt;br /&gt;
loop110&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: interface_add: sw data1.109 parent data1&lt;br /&gt;
&lt;br /&gt;
data1.109&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: interface_add: sw data1.110 parent data1&lt;br /&gt;
&lt;br /&gt;
data1.110&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: interface_add: sw data1.10 parent data1&lt;br /&gt;
&lt;br /&gt;
data1.10&lt;br /&gt;
&lt;br /&gt;
bridge-domain 10&lt;br /&gt;
&lt;br /&gt;
bridge-domain 109&lt;br /&gt;
&lt;br /&gt;
bridge-domain 110&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: mtu_change: sw tap4 0&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: mtu_change: si tap4 hi tap4, syncing children&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: sync_state_hw: hi data1.109&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [info  ]: pair create: {loop10, tap4, vlaneth0}&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [info  ]: add: host:tap4 phy:loop10, host_if:vlaneth0 vif:7 ns:ngfw&lt;br /&gt;
&lt;br /&gt;
linux-cp/mpls-sync   [debug ]: pair_add_cb: mpls enabled 0, parent itf-pair: [0] loop10 tap4 vlaneth0 7 type tap netns ngfw&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [info  ]: pair create: itf-pair: [0] loop10 tap4 vlaneth0 7 type tap netns ngfw sw-flags 0 hw-flags 1&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: admin_state_change: sw tap4 1&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: mtu_change: sw tap5 0&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: mtu_change: si tap5 hi tap5, syncing children&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: sync_state_hw: hi data1.110&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [info  ]: pair create: {loop109, tap5, vlaneth99}&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [info  ]: add: host:tap5 phy:loop109, host_if:vlaneth99 vif:8 ns:ngfw&lt;br /&gt;
&lt;br /&gt;
linux-cp/mpls-sync   [debug ]: pair_add_cb: mpls enabled 0, parent itf-pair: [1] loop109 tap5 vlaneth99 8 type tap netns ngfw&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [info  ]: pair create: itf-pair: [1] loop109 tap5 vlaneth99 8 type tap netns ngfw sw-flags 0 hw-flags 1&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: admin_state_change: sw tap5 1&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: mtu_change: sw tap6 0&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: mtu_change: si tap6 hi tap6, syncing children&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: sync_state_hw: hi data1.10&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [info  ]: pair create: {loop110, tap6, vlaneth100}&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [info  ]: add: host:tap6 phy:loop110, host_if:vlaneth100 vif:9 ns:ngfw&lt;br /&gt;
&lt;br /&gt;
linux-cp/mpls-sync   [debug ]: pair_add_cb: mpls enabled 0, parent itf-pair: [2] loop110 tap6 vlaneth100 9 type tap netns ngfw&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [info  ]: pair create: itf-pair: [2] loop110 tap6 vlaneth100 9 type tap netns ngfw sw-flags 0 hw-flags 1&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: admin_state_change: sw tap6 1&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: mtu_change: sw data1 0&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: mtu_change: si data1 hi data1, syncing children&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: sync_state_hw: hi data1&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: mtu_change: sw data1.10 0&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: mtu_change: sw data1.110 0&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: mtu_change: sw data1.109 0&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: mtu_change: sw data2 0&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: mtu_change: si data2 hi data2, syncing children&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: sync_state_hw: hi data2&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: mtu_change: sw host-http1out 0&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: mtu_change: si host-http1out hi host-http1out, syncing children&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: sync_state_hw: hi host-http1out&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: mtu_change: sw loop10 0&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: mtu_change: si loop10 hi loop10, syncing children&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: sync_state_hw: hi loop10&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [info  ]: sync_state: itf-pair: [0] loop10 tap4 vlaneth0 7 type tap netns ngfw flags 0 sup-flags 0 mtu 1500 sup-mtu 1500&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: mtu_change: sw tap4 0&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: mtu_change: si tap4 hi tap4, syncing children&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: sync_state_hw: hi data1.109&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: mtu_change: sw loop109 0&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: mtu_change: si loop109 hi loop109, syncing children&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: sync_state_hw: hi loop109&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [info  ]: sync_state: itf-pair: [1] loop109 tap5 vlaneth99 8 type tap netns ngfw flags 0 sup-flags 0 mtu 1500 sup-mtu 1500&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: mtu_change: sw tap5 0&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: mtu_change: si tap5 hi tap5, syncing children&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: sync_state_hw: hi data1.110&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: mtu_change: sw loop110 0&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: mtu_change: si loop110 hi loop110, syncing children&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: sync_state_hw: hi loop110&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [info  ]: sync_state: itf-pair: [2] loop110 tap6 vlaneth100 9 type tap netns ngfw flags 0 sup-flags 0 mtu 1500 sup-mtu 1500&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: mtu_change: sw tap6 0&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: mtu_change: si tap6 hi tap6, syncing children&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: sync_state_hw: hi data1.10&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: ip4_addr_add: si:loop109 172.16.99.1/24&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: ip4_addr_add: itf-pair: [1] loop109 tap5 vlaneth99 8 type tap netns ngfw ip4 172.16.99.1/24&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: ip4_addr_add: si:loop110 172.16.100.1/24&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: ip4_addr_add: itf-pair: [2] loop110 tap6 vlaneth100 9 type tap netns ngfw ip4 172.16.100.1/24&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: admin_state_change: sw data1 1&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;###&amp;lt;/nowiki&amp;gt; пример конфигурации vpp&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;##&amp;lt;/nowiki&amp;gt; sudo podman exec vpp vppctl show int&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
              Name               Idx    State  MTU (L3/IP4/IP6/MPLS)     Counter          Count     &lt;br /&gt;
&lt;br /&gt;
data1                             1      up          1500/0/0/0     tx-error                      40&lt;br /&gt;
&lt;br /&gt;
data1.109                         7      up          1500/0/0/0     &lt;br /&gt;
&lt;br /&gt;
data1.110                         8      up          1500/0/0/0     &lt;br /&gt;
&lt;br /&gt;
data1.10                          9      up          1500/0/0/0     &lt;br /&gt;
&lt;br /&gt;
data2                             2      up          1500/0/0/0     tx packets                    13&lt;br /&gt;
&lt;br /&gt;
                                                                    tx bytes                    1086&lt;br /&gt;
&lt;br /&gt;
host-http1out                     3      up          1500/0/0/0     rx packets                     4&lt;br /&gt;
&lt;br /&gt;
                                                                    rx bytes                     280&lt;br /&gt;
&lt;br /&gt;
                                                                    drops                          4&lt;br /&gt;
&lt;br /&gt;
                                                                    ip6                            4&lt;br /&gt;
&lt;br /&gt;
local0                            0     down          0/0/0/0       &lt;br /&gt;
&lt;br /&gt;
loop109                           5      up          1500/0/0/0     tx packets                    26&lt;br /&gt;
&lt;br /&gt;
                                                                    tx bytes                    2172&lt;br /&gt;
&lt;br /&gt;
                                                                    drops                         13&lt;br /&gt;
&lt;br /&gt;
                                                                    tx-error                       1&lt;br /&gt;
&lt;br /&gt;
loop10                            4      up          1500/0/0/0     tx packets                    26&lt;br /&gt;
&lt;br /&gt;
                                                                    tx bytes                    2172&lt;br /&gt;
&lt;br /&gt;
                                                                    drops                         13&lt;br /&gt;
&lt;br /&gt;
                                                                    tx-error                       1&lt;br /&gt;
&lt;br /&gt;
loop110                           6      up          1500/0/0/0     tx packets                    28&lt;br /&gt;
&lt;br /&gt;
                                                                    tx bytes                    2352&lt;br /&gt;
&lt;br /&gt;
                                                                    drops                         14&lt;br /&gt;
&lt;br /&gt;
tap4                              10     up          1500/0/0/0     rx packets                    13&lt;br /&gt;
&lt;br /&gt;
                                                                    rx bytes                    1046&lt;br /&gt;
&lt;br /&gt;
                                                                    drops                          1&lt;br /&gt;
&lt;br /&gt;
                                                                    ip6                           13&lt;br /&gt;
&lt;br /&gt;
tap5                              11     up          1500/0/0/0     rx packets                    13&lt;br /&gt;
&lt;br /&gt;
                                                                    rx bytes                    1046&lt;br /&gt;
&lt;br /&gt;
                                                                    drops                          1&lt;br /&gt;
&lt;br /&gt;
                                                                    ip6                           13&lt;br /&gt;
&lt;br /&gt;
tap6                              12     up          1500/0/0/0     rx packets                    13&lt;br /&gt;
&lt;br /&gt;
                                                                    rx bytes                    1046&lt;br /&gt;
&lt;br /&gt;
                                                                    ip6                           13&lt;/div&gt;</summary>
		<author><name>Dima</name></author>
	</entry>
	<entry>
		<id>https://wiki.entcor.ru/index.php?title=VYOS-VPP&amp;diff=474</id>
		<title>VYOS-VPP</title>
		<link rel="alternate" type="text/html" href="https://wiki.entcor.ru/index.php?title=VYOS-VPP&amp;diff=474"/>
		<updated>2025-06-17T01:06:19Z</updated>

		<summary type="html">&lt;p&gt;Dima: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Подготовка сервера с VYOS для работы с VPP ==&lt;br /&gt;
&lt;br /&gt;
=== 1. Настройки BIOS ===&lt;br /&gt;
В BIOS включить настройку Intel VT-d (или как там она называется)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Примечание:&#039;&#039;&#039; на всякий случай можно еще включить X2APIC = Enable (непонятно, влияет или нет - но лучше включить)&lt;br /&gt;
&lt;br /&gt;
=== 2. Настройки ядра VYOS ===&lt;br /&gt;
В файле &#039;&#039;&#039;/boot/grub/grub.cfg.d/vyos-versions&#039;&#039;&#039; найти следующую строчку:&lt;br /&gt;
&lt;br /&gt;
set boot_opts=&amp;quot;boot=live rootdelay=5 noautologin net.ifnames=0 biosdevname=0 vyos-union=/boot/VYOS-1.5-Rolling&amp;quot;&lt;br /&gt;
&lt;br /&gt;
и добавить в конец: &amp;quot; intel_iommu=on iommu=pt&amp;quot;&lt;br /&gt;
&lt;br /&gt;
т.е. полная строка должна быть:&lt;br /&gt;
&lt;br /&gt;
set boot_opts=&amp;quot;boot=live rootdelay=5 noautologin net.ifnames=0 biosdevname=0 vyos-union=/boot/VYOS-1.5-Rolling intel_iommu=on iommu=pt&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Далее выполнить перезагрузку.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Примечание:&#039;&#039;&#039; после перезагрузки файл &#039;&#039;&#039;/boot/grub/grub.cfg.d/vyos-versions&#039;&#039;&#039; перезаписывается, так что придется потом снова строку &lt;br /&gt;
&lt;br /&gt;
set boot_opts = ... перезаписывать, пока не придумается как ее там зафиксировать. В противном случае после следующей перезагрузки поддержка IOMMU опять слетит.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
После перезагрузки нужно убедиться, что режим IOMMU включен, для этого выполнить команду:&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
dmesg | grep IOMMU&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Вывод должен быть примерно таким:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[    0.046990] DMAR: IOMMU enabled&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[    0.109294] DMAR-IR: IOAPIC id 1 under DRHD base  0xfbffc000 IOMMU 1&lt;br /&gt;
&lt;br /&gt;
[    0.109297] DMAR-IR: IOAPIC id 2 under DRHD base  0xfbffc000 IOMMU 1&lt;br /&gt;
&lt;br /&gt;
[    0.372778] DMAR: IOMMU feature sc_support inconsistent&lt;br /&gt;
&lt;br /&gt;
[    0.372779] DMAR: IOMMU feature dev_iotlb_support inconsistent&lt;br /&gt;
&lt;br /&gt;
[    0.386236] AMD-Vi: AMD IOMMUv2 functionality not available on this system - This is not a bug.&lt;br /&gt;
&lt;br /&gt;
=== 3. Настройка работы сетевых карт в режиме VFIO ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#########################################################################################&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== test web server (для проверки работы vyos) ===&lt;br /&gt;
while true; do { echo -e &#039;HTTP/1.1 200 OK\r\nContent-Length: 13\r\n\r\nHello, World!&#039;; } | nc -l 8081; done&lt;br /&gt;
&lt;br /&gt;
=== надо будет еще ядро перенастраивать (но пока рано) ===&lt;br /&gt;
sudo grub-probe --device /dev/sda3&lt;br /&gt;
&lt;br /&gt;
=== это мое ! ===&lt;br /&gt;
podman cp /home/vyos/vpp.conf vpp:/config/vpp.conf&lt;br /&gt;
&lt;br /&gt;
конфигурирование podman&lt;br /&gt;
&lt;br /&gt;
sudo nano /etc/containers/containers.conf&lt;br /&gt;
&lt;br /&gt;
dns_bind_port=54&lt;br /&gt;
&lt;br /&gt;
sudo chattr +i /etc/containers/containers.conf&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#########################################################################################&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== порядок биндинья карт ===&lt;br /&gt;
1) серевые карты VPP долюжы быть переведены в down (ip l set state eth1 down)&lt;br /&gt;
&lt;br /&gt;
2) вклчаем драйвер&lt;br /&gt;
&lt;br /&gt;
sudo modprobe vfio-pci&lt;br /&gt;
&lt;br /&gt;
3) потом делаем бинд&lt;br /&gt;
&lt;br /&gt;
так можно но не получилось т.к. с iommq проблемы&lt;br /&gt;
&lt;br /&gt;
sudo echo &amp;quot;0000:00:12.0&amp;quot; &amp;gt; /sys/bus/pci/drivers/virtio-pci/bind&lt;br /&gt;
&lt;br /&gt;
делал так:&lt;br /&gt;
&lt;br /&gt;
качал dpdk c github&lt;br /&gt;
&lt;br /&gt;
cd /home/vyos/dpdk-24.11/usertools&lt;br /&gt;
&lt;br /&gt;
python3 dpdk-devbind.py -b vfio-pci 0000:03:00.0 --noiommu-mode&lt;br /&gt;
&lt;br /&gt;
перечень карт можно увидеть&lt;br /&gt;
&lt;br /&gt;
lspci | grep Eth&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#########################################################################################&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== запуск vpp (далее сделаем через podman-compose) тут порядок в куче ===&lt;br /&gt;
ip l set dev eth1 down&lt;br /&gt;
&lt;br /&gt;
ip l set dev eth2 down&lt;br /&gt;
&lt;br /&gt;
modprobe vfio-pci&lt;br /&gt;
&lt;br /&gt;
python3 dpdk-devbind.py -b vfio-pci 0000:03:00.0 --noiommu-mode&lt;br /&gt;
&lt;br /&gt;
python3 dpdk-devbind.py -b vfio-pci 0000:03:00.1 --noiommu-mode&lt;br /&gt;
&lt;br /&gt;
=== создание ngfw пространства имен ===&lt;br /&gt;
ip netns add ngfw&lt;br /&gt;
&lt;br /&gt;
podman rm vpp -f&lt;br /&gt;
&lt;br /&gt;
=== создание host interface ===&lt;br /&gt;
ip netns exec ngfw bash&lt;br /&gt;
&lt;br /&gt;
ip link add name http1out type veth peer name http1host&lt;br /&gt;
&lt;br /&gt;
ip link set dev http1out up&lt;br /&gt;
&lt;br /&gt;
ip link set dev http1host up&lt;br /&gt;
&lt;br /&gt;
ip addr add 10.10.10.10/24 dev http1host&lt;br /&gt;
&lt;br /&gt;
ip addr show http1host&lt;br /&gt;
&lt;br /&gt;
podman run -d --name vpp --network host --privileged --restart always --ulimit core=0:0 --shm-size 4g --volume /var/run/netns:/var/run/netns --volume /var/vpp/netplan:/etc/vpp/netplan --volume /var/log:/var/log --volume /var:/config/shared --env-file /config/vpp/env docker-archive:/home/vyos/vpp-image.tar&lt;br /&gt;
&lt;br /&gt;
=== vpp: ===&lt;br /&gt;
create host-interface name http1out&lt;br /&gt;
&lt;br /&gt;
set interface state host-http1out up&lt;br /&gt;
&lt;br /&gt;
podman cp /home/vyos/vpp.conf vpp:/config/vpp.conf&lt;br /&gt;
&lt;br /&gt;
podman restart vpp&lt;br /&gt;
&lt;br /&gt;
=== назначаем адрес для теста (data2 в бридже loop10) ===&lt;br /&gt;
podman exec -it vpp vppctl&lt;br /&gt;
&lt;br /&gt;
set interface ip address loop10 10.1.100.125/24&lt;br /&gt;
&lt;br /&gt;
show int addr&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#########################################################################################&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;##########&amp;lt;/nowiki&amp;gt; enode on podman -----------------------------&lt;br /&gt;
&lt;br /&gt;
=== включение разрешений для podman ===&lt;br /&gt;
set nat source rule 100 source address &#039;10.88.0.0/16&#039;&lt;br /&gt;
&lt;br /&gt;
set nat source rule 100 translation address &#039;masquerade&#039;&lt;br /&gt;
&lt;br /&gt;
commit&lt;br /&gt;
&lt;br /&gt;
save&lt;br /&gt;
&lt;br /&gt;
=== для traefik нуже сервис podman api ===&lt;br /&gt;
podman system service -t 0 unix:///run/user/1000/podman/podman.sock &amp;amp;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
vyos|vyos&lt;br /&gt;
&lt;br /&gt;
sudo podman exec -it vpp vppctl&lt;br /&gt;
&lt;br /&gt;
show acl-plugin acl&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#########################################################################################&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;###&amp;lt;/nowiki&amp;gt; пример лога vpp контейнера &lt;br /&gt;
&lt;br /&gt;
[INFO    ] root.main: Loading configfile /etc/vpp/netplan/netplan.yaml&lt;br /&gt;
&lt;br /&gt;
[INFO    ] vppcfg.config.valid_config: Configuration validated successfully&lt;br /&gt;
&lt;br /&gt;
[INFO    ] root.main: Configuration is valid&lt;br /&gt;
&lt;br /&gt;
[INFO    ] vppcfg.vppapi.connect: VPP version is 24.02-release&lt;br /&gt;
&lt;br /&gt;
[INFO    ] vppcfg.reconciler.write: Wrote 46 lines to /etc/vpp/applynetplan.yaml&lt;br /&gt;
&lt;br /&gt;
[INFO    ] root.main: Planning succeeded&lt;br /&gt;
&lt;br /&gt;
api_response =&amp;gt; lcp_itf_pair_get []&lt;br /&gt;
&lt;br /&gt;
111111111111111111 create sub data1 109 dot1q 109 exact-match&lt;br /&gt;
&lt;br /&gt;
111111111111111111 create sub data1 110 dot1q 110 exact-match&lt;br /&gt;
&lt;br /&gt;
111111111111111111 create sub data1 10 dot1q 10 exact-match&lt;br /&gt;
&lt;br /&gt;
create loopback interface instance 110&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: mtu_change: sw loop110 0&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: mtu_change: si loop110 hi loop110, syncing children&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: sync_state_hw: hi loop110&lt;br /&gt;
&lt;br /&gt;
loop110&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: interface_add: sw data1.109 parent data1&lt;br /&gt;
&lt;br /&gt;
data1.109&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: interface_add: sw data1.110 parent data1&lt;br /&gt;
&lt;br /&gt;
data1.110&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: interface_add: sw data1.10 parent data1&lt;br /&gt;
&lt;br /&gt;
data1.10&lt;br /&gt;
&lt;br /&gt;
bridge-domain 10&lt;br /&gt;
&lt;br /&gt;
bridge-domain 109&lt;br /&gt;
&lt;br /&gt;
bridge-domain 110&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: mtu_change: sw tap4 0&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: mtu_change: si tap4 hi tap4, syncing children&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: sync_state_hw: hi data1.109&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [info  ]: pair create: {loop10, tap4, vlaneth0}&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [info  ]: add: host:tap4 phy:loop10, host_if:vlaneth0 vif:7 ns:ngfw&lt;br /&gt;
&lt;br /&gt;
linux-cp/mpls-sync   [debug ]: pair_add_cb: mpls enabled 0, parent itf-pair: [0] loop10 tap4 vlaneth0 7 type tap netns ngfw&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [info  ]: pair create: itf-pair: [0] loop10 tap4 vlaneth0 7 type tap netns ngfw sw-flags 0 hw-flags 1&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: admin_state_change: sw tap4 1&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: mtu_change: sw tap5 0&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: mtu_change: si tap5 hi tap5, syncing children&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: sync_state_hw: hi data1.110&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [info  ]: pair create: {loop109, tap5, vlaneth99}&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [info  ]: add: host:tap5 phy:loop109, host_if:vlaneth99 vif:8 ns:ngfw&lt;br /&gt;
&lt;br /&gt;
linux-cp/mpls-sync   [debug ]: pair_add_cb: mpls enabled 0, parent itf-pair: [1] loop109 tap5 vlaneth99 8 type tap netns ngfw&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [info  ]: pair create: itf-pair: [1] loop109 tap5 vlaneth99 8 type tap netns ngfw sw-flags 0 hw-flags 1&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: admin_state_change: sw tap5 1&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: mtu_change: sw tap6 0&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: mtu_change: si tap6 hi tap6, syncing children&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: sync_state_hw: hi data1.10&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [info  ]: pair create: {loop110, tap6, vlaneth100}&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [info  ]: add: host:tap6 phy:loop110, host_if:vlaneth100 vif:9 ns:ngfw&lt;br /&gt;
&lt;br /&gt;
linux-cp/mpls-sync   [debug ]: pair_add_cb: mpls enabled 0, parent itf-pair: [2] loop110 tap6 vlaneth100 9 type tap netns ngfw&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [info  ]: pair create: itf-pair: [2] loop110 tap6 vlaneth100 9 type tap netns ngfw sw-flags 0 hw-flags 1&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: admin_state_change: sw tap6 1&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: mtu_change: sw data1 0&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: mtu_change: si data1 hi data1, syncing children&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: sync_state_hw: hi data1&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: mtu_change: sw data1.10 0&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: mtu_change: sw data1.110 0&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: mtu_change: sw data1.109 0&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: mtu_change: sw data2 0&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: mtu_change: si data2 hi data2, syncing children&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: sync_state_hw: hi data2&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: mtu_change: sw host-http1out 0&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: mtu_change: si host-http1out hi host-http1out, syncing children&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: sync_state_hw: hi host-http1out&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: mtu_change: sw loop10 0&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: mtu_change: si loop10 hi loop10, syncing children&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: sync_state_hw: hi loop10&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [info  ]: sync_state: itf-pair: [0] loop10 tap4 vlaneth0 7 type tap netns ngfw flags 0 sup-flags 0 mtu 1500 sup-mtu 1500&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: mtu_change: sw tap4 0&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: mtu_change: si tap4 hi tap4, syncing children&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: sync_state_hw: hi data1.109&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: mtu_change: sw loop109 0&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: mtu_change: si loop109 hi loop109, syncing children&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: sync_state_hw: hi loop109&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [info  ]: sync_state: itf-pair: [1] loop109 tap5 vlaneth99 8 type tap netns ngfw flags 0 sup-flags 0 mtu 1500 sup-mtu 1500&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: mtu_change: sw tap5 0&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: mtu_change: si tap5 hi tap5, syncing children&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: sync_state_hw: hi data1.110&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: mtu_change: sw loop110 0&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: mtu_change: si loop110 hi loop110, syncing children&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: sync_state_hw: hi loop110&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [info  ]: sync_state: itf-pair: [2] loop110 tap6 vlaneth100 9 type tap netns ngfw flags 0 sup-flags 0 mtu 1500 sup-mtu 1500&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: mtu_change: sw tap6 0&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: mtu_change: si tap6 hi tap6, syncing children&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: sync_state_hw: hi data1.10&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: ip4_addr_add: si:loop109 172.16.99.1/24&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: ip4_addr_add: itf-pair: [1] loop109 tap5 vlaneth99 8 type tap netns ngfw ip4 172.16.99.1/24&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: ip4_addr_add: si:loop110 172.16.100.1/24&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: ip4_addr_add: itf-pair: [2] loop110 tap6 vlaneth100 9 type tap netns ngfw ip4 172.16.100.1/24&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: admin_state_change: sw data1 1&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;###&amp;lt;/nowiki&amp;gt; пример конфигурации vpp&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;##&amp;lt;/nowiki&amp;gt; sudo podman exec vpp vppctl show int&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
              Name               Idx    State  MTU (L3/IP4/IP6/MPLS)     Counter          Count     &lt;br /&gt;
&lt;br /&gt;
data1                             1      up          1500/0/0/0     tx-error                      40&lt;br /&gt;
&lt;br /&gt;
data1.109                         7      up          1500/0/0/0     &lt;br /&gt;
&lt;br /&gt;
data1.110                         8      up          1500/0/0/0     &lt;br /&gt;
&lt;br /&gt;
data1.10                          9      up          1500/0/0/0     &lt;br /&gt;
&lt;br /&gt;
data2                             2      up          1500/0/0/0     tx packets                    13&lt;br /&gt;
&lt;br /&gt;
                                                                    tx bytes                    1086&lt;br /&gt;
&lt;br /&gt;
host-http1out                     3      up          1500/0/0/0     rx packets                     4&lt;br /&gt;
&lt;br /&gt;
                                                                    rx bytes                     280&lt;br /&gt;
&lt;br /&gt;
                                                                    drops                          4&lt;br /&gt;
&lt;br /&gt;
                                                                    ip6                            4&lt;br /&gt;
&lt;br /&gt;
local0                            0     down          0/0/0/0       &lt;br /&gt;
&lt;br /&gt;
loop109                           5      up          1500/0/0/0     tx packets                    26&lt;br /&gt;
&lt;br /&gt;
                                                                    tx bytes                    2172&lt;br /&gt;
&lt;br /&gt;
                                                                    drops                         13&lt;br /&gt;
&lt;br /&gt;
                                                                    tx-error                       1&lt;br /&gt;
&lt;br /&gt;
loop10                            4      up          1500/0/0/0     tx packets                    26&lt;br /&gt;
&lt;br /&gt;
                                                                    tx bytes                    2172&lt;br /&gt;
&lt;br /&gt;
                                                                    drops                         13&lt;br /&gt;
&lt;br /&gt;
                                                                    tx-error                       1&lt;br /&gt;
&lt;br /&gt;
loop110                           6      up          1500/0/0/0     tx packets                    28&lt;br /&gt;
&lt;br /&gt;
                                                                    tx bytes                    2352&lt;br /&gt;
&lt;br /&gt;
                                                                    drops                         14&lt;br /&gt;
&lt;br /&gt;
tap4                              10     up          1500/0/0/0     rx packets                    13&lt;br /&gt;
&lt;br /&gt;
                                                                    rx bytes                    1046&lt;br /&gt;
&lt;br /&gt;
                                                                    drops                          1&lt;br /&gt;
&lt;br /&gt;
                                                                    ip6                           13&lt;br /&gt;
&lt;br /&gt;
tap5                              11     up          1500/0/0/0     rx packets                    13&lt;br /&gt;
&lt;br /&gt;
                                                                    rx bytes                    1046&lt;br /&gt;
&lt;br /&gt;
                                                                    drops                          1&lt;br /&gt;
&lt;br /&gt;
                                                                    ip6                           13&lt;br /&gt;
&lt;br /&gt;
tap6                              12     up          1500/0/0/0     rx packets                    13&lt;br /&gt;
&lt;br /&gt;
                                                                    rx bytes                    1046&lt;br /&gt;
&lt;br /&gt;
                                                                    ip6                           13&lt;/div&gt;</summary>
		<author><name>Dima</name></author>
	</entry>
	<entry>
		<id>https://wiki.entcor.ru/index.php?title=VYOS-VPP&amp;diff=473</id>
		<title>VYOS-VPP</title>
		<link rel="alternate" type="text/html" href="https://wiki.entcor.ru/index.php?title=VYOS-VPP&amp;diff=473"/>
		<updated>2025-06-17T01:00:55Z</updated>

		<summary type="html">&lt;p&gt;Dima: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Подготовка сервера с VYOS для работы с VPP ==&lt;br /&gt;
&lt;br /&gt;
=== 1. Настройки BIOS ===&lt;br /&gt;
В BIOS включить настройку Intel VT-d (или как там она называется)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Примечание:&#039;&#039;&#039; на всякий случай можно еще включить X2APIC = Enable (непонятно, влияет или нет - но лучше включить)&lt;br /&gt;
&lt;br /&gt;
=== 2. Настройки ядра VYOS ===&lt;br /&gt;
В файле &#039;&#039;&#039;/boot/grub/grub.cfg.d/vyos-versions&#039;&#039;&#039; найти следующую строчку:&lt;br /&gt;
&lt;br /&gt;
set boot_opts=&amp;quot;boot=live rootdelay=5 noautologin net.ifnames=0 biosdevname=0 vyos-union=/boot/VYOS-1.5-Rolling&amp;quot;&lt;br /&gt;
&lt;br /&gt;
и добавить в конец: &amp;quot; intel_iommu=on iommu=pt&amp;quot;&lt;br /&gt;
&lt;br /&gt;
т.е. полная строка должна быть:&lt;br /&gt;
&lt;br /&gt;
set boot_opts=&amp;quot;boot=live rootdelay=5 noautologin net.ifnames=0 biosdevname=0 vyos-union=/boot/VYOS-1.5-Rolling intel_iommu=on iommu=pt&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Далее выполнить перезагрузку.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Примечание:&#039;&#039;&#039; после перезагрузки файл &#039;&#039;&#039;/boot/grub/grub.cfg.d/vyos-versions&#039;&#039;&#039; перезаписывается, так что придется потом снова строку &lt;br /&gt;
&lt;br /&gt;
set boot_opts = ... перезаписывать, пока не придумается как ее там зафиксировать. В противном случае после следующей перезагрузки поддержка IOMMU опять слетит.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#########################################################################################&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== test web server (для проверки работы vyos) ===&lt;br /&gt;
while true; do { echo -e &#039;HTTP/1.1 200 OK\r\nContent-Length: 13\r\n\r\nHello, World!&#039;; } | nc -l 8081; done&lt;br /&gt;
&lt;br /&gt;
=== надо будет еще ядро перенастраивать (но пока рано) ===&lt;br /&gt;
sudo grub-probe --device /dev/sda3&lt;br /&gt;
&lt;br /&gt;
=== это мое ! ===&lt;br /&gt;
podman cp /home/vyos/vpp.conf vpp:/config/vpp.conf&lt;br /&gt;
&lt;br /&gt;
конфигурирование podman&lt;br /&gt;
&lt;br /&gt;
sudo nano /etc/containers/containers.conf&lt;br /&gt;
&lt;br /&gt;
dns_bind_port=54&lt;br /&gt;
&lt;br /&gt;
sudo chattr +i /etc/containers/containers.conf&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#########################################################################################&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== порядок биндинья карт ===&lt;br /&gt;
1) серевые карты VPP долюжы быть переведены в down (ip l set state eth1 down)&lt;br /&gt;
&lt;br /&gt;
2) вклчаем драйвер&lt;br /&gt;
&lt;br /&gt;
sudo modprobe vfio-pci&lt;br /&gt;
&lt;br /&gt;
3) потом делаем бинд&lt;br /&gt;
&lt;br /&gt;
так можно но не получилось т.к. с iommq проблемы&lt;br /&gt;
&lt;br /&gt;
sudo echo &amp;quot;0000:00:12.0&amp;quot; &amp;gt; /sys/bus/pci/drivers/virtio-pci/bind&lt;br /&gt;
&lt;br /&gt;
делал так:&lt;br /&gt;
&lt;br /&gt;
качал dpdk c github&lt;br /&gt;
&lt;br /&gt;
cd /home/vyos/dpdk-24.11/usertools&lt;br /&gt;
&lt;br /&gt;
python3 dpdk-devbind.py -b vfio-pci 0000:03:00.0 --noiommu-mode&lt;br /&gt;
&lt;br /&gt;
перечень карт можно увидеть&lt;br /&gt;
&lt;br /&gt;
lspci | grep Eth&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#########################################################################################&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== запуск vpp (далее сделаем через podman-compose) тут порядок в куче ===&lt;br /&gt;
ip l set dev eth1 down&lt;br /&gt;
&lt;br /&gt;
ip l set dev eth2 down&lt;br /&gt;
&lt;br /&gt;
modprobe vfio-pci&lt;br /&gt;
&lt;br /&gt;
python3 dpdk-devbind.py -b vfio-pci 0000:03:00.0 --noiommu-mode&lt;br /&gt;
&lt;br /&gt;
python3 dpdk-devbind.py -b vfio-pci 0000:03:00.1 --noiommu-mode&lt;br /&gt;
&lt;br /&gt;
=== создание ngfw пространства имен ===&lt;br /&gt;
ip netns add ngfw&lt;br /&gt;
&lt;br /&gt;
podman rm vpp -f&lt;br /&gt;
&lt;br /&gt;
=== создание host interface ===&lt;br /&gt;
ip netns exec ngfw bash&lt;br /&gt;
&lt;br /&gt;
ip link add name http1out type veth peer name http1host&lt;br /&gt;
&lt;br /&gt;
ip link set dev http1out up&lt;br /&gt;
&lt;br /&gt;
ip link set dev http1host up&lt;br /&gt;
&lt;br /&gt;
ip addr add 10.10.10.10/24 dev http1host&lt;br /&gt;
&lt;br /&gt;
ip addr show http1host&lt;br /&gt;
&lt;br /&gt;
podman run -d --name vpp --network host --privileged --restart always --ulimit core=0:0 --shm-size 4g --volume /var/run/netns:/var/run/netns --volume /var/vpp/netplan:/etc/vpp/netplan --volume /var/log:/var/log --volume /var:/config/shared --env-file /config/vpp/env docker-archive:/home/vyos/vpp-image.tar&lt;br /&gt;
&lt;br /&gt;
=== vpp: ===&lt;br /&gt;
create host-interface name http1out&lt;br /&gt;
&lt;br /&gt;
set interface state host-http1out up&lt;br /&gt;
&lt;br /&gt;
podman cp /home/vyos/vpp.conf vpp:/config/vpp.conf&lt;br /&gt;
&lt;br /&gt;
podman restart vpp&lt;br /&gt;
&lt;br /&gt;
=== назначаем адрес для теста (data2 в бридже loop10) ===&lt;br /&gt;
podman exec -it vpp vppctl&lt;br /&gt;
&lt;br /&gt;
set interface ip address loop10 10.1.100.125/24&lt;br /&gt;
&lt;br /&gt;
show int addr&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#########################################################################################&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;##########&amp;lt;/nowiki&amp;gt; enode on podman -----------------------------&lt;br /&gt;
&lt;br /&gt;
=== включение разрешений для podman ===&lt;br /&gt;
set nat source rule 100 source address &#039;10.88.0.0/16&#039;&lt;br /&gt;
&lt;br /&gt;
set nat source rule 100 translation address &#039;masquerade&#039;&lt;br /&gt;
&lt;br /&gt;
commit&lt;br /&gt;
&lt;br /&gt;
save&lt;br /&gt;
&lt;br /&gt;
=== для traefik нуже сервис podman api ===&lt;br /&gt;
podman system service -t 0 unix:///run/user/1000/podman/podman.sock &amp;amp;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
vyos|vyos&lt;br /&gt;
&lt;br /&gt;
sudo podman exec -it vpp vppctl&lt;br /&gt;
&lt;br /&gt;
show acl-plugin acl&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#########################################################################################&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;###&amp;lt;/nowiki&amp;gt; пример лога vpp контейнера &lt;br /&gt;
&lt;br /&gt;
[INFO    ] root.main: Loading configfile /etc/vpp/netplan/netplan.yaml&lt;br /&gt;
&lt;br /&gt;
[INFO    ] vppcfg.config.valid_config: Configuration validated successfully&lt;br /&gt;
&lt;br /&gt;
[INFO    ] root.main: Configuration is valid&lt;br /&gt;
&lt;br /&gt;
[INFO    ] vppcfg.vppapi.connect: VPP version is 24.02-release&lt;br /&gt;
&lt;br /&gt;
[INFO    ] vppcfg.reconciler.write: Wrote 46 lines to /etc/vpp/applynetplan.yaml&lt;br /&gt;
&lt;br /&gt;
[INFO    ] root.main: Planning succeeded&lt;br /&gt;
&lt;br /&gt;
api_response =&amp;gt; lcp_itf_pair_get []&lt;br /&gt;
&lt;br /&gt;
111111111111111111 create sub data1 109 dot1q 109 exact-match&lt;br /&gt;
&lt;br /&gt;
111111111111111111 create sub data1 110 dot1q 110 exact-match&lt;br /&gt;
&lt;br /&gt;
111111111111111111 create sub data1 10 dot1q 10 exact-match&lt;br /&gt;
&lt;br /&gt;
create loopback interface instance 110&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: mtu_change: sw loop110 0&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: mtu_change: si loop110 hi loop110, syncing children&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: sync_state_hw: hi loop110&lt;br /&gt;
&lt;br /&gt;
loop110&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: interface_add: sw data1.109 parent data1&lt;br /&gt;
&lt;br /&gt;
data1.109&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: interface_add: sw data1.110 parent data1&lt;br /&gt;
&lt;br /&gt;
data1.110&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: interface_add: sw data1.10 parent data1&lt;br /&gt;
&lt;br /&gt;
data1.10&lt;br /&gt;
&lt;br /&gt;
bridge-domain 10&lt;br /&gt;
&lt;br /&gt;
bridge-domain 109&lt;br /&gt;
&lt;br /&gt;
bridge-domain 110&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: mtu_change: sw tap4 0&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: mtu_change: si tap4 hi tap4, syncing children&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: sync_state_hw: hi data1.109&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [info  ]: pair create: {loop10, tap4, vlaneth0}&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [info  ]: add: host:tap4 phy:loop10, host_if:vlaneth0 vif:7 ns:ngfw&lt;br /&gt;
&lt;br /&gt;
linux-cp/mpls-sync   [debug ]: pair_add_cb: mpls enabled 0, parent itf-pair: [0] loop10 tap4 vlaneth0 7 type tap netns ngfw&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [info  ]: pair create: itf-pair: [0] loop10 tap4 vlaneth0 7 type tap netns ngfw sw-flags 0 hw-flags 1&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: admin_state_change: sw tap4 1&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: mtu_change: sw tap5 0&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: mtu_change: si tap5 hi tap5, syncing children&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: sync_state_hw: hi data1.110&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [info  ]: pair create: {loop109, tap5, vlaneth99}&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [info  ]: add: host:tap5 phy:loop109, host_if:vlaneth99 vif:8 ns:ngfw&lt;br /&gt;
&lt;br /&gt;
linux-cp/mpls-sync   [debug ]: pair_add_cb: mpls enabled 0, parent itf-pair: [1] loop109 tap5 vlaneth99 8 type tap netns ngfw&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [info  ]: pair create: itf-pair: [1] loop109 tap5 vlaneth99 8 type tap netns ngfw sw-flags 0 hw-flags 1&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: admin_state_change: sw tap5 1&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: mtu_change: sw tap6 0&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: mtu_change: si tap6 hi tap6, syncing children&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: sync_state_hw: hi data1.10&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [info  ]: pair create: {loop110, tap6, vlaneth100}&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [info  ]: add: host:tap6 phy:loop110, host_if:vlaneth100 vif:9 ns:ngfw&lt;br /&gt;
&lt;br /&gt;
linux-cp/mpls-sync   [debug ]: pair_add_cb: mpls enabled 0, parent itf-pair: [2] loop110 tap6 vlaneth100 9 type tap netns ngfw&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [info  ]: pair create: itf-pair: [2] loop110 tap6 vlaneth100 9 type tap netns ngfw sw-flags 0 hw-flags 1&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: admin_state_change: sw tap6 1&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: mtu_change: sw data1 0&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: mtu_change: si data1 hi data1, syncing children&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: sync_state_hw: hi data1&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: mtu_change: sw data1.10 0&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: mtu_change: sw data1.110 0&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: mtu_change: sw data1.109 0&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: mtu_change: sw data2 0&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: mtu_change: si data2 hi data2, syncing children&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: sync_state_hw: hi data2&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: mtu_change: sw host-http1out 0&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: mtu_change: si host-http1out hi host-http1out, syncing children&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: sync_state_hw: hi host-http1out&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: mtu_change: sw loop10 0&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: mtu_change: si loop10 hi loop10, syncing children&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: sync_state_hw: hi loop10&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [info  ]: sync_state: itf-pair: [0] loop10 tap4 vlaneth0 7 type tap netns ngfw flags 0 sup-flags 0 mtu 1500 sup-mtu 1500&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: mtu_change: sw tap4 0&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: mtu_change: si tap4 hi tap4, syncing children&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: sync_state_hw: hi data1.109&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: mtu_change: sw loop109 0&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: mtu_change: si loop109 hi loop109, syncing children&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: sync_state_hw: hi loop109&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [info  ]: sync_state: itf-pair: [1] loop109 tap5 vlaneth99 8 type tap netns ngfw flags 0 sup-flags 0 mtu 1500 sup-mtu 1500&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: mtu_change: sw tap5 0&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: mtu_change: si tap5 hi tap5, syncing children&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: sync_state_hw: hi data1.110&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: mtu_change: sw loop110 0&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: mtu_change: si loop110 hi loop110, syncing children&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: sync_state_hw: hi loop110&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [info  ]: sync_state: itf-pair: [2] loop110 tap6 vlaneth100 9 type tap netns ngfw flags 0 sup-flags 0 mtu 1500 sup-mtu 1500&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: mtu_change: sw tap6 0&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: mtu_change: si tap6 hi tap6, syncing children&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: sync_state_hw: hi data1.10&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: ip4_addr_add: si:loop109 172.16.99.1/24&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: ip4_addr_add: itf-pair: [1] loop109 tap5 vlaneth99 8 type tap netns ngfw ip4 172.16.99.1/24&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: ip4_addr_add: si:loop110 172.16.100.1/24&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: ip4_addr_add: itf-pair: [2] loop110 tap6 vlaneth100 9 type tap netns ngfw ip4 172.16.100.1/24&lt;br /&gt;
&lt;br /&gt;
linux-cp/itf         [debug ]: admin_state_change: sw data1 1&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;###&amp;lt;/nowiki&amp;gt; пример конфигурации vpp&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;##&amp;lt;/nowiki&amp;gt; sudo podman exec vpp vppctl show int&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
              Name               Idx    State  MTU (L3/IP4/IP6/MPLS)     Counter          Count     &lt;br /&gt;
&lt;br /&gt;
data1                             1      up          1500/0/0/0     tx-error                      40&lt;br /&gt;
&lt;br /&gt;
data1.109                         7      up          1500/0/0/0     &lt;br /&gt;
&lt;br /&gt;
data1.110                         8      up          1500/0/0/0     &lt;br /&gt;
&lt;br /&gt;
data1.10                          9      up          1500/0/0/0     &lt;br /&gt;
&lt;br /&gt;
data2                             2      up          1500/0/0/0     tx packets                    13&lt;br /&gt;
&lt;br /&gt;
                                                                    tx bytes                    1086&lt;br /&gt;
&lt;br /&gt;
host-http1out                     3      up          1500/0/0/0     rx packets                     4&lt;br /&gt;
&lt;br /&gt;
                                                                    rx bytes                     280&lt;br /&gt;
&lt;br /&gt;
                                                                    drops                          4&lt;br /&gt;
&lt;br /&gt;
                                                                    ip6                            4&lt;br /&gt;
&lt;br /&gt;
local0                            0     down          0/0/0/0       &lt;br /&gt;
&lt;br /&gt;
loop109                           5      up          1500/0/0/0     tx packets                    26&lt;br /&gt;
&lt;br /&gt;
                                                                    tx bytes                    2172&lt;br /&gt;
&lt;br /&gt;
                                                                    drops                         13&lt;br /&gt;
&lt;br /&gt;
                                                                    tx-error                       1&lt;br /&gt;
&lt;br /&gt;
loop10                            4      up          1500/0/0/0     tx packets                    26&lt;br /&gt;
&lt;br /&gt;
                                                                    tx bytes                    2172&lt;br /&gt;
&lt;br /&gt;
                                                                    drops                         13&lt;br /&gt;
&lt;br /&gt;
                                                                    tx-error                       1&lt;br /&gt;
&lt;br /&gt;
loop110                           6      up          1500/0/0/0     tx packets                    28&lt;br /&gt;
&lt;br /&gt;
                                                                    tx bytes                    2352&lt;br /&gt;
&lt;br /&gt;
                                                                    drops                         14&lt;br /&gt;
&lt;br /&gt;
tap4                              10     up          1500/0/0/0     rx packets                    13&lt;br /&gt;
&lt;br /&gt;
                                                                    rx bytes                    1046&lt;br /&gt;
&lt;br /&gt;
                                                                    drops                          1&lt;br /&gt;
&lt;br /&gt;
                                                                    ip6                           13&lt;br /&gt;
&lt;br /&gt;
tap5                              11     up          1500/0/0/0     rx packets                    13&lt;br /&gt;
&lt;br /&gt;
                                                                    rx bytes                    1046&lt;br /&gt;
&lt;br /&gt;
                                                                    drops                          1&lt;br /&gt;
&lt;br /&gt;
                                                                    ip6                           13&lt;br /&gt;
&lt;br /&gt;
tap6                              12     up          1500/0/0/0     rx packets                    13&lt;br /&gt;
&lt;br /&gt;
                                                                    rx bytes                    1046&lt;br /&gt;
&lt;br /&gt;
                                                                    ip6                           13&lt;/div&gt;</summary>
		<author><name>Dima</name></author>
	</entry>
	<entry>
		<id>https://wiki.entcor.ru/index.php?title=VYOS-VPP&amp;diff=466</id>
		<title>VYOS-VPP</title>
		<link rel="alternate" type="text/html" href="https://wiki.entcor.ru/index.php?title=VYOS-VPP&amp;diff=466"/>
		<updated>2025-06-05T02:44:27Z</updated>

		<summary type="html">&lt;p&gt;Dima: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;nowiki&amp;gt;#########################################################################################&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== test web server (для проверки работы vyos) ===&lt;br /&gt;
while true; do { echo -e &#039;HTTP/1.1 200 OK\r\nContent-Length: 13\r\n\r\nHello, World!&#039;; } | nc -l 8081; done&lt;br /&gt;
&lt;br /&gt;
=== надо будет еще ядро перенастраивать (но пока рано) ===&lt;br /&gt;
sudo grub-probe --device /dev/sda3&lt;br /&gt;
&lt;br /&gt;
=== это мое ! ===&lt;br /&gt;
podman cp /home/vyos/vpp.conf vpp:/config/vpp.conf&lt;br /&gt;
&lt;br /&gt;
конфигурирование podman&lt;br /&gt;
&lt;br /&gt;
sudo nano /etc/containers/containers.conf&lt;br /&gt;
&lt;br /&gt;
dns_bind_port=54&lt;br /&gt;
&lt;br /&gt;
sudo chattr +i /etc/containers/containers.conf&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#########################################################################################&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== порядок биндинья карт ===&lt;br /&gt;
1) серевые карты VPP долюжы быть переведены в down (ip l set state eth1 down)&lt;br /&gt;
&lt;br /&gt;
2) вклчаем драйвер&lt;br /&gt;
&lt;br /&gt;
sudo modprobe vfio-pci&lt;br /&gt;
&lt;br /&gt;
3) потом делаем бинд&lt;br /&gt;
&lt;br /&gt;
так можно но не получилось т.к. с iommq проблемы&lt;br /&gt;
&lt;br /&gt;
sudo echo &amp;quot;0000:00:12.0&amp;quot; &amp;gt; /sys/bus/pci/drivers/virtio-pci/bind&lt;br /&gt;
&lt;br /&gt;
делал так:&lt;br /&gt;
&lt;br /&gt;
качал dpdk c github&lt;br /&gt;
&lt;br /&gt;
cd /home/vyos/dpdk-24.11/usertools&lt;br /&gt;
&lt;br /&gt;
python3 dpdk-devbind.py -b vfio-pci 0000:03:00.0 --noiommu-mode&lt;br /&gt;
&lt;br /&gt;
перечень карт можно увидеть&lt;br /&gt;
&lt;br /&gt;
lspci | grep Eth&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#########################################################################################&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== запуск vpp (далее сделаем через podman-compose) тут порядок в куче ===&lt;br /&gt;
ip l set dev eth1 down&lt;br /&gt;
&lt;br /&gt;
ip l set dev eth2 down&lt;br /&gt;
&lt;br /&gt;
modprobe vfio-pci&lt;br /&gt;
&lt;br /&gt;
python3 dpdk-devbind.py -b vfio-pci 0000:03:00.0 --noiommu-mode&lt;br /&gt;
&lt;br /&gt;
python3 dpdk-devbind.py -b vfio-pci 0000:03:00.1 --noiommu-mode&lt;br /&gt;
&lt;br /&gt;
=== создание ngfw пространства имен ===&lt;br /&gt;
ip netns add ngfw&lt;br /&gt;
&lt;br /&gt;
podman rm vpp -f&lt;br /&gt;
&lt;br /&gt;
=== создание host interface ===&lt;br /&gt;
ip netns exec ngfw bash&lt;br /&gt;
&lt;br /&gt;
ip link add name http1out type veth peer name http1host&lt;br /&gt;
&lt;br /&gt;
ip link set dev http1out up&lt;br /&gt;
&lt;br /&gt;
ip link set dev http1host up&lt;br /&gt;
&lt;br /&gt;
ip addr add 10.10.10.10/24 dev http1host&lt;br /&gt;
&lt;br /&gt;
ip addr show http1host&lt;br /&gt;
&lt;br /&gt;
podman run -d --name vpp --network host --privileged --restart always --ulimit core=0:0 --shm-size 4g --volume /var/run/netns:/var/run/netns --volume /var/vpp/netplan:/etc/vpp/netplan --volume /var/log:/var/log --volume /var:/config/shared --env-file /config/vpp/env docker-archive:/home/vyos/vpp-image.tar&lt;br /&gt;
&lt;br /&gt;
=== vpp: ===&lt;br /&gt;
create host-interface name http1out&lt;br /&gt;
&lt;br /&gt;
set interface state host-http1out up&lt;br /&gt;
&lt;br /&gt;
podman cp /home/vyos/vpp.conf vpp:/config/vpp.conf&lt;br /&gt;
&lt;br /&gt;
podman restart vpp&lt;br /&gt;
&lt;br /&gt;
=== назначаем адрес для теста (data2 в бридже loop10) ===&lt;br /&gt;
podman exec -it vpp vppctl&lt;br /&gt;
&lt;br /&gt;
set interface ip address loop10 10.1.100.125/24&lt;br /&gt;
&lt;br /&gt;
show int addr&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#########################################################################################&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;##########&amp;lt;/nowiki&amp;gt; enode on podman -----------------------------&lt;br /&gt;
&lt;br /&gt;
=== включение разрешений для podman ===&lt;br /&gt;
set nat source rule 100 source address &#039;10.88.0.0/16&#039;&lt;br /&gt;
&lt;br /&gt;
set nat source rule 100 translation address &#039;masquerade&#039;&lt;br /&gt;
&lt;br /&gt;
commit&lt;br /&gt;
&lt;br /&gt;
save&lt;br /&gt;
&lt;br /&gt;
=== для traefik нуже сервис podman api ===&lt;br /&gt;
podman system service -t 0 unix:///run/user/1000/podman/podman.sock &amp;amp;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
vyos|vyos&lt;br /&gt;
&lt;br /&gt;
sudo podman exec -it vpp vppctl&lt;br /&gt;
&lt;br /&gt;
show acl-plugin acl&lt;/div&gt;</summary>
		<author><name>Dima</name></author>
	</entry>
	<entry>
		<id>https://wiki.entcor.ru/index.php?title=VYOS-VPP&amp;diff=465</id>
		<title>VYOS-VPP</title>
		<link rel="alternate" type="text/html" href="https://wiki.entcor.ru/index.php?title=VYOS-VPP&amp;diff=465"/>
		<updated>2025-06-05T02:43:43Z</updated>

		<summary type="html">&lt;p&gt;Dima: Новая страница: «&amp;lt;nowiki&amp;gt;#########################################################################################&amp;lt;/nowiki&amp;gt;  === test web server (для проверки работы vyos) === while true; do { echo -e &amp;#039;HTTP/1.1 200 OK\r\nContent-Length: 13\r\n\r\nHello, World!&amp;#039;; } | nc -l 8081; done  === надо будет еще ядро перенастраивать (но пока рано) === sudo grub-probe --device /dev/sda3  === это мое ! === podman cp /home/v...»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;nowiki&amp;gt;#########################################################################################&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== test web server (для проверки работы vyos) ===&lt;br /&gt;
while true; do { echo -e &#039;HTTP/1.1 200 OK\r\nContent-Length: 13\r\n\r\nHello, World!&#039;; } | nc -l 8081; done&lt;br /&gt;
&lt;br /&gt;
=== надо будет еще ядро перенастраивать (но пока рано) ===&lt;br /&gt;
sudo grub-probe --device /dev/sda3&lt;br /&gt;
&lt;br /&gt;
=== это мое ! ===&lt;br /&gt;
podman cp /home/vyos/vpp.conf vpp:/config/vpp.conf&lt;br /&gt;
&lt;br /&gt;
конфигурирование podman&lt;br /&gt;
&lt;br /&gt;
sudo nano /etc/containers/containers.conf&lt;br /&gt;
&lt;br /&gt;
dns_bind_port=54&lt;br /&gt;
&lt;br /&gt;
sudo chattr +i /etc/containers/containers.conf&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#########################################################################################&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== порядок биндинья карт ===&lt;br /&gt;
1) серевые карты VPP долюжы быть переведены в down (ip l set state eth1 down)&lt;br /&gt;
&lt;br /&gt;
2) вклчаем драйвер&lt;br /&gt;
&lt;br /&gt;
sudo modprobe vfio-pci&lt;br /&gt;
&lt;br /&gt;
3) потом делаем бинд&lt;br /&gt;
&lt;br /&gt;
так можно но не получилось т.к. с iommq проблемы&lt;br /&gt;
&lt;br /&gt;
sudo echo &amp;quot;0000:00:12.0&amp;quot; &amp;gt; /sys/bus/pci/drivers/virtio-pci/bind&lt;br /&gt;
&lt;br /&gt;
делал так:&lt;br /&gt;
&lt;br /&gt;
качал dpdk c github&lt;br /&gt;
&lt;br /&gt;
cd /home/vyos/dpdk-24.11/usertools&lt;br /&gt;
&lt;br /&gt;
python3 dpdk-devbind.py -b vfio-pci 0000:03:00.0 --noiommu-mode&lt;br /&gt;
&lt;br /&gt;
перечень карт можно увидеть&lt;br /&gt;
&lt;br /&gt;
lspci | grep Eth&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#########################################################################################&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== запуск vpp (далее сделаем через podman-compose) тут порядок в куче ===&lt;br /&gt;
ip l set dev eth1 down&lt;br /&gt;
&lt;br /&gt;
ip l set dev eth2 down&lt;br /&gt;
&lt;br /&gt;
modprobe vfio-pci&lt;br /&gt;
&lt;br /&gt;
python3 dpdk-devbind.py -b vfio-pci 0000:03:00.0 --noiommu-mode&lt;br /&gt;
&lt;br /&gt;
python3 dpdk-devbind.py -b vfio-pci 0000:03:00.1 --noiommu-mode&lt;br /&gt;
&lt;br /&gt;
=== создание ngfw пространства имен ===&lt;br /&gt;
ip netns add ngfw&lt;br /&gt;
&lt;br /&gt;
podman rm vpp -f&lt;br /&gt;
&lt;br /&gt;
=== создание host interface ===&lt;br /&gt;
ip netns exec ngfw bash&lt;br /&gt;
&lt;br /&gt;
ip link add name http1out type veth peer name http1host&lt;br /&gt;
&lt;br /&gt;
ip link set dev http1out up&lt;br /&gt;
&lt;br /&gt;
ip link set dev http1host up&lt;br /&gt;
&lt;br /&gt;
ip addr add 10.10.10.10/24 dev http1host&lt;br /&gt;
&lt;br /&gt;
ip addr show http1host&lt;br /&gt;
&lt;br /&gt;
podman run -d --name vpp --network host --privileged --restart always --ulimit core=0:0 --shm-size 4g --volume /var/run/netns:/var/run/netns --volume /var/vpp/netplan:/etc/vpp/netplan --volume /var/log:/var/log --volume /var:/config/shared --env-file /config/vpp/env docker-archive:/home/vyos/vpp-image.tar&lt;br /&gt;
&lt;br /&gt;
=== vpp: ===&lt;br /&gt;
create host-interface name http1out&lt;br /&gt;
&lt;br /&gt;
set interface state host-http1out up&lt;br /&gt;
&lt;br /&gt;
podman cp /home/vyos/vpp.conf vpp:/config/vpp.conf&lt;br /&gt;
&lt;br /&gt;
podman restart vpp&lt;br /&gt;
&lt;br /&gt;
=== назначаем адрес для теста (data2 в бридже loop10) ===&lt;br /&gt;
podman exec -it vpp vppctl&lt;br /&gt;
&lt;br /&gt;
set interface ip address loop10 10.1.100.125/24&lt;br /&gt;
&lt;br /&gt;
show int addr&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#########################################################################################&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;##########&amp;lt;/nowiki&amp;gt; enode on podman -----------------------------&lt;br /&gt;
&lt;br /&gt;
=== включение разрешений для podman ===&lt;br /&gt;
set nat source rule 100 source address &#039;10.88.0.0/16&#039;&lt;br /&gt;
&lt;br /&gt;
set nat source rule 100 translation address &#039;masquerade&#039;&lt;br /&gt;
&lt;br /&gt;
commit&lt;br /&gt;
&lt;br /&gt;
save&lt;br /&gt;
&lt;br /&gt;
=== для traefik нуже сервис podman api ===&lt;br /&gt;
podman system service -t 0 unix:///run/user/1000/podman/podman.sock &amp;amp;&lt;/div&gt;</summary>
		<author><name>Dima</name></author>
	</entry>
	<entry>
		<id>https://wiki.entcor.ru/index.php?title=%D0%97%D0%B0%D0%B3%D0%BB%D0%B0%D0%B2%D0%BD%D0%B0%D1%8F_%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%B8%D1%86%D0%B0&amp;diff=464</id>
		<title>Заглавная страница</title>
		<link rel="alternate" type="text/html" href="https://wiki.entcor.ru/index.php?title=%D0%97%D0%B0%D0%B3%D0%BB%D0%B0%D0%B2%D0%BD%D0%B0%D1%8F_%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%B8%D1%86%D0%B0&amp;diff=464"/>
		<updated>2025-06-05T02:42:43Z</updated>

		<summary type="html">&lt;p&gt;Dima: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;strong&amp;gt;Разделы:&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Документация по Блокиратору [[Blocker]]&lt;br /&gt;
# Документация по системе мониторинга качества измерений [[МКИ|eNode.МКИ]]&lt;br /&gt;
# Документация по системе мониторинга [[nms]]&lt;br /&gt;
# Документация по системе e-core [[e-core]]&lt;br /&gt;
# Документация по SD-WAN [[sdwan]]&lt;br /&gt;
# Документация по командам docker [[Dockercompose]]&lt;br /&gt;
# Сетевые записи [[network]]&lt;br /&gt;
# Настройки разных подсистем [[systems]]&lt;br /&gt;
# [[Список серверов]] proxmox&lt;br /&gt;
# Агент [[host-agent]]&lt;br /&gt;
# [[Pnet|Pnetlab]]&lt;br /&gt;
# [[Установка сертификата]]&lt;br /&gt;
# [[Установка node-js]]&lt;br /&gt;
# [[Установка Docker]]&lt;br /&gt;
# [[Continent]]&lt;br /&gt;
# [[Формирование путей устройств]]&lt;br /&gt;
# [[Backup/Restore MongoDB|Backup\Restore MongoDB]]&lt;br /&gt;
# [[Mirror]]&lt;br /&gt;
# [[Документация Alarm Server|Документация entcor]]&lt;br /&gt;
# [[Документы по E-node|Документы по E-node]]&lt;br /&gt;
# [[MQTT]]&lt;br /&gt;
# [[Дистрибутивы]]&lt;br /&gt;
# Документация по настройке VPP в [[VYOS-VPP|VYOS]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Информацию по работе с этой вики можно найти в [[mediawikiwiki:Special:MyLanguage/Help:Contents|справочном руководстве]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Общая информация&lt;br /&gt;
&lt;br /&gt;
# договор на интернет [[Internet settings]]&lt;br /&gt;
&lt;br /&gt;
== Начало работы ==&lt;br /&gt;
&lt;br /&gt;
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Список возможных настроек];&lt;br /&gt;
* [https://www.mediawiki.org/wiki/Manual:FAQ/ru Часто задаваемые вопросы и ответы по MediaWiki];&lt;br /&gt;
* [https://lists.wikimedia.org/postorius/lists/mediawiki-announce.lists.wikimedia.org/ Рассылка уведомлений о выходе новых версий MediaWiki].&lt;br /&gt;
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Перевод MediaWiki на свой язык]&lt;br /&gt;
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam Узнайте, как бороться со спамом в вашей вики]&lt;/div&gt;</summary>
		<author><name>Dima</name></author>
	</entry>
	<entry>
		<id>https://wiki.entcor.ru/index.php?title=%D0%97%D0%B0%D0%B3%D0%BB%D0%B0%D0%B2%D0%BD%D0%B0%D1%8F_%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%B8%D1%86%D0%B0&amp;diff=463</id>
		<title>Заглавная страница</title>
		<link rel="alternate" type="text/html" href="https://wiki.entcor.ru/index.php?title=%D0%97%D0%B0%D0%B3%D0%BB%D0%B0%D0%B2%D0%BD%D0%B0%D1%8F_%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%B8%D1%86%D0%B0&amp;diff=463"/>
		<updated>2025-06-05T02:39:51Z</updated>

		<summary type="html">&lt;p&gt;Dima: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;strong&amp;gt;Разделы:&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Документация по Блокиратору [[Blocker]]&lt;br /&gt;
# Документация по системе мониторинга качества измерений [[МКИ|eNode.МКИ]]&lt;br /&gt;
# Документация по системе мониторинга [[nms]]&lt;br /&gt;
# Документация по системе e-core [[e-core]]&lt;br /&gt;
# Документация по SD-WAN [[sdwan]]&lt;br /&gt;
# Документация по командам docker [[Dockercompose]]&lt;br /&gt;
# Сетевые записи [[network]]&lt;br /&gt;
# Настройки разных подсистем [[systems]]&lt;br /&gt;
# [[Список серверов]] proxmox&lt;br /&gt;
# Агент [[host-agent]]&lt;br /&gt;
# [[Pnet|Pnetlab]]&lt;br /&gt;
# [[Установка сертификата]]&lt;br /&gt;
# [[Установка node-js]]&lt;br /&gt;
# [[Установка Docker]]&lt;br /&gt;
# [[Continent]]&lt;br /&gt;
# [[Формирование путей устройств]]&lt;br /&gt;
# [[Backup/Restore MongoDB|Backup\Restore MongoDB]]&lt;br /&gt;
# [[Mirror]]&lt;br /&gt;
# [[Документация Alarm Server|Документация entcor]]&lt;br /&gt;
# [[Документы по E-node|Документы по E-node]]&lt;br /&gt;
# [[MQTT]]&lt;br /&gt;
# [[Дистрибутивы]]&lt;br /&gt;
# Документация по настройке VPP в VYOS&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Информацию по работе с этой вики можно найти в [[mediawikiwiki:Special:MyLanguage/Help:Contents|справочном руководстве]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Общая информация&lt;br /&gt;
&lt;br /&gt;
# договор на интернет [[Internet settings]]&lt;br /&gt;
&lt;br /&gt;
== Начало работы ==&lt;br /&gt;
&lt;br /&gt;
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Список возможных настроек];&lt;br /&gt;
* [https://www.mediawiki.org/wiki/Manual:FAQ/ru Часто задаваемые вопросы и ответы по MediaWiki];&lt;br /&gt;
* [https://lists.wikimedia.org/postorius/lists/mediawiki-announce.lists.wikimedia.org/ Рассылка уведомлений о выходе новых версий MediaWiki].&lt;br /&gt;
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Перевод MediaWiki на свой язык]&lt;br /&gt;
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam Узнайте, как бороться со спамом в вашей вики]&lt;/div&gt;</summary>
		<author><name>Dima</name></author>
	</entry>
	<entry>
		<id>https://wiki.entcor.ru/index.php?title=%D0%9C%D0%9A%D0%98&amp;diff=449</id>
		<title>МКИ</title>
		<link rel="alternate" type="text/html" href="https://wiki.entcor.ru/index.php?title=%D0%9C%D0%9A%D0%98&amp;diff=449"/>
		<updated>2025-04-03T11:38:58Z</updated>

		<summary type="html">&lt;p&gt;Dima: /* Проверка информационного обмена по протоколу МЭК-60870-5-104 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= &#039;&#039;&#039;Система мониторинга качества измерений (МКИ)&#039;&#039;&#039; =&lt;br /&gt;
&lt;br /&gt;
=== Схема тестового стенда ===&lt;br /&gt;
[[Файл:Стенд для МКИ (декабрь 2024).drawio.png|альт=Стенд для МКИ (декабрь 2024)|мини|978x978пкс|Стенд для МКИ (декабрь 2024)]]&lt;br /&gt;
&lt;br /&gt;
=== Подключение и настойка оборудования ===&lt;br /&gt;
Подключение компонентов стенда производится в соответствии со схемой подключения. При этом для корректного выполнения дальнейших инструкций подключение устройств к физическим портам и сетевые настройки интерфейсов должны быть выполнены  согласно табл. 1:&lt;br /&gt;
&lt;br /&gt;
==== Таблица 1 - Параметры сетевых настроек устройств стенда ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Хост&lt;br /&gt;
!Порт&lt;br /&gt;
!Интерфейс&lt;br /&gt;
!IP&lt;br /&gt;
!Подключен к &lt;br /&gt;
устройство/порт&lt;br /&gt;
!Описание&lt;br /&gt;
|-&lt;br /&gt;
|MCM-SNIFFER&lt;br /&gt;
|Eth1&lt;br /&gt;
|enp5s0&lt;br /&gt;
|192.168.2.15/24&lt;br /&gt;
|L2 Switch&lt;br /&gt;
|Интерфейс управления для Sniffer&lt;br /&gt;
|-&lt;br /&gt;
|MCM-SNIFFER&lt;br /&gt;
|Eth2&lt;br /&gt;
|enp6s0&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;-&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|MCM-NODE1 / Eth2&lt;br /&gt;
|Участвует в L2 Bridge&lt;br /&gt;
|-&lt;br /&gt;
|MCM-SNIFFER&lt;br /&gt;
|Eth3&lt;br /&gt;
|enp7s0&lt;br /&gt;
| -&lt;br /&gt;
|MCM-NODE2 / Eth2&lt;br /&gt;
|Участвует в L2 Bridge&lt;br /&gt;
|-&lt;br /&gt;
|MCM-SNIFFER&lt;br /&gt;
|Eth4&lt;br /&gt;
|enp8s0&lt;br /&gt;
| -&lt;br /&gt;
|ZLAN / Eth&lt;br /&gt;
|Участвует в L2 Bridge&lt;br /&gt;
|-&lt;br /&gt;
|MCM-NODE1&lt;br /&gt;
|Eth1&lt;br /&gt;
|EXTERNAL&lt;br /&gt;
|192.168.2.156/24&lt;br /&gt;
|L2 Switch&lt;br /&gt;
|Интерфейс управления для Node1&lt;br /&gt;
|-&lt;br /&gt;
|MCM-NODE1&lt;br /&gt;
|Eth2&lt;br /&gt;
|INTERNAL&lt;br /&gt;
|10.0.0.1/24&lt;br /&gt;
|MCM-SNIFFER / Eth2&lt;br /&gt;
|Интерфейс обмена данными для Node1&lt;br /&gt;
|-&lt;br /&gt;
|MCM-NODE2&lt;br /&gt;
|Eth1&lt;br /&gt;
|EXTERNAL&lt;br /&gt;
|192.168.2.195/24&lt;br /&gt;
|L2 Switch&lt;br /&gt;
|Интерфейс управления для Node2&lt;br /&gt;
|-&lt;br /&gt;
|MCM-NODE2&lt;br /&gt;
|Eth2&lt;br /&gt;
|INTERNAL&lt;br /&gt;
|10.0.0.2/24&lt;br /&gt;
|MCM-SNIFFER / Eth3&lt;br /&gt;
|Интерфейс обмена данными для Node2&lt;br /&gt;
|-&lt;br /&gt;
|ZLAN&lt;br /&gt;
|Eth&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
|MCM-SNIFFER / Eth4&lt;br /&gt;
|Интерфейс обмена данными для ZLAN&lt;br /&gt;
|-&lt;br /&gt;
|ZLAN&lt;br /&gt;
|RS-485 #1&lt;br /&gt;
|ZLDEV0001&lt;br /&gt;
|10.0.0.241/24&lt;br /&gt;
|&lt;br /&gt;
|Подключение датчика с MODBUS-адресом 5&lt;br /&gt;
|-&lt;br /&gt;
|ZLAN&lt;br /&gt;
|RS-485 #2&lt;br /&gt;
|ZLDEV0002&lt;br /&gt;
|10.0.0.242/24&lt;br /&gt;
|&lt;br /&gt;
|Подключение датчика с MODBUS-адресом 6&lt;br /&gt;
|-&lt;br /&gt;
|ZLAN&lt;br /&gt;
|RS-485 #3&lt;br /&gt;
|ZLDEV0003&lt;br /&gt;
|10.0.0.243/24&lt;br /&gt;
|&lt;br /&gt;
|Подключение датчика с MODBUS-адресом 7&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Развертывание системы ===&lt;br /&gt;
&lt;br /&gt;
==== Установка базовых систем ====&lt;br /&gt;
Установка ОС Windows на компьютерах &#039;&#039;&#039;MCM-NODE1&#039;&#039;&#039; и &#039;&#039;&#039;MCM-NODE2&#039;&#039;&#039; производится обычным образом, при этом  соответствующим сетевым интерфейсам должны быть присвоены адреса согласно данным табл. 1, также для совместимости должны быть указаны следующие параметры настройки системы:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Таблица 2 - Параметры настройки узлов MCM-NODE1 и MCM-NODE2&lt;br /&gt;
!Параметр&lt;br /&gt;
!Значение&lt;br /&gt;
|-&lt;br /&gt;
|Имя компьютера&lt;br /&gt;
|MCM-NODE1/MCM-NODE2&lt;br /&gt;
|-&lt;br /&gt;
|Имя пользователя c правами локального администратора&lt;br /&gt;
|entcor&lt;br /&gt;
|-&lt;br /&gt;
|Пароль&lt;br /&gt;
|1&lt;br /&gt;
|}&lt;br /&gt;
Установка базовой системы Ubuntu Server 24.0x на компьютер &#039;&#039;&#039;MCM-SNIFFER&#039;&#039;&#039; производится обычным образом в режиме инсталляции по умолчанию, при этом при выборе параметров установки необходимо включить установку сервера OpenSSH, а также для совместимости следует  указать следующие значения прочих параметров:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Таблица 3 - Параметры настройки узла MCM-SNIFFER&lt;br /&gt;
!Параметр&lt;br /&gt;
!Значение&lt;br /&gt;
|-&lt;br /&gt;
|Имя компьютера&lt;br /&gt;
|MCM-SNIFFER&lt;br /&gt;
|-&lt;br /&gt;
|Имя пользователя c правами root                       &lt;br /&gt;
|entcor&lt;br /&gt;
|-&lt;br /&gt;
|Пароль&lt;br /&gt;
|ng3-dcc20&lt;br /&gt;
|}&lt;br /&gt;
После установки системы необходимо установить обновления:&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt full-upgrade&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
а также проверить доступ к серверу по SSH с компьютера администратора:&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
ssh entcor@192.168.2.15 (текущий адрес сервера MCM-SNIFFER)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&#039;&#039;&#039;Примечание:&#039;&#039;&#039; для удобства работы с файлами настоятельно рекомендуется также первым делом вкатить Midnight Commander:&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt install mc&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Также в дальнейшем целесообразно запускать Midnight Commander через &#039;&#039;&#039;sudo&#039;&#039;&#039;:&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
sudo mc&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Это позволит, во-первых, невозбранно редактировать все необходимые файлы и, во-вторых, при скрытии окон Midnight Commander выполнять из-под него с командной строки команды в режиме root без необходимости париться с sudo для каждой отдельной команды.&lt;br /&gt;
&lt;br /&gt;
==== Настройка сетевых интерфейсов ====&lt;br /&gt;
Для корректной работы сетевых интерфейсов и сохранения их параметров после перезагрузки сервера необходимо в каталоге &#039;&#039;&#039;/etc/netplan&#039;&#039;&#039; создать файл с расширением .yaml (например, &#039;&#039;&#039;01-network.yaml&#039;&#039;&#039;) со следующим содержимым:&amp;lt;syntaxhighlight lang=&amp;quot;yaml&amp;quot;&amp;gt;&lt;br /&gt;
network:&lt;br /&gt;
    version: 2&lt;br /&gt;
    ethernets:&lt;br /&gt;
        enp5s0:&lt;br /&gt;
            dhcp4: false&lt;br /&gt;
            addresses: &lt;br /&gt;
                - 192.168.2.15/24&lt;br /&gt;
            routes:&lt;br /&gt;
              - to: default&lt;br /&gt;
                via: 192.168.2.254&lt;br /&gt;
            nameservers: &lt;br /&gt;
                addresses: [192.168.2.60, 176.114.16.33]&lt;br /&gt;
        enp6s0:&lt;br /&gt;
            dhcp4: false&lt;br /&gt;
        enp7s0:&lt;br /&gt;
            dhcp4: false&lt;br /&gt;
        enp8s0:&lt;br /&gt;
            dhcp4: false&lt;br /&gt;
    bridges:&lt;br /&gt;
        docker0:&lt;br /&gt;
            interfaces: [enp6s0, enp7s0, enp8s0]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&#039;&#039;&#039;Примечания:&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
# Для интерфейса &#039;&#039;&#039;enp5s0&#039;&#039;&#039; вместо 192.168.2.15/24 следует указать нужный статический адрес сервера, также при необходимости следует указать фактически используемые адреса шлюза и DNS (в &#039;&#039;&#039;via&#039;&#039;&#039; и &#039;&#039;&#039;nameservers&#039;&#039;&#039; соответственно).&lt;br /&gt;
# В файле конфигурации заранее определяется мост &#039;&#039;&#039;docker0&#039;&#039;&#039;, который будет использоваться Docker&#039;ом после его установки. Таким образом, интерфейсы &#039;&#039;&#039;enp6s0/enp7s0/enp8s0&#039;&#039;&#039; заранее подключаются к мосту &#039;&#039;&#039;docker0&#039;&#039;&#039;, и, соответственно, в будущем будут доступны из Docker.&lt;br /&gt;
# Для удобства проще скопировать готовый файл &#039;&#039;&#039;01-network.yaml&#039;&#039;&#039; с компьютера администратора и положить его в &#039;&#039;&#039;/etc/netplan.&#039;&#039;&#039; Файлу  следует установить права по маске 0100600.&lt;br /&gt;
# Как показывает практика, существующий в &#039;&#039;&#039;/etc/netplan&#039;&#039;&#039; файл конфигурации по умолчанию &#039;&#039;&#039;50-cloud-init.yaml&#039;&#039;&#039; лучше переименовать во что-то типа &#039;&#039;&#039;50-cloud-init.yaml.bak,&#039;&#039;&#039; иначе у интерфейса &#039;&#039;&#039;enp5s0&#039;&#039;&#039; будет образовываться 2 адреса - статический из настроек в &#039;&#039;&#039;01-network.yaml&#039;&#039;&#039; и динамический, который будет дополнительно прилетать по DHCP и создавать путаницу. Вроде бы, должно лечиться установкой в файле &#039;&#039;&#039;50-cloud-init.yaml&#039;&#039;&#039; для интерфейса &#039;&#039;&#039;enp5s0&#039;&#039;&#039; параметра &#039;&#039;&#039;dchp4: false&#039;&#039;&#039;, но по факту не помогает, поэтому лучше от греха подальше во избежание конфликтов держать в &#039;&#039;&#039;/etc/netplan&#039;&#039;&#039;  только один файл &#039;&#039;&#039;01-network.yaml&#039;&#039;&#039; с настройками интерфейсов.&lt;br /&gt;
# Для применения настроек интерфейсов и сохранения настроек после перезагрузки сервера рекомендуется выполнение &#039;&#039;&#039;netplan generate&#039;&#039;&#039; . Это позволит проверить конфигурацию перед применением и отловить возможные ошибки. Саму конфигурацию лучше применять через &#039;&#039;&#039;netplan try --timeout  30&#039;&#039;&#039; (или другое не сильно большое количество секунд, чтобы она автоотменилась в случае косяков). Также рекомендуется в обязательном порядке выполнить контрольную перезагрузку сервера, чтобы убедиться, что настройки после нее восстанавливаются правильно.&lt;br /&gt;
# Для проверки работоспособности моста &#039;&#039;&#039;docker0&#039;&#039;&#039; перед настройкой интерфейсов следует запустить постоянный пинг (с параметром &#039;&#039;&#039;-t&#039;&#039;&#039;) с &#039;&#039;&#039;MCM-NODE1&#039;&#039;&#039; (10.0.0.1) на &#039;&#039;&#039;MCM-NODE2&#039;&#039;&#039; (10.0.0.2) и наоборот и убедиться в том, что узлы недоступны друг для друга. После настройки конфигурации интерфейсов и выполнения &#039;&#039;&#039;netplan try&#039;&#039;&#039; следует проверить, что пинг с MCM-NODE1 (10.0.0.1) на MCM-NODE2 (10.0.0.2) в обе стороны проходит успешно, т.е. узлы общаются между собой напрямую через мост &#039;&#039;&#039;docker0&#039;&#039;&#039;.&lt;br /&gt;
==== Установка сертификата Entcor ====&lt;br /&gt;
Перед установкой собственно компонентов МКИ с компьютера администратора следует скопировать файл сертификата &#039;&#039;&#039;entcor.crt&#039;&#039;&#039; и разместить его в каталоге /usr/local/share/ca-certificates (удобнее всего это сделать через Shell-link в панели Midnight Commander). Затем сертификат необходимо обновить, после чего выполнить перезагрузку:&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
sudo update-ca-certificates &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&#039;&#039;&#039;Примечание:&#039;&#039;&#039; после обновления сертификатов необходимо выполнить перезагрузку компьютера &#039;&#039;&#039;MCM-SNIFFER&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==== Установка Docker ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
# Add Docker&#039;s official GPG key:&lt;br /&gt;
&lt;br /&gt;
sudo apt-get update&lt;br /&gt;
sudo apt-get install ca-certificates curl&lt;br /&gt;
sudo install -m 0755 -d /etc/apt/keyrings&lt;br /&gt;
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc&lt;br /&gt;
sudo chmod a+r /etc/apt/keyrings/docker.asc&lt;br /&gt;
&lt;br /&gt;
# Add the repository to Apt sources:&lt;br /&gt;
&lt;br /&gt;
echo \&lt;br /&gt;
&amp;quot;deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \&lt;br /&gt;
$(. /etc/os-release &amp;amp;&amp;amp; echo &amp;quot;$VERSION_CODENAME&amp;quot;) stable&amp;quot; | \&lt;br /&gt;
sudo tee /etc/apt/sources.list.d/docker.list &amp;gt; /dev/null&lt;br /&gt;
&lt;br /&gt;
sudo apt-get update&lt;br /&gt;
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Ссылка на руководство: https://docs.docker.com/engine/install/ubuntu/#install-using-the-repository&lt;br /&gt;
&lt;br /&gt;
==== Установка компонентов системы МКИ ====&lt;br /&gt;
Установка компонентов системы МКИ может осуществляться посредством получения последней версии инсталляционного пакета (предпочтительно), либо из репозитория Git (может применяться для целей отладки или быстрого накатывания патчей/фикса ошибок).&lt;br /&gt;
&lt;br /&gt;
==== Вариант 1: Установка с помощью инсталляционного пакета ====&lt;br /&gt;
Получение последней версии инсталляционного пакета производится с FTP-сервера Jenkins. Для этого необходимо подключиться к нему с устройства МКИ по протоколу FTP, используя соответствующую пару логин-пароль, и выкачать оттуда файлы &#039;&#039;&#039;install.sh&#039;&#039;&#039; и &#039;&#039;&#039;latest.tar.gz&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Перед запуском инсталляционного скрипта install.sh необходимо установить для него права на выполнение посредством команды chmod:&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
chmod +x install.sh&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Также для корректной работы стека common необходимо предварительно авторизоваться под нужной учетной записью в docker-репозитории Harbor:&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
docker login registry.entcor&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Далее непосредственное развертывание контейнеров производится запуском на выполнение скрипта &#039;&#039;&#039;install.sh&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
После завершения установки компонентов ПАК «еNODE.МКИ» следует выполнить переход в каталог &#039;&#039;&#039;/opt/e-node/deploy&#039;&#039;&#039;, куда выполнялось развертывание компонентов системы инсталляционным скриптом &#039;&#039;&#039;install.sh&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Далее в том же каталоге следует создать/отредактировать файла &#039;&#039;&#039;.env&#039;&#039;&#039;, в котором следует установить следующие параметры:&lt;br /&gt;
&lt;br /&gt;
* MONITOR_DATA_IF = &amp;lt;имя интерфейса на узле &#039;&#039;&#039;MCM-SNIFFER&#039;&#039;&#039;,  на котором выполняется прослушка, например, enp6s&lt;br /&gt;
* MODE = enode &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Примечание:&#039;&#039;&#039; вообще-то для работы МКИ параметр MODE должен иметь  значение asutp, но работает пока только вот так. &lt;br /&gt;
&lt;br /&gt;
==== Вариант 2: Установка непосредственно из репозитория Git ====&lt;br /&gt;
&lt;br /&gt;
Получение последней версии инсталляционного пакета производится из  Git-репозитория &#039;&#039;&#039;e-deploy&#039;&#039;&#039;, находящегося по адресу  &#039;&#039;&#039;&amp;lt;nowiki&amp;gt;http://192.168.2.61&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;, (нужно будет ввести соответствующие логин-пароль для доступа к репозиторию, а также выполнить переключение на ветку &#039;&#039;&#039;develop&#039;&#039;&#039;): &amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
git clone http://192.168.2.61/e-node/e-deploy.git&lt;br /&gt;
git switch develop&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Далее следует авторизоваться под нужной учетной записью в Docker-репозитории Harbor:&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
docker login registry.entcor&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;после чего нужно перейти в каталог &#039;&#039;&#039;e-deploy&#039;&#039;&#039; (в том каталоге, где выполнялся git clone) и выполнить следующую команду:&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
./enode.sh init&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Далее в том же каталоге следует создать/отредактировать файла &#039;&#039;&#039;.env&#039;&#039;&#039;, в котором следует установить следующие параметры:&lt;br /&gt;
&lt;br /&gt;
MONITOR_DATA_IF = &amp;lt;имя интерфейса на узле &#039;&#039;&#039;MCM-SNIFFER&#039;&#039;&#039;,  на котором выполняется прослушка, например, enp7s0&amp;gt; &lt;br /&gt;
&lt;br /&gt;
MODE = enode &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Примечание:&#039;&#039;&#039; вообще-то для работы МКИ параметр MODE должен иметь  значение asutp, но работает пока только вот так. &lt;br /&gt;
==== Запуск компонентов системы МКИ ====&lt;br /&gt;
После установки компонентов МКИ можно выполнить их запуск следующей командой: &amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
enode &amp;lt;имя стека&amp;gt; start&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&#039;&#039;&#039;Примечание:&#039;&#039;&#039; названия нужных стеков можно посмотреть в каталоге &#039;&#039;&#039;stacks&#039;&#039;&#039;  в &#039;&#039;&#039;e-deploy&#039;&#039;&#039; (имена стеков соответствуют именам подкаталогов). Как минимум должны быть запущены следующие стеки:&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
enode analytic start&lt;br /&gt;
enode common start&lt;br /&gt;
enode asutp start&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&#039;&#039;&#039;Примечание:&#039;&#039;&#039;  стек &#039;&#039;&#039;analytic&#039;&#039;&#039; рекомендуется запускать перед стеком &#039;&#039;&#039;common&#039;&#039;&#039; из-за каких-то особенностей функционирования:&lt;br /&gt;
&lt;br /&gt;
Проверка запуска сервисов производится обычным образом с помощью команды:&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
docker ps&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Проверка информационного обмена по протоколу МЭК-60870-5-104 ===&lt;br /&gt;
Проверка информационного обмена по протоколу МЭК-60870-5-104 производится между узлами стенда &#039;&#039;&#039;MCM-NODE1&#039;&#039;&#039; и &#039;&#039;&#039;MCM-NODE2&#039;&#039;&#039; посредством программного обеспечения  IEC Test, которое эмулирует передачу пакетов протокола МЭК-60870-5-104 поверх соединения Ethernet. &lt;br /&gt;
&lt;br /&gt;
Для проверки работы протокола МЭК-60870-5-104 во внутренней сети обмена на одном из узлов ПО IEC Test запускается в режиме сервера с показанными ниже настройками: &lt;br /&gt;
&lt;br /&gt;
TCP/IP Link Role - Server &lt;br /&gt;
&lt;br /&gt;
IP Address - адрес внутреннего интерфейса для информационного обмена (в данном примере - 10.0.0.2) &lt;br /&gt;
&lt;br /&gt;
Далее устанавливается канал обмена последовательным нажатием кнопок &amp;quot;Build String&amp;quot; и &amp;quot;Open Channel&amp;quot; (индикатор &amp;quot;1 channel&amp;quot; должен стать темно-зеленым). &lt;br /&gt;
[[Файл:IEC Test - 2.png|мини|794x794пкс|Рис. 1 - Настройки программы IEC Test для организации обмена  между узлами стенда MCM-NODE1 и MCM-NODE2 по протоколу МЭК-60870-5-104 (серверная часть)|центр]]Соответственно, на другом узле ПО IEC Test запускается в режиме клиента с показанными ниже настройками:&lt;br /&gt;
&lt;br /&gt;
TCP/IP Link Role - Client &lt;br /&gt;
&lt;br /&gt;
IP Address - адрес сервера, находящегося во внутренней сети для информационного обмена  (в данном примере - 10.0.0.2). &lt;br /&gt;
&lt;br /&gt;
Далее устанавливается канал обмена последовательным нажатием кнопок &amp;quot;Build String&amp;quot; и &amp;quot;Open Channel&amp;quot; (индикатор &amp;quot;1 channel&amp;quot; должен стать темно-зеленым).&lt;br /&gt;
&lt;br /&gt;
Для начала непосредственно информационного взаимодействия следует послать с клиента на сервер специальную команду посредством нажатия кнопки &amp;quot;Start DT&amp;quot; (индикатор &amp;quot;1 channel&amp;quot; должен стать светло-зеленым как показано на рисунке ниже). С этого момента канал обмена установлен и активирован, а между экземплярами ПО IEC Test могут передаваться пакеты протокола МЭК-60870-5-104.&lt;br /&gt;
[[Файл:IEC Test - 3.png|центр|мини|791x791пкс|Рис. 2 - Настройки программы IEC Test для организации обмена  между узлами стенда MCM-NODE1 и MCM-NODE2 по протоколу МЭК-60870-5-104 (клиентская часть)]]Для создания трафика по протоколу МЭК-60870-5-104 между узлами &#039;&#039;&#039;MCM-NODE1&#039;&#039;&#039; и &#039;&#039;&#039;MCM-NODE2&#039;&#039;&#039; следует использовать специальный макрос, имитирующий последовательную передачу данных протокола МЭК-60870-5-104 между узлами. Для этого необходимо на любом из узлов в ПО IEC Test перейти во вкладку &amp;quot;870 Commander&amp;quot;, нажатием кнопки &amp;quot;Загрузить&amp;quot; загрузить макрос &amp;quot;ДУ по циклу 5 сек.rtm&amp;quot; и выполнить его нажатием кнопки &amp;quot;Выполнить&amp;quot;:&lt;br /&gt;
[[Файл:IEC Test - 4.png|альт=Выполнение макроса в ПО IEC Test для создания трафика по протоколу МЭК-60870-5-104|центр|мини|797x797пкс|Рис. 3 - Выполнение макроса в ПО IEC Test для создания трафика по протоколу МЭК-60870-5-104]]В случае правильно настроенных узлов стенда и экземпляров ПО IEC Test на принимающем узле во вкладке &amp;quot;870 Commander&amp;quot; в соответствующем окне можно будет увидеть информацию о принятых сообщениях, отправленных макросом с передающего узла, что свидетельствует о состоявшемся информационном обмене по протоколу МЭК-60870-5-104 между узлами.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Примечание:&#039;&#039;&#039; в случае, если система МКИ выполняет прослушивание на одном из интерфейсов, входящих во внутреннюю сеть информационного обмена, а также при правильном конфигурировании компонента Grafana, при подключении браузером по адресу сервера  &#039;&#039;&#039;MCM-SNIFFER&#039;&#039;&#039; в соответствующих дашбордах должна появиться информация о перехваченных пакетах протокола МЭК-60870-5-104, создающих описанный выше трафик.&lt;br /&gt;
&lt;br /&gt;
=== Проверка информационного обмена по протоколу MODBUS ===&lt;br /&gt;
&lt;br /&gt;
Работа стенда по протоколу MODBUS осуществляется посредством ПО &#039;&#039;&#039;Modbus Poll&#039;&#039;&#039;, запущенного на узле &#039;&#039;&#039;MDM-NODE2&#039;&#039;&#039; (см. схему). Modbus Poll подключается по протоколу MODBUS-TCP к железке-конвертору ZLAN (см. схему) и через него опрашивает устройства (температурные датчики), подключенные к RS-485-портам №1, №2 и №3 конвертора ZLAN. Также на датчиках изменены их базовые адреса следующим образом: ID = 5 – на 1 порту RS-485, ID = 6 – на 2 порту RS-485, ID = 7 – на 3 порту RS-485.&lt;br /&gt;
&lt;br /&gt;
Для доступа к датчикам на конверторе ZLAN установлены адреса IP-портов с помощью прилагающейся к нему софтины &#039;&#039;&#039;ZLVirCom&#039;&#039;&#039;, которую можно запустить с рабочего стола на узле &#039;&#039;&#039;MCM-NODE2&#039;&#039;&#039; (&#039;&#039;&#039;Примечание:&#039;&#039;&#039; &#039;&#039;&#039;в текущей конфигурации стенда вся работа с MODBUS производится с этого узла&#039;&#039;&#039;). ZLVirCom сам опрашивает локальную сеть и находит там конвертор, после чего подключается к нему, и его можно конфигурировать:&lt;br /&gt;
[[Файл:Modbus1.png|центр|Рис. 4 - Главное окно ZLVirCom|обрамить]]&lt;br /&gt;
&lt;br /&gt;
При нажатии на кнопку &#039;&#039;&#039;Device&#039;&#039;&#039; в верхнем меню открывается список портов, в котором можно провалиться в конкретный порт и выполнить его настройки:&lt;br /&gt;
[[Файл:Modbus2.png|центр|мини|848x848пкс|Рис. 5 - Окно со списком портов RS-485 на устройстве ZLAN5843]]&lt;br /&gt;
&lt;br /&gt;
Настройки портов, к которым подключены датчики, должны выглядеть следующим образом:&lt;br /&gt;
[[Файл:Modbus3.png|центр|обрамить|Рис. 6 - Окно настройки параметров выбранного порта RS-485 на устройстве ZLAN]]&lt;br /&gt;
&lt;br /&gt;
Если все настроено корректно, то Modbus Poll сможет подключится к соответствующим RS-485-портам конвертора по указанному для них IP Address и Port (см. рис. 6).&lt;br /&gt;
&lt;br /&gt;
Непосредственно для выполнения опроса датчиков нужно запустить &#039;&#039;&#039;Modbus Poll&#039;&#039;&#039; с рабочего стола на узле &#039;&#039;&#039;MCM-NODE2&#039;&#039;&#039;:&lt;br /&gt;
[[Файл:Modbus4.png|центр|мини|852x852пкс|Рис. 7 - Главное окно Modbus Poll]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Далее в меню Connection следует выбрать Connect (или нажать F3), откроется окно настроек подключения, где нужно указать следующие параметры:&lt;br /&gt;
[[Файл:Modbus5.png|центр|мини|424x424пкс|Рис. 8 - Параметры подключения к порту RS-485 на устройстве ZLAN]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В поле IP Address or Node Name нужно указать адрес порта, который будем опрашивать (соответственно, &#039;&#039;&#039;10.0.0.241, .242, .243 для портов 1, 2, 3 конвертора&#039;&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
Далее будет выполнено подключение к железке ZLAN и при попытке опроса вылезет ошибка “Timeout error”, так как не сконфигурированы параметры опроса.&lt;br /&gt;
[[Файл:Modbus6.png|центр|мини|878x878пкс|Рис. 9 - Окно программы Modbus Poll при несконфигурированных параметрах опроса]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Для их настройки следует зайти в меню &#039;&#039;&#039;Setup -&amp;gt; Read/Write Definition&#039;&#039;&#039; (или нажать F8) и указать следующие параметры:&lt;br /&gt;
[[Файл:Modbus7.png|центр|мини|Рис. 10 - Настройка параметров опроса порта]]&lt;br /&gt;
&lt;br /&gt;
В поле &#039;&#039;&#039;Slave ID&#039;&#039;&#039; нужно указать адрес датчика (&#039;&#039;&#039;5, 6 или 7&#039;&#039;&#039;), в поле &#039;&#039;&#039;Function&#039;&#039;&#039; выбрать &#039;&#039;&#039;«04 Read Input Registers (3х)»&#039;&#039;&#039;, в полях &#039;&#039;&#039;Address&#039;&#039;&#039; и &#039;&#039;&#039;Quantity&#039;&#039;&#039; указать значение 1. Если номер датчика соответствует выбранному при подключении порту, то опрос пойдет корректно (&#039;&#039;&#039;Tx увеличивается, Err = 0)&#039;&#039;&#039;:&lt;br /&gt;
[[Файл:Modbus8.png|центр|мини|893x893пкс|Рис. 11 - Выполнение опроса порта в установленном режиме]]&lt;br /&gt;
&lt;br /&gt;
Результат опроса можно увидеть, нажав кнопку &#039;&#039;&#039;Display communication traffic&#039;&#039;&#039; в панели инструментов (&#039;&#039;&#039;Tx – байты с запросом, Rx – байты ответа от датчика&#039;&#039;&#039;). В случае ошибки опроса или недоступности устройства Rx в трафике не будет, а будут только строки с отправкой (Tx).&lt;br /&gt;
[[Файл:Modbus9.png|центр|Рис. 12 - Просмотр трафика при опросе порта|обрамить]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Примечание:&#039;&#039;&#039; Весь трафик между &#039;&#039;&#039;Modbus Poll&#039;&#039;&#039; на узле &#039;&#039;&#039;MCM-NODE2&#039;&#039;&#039; и каким-либо из датчиков пролетает через сервер &#039;&#039;&#039;MCM-SNIFFER&#039;&#039;&#039; (см. схему). Соответственно, если в настройках перехвата указать порт на сервере &#039;&#039;&#039;MCM-SNIFFER&#039;&#039;&#039;,  к которому подключен &#039;&#039;&#039;MCM-NODE2&#039;&#039;&#039; (например, &#039;&#039;&#039;enp6s0&#039;&#039;&#039;), то МКИ на сервере &#039;&#039;&#039;MCM-SNIFFER&#039;&#039;&#039; сможет перехватывать трафик MODBUS и, соответственно, его анализировать.&lt;/div&gt;</summary>
		<author><name>Dima</name></author>
	</entry>
	<entry>
		<id>https://wiki.entcor.ru/index.php?title=%D0%9C%D0%9A%D0%98&amp;diff=448</id>
		<title>МКИ</title>
		<link rel="alternate" type="text/html" href="https://wiki.entcor.ru/index.php?title=%D0%9C%D0%9A%D0%98&amp;diff=448"/>
		<updated>2025-04-03T11:37:20Z</updated>

		<summary type="html">&lt;p&gt;Dima: /* Установка сертификата Entcor */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= &#039;&#039;&#039;Система мониторинга качества измерений (МКИ)&#039;&#039;&#039; =&lt;br /&gt;
&lt;br /&gt;
=== Схема тестового стенда ===&lt;br /&gt;
[[Файл:Стенд для МКИ (декабрь 2024).drawio.png|альт=Стенд для МКИ (декабрь 2024)|мини|978x978пкс|Стенд для МКИ (декабрь 2024)]]&lt;br /&gt;
&lt;br /&gt;
=== Подключение и настойка оборудования ===&lt;br /&gt;
Подключение компонентов стенда производится в соответствии со схемой подключения. При этом для корректного выполнения дальнейших инструкций подключение устройств к физическим портам и сетевые настройки интерфейсов должны быть выполнены  согласно табл. 1:&lt;br /&gt;
&lt;br /&gt;
==== Таблица 1 - Параметры сетевых настроек устройств стенда ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Хост&lt;br /&gt;
!Порт&lt;br /&gt;
!Интерфейс&lt;br /&gt;
!IP&lt;br /&gt;
!Подключен к &lt;br /&gt;
устройство/порт&lt;br /&gt;
!Описание&lt;br /&gt;
|-&lt;br /&gt;
|MCM-SNIFFER&lt;br /&gt;
|Eth1&lt;br /&gt;
|enp5s0&lt;br /&gt;
|192.168.2.15/24&lt;br /&gt;
|L2 Switch&lt;br /&gt;
|Интерфейс управления для Sniffer&lt;br /&gt;
|-&lt;br /&gt;
|MCM-SNIFFER&lt;br /&gt;
|Eth2&lt;br /&gt;
|enp6s0&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;-&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|MCM-NODE1 / Eth2&lt;br /&gt;
|Участвует в L2 Bridge&lt;br /&gt;
|-&lt;br /&gt;
|MCM-SNIFFER&lt;br /&gt;
|Eth3&lt;br /&gt;
|enp7s0&lt;br /&gt;
| -&lt;br /&gt;
|MCM-NODE2 / Eth2&lt;br /&gt;
|Участвует в L2 Bridge&lt;br /&gt;
|-&lt;br /&gt;
|MCM-SNIFFER&lt;br /&gt;
|Eth4&lt;br /&gt;
|enp8s0&lt;br /&gt;
| -&lt;br /&gt;
|ZLAN / Eth&lt;br /&gt;
|Участвует в L2 Bridge&lt;br /&gt;
|-&lt;br /&gt;
|MCM-NODE1&lt;br /&gt;
|Eth1&lt;br /&gt;
|EXTERNAL&lt;br /&gt;
|192.168.2.156/24&lt;br /&gt;
|L2 Switch&lt;br /&gt;
|Интерфейс управления для Node1&lt;br /&gt;
|-&lt;br /&gt;
|MCM-NODE1&lt;br /&gt;
|Eth2&lt;br /&gt;
|INTERNAL&lt;br /&gt;
|10.0.0.1/24&lt;br /&gt;
|MCM-SNIFFER / Eth2&lt;br /&gt;
|Интерфейс обмена данными для Node1&lt;br /&gt;
|-&lt;br /&gt;
|MCM-NODE2&lt;br /&gt;
|Eth1&lt;br /&gt;
|EXTERNAL&lt;br /&gt;
|192.168.2.195/24&lt;br /&gt;
|L2 Switch&lt;br /&gt;
|Интерфейс управления для Node2&lt;br /&gt;
|-&lt;br /&gt;
|MCM-NODE2&lt;br /&gt;
|Eth2&lt;br /&gt;
|INTERNAL&lt;br /&gt;
|10.0.0.2/24&lt;br /&gt;
|MCM-SNIFFER / Eth3&lt;br /&gt;
|Интерфейс обмена данными для Node2&lt;br /&gt;
|-&lt;br /&gt;
|ZLAN&lt;br /&gt;
|Eth&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
|MCM-SNIFFER / Eth4&lt;br /&gt;
|Интерфейс обмена данными для ZLAN&lt;br /&gt;
|-&lt;br /&gt;
|ZLAN&lt;br /&gt;
|RS-485 #1&lt;br /&gt;
|ZLDEV0001&lt;br /&gt;
|10.0.0.241/24&lt;br /&gt;
|&lt;br /&gt;
|Подключение датчика с MODBUS-адресом 5&lt;br /&gt;
|-&lt;br /&gt;
|ZLAN&lt;br /&gt;
|RS-485 #2&lt;br /&gt;
|ZLDEV0002&lt;br /&gt;
|10.0.0.242/24&lt;br /&gt;
|&lt;br /&gt;
|Подключение датчика с MODBUS-адресом 6&lt;br /&gt;
|-&lt;br /&gt;
|ZLAN&lt;br /&gt;
|RS-485 #3&lt;br /&gt;
|ZLDEV0003&lt;br /&gt;
|10.0.0.243/24&lt;br /&gt;
|&lt;br /&gt;
|Подключение датчика с MODBUS-адресом 7&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Развертывание системы ===&lt;br /&gt;
&lt;br /&gt;
==== Установка базовых систем ====&lt;br /&gt;
Установка ОС Windows на компьютерах &#039;&#039;&#039;MCM-NODE1&#039;&#039;&#039; и &#039;&#039;&#039;MCM-NODE2&#039;&#039;&#039; производится обычным образом, при этом  соответствующим сетевым интерфейсам должны быть присвоены адреса согласно данным табл. 1, также для совместимости должны быть указаны следующие параметры настройки системы:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Таблица 2 - Параметры настройки узлов MCM-NODE1 и MCM-NODE2&lt;br /&gt;
!Параметр&lt;br /&gt;
!Значение&lt;br /&gt;
|-&lt;br /&gt;
|Имя компьютера&lt;br /&gt;
|MCM-NODE1/MCM-NODE2&lt;br /&gt;
|-&lt;br /&gt;
|Имя пользователя c правами локального администратора&lt;br /&gt;
|entcor&lt;br /&gt;
|-&lt;br /&gt;
|Пароль&lt;br /&gt;
|1&lt;br /&gt;
|}&lt;br /&gt;
Установка базовой системы Ubuntu Server 24.0x на компьютер &#039;&#039;&#039;MCM-SNIFFER&#039;&#039;&#039; производится обычным образом в режиме инсталляции по умолчанию, при этом при выборе параметров установки необходимо включить установку сервера OpenSSH, а также для совместимости следует  указать следующие значения прочих параметров:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Таблица 3 - Параметры настройки узла MCM-SNIFFER&lt;br /&gt;
!Параметр&lt;br /&gt;
!Значение&lt;br /&gt;
|-&lt;br /&gt;
|Имя компьютера&lt;br /&gt;
|MCM-SNIFFER&lt;br /&gt;
|-&lt;br /&gt;
|Имя пользователя c правами root                       &lt;br /&gt;
|entcor&lt;br /&gt;
|-&lt;br /&gt;
|Пароль&lt;br /&gt;
|ng3-dcc20&lt;br /&gt;
|}&lt;br /&gt;
После установки системы необходимо установить обновления:&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt full-upgrade&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
а также проверить доступ к серверу по SSH с компьютера администратора:&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
ssh entcor@192.168.2.15 (текущий адрес сервера MCM-SNIFFER)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&#039;&#039;&#039;Примечание:&#039;&#039;&#039; для удобства работы с файлами настоятельно рекомендуется также первым делом вкатить Midnight Commander:&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt install mc&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Также в дальнейшем целесообразно запускать Midnight Commander через &#039;&#039;&#039;sudo&#039;&#039;&#039;:&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
sudo mc&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Это позволит, во-первых, невозбранно редактировать все необходимые файлы и, во-вторых, при скрытии окон Midnight Commander выполнять из-под него с командной строки команды в режиме root без необходимости париться с sudo для каждой отдельной команды.&lt;br /&gt;
&lt;br /&gt;
==== Настройка сетевых интерфейсов ====&lt;br /&gt;
Для корректной работы сетевых интерфейсов и сохранения их параметров после перезагрузки сервера необходимо в каталоге &#039;&#039;&#039;/etc/netplan&#039;&#039;&#039; создать файл с расширением .yaml (например, &#039;&#039;&#039;01-network.yaml&#039;&#039;&#039;) со следующим содержимым:&amp;lt;syntaxhighlight lang=&amp;quot;yaml&amp;quot;&amp;gt;&lt;br /&gt;
network:&lt;br /&gt;
    version: 2&lt;br /&gt;
    ethernets:&lt;br /&gt;
        enp5s0:&lt;br /&gt;
            dhcp4: false&lt;br /&gt;
            addresses: &lt;br /&gt;
                - 192.168.2.15/24&lt;br /&gt;
            routes:&lt;br /&gt;
              - to: default&lt;br /&gt;
                via: 192.168.2.254&lt;br /&gt;
            nameservers: &lt;br /&gt;
                addresses: [192.168.2.60, 176.114.16.33]&lt;br /&gt;
        enp6s0:&lt;br /&gt;
            dhcp4: false&lt;br /&gt;
        enp7s0:&lt;br /&gt;
            dhcp4: false&lt;br /&gt;
        enp8s0:&lt;br /&gt;
            dhcp4: false&lt;br /&gt;
    bridges:&lt;br /&gt;
        docker0:&lt;br /&gt;
            interfaces: [enp6s0, enp7s0, enp8s0]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&#039;&#039;&#039;Примечания:&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
# Для интерфейса &#039;&#039;&#039;enp5s0&#039;&#039;&#039; вместо 192.168.2.15/24 следует указать нужный статический адрес сервера, также при необходимости следует указать фактически используемые адреса шлюза и DNS (в &#039;&#039;&#039;via&#039;&#039;&#039; и &#039;&#039;&#039;nameservers&#039;&#039;&#039; соответственно).&lt;br /&gt;
# В файле конфигурации заранее определяется мост &#039;&#039;&#039;docker0&#039;&#039;&#039;, который будет использоваться Docker&#039;ом после его установки. Таким образом, интерфейсы &#039;&#039;&#039;enp6s0/enp7s0/enp8s0&#039;&#039;&#039; заранее подключаются к мосту &#039;&#039;&#039;docker0&#039;&#039;&#039;, и, соответственно, в будущем будут доступны из Docker.&lt;br /&gt;
# Для удобства проще скопировать готовый файл &#039;&#039;&#039;01-network.yaml&#039;&#039;&#039; с компьютера администратора и положить его в &#039;&#039;&#039;/etc/netplan.&#039;&#039;&#039; Файлу  следует установить права по маске 0100600.&lt;br /&gt;
# Как показывает практика, существующий в &#039;&#039;&#039;/etc/netplan&#039;&#039;&#039; файл конфигурации по умолчанию &#039;&#039;&#039;50-cloud-init.yaml&#039;&#039;&#039; лучше переименовать во что-то типа &#039;&#039;&#039;50-cloud-init.yaml.bak,&#039;&#039;&#039; иначе у интерфейса &#039;&#039;&#039;enp5s0&#039;&#039;&#039; будет образовываться 2 адреса - статический из настроек в &#039;&#039;&#039;01-network.yaml&#039;&#039;&#039; и динамический, который будет дополнительно прилетать по DHCP и создавать путаницу. Вроде бы, должно лечиться установкой в файле &#039;&#039;&#039;50-cloud-init.yaml&#039;&#039;&#039; для интерфейса &#039;&#039;&#039;enp5s0&#039;&#039;&#039; параметра &#039;&#039;&#039;dchp4: false&#039;&#039;&#039;, но по факту не помогает, поэтому лучше от греха подальше во избежание конфликтов держать в &#039;&#039;&#039;/etc/netplan&#039;&#039;&#039;  только один файл &#039;&#039;&#039;01-network.yaml&#039;&#039;&#039; с настройками интерфейсов.&lt;br /&gt;
# Для применения настроек интерфейсов и сохранения настроек после перезагрузки сервера рекомендуется выполнение &#039;&#039;&#039;netplan generate&#039;&#039;&#039; . Это позволит проверить конфигурацию перед применением и отловить возможные ошибки. Саму конфигурацию лучше применять через &#039;&#039;&#039;netplan try --timeout  30&#039;&#039;&#039; (или другое не сильно большое количество секунд, чтобы она автоотменилась в случае косяков). Также рекомендуется в обязательном порядке выполнить контрольную перезагрузку сервера, чтобы убедиться, что настройки после нее восстанавливаются правильно.&lt;br /&gt;
# Для проверки работоспособности моста &#039;&#039;&#039;docker0&#039;&#039;&#039; перед настройкой интерфейсов следует запустить постоянный пинг (с параметром &#039;&#039;&#039;-t&#039;&#039;&#039;) с &#039;&#039;&#039;MCM-NODE1&#039;&#039;&#039; (10.0.0.1) на &#039;&#039;&#039;MCM-NODE2&#039;&#039;&#039; (10.0.0.2) и наоборот и убедиться в том, что узлы недоступны друг для друга. После настройки конфигурации интерфейсов и выполнения &#039;&#039;&#039;netplan try&#039;&#039;&#039; следует проверить, что пинг с MCM-NODE1 (10.0.0.1) на MCM-NODE2 (10.0.0.2) в обе стороны проходит успешно, т.е. узлы общаются между собой напрямую через мост &#039;&#039;&#039;docker0&#039;&#039;&#039;.&lt;br /&gt;
==== Установка сертификата Entcor ====&lt;br /&gt;
Перед установкой собственно компонентов МКИ с компьютера администратора следует скопировать файл сертификата &#039;&#039;&#039;entcor.crt&#039;&#039;&#039; и разместить его в каталоге /usr/local/share/ca-certificates (удобнее всего это сделать через Shell-link в панели Midnight Commander). Затем сертификат необходимо обновить, после чего выполнить перезагрузку:&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
sudo update-ca-certificates &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&#039;&#039;&#039;Примечание:&#039;&#039;&#039; после обновления сертификатов необходимо выполнить перезагрузку компьютера &#039;&#039;&#039;MCM-SNIFFER&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==== Установка Docker ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
# Add Docker&#039;s official GPG key:&lt;br /&gt;
&lt;br /&gt;
sudo apt-get update&lt;br /&gt;
sudo apt-get install ca-certificates curl&lt;br /&gt;
sudo install -m 0755 -d /etc/apt/keyrings&lt;br /&gt;
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc&lt;br /&gt;
sudo chmod a+r /etc/apt/keyrings/docker.asc&lt;br /&gt;
&lt;br /&gt;
# Add the repository to Apt sources:&lt;br /&gt;
&lt;br /&gt;
echo \&lt;br /&gt;
&amp;quot;deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \&lt;br /&gt;
$(. /etc/os-release &amp;amp;&amp;amp; echo &amp;quot;$VERSION_CODENAME&amp;quot;) stable&amp;quot; | \&lt;br /&gt;
sudo tee /etc/apt/sources.list.d/docker.list &amp;gt; /dev/null&lt;br /&gt;
&lt;br /&gt;
sudo apt-get update&lt;br /&gt;
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Ссылка на руководство: https://docs.docker.com/engine/install/ubuntu/#install-using-the-repository&lt;br /&gt;
&lt;br /&gt;
==== Установка компонентов системы МКИ ====&lt;br /&gt;
Установка компонентов системы МКИ может осуществляться посредством получения последней версии инсталляционного пакета (предпочтительно), либо из репозитория Git (может применяться для целей отладки или быстрого накатывания патчей/фикса ошибок).&lt;br /&gt;
&lt;br /&gt;
==== Вариант 1: Установка с помощью инсталляционного пакета ====&lt;br /&gt;
Получение последней версии инсталляционного пакета производится с FTP-сервера Jenkins. Для этого необходимо подключиться к нему с устройства МКИ по протоколу FTP, используя соответствующую пару логин-пароль, и выкачать оттуда файлы &#039;&#039;&#039;install.sh&#039;&#039;&#039; и &#039;&#039;&#039;latest.tar.gz&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Перед запуском инсталляционного скрипта install.sh необходимо установить для него права на выполнение посредством команды chmod:&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
chmod +x install.sh&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Также для корректной работы стека common необходимо предварительно авторизоваться под нужной учетной записью в docker-репозитории Harbor:&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
docker login registry.entcor&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Далее непосредственное развертывание контейнеров производится запуском на выполнение скрипта &#039;&#039;&#039;install.sh&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
После завершения установки компонентов ПАК «еNODE.МКИ» следует выполнить переход в каталог &#039;&#039;&#039;/opt/e-node/deploy&#039;&#039;&#039;, куда выполнялось развертывание компонентов системы инсталляционным скриптом &#039;&#039;&#039;install.sh&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Далее в том же каталоге следует создать/отредактировать файла &#039;&#039;&#039;.env&#039;&#039;&#039;, в котором следует установить следующие параметры:&lt;br /&gt;
&lt;br /&gt;
* MONITOR_DATA_IF = &amp;lt;имя интерфейса на узле &#039;&#039;&#039;MCM-SNIFFER&#039;&#039;&#039;,  на котором выполняется прослушка, например, enp6s&lt;br /&gt;
* MODE = enode &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Примечание:&#039;&#039;&#039; вообще-то для работы МКИ параметр MODE должен иметь  значение asutp, но работает пока только вот так. &lt;br /&gt;
&lt;br /&gt;
==== Вариант 2: Установка непосредственно из репозитория Git ====&lt;br /&gt;
&lt;br /&gt;
Получение последней версии инсталляционного пакета производится из  Git-репозитория &#039;&#039;&#039;e-deploy&#039;&#039;&#039;, находящегося по адресу  &#039;&#039;&#039;&amp;lt;nowiki&amp;gt;http://192.168.2.61&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;, (нужно будет ввести соответствующие логин-пароль для доступа к репозиторию, а также выполнить переключение на ветку &#039;&#039;&#039;develop&#039;&#039;&#039;): &amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
git clone http://192.168.2.61/e-node/e-deploy.git&lt;br /&gt;
git switch develop&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Далее следует авторизоваться под нужной учетной записью в Docker-репозитории Harbor:&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
docker login registry.entcor&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;после чего нужно перейти в каталог &#039;&#039;&#039;e-deploy&#039;&#039;&#039; (в том каталоге, где выполнялся git clone) и выполнить следующую команду:&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
./enode.sh init&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Далее в том же каталоге следует создать/отредактировать файла &#039;&#039;&#039;.env&#039;&#039;&#039;, в котором следует установить следующие параметры:&lt;br /&gt;
&lt;br /&gt;
MONITOR_DATA_IF = &amp;lt;имя интерфейса на узле &#039;&#039;&#039;MCM-SNIFFER&#039;&#039;&#039;,  на котором выполняется прослушка, например, enp7s0&amp;gt; &lt;br /&gt;
&lt;br /&gt;
MODE = enode &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Примечание:&#039;&#039;&#039; вообще-то для работы МКИ параметр MODE должен иметь  значение asutp, но работает пока только вот так. &lt;br /&gt;
==== Запуск компонентов системы МКИ ====&lt;br /&gt;
После установки компонентов МКИ можно выполнить их запуск следующей командой: &amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
enode &amp;lt;имя стека&amp;gt; start&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&#039;&#039;&#039;Примечание:&#039;&#039;&#039; названия нужных стеков можно посмотреть в каталоге &#039;&#039;&#039;stacks&#039;&#039;&#039;  в &#039;&#039;&#039;e-deploy&#039;&#039;&#039; (имена стеков соответствуют именам подкаталогов). Как минимум должны быть запущены следующие стеки:&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
enode analytic start&lt;br /&gt;
enode common start&lt;br /&gt;
enode asutp start&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&#039;&#039;&#039;Примечание:&#039;&#039;&#039;  стек &#039;&#039;&#039;analytic&#039;&#039;&#039; рекомендуется запускать перед стеком &#039;&#039;&#039;common&#039;&#039;&#039; из-за каких-то особенностей функционирования:&lt;br /&gt;
&lt;br /&gt;
Проверка запуска сервисов производится обычным образом с помощью команды:&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
docker ps&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Проверка информационного обмена по протоколу МЭК-60870-5-104 ===&lt;br /&gt;
Проверка информационного обмена по протоколу МЭК-60870-5-104 производится между узлами стенда &#039;&#039;&#039;MCM-NODE1&#039;&#039;&#039; и &#039;&#039;&#039;MCM-NODE2&#039;&#039;&#039; посредством программного обеспечения  IEC Test, которое эмулирует передачу пакетов протокола МЭК-60870-5-104 поверх соединения Ethernet. &lt;br /&gt;
&lt;br /&gt;
Для проверки работы протокола МЭК-60870-5-104 во внутренней сети обмена на одном из узлов ПО IEC Test запускается в режиме сервера с показанными ниже настройками: &lt;br /&gt;
&lt;br /&gt;
TCP/IP Link Role - Server &lt;br /&gt;
&lt;br /&gt;
IP Address - адрес внутреннего интерфейса для информационного обмена (в данном примере - 10.0.0.2) &lt;br /&gt;
&lt;br /&gt;
Далее устанавливается канал обмена последовательным нажатием кнопок &amp;quot;Build String&amp;quot; и &amp;quot;Open Channel&amp;quot; (индикатор &amp;quot;1 channel&amp;quot; должен стать темно-зеленым). &lt;br /&gt;
[[Файл:IEC Test - 2.png|мини|794x794пкс|Рис. 1 - Настройки программы IEC Test для организации обмена  между узлами стенда MCM-NODE1 и MCM-NODE2 по протоколу МЭК-60870-5-104 (серверная часть)|центр]]Соответственно, на другом узле ПО IEC Test запускается в режиме клиента с показанными ниже настройками:&lt;br /&gt;
&lt;br /&gt;
TCP/IP Link Role - Client &lt;br /&gt;
&lt;br /&gt;
IP Address - адрес сервера, находящегося во внутренней сети для информационного обмена  (в данном примере - 10.0.0.2). &lt;br /&gt;
&lt;br /&gt;
Далее устанавливается канал обмена последовательным нажатием кнопок &amp;quot;Build String&amp;quot; и &amp;quot;Open Channel&amp;quot; (индикатор &amp;quot;1 channel&amp;quot; должен стать темно-зеленым).&lt;br /&gt;
&lt;br /&gt;
Для начала непосредственно информационного взаимодействия следует послать с клиента на сервер специальную команду посредством нажатия кнопки &amp;quot;Start DT&amp;quot; (индикатор &amp;quot;1 channel&amp;quot; должен стать светло-зеленым как показано на рисунке ниже). С этого момента канал обмена установлен и активирован, а между экземплярами ПО IEC Test могут передаваться пакеты протокола МЭК-60870-5-104.&lt;br /&gt;
[[Файл:IEC Test - 3.png|центр|мини|791x791пкс|Рис. 2 - Настройки программы IEC Test для организации обмена  между узлами стенда MCM-NODE1 и MCM-NODE2 по протоколу МЭК-60870-5-104 (клиентская часть)]]Для создания трафика по протоколу МЭК-60870-5-104 между узлами &#039;&#039;&#039;MCM-NODE1&#039;&#039;&#039; и &#039;&#039;&#039;MCM-NODE2&#039;&#039;&#039; следует использовать специальный макрос, имитирующий последовательную передачу данных протокола МЭК-60870-5-104 между узлами. Для этого необходимо на любом из узлов в ПО IEC Test перейти во вкладку &amp;quot;870 Commander&amp;quot;, нажатием кнопки &amp;quot;Загрузить&amp;quot; загрузить макрос &amp;quot;ДУ по циклу 5 сек.rtm&amp;quot; и выполнить его нажатием кнопки &amp;quot;Выполнить&amp;quot;:&lt;br /&gt;
[[Файл:IEC Test - 4.png|альт=Выполнение макроса в ПО IEC Test для создания трафика по протоколу МЭК-60870-5-104|центр|мини|797x797пкс|Рис. 3 - Выполнение макроса в ПО IEC Test для создания трафика по протоколу МЭК-60870-5-104]]В случае правильно настроенных узлов стенда и экземпляров ПО IEC Test на принимающем узле во вкладке &amp;quot;870 Commander&amp;quot; в соответствующем окне можно будет увидеть информацию о принятых сообщениях, отправленных макросом с передающего узла, что свидетельствует о состоявшемся информационном обмене по протоколу МЭК-60870-5-104 между узлами.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Примечание:&#039;&#039;&#039; в случае, если система МКИ выполняет прослушивание на одном из интерфейсов, входящих во внутреннюю сеть информационного обмена, а также при правильном конфигурировании компонента Grafana, при подключении браузером по адресу сервера  &#039;&#039;&#039;MCM-SNIFFER&#039;&#039;&#039; в соответствующих дашбордах должна появиться информация о перехваченных пакетах протокола МЭК-60870-5-104, создающих описанный выше трафик.&lt;br /&gt;
&lt;br /&gt;
=== Проверка информационного обмена по протоколу MODBUS ===&lt;br /&gt;
&lt;br /&gt;
Работа стенда по протоколу MODBUS осуществляется посредством ПО &#039;&#039;&#039;Modbus Poll&#039;&#039;&#039;, запущенного на узле &#039;&#039;&#039;MDM-NODE2&#039;&#039;&#039; (см. схему). Modbus Poll подключается по протоколу MODBUS-TCP к железке-конвертору ZLAN (см. схему) и через него опрашивает устройства (температурные датчики), подключенные к RS-485-портам №1, №2 и №3 конвертора ZLAN. Также на датчиках изменены их базовые адреса следующим образом: ID = 5 – на 1 порту RS-485, ID = 6 – на 2 порту RS-485, ID = 7 – на 3 порту RS-485.&lt;br /&gt;
&lt;br /&gt;
Для доступа к датчикам на конверторе ZLAN установлены адреса IP-портов с помощью прилагающейся к нему софтины &#039;&#039;&#039;ZLVirCom&#039;&#039;&#039;, которую можно запустить с рабочего стола на узле &#039;&#039;&#039;MCM-NODE2&#039;&#039;&#039; (&#039;&#039;&#039;Примечание:&#039;&#039;&#039; &#039;&#039;&#039;в текущей конфигурации стенда вся работа с MODBUS производится с этого узла&#039;&#039;&#039;). ZLVirCom сам опрашивает локальную сеть и находит там конвертор, после чего подключается к нему, и его можно конфигурировать:&lt;br /&gt;
[[Файл:Modbus1.png|центр|Рис. 4 - Главное окно ZLVirCom|обрамить]]&lt;br /&gt;
&lt;br /&gt;
При нажатии на кнопку &#039;&#039;&#039;Device&#039;&#039;&#039; в верхнем меню открывается список портов, в котором можно провалиться в конкретный порт и выполнить его настройки:&lt;br /&gt;
[[Файл:Modbus2.png|центр|мини|848x848пкс|Рис. 5 - Окно со списком портов RS-485 на устройстве ZLAN5843]]&lt;br /&gt;
&lt;br /&gt;
Настройки портов, к которым подключены датчики, должны выглядеть следующим образом:&lt;br /&gt;
[[Файл:Modbus3.png|центр|обрамить|Рис. 6 - Окно настройки параметров выбранного порта RS-485 на устройстве ZLAN]]&lt;br /&gt;
&lt;br /&gt;
Если все настроено корректно, то Modbus Poll сможет подключится к соответствующим RS-485-портам конвертора по указанному для них IP Address и Port (см. рис. 6).&lt;br /&gt;
&lt;br /&gt;
Непосредственно для выполнения опроса датчиков нужно запустить &#039;&#039;&#039;Modbus Poll&#039;&#039;&#039; с рабочего стола на узле &#039;&#039;&#039;MCM-NODE2&#039;&#039;&#039;:&lt;br /&gt;
[[Файл:Modbus4.png|центр|мини|852x852пкс|Рис. 7 - Главное окно Modbus Poll]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Далее в меню Connection следует выбрать Connect (или нажать F3), откроется окно настроек подключения, где нужно указать следующие параметры:&lt;br /&gt;
[[Файл:Modbus5.png|центр|мини|424x424пкс|Рис. 8 - Параметры подключения к порту RS-485 на устройстве ZLAN]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В поле IP Address or Node Name нужно указать адрес порта, который будем опрашивать (соответственно, &#039;&#039;&#039;10.0.0.241, .242, .243 для портов 1, 2, 3 конвертора&#039;&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
Далее будет выполнено подключение к железке ZLAN и при попытке опроса вылезет ошибка “Timeout error”, так как не сконфигурированы параметры опроса.&lt;br /&gt;
[[Файл:Modbus6.png|центр|мини|878x878пкс|Рис. 9 - Окно программы Modbus Poll при несконфигурированных параметрах опроса]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Для их настройки следует зайти в меню &#039;&#039;&#039;Setup -&amp;gt; Read/Write Definition&#039;&#039;&#039; (или нажать F8) и указать следующие параметры:&lt;br /&gt;
[[Файл:Modbus7.png|центр|мини|Рис. 10 - Настройка параметров опроса порта]]&lt;br /&gt;
&lt;br /&gt;
В поле &#039;&#039;&#039;Slave ID&#039;&#039;&#039; нужно указать адрес датчика (&#039;&#039;&#039;5, 6 или 7&#039;&#039;&#039;), в поле &#039;&#039;&#039;Function&#039;&#039;&#039; выбрать &#039;&#039;&#039;«04 Read Input Registers (3х)»&#039;&#039;&#039;, в полях &#039;&#039;&#039;Address&#039;&#039;&#039; и &#039;&#039;&#039;Quantity&#039;&#039;&#039; указать значение 1. Если номер датчика соответствует выбранному при подключении порту, то опрос пойдет корректно (&#039;&#039;&#039;Tx увеличивается, Err = 0)&#039;&#039;&#039;:&lt;br /&gt;
[[Файл:Modbus8.png|центр|мини|893x893пкс|Рис. 11 - Выполнение опроса порта в установленном режиме]]&lt;br /&gt;
&lt;br /&gt;
Результат опроса можно увидеть, нажав кнопку &#039;&#039;&#039;Display communication traffic&#039;&#039;&#039; в панели инструментов (&#039;&#039;&#039;Tx – байты с запросом, Rx – байты ответа от датчика&#039;&#039;&#039;). В случае ошибки опроса или недоступности устройства Rx в трафике не будет, а будут только строки с отправкой (Tx).&lt;br /&gt;
[[Файл:Modbus9.png|центр|Рис. 12 - Просмотр трафика при опросе порта|обрамить]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Примечание:&#039;&#039;&#039; Весь трафик между &#039;&#039;&#039;Modbus Poll&#039;&#039;&#039; на узле &#039;&#039;&#039;MCM-NODE2&#039;&#039;&#039; и каким-либо из датчиков пролетает через сервер &#039;&#039;&#039;MCM-SNIFFER&#039;&#039;&#039; (см. схему). Соответственно, если в настройках перехвата указать порт на сервере &#039;&#039;&#039;MCM-SNIFFER&#039;&#039;&#039;,  к которому подключен &#039;&#039;&#039;MCM-NODE2&#039;&#039;&#039; (например, &#039;&#039;&#039;enp7s0&#039;&#039;&#039;), то МКИ на сервере &#039;&#039;&#039;MCM-SNIFFER&#039;&#039;&#039; сможет перехватывать трафик MODBUS и, соответственно, его анализировать.&lt;/div&gt;</summary>
		<author><name>Dima</name></author>
	</entry>
	<entry>
		<id>https://wiki.entcor.ru/index.php?title=%D0%9C%D0%9A%D0%98&amp;diff=447</id>
		<title>МКИ</title>
		<link rel="alternate" type="text/html" href="https://wiki.entcor.ru/index.php?title=%D0%9C%D0%9A%D0%98&amp;diff=447"/>
		<updated>2025-03-28T10:36:42Z</updated>

		<summary type="html">&lt;p&gt;Dima: /* Установка сертификата Entcor */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= &#039;&#039;&#039;Система мониторинга качества измерений (МКИ)&#039;&#039;&#039; =&lt;br /&gt;
&lt;br /&gt;
=== Схема тестового стенда ===&lt;br /&gt;
[[Файл:Стенд для МКИ (декабрь 2024).drawio.png|альт=Стенд для МКИ (декабрь 2024)|мини|978x978пкс|Стенд для МКИ (декабрь 2024)]]&lt;br /&gt;
&lt;br /&gt;
=== Подключение и настойка оборудования ===&lt;br /&gt;
Подключение компонентов стенда производится в соответствии со схемой подключения. При этом для корректного выполнения дальнейших инструкций подключение устройств к физическим портам и сетевые настройки интерфейсов должны быть выполнены  согласно табл. 1:&lt;br /&gt;
&lt;br /&gt;
==== Таблица 1 - Параметры сетевых настроек устройств стенда ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Хост&lt;br /&gt;
!Порт&lt;br /&gt;
!Интерфейс&lt;br /&gt;
!IP&lt;br /&gt;
!Подключен к &lt;br /&gt;
устройство/порт&lt;br /&gt;
!Описание&lt;br /&gt;
|-&lt;br /&gt;
|MCM-SNIFFER&lt;br /&gt;
|Eth1&lt;br /&gt;
|enp5s0&lt;br /&gt;
|192.168.2.15/24&lt;br /&gt;
|L2 Switch&lt;br /&gt;
|Интерфейс управления для Sniffer&lt;br /&gt;
|-&lt;br /&gt;
|MCM-SNIFFER&lt;br /&gt;
|Eth2&lt;br /&gt;
|enp6s0&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;-&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|MCM-NODE1 / Eth2&lt;br /&gt;
|Участвует в L2 Bridge&lt;br /&gt;
|-&lt;br /&gt;
|MCM-SNIFFER&lt;br /&gt;
|Eth3&lt;br /&gt;
|enp7s0&lt;br /&gt;
| -&lt;br /&gt;
|MCM-NODE2 / Eth2&lt;br /&gt;
|Участвует в L2 Bridge&lt;br /&gt;
|-&lt;br /&gt;
|MCM-SNIFFER&lt;br /&gt;
|Eth4&lt;br /&gt;
|enp8s0&lt;br /&gt;
| -&lt;br /&gt;
|ZLAN / Eth&lt;br /&gt;
|Участвует в L2 Bridge&lt;br /&gt;
|-&lt;br /&gt;
|MCM-NODE1&lt;br /&gt;
|Eth1&lt;br /&gt;
|EXTERNAL&lt;br /&gt;
|192.168.2.156/24&lt;br /&gt;
|L2 Switch&lt;br /&gt;
|Интерфейс управления для Node1&lt;br /&gt;
|-&lt;br /&gt;
|MCM-NODE1&lt;br /&gt;
|Eth2&lt;br /&gt;
|INTERNAL&lt;br /&gt;
|10.0.0.1/24&lt;br /&gt;
|MCM-SNIFFER / Eth2&lt;br /&gt;
|Интерфейс обмена данными для Node1&lt;br /&gt;
|-&lt;br /&gt;
|MCM-NODE2&lt;br /&gt;
|Eth1&lt;br /&gt;
|EXTERNAL&lt;br /&gt;
|192.168.2.195/24&lt;br /&gt;
|L2 Switch&lt;br /&gt;
|Интерфейс управления для Node2&lt;br /&gt;
|-&lt;br /&gt;
|MCM-NODE2&lt;br /&gt;
|Eth2&lt;br /&gt;
|INTERNAL&lt;br /&gt;
|10.0.0.2/24&lt;br /&gt;
|MCM-SNIFFER / Eth3&lt;br /&gt;
|Интерфейс обмена данными для Node2&lt;br /&gt;
|-&lt;br /&gt;
|ZLAN&lt;br /&gt;
|Eth&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
|MCM-SNIFFER / Eth4&lt;br /&gt;
|Интерфейс обмена данными для ZLAN&lt;br /&gt;
|-&lt;br /&gt;
|ZLAN&lt;br /&gt;
|RS-485 #1&lt;br /&gt;
|ZLDEV0001&lt;br /&gt;
|10.0.0.241/24&lt;br /&gt;
|&lt;br /&gt;
|Подключение датчика с MODBUS-адресом 5&lt;br /&gt;
|-&lt;br /&gt;
|ZLAN&lt;br /&gt;
|RS-485 #2&lt;br /&gt;
|ZLDEV0002&lt;br /&gt;
|10.0.0.242/24&lt;br /&gt;
|&lt;br /&gt;
|Подключение датчика с MODBUS-адресом 6&lt;br /&gt;
|-&lt;br /&gt;
|ZLAN&lt;br /&gt;
|RS-485 #3&lt;br /&gt;
|ZLDEV0003&lt;br /&gt;
|10.0.0.243/24&lt;br /&gt;
|&lt;br /&gt;
|Подключение датчика с MODBUS-адресом 7&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Развертывание системы ===&lt;br /&gt;
&lt;br /&gt;
==== Установка базовых систем ====&lt;br /&gt;
Установка ОС Windows на компьютерах &#039;&#039;&#039;MCM-NODE1&#039;&#039;&#039; и &#039;&#039;&#039;MCM-NODE2&#039;&#039;&#039; производится обычным образом, при этом  соответствующим сетевым интерфейсам должны быть присвоены адреса согласно данным табл. 1, также для совместимости должны быть указаны следующие параметры настройки системы:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Таблица 2 - Параметры настройки узлов MCM-NODE1 и MCM-NODE2&lt;br /&gt;
!Параметр&lt;br /&gt;
!Значение&lt;br /&gt;
|-&lt;br /&gt;
|Имя компьютера&lt;br /&gt;
|MCM-NODE1/MCM-NODE2&lt;br /&gt;
|-&lt;br /&gt;
|Имя пользователя c правами локального администратора&lt;br /&gt;
|entcor&lt;br /&gt;
|-&lt;br /&gt;
|Пароль&lt;br /&gt;
|1&lt;br /&gt;
|}&lt;br /&gt;
Установка базовой системы Ubuntu Server 24.0x на компьютер &#039;&#039;&#039;MCM-SNIFFER&#039;&#039;&#039; производится обычным образом в режиме инсталляции по умолчанию, при этом при выборе параметров установки необходимо включить установку сервера OpenSSH, а также для совместимости следует  указать следующие значения прочих параметров:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Таблица 3 - Параметры настройки узла MCM-SNIFFER&lt;br /&gt;
!Параметр&lt;br /&gt;
!Значение&lt;br /&gt;
|-&lt;br /&gt;
|Имя компьютера&lt;br /&gt;
|MCM-SNIFFER&lt;br /&gt;
|-&lt;br /&gt;
|Имя пользователя c правами root                       &lt;br /&gt;
|entcor&lt;br /&gt;
|-&lt;br /&gt;
|Пароль&lt;br /&gt;
|ng3-dcc20&lt;br /&gt;
|}&lt;br /&gt;
После установки системы необходимо установить обновления:&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt full-upgrade&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
а также проверить доступ к серверу по SSH с компьютера администратора:&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
ssh entcor@192.168.2.15 (текущий адрес сервера MCM-SNIFFER)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&#039;&#039;&#039;Примечание:&#039;&#039;&#039; для удобства работы с файлами настоятельно рекомендуется также первым делом вкатить Midnight Commander:&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt install mc&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Также в дальнейшем целесообразно запускать Midnight Commander через &#039;&#039;&#039;sudo&#039;&#039;&#039;:&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
sudo mc&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Это позволит, во-первых, невозбранно редактировать все необходимые файлы и, во-вторых, при скрытии окон Midnight Commander выполнять из-под него с командной строки команды в режиме root без необходимости париться с sudo для каждой отдельной команды.&lt;br /&gt;
&lt;br /&gt;
==== Настройка сетевых интерфейсов ====&lt;br /&gt;
Для корректной работы сетевых интерфейсов и сохранения их параметров после перезагрузки сервера необходимо в каталоге &#039;&#039;&#039;/etc/netplan&#039;&#039;&#039; создать файл с расширением .yaml (например, &#039;&#039;&#039;01-network.yaml&#039;&#039;&#039;) со следующим содержимым:&amp;lt;syntaxhighlight lang=&amp;quot;yaml&amp;quot;&amp;gt;&lt;br /&gt;
network:&lt;br /&gt;
    version: 2&lt;br /&gt;
    ethernets:&lt;br /&gt;
        enp5s0:&lt;br /&gt;
            dhcp4: false&lt;br /&gt;
            addresses: &lt;br /&gt;
                - 192.168.2.15/24&lt;br /&gt;
            routes:&lt;br /&gt;
              - to: default&lt;br /&gt;
                via: 192.168.2.254&lt;br /&gt;
            nameservers: &lt;br /&gt;
                addresses: [192.168.2.60, 176.114.16.33]&lt;br /&gt;
        enp6s0:&lt;br /&gt;
            dhcp4: false&lt;br /&gt;
        enp7s0:&lt;br /&gt;
            dhcp4: false&lt;br /&gt;
        enp8s0:&lt;br /&gt;
            dhcp4: false&lt;br /&gt;
    bridges:&lt;br /&gt;
        docker0:&lt;br /&gt;
            interfaces: [enp6s0, enp7s0, enp8s0]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&#039;&#039;&#039;Примечания:&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
# Для интерфейса &#039;&#039;&#039;enp5s0&#039;&#039;&#039; вместо 192.168.2.15/24 следует указать нужный статический адрес сервера, также при необходимости следует указать фактически используемые адреса шлюза и DNS (в &#039;&#039;&#039;via&#039;&#039;&#039; и &#039;&#039;&#039;nameservers&#039;&#039;&#039; соответственно).&lt;br /&gt;
# В файле конфигурации заранее определяется мост &#039;&#039;&#039;docker0&#039;&#039;&#039;, который будет использоваться Docker&#039;ом после его установки. Таким образом, интерфейсы &#039;&#039;&#039;enp6s0/enp7s0/enp8s0&#039;&#039;&#039; заранее подключаются к мосту &#039;&#039;&#039;docker0&#039;&#039;&#039;, и, соответственно, в будущем будут доступны из Docker.&lt;br /&gt;
# Для удобства проще скопировать готовый файл &#039;&#039;&#039;01-network.yaml&#039;&#039;&#039; с компьютера администратора и положить его в &#039;&#039;&#039;/etc/netplan&#039;&#039;&#039; .&lt;br /&gt;
# Как показывает практика, существующий в &#039;&#039;&#039;/etc/netplan&#039;&#039;&#039; файл конфигурации по умолчанию &#039;&#039;&#039;50-cloud-init.yaml&#039;&#039;&#039; лучше переименовать во что-то типа &#039;&#039;&#039;50-cloud-init.yaml.bak,&#039;&#039;&#039; иначе у интерфейса &#039;&#039;&#039;enp5s0&#039;&#039;&#039; будет образовываться 2 адреса - статический из настроек в &#039;&#039;&#039;01-network.yaml&#039;&#039;&#039; и динамический, который будет дополнительно прилетать по DHCP и создавать путаницу. Вроде бы, должно лечиться установкой в файле &#039;&#039;&#039;50-cloud-init.yaml&#039;&#039;&#039; для интерфейса &#039;&#039;&#039;enp5s0&#039;&#039;&#039; параметра &#039;&#039;&#039;dchp4: false&#039;&#039;&#039;, но по факту не помогает, поэтому лучше от греха подальше во избежание конфликтов держать в &#039;&#039;&#039;/etc/netplan&#039;&#039;&#039;  только один файл &#039;&#039;&#039;01-network.yaml&#039;&#039;&#039; с настройками интерфейсов.&lt;br /&gt;
# Для применения настроек интерфейсов и сохранения настроек после перезагрузки сервера рекомендуется выполнение &#039;&#039;&#039;netplan generate&#039;&#039;&#039; . Это позволит проверить конфигурацию перед применением и отловить возможные ошибки. Саму конфигурацию лучше применять через &#039;&#039;&#039;netplan try --timeout  30&#039;&#039;&#039; (или другое не сильно большое количество секунд, чтобы она автоотменилась в случае косяков). Также рекомендуется в обязательном порядке выполнить контрольную перезагрузку сервера, чтобы убедиться, что настройки после нее восстанавливаются правильно.&lt;br /&gt;
# Для проверки работоспособности моста &#039;&#039;&#039;docker0&#039;&#039;&#039; перед настройкой интерфейсов следует запустить постоянный пинг (с параметром &#039;&#039;&#039;-t&#039;&#039;&#039;) с &#039;&#039;&#039;MCM-NODE1&#039;&#039;&#039; (10.0.0.1) на &#039;&#039;&#039;MCM-NODE2&#039;&#039;&#039; (10.0.0.2) и наоборот и убедиться в том, что узлы недоступны друг для друга. После настройки конфигурации интерфейсов и выполнения &#039;&#039;&#039;netplan try&#039;&#039;&#039; следует проверить, что пинг с MCM-NODE1 (10.0.0.1) на MCM-NODE2 (10.0.0.2) в обе стороны проходит успешно, т.е. узлы общаются между собой напрямую через мост &#039;&#039;&#039;docker0&#039;&#039;&#039;.&lt;br /&gt;
==== Установка сертификата Entcor ====&lt;br /&gt;
С компьютера администратора следует скопировать файл сертификата &#039;&#039;&#039;entcor.crt&#039;&#039;&#039; на узел &#039;&#039;&#039;MCM-SNIFFER&#039;&#039;&#039; по следующему пути (необходимо использовать фактический IP-адрес сервера MCM-SNIFFER):&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
scp entcor.crt entcor@192.168.2.23:/home/entcor&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Затем на компьютере &#039;&#039;&#039;MCM-SNIFFER&#039;&#039;&#039; следует перенести сертификат в необходимый каталог и выполнить его обновление:&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
sudo mv entcor.crt /usr/local/share/ca-certificates&lt;br /&gt;
sudo update-ca-certificates &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&#039;&#039;&#039;Примечание:&#039;&#039;&#039; после обновления сертификатов необходимо выполнить перезагрузку компьютера &#039;&#039;&#039;MCM-SNIFFER&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==== Установка Docker ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
# Add Docker&#039;s official GPG key:&lt;br /&gt;
&lt;br /&gt;
sudo apt-get update&lt;br /&gt;
sudo apt-get install ca-certificates curl&lt;br /&gt;
sudo install -m 0755 -d /etc/apt/keyrings&lt;br /&gt;
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc&lt;br /&gt;
sudo chmod a+r /etc/apt/keyrings/docker.asc&lt;br /&gt;
&lt;br /&gt;
# Add the repository to Apt sources:&lt;br /&gt;
&lt;br /&gt;
echo \&lt;br /&gt;
&amp;quot;deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \&lt;br /&gt;
$(. /etc/os-release &amp;amp;&amp;amp; echo &amp;quot;$VERSION_CODENAME&amp;quot;) stable&amp;quot; | \&lt;br /&gt;
sudo tee /etc/apt/sources.list.d/docker.list &amp;gt; /dev/null&lt;br /&gt;
&lt;br /&gt;
sudo apt-get update&lt;br /&gt;
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Ссылка на руководство: https://docs.docker.com/engine/install/ubuntu/#install-using-the-repository&lt;br /&gt;
&lt;br /&gt;
==== Установка компонентов системы МКИ ====&lt;br /&gt;
Установка компонентов системы МКИ может осуществляться посредством получения последней версии инсталляционного пакета (предпочтительно), либо из репозитория Git (может применяться для целей отладки или быстрого накатывания патчей/фикса ошибок).&lt;br /&gt;
&lt;br /&gt;
==== Вариант 1: Установка с помощью инсталляционного пакета ====&lt;br /&gt;
Получение последней версии инсталляционного пакета производится с FTP-сервера Jenkins. Для этого необходимо подключиться к нему с устройства МКИ по протоколу FTP, используя соответствующую пару логин-пароль, и выкачать оттуда файлы &#039;&#039;&#039;install.sh&#039;&#039;&#039; и &#039;&#039;&#039;latest.tar.gz&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Перед запуском инсталляционного скрипта install.sh необходимо установить для него права на выполнение посредством команды chmod:&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
chmod +x install.sh&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Также для корректной работы стека common необходимо предварительно авторизоваться под нужной учетной записью в docker-репозитории Harbor:&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
docker login registry.entcor&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Далее непосредственное развертывание контейнеров производится запуском на выполнение скрипта &#039;&#039;&#039;install.sh&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
После завершения установки компонентов ПАК «еNODE.МКИ» следует выполнить переход в каталог &#039;&#039;&#039;/opt/e-node/deploy&#039;&#039;&#039;, куда выполнялось развертывание компонентов системы инсталляционным скриптом &#039;&#039;&#039;install.sh&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Далее в том же каталоге следует создать/отредактировать файла &#039;&#039;&#039;.env&#039;&#039;&#039;, в котором следует установить следующие параметры:&lt;br /&gt;
&lt;br /&gt;
* MONITOR_DATA_IF = &amp;lt;имя интерфейса на узле &#039;&#039;&#039;MCM-SNIFFER&#039;&#039;&#039;,  на котором выполняется прослушка, например, enp7s&lt;br /&gt;
* MODE = enode &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Примечание:&#039;&#039;&#039; вообще-то для работы МКИ параметр MODE должен иметь  значение asutp, но работает пока только вот так. &lt;br /&gt;
&lt;br /&gt;
==== Вариант 2: Установка непосредственно из репозитория Git ====&lt;br /&gt;
&lt;br /&gt;
Получение последней версии инсталляционного пакета производится из  Git-репозитория &#039;&#039;&#039;e-deploy&#039;&#039;&#039;, находящегося по адресу  &#039;&#039;&#039;&amp;lt;nowiki&amp;gt;http://192.168.2.61&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;, (нужно будет ввести соответствующие логин-пароль для доступа к репозиторию, а также выполнить переключение на ветку &#039;&#039;&#039;develop&#039;&#039;&#039;): &amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
git clone http://192.168.2.61/e-node/e-deploy.git&lt;br /&gt;
git switch develop&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Далее следует авторизоваться под нужной учетной записью в Docker-репозитории Harbor:&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
docker login registry.entcor&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;после чего нужно перейти в каталог &#039;&#039;&#039;e-deploy&#039;&#039;&#039; (в том каталоге, где выполнялся git clone) и выполнить следующую команду:&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
./enode.sh init&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Далее в том же каталоге следует создать/отредактировать файла &#039;&#039;&#039;.env&#039;&#039;&#039;, в котором следует установить следующие параметры:&lt;br /&gt;
&lt;br /&gt;
MONITOR_DATA_IF = &amp;lt;имя интерфейса на узле &#039;&#039;&#039;MCM-SNIFFER&#039;&#039;&#039;,  на котором выполняется прослушка, например, enp7s0&amp;gt; &lt;br /&gt;
&lt;br /&gt;
MODE = enode &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Примечание:&#039;&#039;&#039; вообще-то для работы МКИ параметр MODE должен иметь  значение asutp, но работает пока только вот так. &lt;br /&gt;
==== Запуск компонентов системы МКИ ====&lt;br /&gt;
После установки компонентов МКИ можно выполнить их запуск следующей командой: &amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
enode &amp;lt;имя стека&amp;gt; start&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&#039;&#039;&#039;Примечание:&#039;&#039;&#039; названия нужных стеков можно посмотреть в каталоге &#039;&#039;&#039;stacks&#039;&#039;&#039;  в &#039;&#039;&#039;e-deploy&#039;&#039;&#039; (имена стеков соответствуют именам подкаталогов). Как минимум должны быть запущены следующие стеки:&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
enode analytic start&lt;br /&gt;
enode common start&lt;br /&gt;
enode asutp start&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&#039;&#039;&#039;Примечание:&#039;&#039;&#039;  стек &#039;&#039;&#039;analytic&#039;&#039;&#039; рекомендуется запускать перед стеком &#039;&#039;&#039;common&#039;&#039;&#039; из-за каких-то особенностей функционирования:&lt;br /&gt;
&lt;br /&gt;
Проверка запуска сервисов производится обычным образом с помощью команды:&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
docker ps&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Проверка информационного обмена по протоколу МЭК-60870-5-104 ===&lt;br /&gt;
Проверка информационного обмена по протоколу МЭК-60870-5-104 производится между узлами стенда &#039;&#039;&#039;MCM-NODE1&#039;&#039;&#039; и &#039;&#039;&#039;MCM-NODE2&#039;&#039;&#039; посредством программного обеспечения  IEC Test, которое эмулирует передачу пакетов протокола МЭК-60870-5-104 поверх соединения Ethernet. &lt;br /&gt;
&lt;br /&gt;
Для проверки работы протокола МЭК-60870-5-104 во внутренней сети обмена на одном из узлов ПО IEC Test запускается в режиме сервера с показанными ниже настройками: &lt;br /&gt;
&lt;br /&gt;
TCP/IP Link Role - Server &lt;br /&gt;
&lt;br /&gt;
IP Address - адрес внутреннего интерфейса для информационного обмена (в данном примере - 10.0.0.2) &lt;br /&gt;
&lt;br /&gt;
Далее устанавливается канал обмена последовательным нажатием кнопок &amp;quot;Build String&amp;quot; и &amp;quot;Open Channel&amp;quot; (индикатор &amp;quot;1 channel&amp;quot; должен стать темно-зеленым). &lt;br /&gt;
[[Файл:IEC Test - 2.png|мини|794x794пкс|Рис. 1 - Настройки программы IEC Test для организации обмена  между узлами стенда MCM-NODE1 и MCM-NODE2 по протоколу МЭК-60870-5-104 (серверная часть)|центр]]Соответственно, на другом узле ПО IEC Test запускается в режиме клиента с показанными ниже настройками:&lt;br /&gt;
&lt;br /&gt;
TCP/IP Link Role - Client &lt;br /&gt;
&lt;br /&gt;
IP Address - адрес сервера, находящегося во внутренней сети для информационного обмена  (в данном примере - 10.0.0.2). &lt;br /&gt;
&lt;br /&gt;
Далее устанавливается канал обмена последовательным нажатием кнопок &amp;quot;Build String&amp;quot; и &amp;quot;Open Channel&amp;quot; (индикатор &amp;quot;1 channel&amp;quot; должен стать темно-зеленым).&lt;br /&gt;
&lt;br /&gt;
Для начала непосредственно информационного взаимодействия следует послать с клиента на сервер специальную команду посредством нажатия кнопки &amp;quot;Start DT&amp;quot; (индикатор &amp;quot;1 channel&amp;quot; должен стать светло-зеленым как показано на рисунке ниже). С этого момента канал обмена установлен и активирован, а между экземплярами ПО IEC Test могут передаваться пакеты протокола МЭК-60870-5-104.&lt;br /&gt;
[[Файл:IEC Test - 3.png|центр|мини|791x791пкс|Рис. 2 - Настройки программы IEC Test для организации обмена  между узлами стенда MCM-NODE1 и MCM-NODE2 по протоколу МЭК-60870-5-104 (клиентская часть)]]Для создания трафика по протоколу МЭК-60870-5-104 между узлами &#039;&#039;&#039;MCM-NODE1&#039;&#039;&#039; и &#039;&#039;&#039;MCM-NODE2&#039;&#039;&#039; следует использовать специальный макрос, имитирующий последовательную передачу данных протокола МЭК-60870-5-104 между узлами. Для этого необходимо на любом из узлов в ПО IEC Test перейти во вкладку &amp;quot;870 Commander&amp;quot;, нажатием кнопки &amp;quot;Загрузить&amp;quot; загрузить макрос &amp;quot;ДУ по циклу 5 сек.rtm&amp;quot; и выполнить его нажатием кнопки &amp;quot;Выполнить&amp;quot;:&lt;br /&gt;
[[Файл:IEC Test - 4.png|альт=Выполнение макроса в ПО IEC Test для создания трафика по протоколу МЭК-60870-5-104|центр|мини|797x797пкс|Рис. 3 - Выполнение макроса в ПО IEC Test для создания трафика по протоколу МЭК-60870-5-104]]В случае правильно настроенных узлов стенда и экземпляров ПО IEC Test на принимающем узле во вкладке &amp;quot;870 Commander&amp;quot; в соответствующем окне можно будет увидеть информацию о принятых сообщениях, отправленных макросом с передающего узла, что свидетельствует о состоявшемся информационном обмене по протоколу МЭК-60870-5-104 между узлами.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Примечание:&#039;&#039;&#039; в случае, если система МКИ выполняет прослушивание на одном из интерфейсов, входящих во внутреннюю сеть информационного обмена, а также при правильном конфигурировании компонента Grafana, при подключении браузером по адресу сервера  &#039;&#039;&#039;MCM-SNIFFER&#039;&#039;&#039; в соответствующих дашбордах должна появиться информация о перехваченных пакетах протокола МЭК-60870-5-104, создающих описанный выше трафик.&lt;br /&gt;
&lt;br /&gt;
=== Проверка информационного обмена по протоколу MODBUS ===&lt;br /&gt;
&lt;br /&gt;
Работа стенда по протоколу MODBUS осуществляется посредством ПО &#039;&#039;&#039;Modbus Poll&#039;&#039;&#039;, запущенного на узле &#039;&#039;&#039;MDM-NODE2&#039;&#039;&#039; (см. схему). Modbus Poll подключается по протоколу MODBUS-TCP к железке-конвертору ZLAN (см. схему) и через него опрашивает устройства (температурные датчики), подключенные к RS-485-портам №1, №2 и №3 конвертора ZLAN. Также на датчиках изменены их базовые адреса следующим образом: ID = 5 – на 1 порту RS-485, ID = 6 – на 2 порту RS-485, ID = 7 – на 3 порту RS-485.&lt;br /&gt;
&lt;br /&gt;
Для доступа к датчикам на конверторе ZLAN установлены адреса IP-портов с помощью прилагающейся к нему софтины &#039;&#039;&#039;ZLVirCom&#039;&#039;&#039;, которую можно запустить с рабочего стола на узле &#039;&#039;&#039;MCM-NODE2&#039;&#039;&#039; (&#039;&#039;&#039;Примечание:&#039;&#039;&#039; &#039;&#039;&#039;в текущей конфигурации стенда вся работа с MODBUS производится с этого узла&#039;&#039;&#039;). ZLVirCom сам опрашивает локальную сеть и находит там конвертор, после чего подключается к нему, и его можно конфигурировать:&lt;br /&gt;
[[Файл:Modbus1.png|центр|Рис. 4 - Главное окно ZLVirCom|обрамить]]&lt;br /&gt;
&lt;br /&gt;
При нажатии на кнопку &#039;&#039;&#039;Device&#039;&#039;&#039; в верхнем меню открывается список портов, в котором можно провалиться в конкретный порт и выполнить его настройки:&lt;br /&gt;
[[Файл:Modbus2.png|центр|мини|848x848пкс|Рис. 5 - Окно со списком портов RS-485 на устройстве ZLAN5843]]&lt;br /&gt;
&lt;br /&gt;
Настройки портов, к которым подключены датчики, должны выглядеть следующим образом:&lt;br /&gt;
[[Файл:Modbus3.png|центр|обрамить|Рис. 6 - Окно настройки параметров выбранного порта RS-485 на устройстве ZLAN]]&lt;br /&gt;
&lt;br /&gt;
Если все настроено корректно, то Modbus Poll сможет подключится к соответствующим RS-485-портам конвертора по указанному для них IP Address и Port (см. рис. 6).&lt;br /&gt;
&lt;br /&gt;
Непосредственно для выполнения опроса датчиков нужно запустить &#039;&#039;&#039;Modbus Poll&#039;&#039;&#039; с рабочего стола на узле &#039;&#039;&#039;MCM-NODE2&#039;&#039;&#039;:&lt;br /&gt;
[[Файл:Modbus4.png|центр|мини|852x852пкс|Рис. 7 - Главное окно Modbus Poll]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Далее в меню Connection следует выбрать Connect (или нажать F3), откроется окно настроек подключения, где нужно указать следующие параметры:&lt;br /&gt;
[[Файл:Modbus5.png|центр|мини|424x424пкс|Рис. 8 - Параметры подключения к порту RS-485 на устройстве ZLAN]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В поле IP Address or Node Name нужно указать адрес порта, который будем опрашивать (соответственно, &#039;&#039;&#039;10.0.0.241, .242, .243 для портов 1, 2, 3 конвертора&#039;&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
Далее будет выполнено подключение к железке ZLAN и при попытке опроса вылезет ошибка “Timeout error”, так как не сконфигурированы параметры опроса.&lt;br /&gt;
[[Файл:Modbus6.png|центр|мини|878x878пкс|Рис. 9 - Окно программы Modbus Poll при несконфигурированных параметрах опроса]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Для их настройки следует зайти в меню &#039;&#039;&#039;Setup -&amp;gt; Read/Write Definition&#039;&#039;&#039; (или нажать F8) и указать следующие параметры:&lt;br /&gt;
[[Файл:Modbus7.png|центр|мини|Рис. 10 - Настройка параметров опроса порта]]&lt;br /&gt;
&lt;br /&gt;
В поле &#039;&#039;&#039;Slave ID&#039;&#039;&#039; нужно указать адрес датчика (&#039;&#039;&#039;5, 6 или 7&#039;&#039;&#039;), в поле &#039;&#039;&#039;Function&#039;&#039;&#039; выбрать &#039;&#039;&#039;«04 Read Input Registers (3х)»&#039;&#039;&#039;, в полях &#039;&#039;&#039;Address&#039;&#039;&#039; и &#039;&#039;&#039;Quantity&#039;&#039;&#039; указать значение 1. Если номер датчика соответствует выбранному при подключении порту, то опрос пойдет корректно (&#039;&#039;&#039;Tx увеличивается, Err = 0)&#039;&#039;&#039;:&lt;br /&gt;
[[Файл:Modbus8.png|центр|мини|893x893пкс|Рис. 11 - Выполнение опроса порта в установленном режиме]]&lt;br /&gt;
&lt;br /&gt;
Результат опроса можно увидеть, нажав кнопку &#039;&#039;&#039;Display communication traffic&#039;&#039;&#039; в панели инструментов (&#039;&#039;&#039;Tx – байты с запросом, Rx – байты ответа от датчика&#039;&#039;&#039;). В случае ошибки опроса или недоступности устройства Rx в трафике не будет, а будут только строки с отправкой (Tx).&lt;br /&gt;
[[Файл:Modbus9.png|центр|Рис. 12 - Просмотр трафика при опросе порта|обрамить]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Примечание:&#039;&#039;&#039; Весь трафик между &#039;&#039;&#039;Modbus Poll&#039;&#039;&#039; на узле &#039;&#039;&#039;MCM-NODE2&#039;&#039;&#039; и каким-либо из датчиков пролетает через сервер &#039;&#039;&#039;MCM-SNIFFER&#039;&#039;&#039; (см. схему). Соответственно, если в настройках перехвата указать порт на сервере &#039;&#039;&#039;MCM-SNIFFER&#039;&#039;&#039;,  к которому подключен &#039;&#039;&#039;MCM-NODE2&#039;&#039;&#039; (например, &#039;&#039;&#039;enp7s0&#039;&#039;&#039;), то МКИ на сервере &#039;&#039;&#039;MCM-SNIFFER&#039;&#039;&#039; сможет перехватывать трафик MODBUS и, соответственно, его анализировать.&lt;/div&gt;</summary>
		<author><name>Dima</name></author>
	</entry>
	<entry>
		<id>https://wiki.entcor.ru/index.php?title=%D0%9C%D0%9A%D0%98&amp;diff=446</id>
		<title>МКИ</title>
		<link rel="alternate" type="text/html" href="https://wiki.entcor.ru/index.php?title=%D0%9C%D0%9A%D0%98&amp;diff=446"/>
		<updated>2025-03-28T09:48:59Z</updated>

		<summary type="html">&lt;p&gt;Dima: /* Проверка информационного обмена по протоколу MODBUS */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= &#039;&#039;&#039;Система мониторинга качества измерений (МКИ)&#039;&#039;&#039; =&lt;br /&gt;
&lt;br /&gt;
=== Схема тестового стенда ===&lt;br /&gt;
[[Файл:Стенд для МКИ (декабрь 2024).drawio.png|альт=Стенд для МКИ (декабрь 2024)|мини|978x978пкс|Стенд для МКИ (декабрь 2024)]]&lt;br /&gt;
&lt;br /&gt;
=== Подключение и настойка оборудования ===&lt;br /&gt;
Подключение компонентов стенда производится в соответствии со схемой подключения. При этом для корректного выполнения дальнейших инструкций подключение устройств к физическим портам и сетевые настройки интерфейсов должны быть выполнены  согласно табл. 1:&lt;br /&gt;
&lt;br /&gt;
==== Таблица 1 - Параметры сетевых настроек устройств стенда ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Хост&lt;br /&gt;
!Порт&lt;br /&gt;
!Интерфейс&lt;br /&gt;
!IP&lt;br /&gt;
!Подключен к &lt;br /&gt;
устройство/порт&lt;br /&gt;
!Описание&lt;br /&gt;
|-&lt;br /&gt;
|MCM-SNIFFER&lt;br /&gt;
|Eth1&lt;br /&gt;
|enp5s0&lt;br /&gt;
|192.168.2.15/24&lt;br /&gt;
|L2 Switch&lt;br /&gt;
|Интерфейс управления для Sniffer&lt;br /&gt;
|-&lt;br /&gt;
|MCM-SNIFFER&lt;br /&gt;
|Eth2&lt;br /&gt;
|enp6s0&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;-&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|MCM-NODE1 / Eth2&lt;br /&gt;
|Участвует в L2 Bridge&lt;br /&gt;
|-&lt;br /&gt;
|MCM-SNIFFER&lt;br /&gt;
|Eth3&lt;br /&gt;
|enp7s0&lt;br /&gt;
| -&lt;br /&gt;
|MCM-NODE2 / Eth2&lt;br /&gt;
|Участвует в L2 Bridge&lt;br /&gt;
|-&lt;br /&gt;
|MCM-SNIFFER&lt;br /&gt;
|Eth4&lt;br /&gt;
|enp8s0&lt;br /&gt;
| -&lt;br /&gt;
|ZLAN / Eth&lt;br /&gt;
|Участвует в L2 Bridge&lt;br /&gt;
|-&lt;br /&gt;
|MCM-NODE1&lt;br /&gt;
|Eth1&lt;br /&gt;
|EXTERNAL&lt;br /&gt;
|192.168.2.156/24&lt;br /&gt;
|L2 Switch&lt;br /&gt;
|Интерфейс управления для Node1&lt;br /&gt;
|-&lt;br /&gt;
|MCM-NODE1&lt;br /&gt;
|Eth2&lt;br /&gt;
|INTERNAL&lt;br /&gt;
|10.0.0.1/24&lt;br /&gt;
|MCM-SNIFFER / Eth2&lt;br /&gt;
|Интерфейс обмена данными для Node1&lt;br /&gt;
|-&lt;br /&gt;
|MCM-NODE2&lt;br /&gt;
|Eth1&lt;br /&gt;
|EXTERNAL&lt;br /&gt;
|192.168.2.195/24&lt;br /&gt;
|L2 Switch&lt;br /&gt;
|Интерфейс управления для Node2&lt;br /&gt;
|-&lt;br /&gt;
|MCM-NODE2&lt;br /&gt;
|Eth2&lt;br /&gt;
|INTERNAL&lt;br /&gt;
|10.0.0.2/24&lt;br /&gt;
|MCM-SNIFFER / Eth3&lt;br /&gt;
|Интерфейс обмена данными для Node2&lt;br /&gt;
|-&lt;br /&gt;
|ZLAN&lt;br /&gt;
|Eth&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
|MCM-SNIFFER / Eth4&lt;br /&gt;
|Интерфейс обмена данными для ZLAN&lt;br /&gt;
|-&lt;br /&gt;
|ZLAN&lt;br /&gt;
|RS-485 #1&lt;br /&gt;
|ZLDEV0001&lt;br /&gt;
|10.0.0.241/24&lt;br /&gt;
|&lt;br /&gt;
|Подключение датчика с MODBUS-адресом 5&lt;br /&gt;
|-&lt;br /&gt;
|ZLAN&lt;br /&gt;
|RS-485 #2&lt;br /&gt;
|ZLDEV0002&lt;br /&gt;
|10.0.0.242/24&lt;br /&gt;
|&lt;br /&gt;
|Подключение датчика с MODBUS-адресом 6&lt;br /&gt;
|-&lt;br /&gt;
|ZLAN&lt;br /&gt;
|RS-485 #3&lt;br /&gt;
|ZLDEV0003&lt;br /&gt;
|10.0.0.243/24&lt;br /&gt;
|&lt;br /&gt;
|Подключение датчика с MODBUS-адресом 7&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Развертывание системы ===&lt;br /&gt;
&lt;br /&gt;
==== Установка базовых систем ====&lt;br /&gt;
Установка ОС Windows на компьютерах &#039;&#039;&#039;MCM-NODE1&#039;&#039;&#039; и &#039;&#039;&#039;MCM-NODE2&#039;&#039;&#039; производится обычным образом, при этом  соответствующим сетевым интерфейсам должны быть присвоены адреса согласно данным табл. 1, также для совместимости должны быть указаны следующие параметры настройки системы:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Таблица 2 - Параметры настройки узлов MCM-NODE1 и MCM-NODE2&lt;br /&gt;
!Параметр&lt;br /&gt;
!Значение&lt;br /&gt;
|-&lt;br /&gt;
|Имя компьютера&lt;br /&gt;
|MCM-NODE1/MCM-NODE2&lt;br /&gt;
|-&lt;br /&gt;
|Имя пользователя c правами локального администратора&lt;br /&gt;
|entcor&lt;br /&gt;
|-&lt;br /&gt;
|Пароль&lt;br /&gt;
|1&lt;br /&gt;
|}&lt;br /&gt;
Установка базовой системы Ubuntu Server 24.0x на компьютер &#039;&#039;&#039;MCM-SNIFFER&#039;&#039;&#039; производится обычным образом в режиме инсталляции по умолчанию, при этом при выборе параметров установки необходимо включить установку сервера OpenSSH, а также для совместимости следует  указать следующие значения прочих параметров:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Таблица 3 - Параметры настройки узла MCM-SNIFFER&lt;br /&gt;
!Параметр&lt;br /&gt;
!Значение&lt;br /&gt;
|-&lt;br /&gt;
|Имя компьютера&lt;br /&gt;
|MCM-SNIFFER&lt;br /&gt;
|-&lt;br /&gt;
|Имя пользователя c правами root                       &lt;br /&gt;
|entcor&lt;br /&gt;
|-&lt;br /&gt;
|Пароль&lt;br /&gt;
|ng3-dcc20&lt;br /&gt;
|}&lt;br /&gt;
После установки системы необходимо установить обновления:&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt full-upgrade&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
а также проверить доступ к серверу по SSH с компьютера администратора:&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
ssh entcor@192.168.2.15 (текущий адрес сервера MCM-SNIFFER)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&#039;&#039;&#039;Примечание:&#039;&#039;&#039; для удобства работы с файлами настоятельно рекомендуется также первым делом вкатить Midnight Commander:&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt install mc&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Также в дальнейшем целесообразно запускать Midnight Commander через &#039;&#039;&#039;sudo&#039;&#039;&#039;:&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
sudo mc&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Это позволит, во-первых, невозбранно редактировать все необходимые файлы и, во-вторых, при скрытии окон Midnight Commander выполнять из-под него с командной строки команды в режиме root без необходимости париться с sudo для каждой отдельной команды.&lt;br /&gt;
&lt;br /&gt;
==== Настройка сетевых интерфейсов ====&lt;br /&gt;
Для корректной работы сетевых интерфейсов и сохранения их параметров после перезагрузки сервера необходимо в каталоге &#039;&#039;&#039;/etc/netplan&#039;&#039;&#039; создать файл с расширением .yaml (например, &#039;&#039;&#039;01-network.yaml&#039;&#039;&#039;) со следующим содержимым:&amp;lt;syntaxhighlight lang=&amp;quot;yaml&amp;quot;&amp;gt;&lt;br /&gt;
network:&lt;br /&gt;
    version: 2&lt;br /&gt;
    ethernets:&lt;br /&gt;
        enp5s0:&lt;br /&gt;
            dhcp4: false&lt;br /&gt;
            addresses: &lt;br /&gt;
                - 192.168.2.15/24&lt;br /&gt;
            routes:&lt;br /&gt;
              - to: default&lt;br /&gt;
                via: 192.168.2.254&lt;br /&gt;
            nameservers: &lt;br /&gt;
                addresses: [192.168.2.60, 176.114.16.33]&lt;br /&gt;
        enp6s0:&lt;br /&gt;
            dhcp4: false&lt;br /&gt;
        enp7s0:&lt;br /&gt;
            dhcp4: false&lt;br /&gt;
        enp8s0:&lt;br /&gt;
            dhcp4: false&lt;br /&gt;
    bridges:&lt;br /&gt;
        docker0:&lt;br /&gt;
            interfaces: [enp6s0, enp7s0, enp8s0]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&#039;&#039;&#039;Примечания:&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
# Для интерфейса &#039;&#039;&#039;enp5s0&#039;&#039;&#039; вместо 192.168.2.15/24 следует указать нужный статический адрес сервера, также при необходимости следует указать фактически используемые адреса шлюза и DNS (в &#039;&#039;&#039;via&#039;&#039;&#039; и &#039;&#039;&#039;nameservers&#039;&#039;&#039; соответственно).&lt;br /&gt;
# В файле конфигурации заранее определяется мост &#039;&#039;&#039;docker0&#039;&#039;&#039;, который будет использоваться Docker&#039;ом после его установки. Таким образом, интерфейсы &#039;&#039;&#039;enp6s0/enp7s0/enp8s0&#039;&#039;&#039; заранее подключаются к мосту &#039;&#039;&#039;docker0&#039;&#039;&#039;, и, соответственно, в будущем будут доступны из Docker.&lt;br /&gt;
# Для удобства проще скопировать готовый файл &#039;&#039;&#039;01-network.yaml&#039;&#039;&#039; с компьютера администратора и положить его в &#039;&#039;&#039;/etc/netplan&#039;&#039;&#039; .&lt;br /&gt;
# Как показывает практика, существующий в &#039;&#039;&#039;/etc/netplan&#039;&#039;&#039; файл конфигурации по умолчанию &#039;&#039;&#039;50-cloud-init.yaml&#039;&#039;&#039; лучше переименовать во что-то типа &#039;&#039;&#039;50-cloud-init.yaml.bak,&#039;&#039;&#039; иначе у интерфейса &#039;&#039;&#039;enp5s0&#039;&#039;&#039; будет образовываться 2 адреса - статический из настроек в &#039;&#039;&#039;01-network.yaml&#039;&#039;&#039; и динамический, который будет дополнительно прилетать по DHCP и создавать путаницу. Вроде бы, должно лечиться установкой в файле &#039;&#039;&#039;50-cloud-init.yaml&#039;&#039;&#039; для интерфейса &#039;&#039;&#039;enp5s0&#039;&#039;&#039; параметра &#039;&#039;&#039;dchp4: false&#039;&#039;&#039;, но по факту не помогает, поэтому лучше от греха подальше во избежание конфликтов держать в &#039;&#039;&#039;/etc/netplan&#039;&#039;&#039;  только один файл &#039;&#039;&#039;01-network.yaml&#039;&#039;&#039; с настройками интерфейсов.&lt;br /&gt;
# Для применения настроек интерфейсов и сохранения настроек после перезагрузки сервера рекомендуется выполнение &#039;&#039;&#039;netplan try&#039;&#039;&#039; . Это позволит проверить конфигурацию перед применением и отловить возможные ошибки. Также рекомендуется в обязательном порядке выполнить контрольную перезагрузку сервера, чтобы убедиться, что настройки после нее восстанавливаются правильно.&lt;br /&gt;
# Для проверки работоспособности моста &#039;&#039;&#039;docker0&#039;&#039;&#039; перед настройкой интерфейсов следует запустить постоянный пинг (с параметром &#039;&#039;&#039;-t&#039;&#039;&#039;) с &#039;&#039;&#039;MCM-NODE1&#039;&#039;&#039; (10.0.0.1) на &#039;&#039;&#039;MCM-NODE2&#039;&#039;&#039; (10.0.0.2) и наоборот и убедиться в том, что узлы недоступны друг для друга. После настройки конфигурации интерфейсов и выполнения &#039;&#039;&#039;netplan try&#039;&#039;&#039; следует проверить, что пинг с MCM-NODE1 (10.0.0.1) на MCM-NODE2 (10.0.0.2) в обе стороны проходит успешно, т.е. узлы общаются между собой напрямую через мост &#039;&#039;&#039;docker0&#039;&#039;&#039;.&lt;br /&gt;
==== Установка сертификата Entcor ====&lt;br /&gt;
С компьютера администратора следует скопировать файл сертификата &#039;&#039;&#039;entcor.crt&#039;&#039;&#039; на узел &#039;&#039;&#039;MCM-SNIFFER&#039;&#039;&#039; по следующему пути (необходимо использовать фактический IP-адрес сервера MCM-SNIFFER):&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
scp entcor.crt entcor@192.168.2.23:/home/entcor&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Затем на компьютере &#039;&#039;&#039;MCM-SNIFFER&#039;&#039;&#039; следует перенести сертификат в необходимый каталог и выполнить его обновление:&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
sudo mv entcor.crt /usr/local/share/ca-certificates&lt;br /&gt;
sudo update-ca-certificates &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&#039;&#039;&#039;Примечание:&#039;&#039;&#039; после обновления сертификатов необходимо выполнить перезагрузку компьютера &#039;&#039;&#039;MCM-SNIFFER&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==== Установка Docker ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
# Add Docker&#039;s official GPG key:&lt;br /&gt;
&lt;br /&gt;
sudo apt-get update&lt;br /&gt;
sudo apt-get install ca-certificates curl&lt;br /&gt;
sudo install -m 0755 -d /etc/apt/keyrings&lt;br /&gt;
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc&lt;br /&gt;
sudo chmod a+r /etc/apt/keyrings/docker.asc&lt;br /&gt;
&lt;br /&gt;
# Add the repository to Apt sources:&lt;br /&gt;
&lt;br /&gt;
echo \&lt;br /&gt;
&amp;quot;deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \&lt;br /&gt;
$(. /etc/os-release &amp;amp;&amp;amp; echo &amp;quot;$VERSION_CODENAME&amp;quot;) stable&amp;quot; | \&lt;br /&gt;
sudo tee /etc/apt/sources.list.d/docker.list &amp;gt; /dev/null&lt;br /&gt;
&lt;br /&gt;
sudo apt-get update&lt;br /&gt;
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Ссылка на руководство: https://docs.docker.com/engine/install/ubuntu/#install-using-the-repository&lt;br /&gt;
&lt;br /&gt;
==== Установка компонентов системы МКИ ====&lt;br /&gt;
Установка компонентов системы МКИ может осуществляться посредством получения последней версии инсталляционного пакета (предпочтительно), либо из репозитория Git (может применяться для целей отладки или быстрого накатывания патчей/фикса ошибок).&lt;br /&gt;
&lt;br /&gt;
==== Вариант 1: Установка с помощью инсталляционного пакета ====&lt;br /&gt;
Получение последней версии инсталляционного пакета производится с FTP-сервера Jenkins. Для этого необходимо подключиться к нему с устройства МКИ по протоколу FTP, используя соответствующую пару логин-пароль, и выкачать оттуда файлы &#039;&#039;&#039;install.sh&#039;&#039;&#039; и &#039;&#039;&#039;latest.tar.gz&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Перед запуском инсталляционного скрипта install.sh необходимо установить для него права на выполнение посредством команды chmod:&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
chmod +x install.sh&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Также для корректной работы стека common необходимо предварительно авторизоваться под нужной учетной записью в docker-репозитории Harbor:&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
docker login registry.entcor&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Далее непосредственное развертывание контейнеров производится запуском на выполнение скрипта &#039;&#039;&#039;install.sh&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
После завершения установки компонентов ПАК «еNODE.МКИ» следует выполнить переход в каталог &#039;&#039;&#039;/opt/e-node/deploy&#039;&#039;&#039;, куда выполнялось развертывание компонентов системы инсталляционным скриптом &#039;&#039;&#039;install.sh&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Далее в том же каталоге следует создать/отредактировать файла &#039;&#039;&#039;.env&#039;&#039;&#039;, в котором следует установить следующие параметры:&lt;br /&gt;
&lt;br /&gt;
* MONITOR_DATA_IF = &amp;lt;имя интерфейса на узле &#039;&#039;&#039;MCM-SNIFFER&#039;&#039;&#039;,  на котором выполняется прослушка, например, enp7s&lt;br /&gt;
* MODE = enode &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Примечание:&#039;&#039;&#039; вообще-то для работы МКИ параметр MODE должен иметь  значение asutp, но работает пока только вот так. &lt;br /&gt;
&lt;br /&gt;
==== Вариант 2: Установка непосредственно из репозитория Git ====&lt;br /&gt;
&lt;br /&gt;
Получение последней версии инсталляционного пакета производится из  Git-репозитория &#039;&#039;&#039;e-deploy&#039;&#039;&#039;, находящегося по адресу  &#039;&#039;&#039;&amp;lt;nowiki&amp;gt;http://192.168.2.61&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;, (нужно будет ввести соответствующие логин-пароль для доступа к репозиторию, а также выполнить переключение на ветку &#039;&#039;&#039;develop&#039;&#039;&#039;): &amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
git clone http://192.168.2.61/e-node/e-deploy.git&lt;br /&gt;
git switch develop&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Далее следует авторизоваться под нужной учетной записью в Docker-репозитории Harbor:&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
docker login registry.entcor&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;после чего нужно перейти в каталог &#039;&#039;&#039;e-deploy&#039;&#039;&#039; (в том каталоге, где выполнялся git clone) и выполнить следующую команду:&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
./enode.sh init&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Далее в том же каталоге следует создать/отредактировать файла &#039;&#039;&#039;.env&#039;&#039;&#039;, в котором следует установить следующие параметры:&lt;br /&gt;
&lt;br /&gt;
MONITOR_DATA_IF = &amp;lt;имя интерфейса на узле &#039;&#039;&#039;MCM-SNIFFER&#039;&#039;&#039;,  на котором выполняется прослушка, например, enp7s0&amp;gt; &lt;br /&gt;
&lt;br /&gt;
MODE = enode &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Примечание:&#039;&#039;&#039; вообще-то для работы МКИ параметр MODE должен иметь  значение asutp, но работает пока только вот так. &lt;br /&gt;
==== Запуск компонентов системы МКИ ====&lt;br /&gt;
После установки компонентов МКИ можно выполнить их запуск следующей командой: &amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
enode &amp;lt;имя стека&amp;gt; start&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&#039;&#039;&#039;Примечание:&#039;&#039;&#039; названия нужных стеков можно посмотреть в каталоге &#039;&#039;&#039;stacks&#039;&#039;&#039;  в &#039;&#039;&#039;e-deploy&#039;&#039;&#039; (имена стеков соответствуют именам подкаталогов). Как минимум должны быть запущены следующие стеки:&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
enode analytic start&lt;br /&gt;
enode common start&lt;br /&gt;
enode asutp start&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&#039;&#039;&#039;Примечание:&#039;&#039;&#039;  стек &#039;&#039;&#039;analytic&#039;&#039;&#039; рекомендуется запускать перед стеком &#039;&#039;&#039;common&#039;&#039;&#039; из-за каких-то особенностей функционирования:&lt;br /&gt;
&lt;br /&gt;
Проверка запуска сервисов производится обычным образом с помощью команды:&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
docker ps&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Проверка информационного обмена по протоколу МЭК-60870-5-104 ===&lt;br /&gt;
Проверка информационного обмена по протоколу МЭК-60870-5-104 производится между узлами стенда &#039;&#039;&#039;MCM-NODE1&#039;&#039;&#039; и &#039;&#039;&#039;MCM-NODE2&#039;&#039;&#039; посредством программного обеспечения  IEC Test, которое эмулирует передачу пакетов протокола МЭК-60870-5-104 поверх соединения Ethernet. &lt;br /&gt;
&lt;br /&gt;
Для проверки работы протокола МЭК-60870-5-104 во внутренней сети обмена на одном из узлов ПО IEC Test запускается в режиме сервера с показанными ниже настройками: &lt;br /&gt;
&lt;br /&gt;
TCP/IP Link Role - Server &lt;br /&gt;
&lt;br /&gt;
IP Address - адрес внутреннего интерфейса для информационного обмена (в данном примере - 10.0.0.2) &lt;br /&gt;
&lt;br /&gt;
Далее устанавливается канал обмена последовательным нажатием кнопок &amp;quot;Build String&amp;quot; и &amp;quot;Open Channel&amp;quot; (индикатор &amp;quot;1 channel&amp;quot; должен стать темно-зеленым). &lt;br /&gt;
[[Файл:IEC Test - 2.png|мини|794x794пкс|Рис. 1 - Настройки программы IEC Test для организации обмена  между узлами стенда MCM-NODE1 и MCM-NODE2 по протоколу МЭК-60870-5-104 (серверная часть)|центр]]Соответственно, на другом узле ПО IEC Test запускается в режиме клиента с показанными ниже настройками:&lt;br /&gt;
&lt;br /&gt;
TCP/IP Link Role - Client &lt;br /&gt;
&lt;br /&gt;
IP Address - адрес сервера, находящегося во внутренней сети для информационного обмена  (в данном примере - 10.0.0.2). &lt;br /&gt;
&lt;br /&gt;
Далее устанавливается канал обмена последовательным нажатием кнопок &amp;quot;Build String&amp;quot; и &amp;quot;Open Channel&amp;quot; (индикатор &amp;quot;1 channel&amp;quot; должен стать темно-зеленым).&lt;br /&gt;
&lt;br /&gt;
Для начала непосредственно информационного взаимодействия следует послать с клиента на сервер специальную команду посредством нажатия кнопки &amp;quot;Start DT&amp;quot; (индикатор &amp;quot;1 channel&amp;quot; должен стать светло-зеленым как показано на рисунке ниже). С этого момента канал обмена установлен и активирован, а между экземплярами ПО IEC Test могут передаваться пакеты протокола МЭК-60870-5-104.&lt;br /&gt;
[[Файл:IEC Test - 3.png|центр|мини|791x791пкс|Рис. 2 - Настройки программы IEC Test для организации обмена  между узлами стенда MCM-NODE1 и MCM-NODE2 по протоколу МЭК-60870-5-104 (клиентская часть)]]Для создания трафика по протоколу МЭК-60870-5-104 между узлами &#039;&#039;&#039;MCM-NODE1&#039;&#039;&#039; и &#039;&#039;&#039;MCM-NODE2&#039;&#039;&#039; следует использовать специальный макрос, имитирующий последовательную передачу данных протокола МЭК-60870-5-104 между узлами. Для этого необходимо на любом из узлов в ПО IEC Test перейти во вкладку &amp;quot;870 Commander&amp;quot;, нажатием кнопки &amp;quot;Загрузить&amp;quot; загрузить макрос &amp;quot;ДУ по циклу 5 сек.rtm&amp;quot; и выполнить его нажатием кнопки &amp;quot;Выполнить&amp;quot;:&lt;br /&gt;
[[Файл:IEC Test - 4.png|альт=Выполнение макроса в ПО IEC Test для создания трафика по протоколу МЭК-60870-5-104|центр|мини|797x797пкс|Рис. 3 - Выполнение макроса в ПО IEC Test для создания трафика по протоколу МЭК-60870-5-104]]В случае правильно настроенных узлов стенда и экземпляров ПО IEC Test на принимающем узле во вкладке &amp;quot;870 Commander&amp;quot; в соответствующем окне можно будет увидеть информацию о принятых сообщениях, отправленных макросом с передающего узла, что свидетельствует о состоявшемся информационном обмене по протоколу МЭК-60870-5-104 между узлами.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Примечание:&#039;&#039;&#039; в случае, если система МКИ выполняет прослушивание на одном из интерфейсов, входящих во внутреннюю сеть информационного обмена, а также при правильном конфигурировании компонента Grafana, при подключении браузером по адресу сервера  &#039;&#039;&#039;MCM-SNIFFER&#039;&#039;&#039; в соответствующих дашбордах должна появиться информация о перехваченных пакетах протокола МЭК-60870-5-104, создающих описанный выше трафик.&lt;br /&gt;
&lt;br /&gt;
=== Проверка информационного обмена по протоколу MODBUS ===&lt;br /&gt;
&lt;br /&gt;
Работа стенда по протоколу MODBUS осуществляется посредством ПО &#039;&#039;&#039;Modbus Poll&#039;&#039;&#039;, запущенного на узле &#039;&#039;&#039;MDM-NODE2&#039;&#039;&#039; (см. схему). Modbus Poll подключается по протоколу MODBUS-TCP к железке-конвертору ZLAN (см. схему) и через него опрашивает устройства (температурные датчики), подключенные к RS-485-портам №1, №2 и №3 конвертора ZLAN. Также на датчиках изменены их базовые адреса следующим образом: ID = 5 – на 1 порту RS-485, ID = 6 – на 2 порту RS-485, ID = 7 – на 3 порту RS-485.&lt;br /&gt;
&lt;br /&gt;
Для доступа к датчикам на конверторе ZLAN установлены адреса IP-портов с помощью прилагающейся к нему софтины &#039;&#039;&#039;ZLVirCom&#039;&#039;&#039;, которую можно запустить с рабочего стола на узле &#039;&#039;&#039;MCM-NODE2&#039;&#039;&#039; (&#039;&#039;&#039;Примечание:&#039;&#039;&#039; &#039;&#039;&#039;в текущей конфигурации стенда вся работа с MODBUS производится с этого узла&#039;&#039;&#039;). ZLVirCom сам опрашивает локальную сеть и находит там конвертор, после чего подключается к нему, и его можно конфигурировать:&lt;br /&gt;
[[Файл:Modbus1.png|центр|Рис. 4 - Главное окно ZLVirCom|обрамить]]&lt;br /&gt;
&lt;br /&gt;
При нажатии на кнопку &#039;&#039;&#039;Device&#039;&#039;&#039; в верхнем меню открывается список портов, в котором можно провалиться в конкретный порт и выполнить его настройки:&lt;br /&gt;
[[Файл:Modbus2.png|центр|мини|848x848пкс|Рис. 5 - Окно со списком портов RS-485 на устройстве ZLAN5843]]&lt;br /&gt;
&lt;br /&gt;
Настройки портов, к которым подключены датчики, должны выглядеть следующим образом:&lt;br /&gt;
[[Файл:Modbus3.png|центр|обрамить|Рис. 6 - Окно настройки параметров выбранного порта RS-485 на устройстве ZLAN]]&lt;br /&gt;
&lt;br /&gt;
Если все настроено корректно, то Modbus Poll сможет подключится к соответствующим RS-485-портам конвертора по указанному для них IP Address и Port (см. рис. 6).&lt;br /&gt;
&lt;br /&gt;
Непосредственно для выполнения опроса датчиков нужно запустить &#039;&#039;&#039;Modbus Poll&#039;&#039;&#039; с рабочего стола на узле &#039;&#039;&#039;MCM-NODE2&#039;&#039;&#039;:&lt;br /&gt;
[[Файл:Modbus4.png|центр|мини|852x852пкс|Рис. 7 - Главное окно Modbus Poll]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Далее в меню Connection следует выбрать Connect (или нажать F3), откроется окно настроек подключения, где нужно указать следующие параметры:&lt;br /&gt;
[[Файл:Modbus5.png|центр|мини|424x424пкс|Рис. 8 - Параметры подключения к порту RS-485 на устройстве ZLAN]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В поле IP Address or Node Name нужно указать адрес порта, который будем опрашивать (соответственно, &#039;&#039;&#039;10.0.0.241, .242, .243 для портов 1, 2, 3 конвертора&#039;&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
Далее будет выполнено подключение к железке ZLAN и при попытке опроса вылезет ошибка “Timeout error”, так как не сконфигурированы параметры опроса.&lt;br /&gt;
[[Файл:Modbus6.png|центр|мини|878x878пкс|Рис. 9 - Окно программы Modbus Poll при несконфигурированных параметрах опроса]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Для их настройки следует зайти в меню &#039;&#039;&#039;Setup -&amp;gt; Read/Write Definition&#039;&#039;&#039; (или нажать F8) и указать следующие параметры:&lt;br /&gt;
[[Файл:Modbus7.png|центр|мини|Рис. 10 - Настройка параметров опроса порта]]&lt;br /&gt;
&lt;br /&gt;
В поле &#039;&#039;&#039;Slave ID&#039;&#039;&#039; нужно указать адрес датчика (&#039;&#039;&#039;5, 6 или 7&#039;&#039;&#039;), в поле &#039;&#039;&#039;Function&#039;&#039;&#039; выбрать &#039;&#039;&#039;«04 Read Input Registers (3х)»&#039;&#039;&#039;, в полях &#039;&#039;&#039;Address&#039;&#039;&#039; и &#039;&#039;&#039;Quantity&#039;&#039;&#039; указать значение 1. Если номер датчика соответствует выбранному при подключении порту, то опрос пойдет корректно (&#039;&#039;&#039;Tx увеличивается, Err = 0)&#039;&#039;&#039;:&lt;br /&gt;
[[Файл:Modbus8.png|центр|мини|893x893пкс|Рис. 11 - Выполнение опроса порта в установленном режиме]]&lt;br /&gt;
&lt;br /&gt;
Результат опроса можно увидеть, нажав кнопку &#039;&#039;&#039;Display communication traffic&#039;&#039;&#039; в панели инструментов (&#039;&#039;&#039;Tx – байты с запросом, Rx – байты ответа от датчика&#039;&#039;&#039;). В случае ошибки опроса или недоступности устройства Rx в трафике не будет, а будут только строки с отправкой (Tx).&lt;br /&gt;
[[Файл:Modbus9.png|центр|Рис. 12 - Просмотр трафика при опросе порта|обрамить]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Примечание:&#039;&#039;&#039; Весь трафик между &#039;&#039;&#039;Modbus Poll&#039;&#039;&#039; на узле &#039;&#039;&#039;MCM-NODE2&#039;&#039;&#039; и каким-либо из датчиков пролетает через сервер &#039;&#039;&#039;MCM-SNIFFER&#039;&#039;&#039; (см. схему). Соответственно, если в настройках перехвата указать порт на сервере &#039;&#039;&#039;MCM-SNIFFER&#039;&#039;&#039;,  к которому подключен &#039;&#039;&#039;MCM-NODE2&#039;&#039;&#039; (например, &#039;&#039;&#039;enp7s0&#039;&#039;&#039;), то МКИ на сервере &#039;&#039;&#039;MCM-SNIFFER&#039;&#039;&#039; сможет перехватывать трафик MODBUS и, соответственно, его анализировать.&lt;/div&gt;</summary>
		<author><name>Dima</name></author>
	</entry>
	<entry>
		<id>https://wiki.entcor.ru/index.php?title=%D0%9C%D0%9A%D0%98&amp;diff=445</id>
		<title>МКИ</title>
		<link rel="alternate" type="text/html" href="https://wiki.entcor.ru/index.php?title=%D0%9C%D0%9A%D0%98&amp;diff=445"/>
		<updated>2025-03-28T09:45:55Z</updated>

		<summary type="html">&lt;p&gt;Dima: /* Проверка информационного обмена по протоколу MODBUS */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= &#039;&#039;&#039;Система мониторинга качества измерений (МКИ)&#039;&#039;&#039; =&lt;br /&gt;
&lt;br /&gt;
=== Схема тестового стенда ===&lt;br /&gt;
[[Файл:Стенд для МКИ (декабрь 2024).drawio.png|альт=Стенд для МКИ (декабрь 2024)|мини|978x978пкс|Стенд для МКИ (декабрь 2024)]]&lt;br /&gt;
&lt;br /&gt;
=== Подключение и настойка оборудования ===&lt;br /&gt;
Подключение компонентов стенда производится в соответствии со схемой подключения. При этом для корректного выполнения дальнейших инструкций подключение устройств к физическим портам и сетевые настройки интерфейсов должны быть выполнены  согласно табл. 1:&lt;br /&gt;
&lt;br /&gt;
==== Таблица 1 - Параметры сетевых настроек устройств стенда ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Хост&lt;br /&gt;
!Порт&lt;br /&gt;
!Интерфейс&lt;br /&gt;
!IP&lt;br /&gt;
!Подключен к &lt;br /&gt;
устройство/порт&lt;br /&gt;
!Описание&lt;br /&gt;
|-&lt;br /&gt;
|MCM-SNIFFER&lt;br /&gt;
|Eth1&lt;br /&gt;
|enp5s0&lt;br /&gt;
|192.168.2.15/24&lt;br /&gt;
|L2 Switch&lt;br /&gt;
|Интерфейс управления для Sniffer&lt;br /&gt;
|-&lt;br /&gt;
|MCM-SNIFFER&lt;br /&gt;
|Eth2&lt;br /&gt;
|enp6s0&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;-&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|MCM-NODE1 / Eth2&lt;br /&gt;
|Участвует в L2 Bridge&lt;br /&gt;
|-&lt;br /&gt;
|MCM-SNIFFER&lt;br /&gt;
|Eth3&lt;br /&gt;
|enp7s0&lt;br /&gt;
| -&lt;br /&gt;
|MCM-NODE2 / Eth2&lt;br /&gt;
|Участвует в L2 Bridge&lt;br /&gt;
|-&lt;br /&gt;
|MCM-SNIFFER&lt;br /&gt;
|Eth4&lt;br /&gt;
|enp8s0&lt;br /&gt;
| -&lt;br /&gt;
|ZLAN / Eth&lt;br /&gt;
|Участвует в L2 Bridge&lt;br /&gt;
|-&lt;br /&gt;
|MCM-NODE1&lt;br /&gt;
|Eth1&lt;br /&gt;
|EXTERNAL&lt;br /&gt;
|192.168.2.156/24&lt;br /&gt;
|L2 Switch&lt;br /&gt;
|Интерфейс управления для Node1&lt;br /&gt;
|-&lt;br /&gt;
|MCM-NODE1&lt;br /&gt;
|Eth2&lt;br /&gt;
|INTERNAL&lt;br /&gt;
|10.0.0.1/24&lt;br /&gt;
|MCM-SNIFFER / Eth2&lt;br /&gt;
|Интерфейс обмена данными для Node1&lt;br /&gt;
|-&lt;br /&gt;
|MCM-NODE2&lt;br /&gt;
|Eth1&lt;br /&gt;
|EXTERNAL&lt;br /&gt;
|192.168.2.195/24&lt;br /&gt;
|L2 Switch&lt;br /&gt;
|Интерфейс управления для Node2&lt;br /&gt;
|-&lt;br /&gt;
|MCM-NODE2&lt;br /&gt;
|Eth2&lt;br /&gt;
|INTERNAL&lt;br /&gt;
|10.0.0.2/24&lt;br /&gt;
|MCM-SNIFFER / Eth3&lt;br /&gt;
|Интерфейс обмена данными для Node2&lt;br /&gt;
|-&lt;br /&gt;
|ZLAN&lt;br /&gt;
|Eth&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
|MCM-SNIFFER / Eth4&lt;br /&gt;
|Интерфейс обмена данными для ZLAN&lt;br /&gt;
|-&lt;br /&gt;
|ZLAN&lt;br /&gt;
|RS-485 #1&lt;br /&gt;
|ZLDEV0001&lt;br /&gt;
|10.0.0.241/24&lt;br /&gt;
|&lt;br /&gt;
|Подключение датчика с MODBUS-адресом 5&lt;br /&gt;
|-&lt;br /&gt;
|ZLAN&lt;br /&gt;
|RS-485 #2&lt;br /&gt;
|ZLDEV0002&lt;br /&gt;
|10.0.0.242/24&lt;br /&gt;
|&lt;br /&gt;
|Подключение датчика с MODBUS-адресом 6&lt;br /&gt;
|-&lt;br /&gt;
|ZLAN&lt;br /&gt;
|RS-485 #3&lt;br /&gt;
|ZLDEV0003&lt;br /&gt;
|10.0.0.243/24&lt;br /&gt;
|&lt;br /&gt;
|Подключение датчика с MODBUS-адресом 7&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Развертывание системы ===&lt;br /&gt;
&lt;br /&gt;
==== Установка базовых систем ====&lt;br /&gt;
Установка ОС Windows на компьютерах &#039;&#039;&#039;MCM-NODE1&#039;&#039;&#039; и &#039;&#039;&#039;MCM-NODE2&#039;&#039;&#039; производится обычным образом, при этом  соответствующим сетевым интерфейсам должны быть присвоены адреса согласно данным табл. 1, также для совместимости должны быть указаны следующие параметры настройки системы:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Таблица 2 - Параметры настройки узлов MCM-NODE1 и MCM-NODE2&lt;br /&gt;
!Параметр&lt;br /&gt;
!Значение&lt;br /&gt;
|-&lt;br /&gt;
|Имя компьютера&lt;br /&gt;
|MCM-NODE1/MCM-NODE2&lt;br /&gt;
|-&lt;br /&gt;
|Имя пользователя c правами локального администратора&lt;br /&gt;
|entcor&lt;br /&gt;
|-&lt;br /&gt;
|Пароль&lt;br /&gt;
|1&lt;br /&gt;
|}&lt;br /&gt;
Установка базовой системы Ubuntu Server 24.0x на компьютер &#039;&#039;&#039;MCM-SNIFFER&#039;&#039;&#039; производится обычным образом в режиме инсталляции по умолчанию, при этом при выборе параметров установки необходимо включить установку сервера OpenSSH, а также для совместимости следует  указать следующие значения прочих параметров:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Таблица 3 - Параметры настройки узла MCM-SNIFFER&lt;br /&gt;
!Параметр&lt;br /&gt;
!Значение&lt;br /&gt;
|-&lt;br /&gt;
|Имя компьютера&lt;br /&gt;
|MCM-SNIFFER&lt;br /&gt;
|-&lt;br /&gt;
|Имя пользователя c правами root                       &lt;br /&gt;
|entcor&lt;br /&gt;
|-&lt;br /&gt;
|Пароль&lt;br /&gt;
|ng3-dcc20&lt;br /&gt;
|}&lt;br /&gt;
После установки системы необходимо установить обновления:&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt full-upgrade&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
а также проверить доступ к серверу по SSH с компьютера администратора:&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
ssh entcor@192.168.2.15 (текущий адрес сервера MCM-SNIFFER)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&#039;&#039;&#039;Примечание:&#039;&#039;&#039; для удобства работы с файлами настоятельно рекомендуется также первым делом вкатить Midnight Commander:&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt install mc&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Также в дальнейшем целесообразно запускать Midnight Commander через &#039;&#039;&#039;sudo&#039;&#039;&#039;:&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
sudo mc&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Это позволит, во-первых, невозбранно редактировать все необходимые файлы и, во-вторых, при скрытии окон Midnight Commander выполнять из-под него с командной строки команды в режиме root без необходимости париться с sudo для каждой отдельной команды.&lt;br /&gt;
&lt;br /&gt;
==== Настройка сетевых интерфейсов ====&lt;br /&gt;
Для корректной работы сетевых интерфейсов и сохранения их параметров после перезагрузки сервера необходимо в каталоге &#039;&#039;&#039;/etc/netplan&#039;&#039;&#039; создать файл с расширением .yaml (например, &#039;&#039;&#039;01-network.yaml&#039;&#039;&#039;) со следующим содержимым:&amp;lt;syntaxhighlight lang=&amp;quot;yaml&amp;quot;&amp;gt;&lt;br /&gt;
network:&lt;br /&gt;
    version: 2&lt;br /&gt;
    ethernets:&lt;br /&gt;
        enp5s0:&lt;br /&gt;
            dhcp4: false&lt;br /&gt;
            addresses: &lt;br /&gt;
                - 192.168.2.15/24&lt;br /&gt;
            routes:&lt;br /&gt;
              - to: default&lt;br /&gt;
                via: 192.168.2.254&lt;br /&gt;
            nameservers: &lt;br /&gt;
                addresses: [192.168.2.60, 176.114.16.33]&lt;br /&gt;
        enp6s0:&lt;br /&gt;
            dhcp4: false&lt;br /&gt;
        enp7s0:&lt;br /&gt;
            dhcp4: false&lt;br /&gt;
        enp8s0:&lt;br /&gt;
            dhcp4: false&lt;br /&gt;
    bridges:&lt;br /&gt;
        docker0:&lt;br /&gt;
            interfaces: [enp6s0, enp7s0, enp8s0]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&#039;&#039;&#039;Примечания:&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
# Для интерфейса &#039;&#039;&#039;enp5s0&#039;&#039;&#039; вместо 192.168.2.15/24 следует указать нужный статический адрес сервера, также при необходимости следует указать фактически используемые адреса шлюза и DNS (в &#039;&#039;&#039;via&#039;&#039;&#039; и &#039;&#039;&#039;nameservers&#039;&#039;&#039; соответственно).&lt;br /&gt;
# В файле конфигурации заранее определяется мост &#039;&#039;&#039;docker0&#039;&#039;&#039;, который будет использоваться Docker&#039;ом после его установки. Таким образом, интерфейсы &#039;&#039;&#039;enp6s0/enp7s0/enp8s0&#039;&#039;&#039; заранее подключаются к мосту &#039;&#039;&#039;docker0&#039;&#039;&#039;, и, соответственно, в будущем будут доступны из Docker.&lt;br /&gt;
# Для удобства проще скопировать готовый файл &#039;&#039;&#039;01-network.yaml&#039;&#039;&#039; с компьютера администратора и положить его в &#039;&#039;&#039;/etc/netplan&#039;&#039;&#039; .&lt;br /&gt;
# Как показывает практика, существующий в &#039;&#039;&#039;/etc/netplan&#039;&#039;&#039; файл конфигурации по умолчанию &#039;&#039;&#039;50-cloud-init.yaml&#039;&#039;&#039; лучше переименовать во что-то типа &#039;&#039;&#039;50-cloud-init.yaml.bak,&#039;&#039;&#039; иначе у интерфейса &#039;&#039;&#039;enp5s0&#039;&#039;&#039; будет образовываться 2 адреса - статический из настроек в &#039;&#039;&#039;01-network.yaml&#039;&#039;&#039; и динамический, который будет дополнительно прилетать по DHCP и создавать путаницу. Вроде бы, должно лечиться установкой в файле &#039;&#039;&#039;50-cloud-init.yaml&#039;&#039;&#039; для интерфейса &#039;&#039;&#039;enp5s0&#039;&#039;&#039; параметра &#039;&#039;&#039;dchp4: false&#039;&#039;&#039;, но по факту не помогает, поэтому лучше от греха подальше во избежание конфликтов держать в &#039;&#039;&#039;/etc/netplan&#039;&#039;&#039;  только один файл &#039;&#039;&#039;01-network.yaml&#039;&#039;&#039; с настройками интерфейсов.&lt;br /&gt;
# Для применения настроек интерфейсов и сохранения настроек после перезагрузки сервера рекомендуется выполнение &#039;&#039;&#039;netplan try&#039;&#039;&#039; . Это позволит проверить конфигурацию перед применением и отловить возможные ошибки. Также рекомендуется в обязательном порядке выполнить контрольную перезагрузку сервера, чтобы убедиться, что настройки после нее восстанавливаются правильно.&lt;br /&gt;
# Для проверки работоспособности моста &#039;&#039;&#039;docker0&#039;&#039;&#039; перед настройкой интерфейсов следует запустить постоянный пинг (с параметром &#039;&#039;&#039;-t&#039;&#039;&#039;) с &#039;&#039;&#039;MCM-NODE1&#039;&#039;&#039; (10.0.0.1) на &#039;&#039;&#039;MCM-NODE2&#039;&#039;&#039; (10.0.0.2) и наоборот и убедиться в том, что узлы недоступны друг для друга. После настройки конфигурации интерфейсов и выполнения &#039;&#039;&#039;netplan try&#039;&#039;&#039; следует проверить, что пинг с MCM-NODE1 (10.0.0.1) на MCM-NODE2 (10.0.0.2) в обе стороны проходит успешно, т.е. узлы общаются между собой напрямую через мост &#039;&#039;&#039;docker0&#039;&#039;&#039;.&lt;br /&gt;
==== Установка сертификата Entcor ====&lt;br /&gt;
С компьютера администратора следует скопировать файл сертификата &#039;&#039;&#039;entcor.crt&#039;&#039;&#039; на узел &#039;&#039;&#039;MCM-SNIFFER&#039;&#039;&#039; по следующему пути (необходимо использовать фактический IP-адрес сервера MCM-SNIFFER):&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
scp entcor.crt entcor@192.168.2.23:/home/entcor&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Затем на компьютере &#039;&#039;&#039;MCM-SNIFFER&#039;&#039;&#039; следует перенести сертификат в необходимый каталог и выполнить его обновление:&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
sudo mv entcor.crt /usr/local/share/ca-certificates&lt;br /&gt;
sudo update-ca-certificates &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&#039;&#039;&#039;Примечание:&#039;&#039;&#039; после обновления сертификатов необходимо выполнить перезагрузку компьютера &#039;&#039;&#039;MCM-SNIFFER&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==== Установка Docker ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
# Add Docker&#039;s official GPG key:&lt;br /&gt;
&lt;br /&gt;
sudo apt-get update&lt;br /&gt;
sudo apt-get install ca-certificates curl&lt;br /&gt;
sudo install -m 0755 -d /etc/apt/keyrings&lt;br /&gt;
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc&lt;br /&gt;
sudo chmod a+r /etc/apt/keyrings/docker.asc&lt;br /&gt;
&lt;br /&gt;
# Add the repository to Apt sources:&lt;br /&gt;
&lt;br /&gt;
echo \&lt;br /&gt;
&amp;quot;deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \&lt;br /&gt;
$(. /etc/os-release &amp;amp;&amp;amp; echo &amp;quot;$VERSION_CODENAME&amp;quot;) stable&amp;quot; | \&lt;br /&gt;
sudo tee /etc/apt/sources.list.d/docker.list &amp;gt; /dev/null&lt;br /&gt;
&lt;br /&gt;
sudo apt-get update&lt;br /&gt;
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Ссылка на руководство: https://docs.docker.com/engine/install/ubuntu/#install-using-the-repository&lt;br /&gt;
&lt;br /&gt;
==== Установка компонентов системы МКИ ====&lt;br /&gt;
Установка компонентов системы МКИ может осуществляться посредством получения последней версии инсталляционного пакета (предпочтительно), либо из репозитория Git (может применяться для целей отладки или быстрого накатывания патчей/фикса ошибок).&lt;br /&gt;
&lt;br /&gt;
==== Вариант 1: Установка с помощью инсталляционного пакета ====&lt;br /&gt;
Получение последней версии инсталляционного пакета производится с FTP-сервера Jenkins. Для этого необходимо подключиться к нему с устройства МКИ по протоколу FTP, используя соответствующую пару логин-пароль, и выкачать оттуда файлы &#039;&#039;&#039;install.sh&#039;&#039;&#039; и &#039;&#039;&#039;latest.tar.gz&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Перед запуском инсталляционного скрипта install.sh необходимо установить для него права на выполнение посредством команды chmod:&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
chmod +x install.sh&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Также для корректной работы стека common необходимо предварительно авторизоваться под нужной учетной записью в docker-репозитории Harbor:&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
docker login registry.entcor&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Далее непосредственное развертывание контейнеров производится запуском на выполнение скрипта &#039;&#039;&#039;install.sh&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
После завершения установки компонентов ПАК «еNODE.МКИ» следует выполнить переход в каталог &#039;&#039;&#039;/opt/e-node/deploy&#039;&#039;&#039;, куда выполнялось развертывание компонентов системы инсталляционным скриптом &#039;&#039;&#039;install.sh&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Далее в том же каталоге следует создать/отредактировать файла &#039;&#039;&#039;.env&#039;&#039;&#039;, в котором следует установить следующие параметры:&lt;br /&gt;
&lt;br /&gt;
* MONITOR_DATA_IF = &amp;lt;имя интерфейса на узле &#039;&#039;&#039;MCM-SNIFFER&#039;&#039;&#039;,  на котором выполняется прослушка, например, enp7s&lt;br /&gt;
* MODE = enode &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Примечание:&#039;&#039;&#039; вообще-то для работы МКИ параметр MODE должен иметь  значение asutp, но работает пока только вот так. &lt;br /&gt;
&lt;br /&gt;
==== Вариант 2: Установка непосредственно из репозитория Git ====&lt;br /&gt;
&lt;br /&gt;
Получение последней версии инсталляционного пакета производится из  Git-репозитория &#039;&#039;&#039;e-deploy&#039;&#039;&#039;, находящегося по адресу  &#039;&#039;&#039;&amp;lt;nowiki&amp;gt;http://192.168.2.61&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;, (нужно будет ввести соответствующие логин-пароль для доступа к репозиторию, а также выполнить переключение на ветку &#039;&#039;&#039;develop&#039;&#039;&#039;): &amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
git clone http://192.168.2.61/e-node/e-deploy.git&lt;br /&gt;
git switch develop&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Далее следует авторизоваться под нужной учетной записью в Docker-репозитории Harbor:&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
docker login registry.entcor&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;после чего нужно перейти в каталог &#039;&#039;&#039;e-deploy&#039;&#039;&#039; (в том каталоге, где выполнялся git clone) и выполнить следующую команду:&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
./enode.sh init&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Далее в том же каталоге следует создать/отредактировать файла &#039;&#039;&#039;.env&#039;&#039;&#039;, в котором следует установить следующие параметры:&lt;br /&gt;
&lt;br /&gt;
MONITOR_DATA_IF = &amp;lt;имя интерфейса на узле &#039;&#039;&#039;MCM-SNIFFER&#039;&#039;&#039;,  на котором выполняется прослушка, например, enp7s0&amp;gt; &lt;br /&gt;
&lt;br /&gt;
MODE = enode &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Примечание:&#039;&#039;&#039; вообще-то для работы МКИ параметр MODE должен иметь  значение asutp, но работает пока только вот так. &lt;br /&gt;
==== Запуск компонентов системы МКИ ====&lt;br /&gt;
После установки компонентов МКИ можно выполнить их запуск следующей командой: &amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
enode &amp;lt;имя стека&amp;gt; start&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&#039;&#039;&#039;Примечание:&#039;&#039;&#039; названия нужных стеков можно посмотреть в каталоге &#039;&#039;&#039;stacks&#039;&#039;&#039;  в &#039;&#039;&#039;e-deploy&#039;&#039;&#039; (имена стеков соответствуют именам подкаталогов). Как минимум должны быть запущены следующие стеки:&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
enode analytic start&lt;br /&gt;
enode common start&lt;br /&gt;
enode asutp start&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&#039;&#039;&#039;Примечание:&#039;&#039;&#039;  стек &#039;&#039;&#039;analytic&#039;&#039;&#039; рекомендуется запускать перед стеком &#039;&#039;&#039;common&#039;&#039;&#039; из-за каких-то особенностей функционирования:&lt;br /&gt;
&lt;br /&gt;
Проверка запуска сервисов производится обычным образом с помощью команды:&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
docker ps&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Проверка информационного обмена по протоколу МЭК-60870-5-104 ===&lt;br /&gt;
Проверка информационного обмена по протоколу МЭК-60870-5-104 производится между узлами стенда &#039;&#039;&#039;MCM-NODE1&#039;&#039;&#039; и &#039;&#039;&#039;MCM-NODE2&#039;&#039;&#039; посредством программного обеспечения  IEC Test, которое эмулирует передачу пакетов протокола МЭК-60870-5-104 поверх соединения Ethernet. &lt;br /&gt;
&lt;br /&gt;
Для проверки работы протокола МЭК-60870-5-104 во внутренней сети обмена на одном из узлов ПО IEC Test запускается в режиме сервера с показанными ниже настройками: &lt;br /&gt;
&lt;br /&gt;
TCP/IP Link Role - Server &lt;br /&gt;
&lt;br /&gt;
IP Address - адрес внутреннего интерфейса для информационного обмена (в данном примере - 10.0.0.2) &lt;br /&gt;
&lt;br /&gt;
Далее устанавливается канал обмена последовательным нажатием кнопок &amp;quot;Build String&amp;quot; и &amp;quot;Open Channel&amp;quot; (индикатор &amp;quot;1 channel&amp;quot; должен стать темно-зеленым). &lt;br /&gt;
[[Файл:IEC Test - 2.png|мини|794x794пкс|Рис. 1 - Настройки программы IEC Test для организации обмена  между узлами стенда MCM-NODE1 и MCM-NODE2 по протоколу МЭК-60870-5-104 (серверная часть)|центр]]Соответственно, на другом узле ПО IEC Test запускается в режиме клиента с показанными ниже настройками:&lt;br /&gt;
&lt;br /&gt;
TCP/IP Link Role - Client &lt;br /&gt;
&lt;br /&gt;
IP Address - адрес сервера, находящегося во внутренней сети для информационного обмена  (в данном примере - 10.0.0.2). &lt;br /&gt;
&lt;br /&gt;
Далее устанавливается канал обмена последовательным нажатием кнопок &amp;quot;Build String&amp;quot; и &amp;quot;Open Channel&amp;quot; (индикатор &amp;quot;1 channel&amp;quot; должен стать темно-зеленым).&lt;br /&gt;
&lt;br /&gt;
Для начала непосредственно информационного взаимодействия следует послать с клиента на сервер специальную команду посредством нажатия кнопки &amp;quot;Start DT&amp;quot; (индикатор &amp;quot;1 channel&amp;quot; должен стать светло-зеленым как показано на рисунке ниже). С этого момента канал обмена установлен и активирован, а между экземплярами ПО IEC Test могут передаваться пакеты протокола МЭК-60870-5-104.&lt;br /&gt;
[[Файл:IEC Test - 3.png|центр|мини|791x791пкс|Рис. 2 - Настройки программы IEC Test для организации обмена  между узлами стенда MCM-NODE1 и MCM-NODE2 по протоколу МЭК-60870-5-104 (клиентская часть)]]Для создания трафика по протоколу МЭК-60870-5-104 между узлами &#039;&#039;&#039;MCM-NODE1&#039;&#039;&#039; и &#039;&#039;&#039;MCM-NODE2&#039;&#039;&#039; следует использовать специальный макрос, имитирующий последовательную передачу данных протокола МЭК-60870-5-104 между узлами. Для этого необходимо на любом из узлов в ПО IEC Test перейти во вкладку &amp;quot;870 Commander&amp;quot;, нажатием кнопки &amp;quot;Загрузить&amp;quot; загрузить макрос &amp;quot;ДУ по циклу 5 сек.rtm&amp;quot; и выполнить его нажатием кнопки &amp;quot;Выполнить&amp;quot;:&lt;br /&gt;
[[Файл:IEC Test - 4.png|альт=Выполнение макроса в ПО IEC Test для создания трафика по протоколу МЭК-60870-5-104|центр|мини|797x797пкс|Рис. 3 - Выполнение макроса в ПО IEC Test для создания трафика по протоколу МЭК-60870-5-104]]В случае правильно настроенных узлов стенда и экземпляров ПО IEC Test на принимающем узле во вкладке &amp;quot;870 Commander&amp;quot; в соответствующем окне можно будет увидеть информацию о принятых сообщениях, отправленных макросом с передающего узла, что свидетельствует о состоявшемся информационном обмене по протоколу МЭК-60870-5-104 между узлами.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Примечание:&#039;&#039;&#039; в случае, если система МКИ выполняет прослушивание на одном из интерфейсов, входящих во внутреннюю сеть информационного обмена, а также при правильном конфигурировании компонента Grafana, при подключении браузером по адресу сервера  &#039;&#039;&#039;MCM-SNIFFER&#039;&#039;&#039; в соответствующих дашбордах должна появиться информация о перехваченных пакетах протокола МЭК-60870-5-104, создающих описанный выше трафик.&lt;br /&gt;
&lt;br /&gt;
=== Проверка информационного обмена по протоколу MODBUS ===&lt;br /&gt;
&lt;br /&gt;
Работа стенда по протоколу MODBUS осуществляется посредством ПО &#039;&#039;&#039;Modbus Poll&#039;&#039;&#039;, запущенного на узле &#039;&#039;&#039;MDM-NODE2&#039;&#039;&#039; (см. схему). Modbus Poll подключается по протоколу MODBUS-TCP к железке-конвертору ZLAN (см. схему) и через него опрашивает устройства (температурные датчики), подключенные к RS-485-портам №1, №2 и №3 конвертора ZLAN. Также на датчиках изменены их базовые адреса следующим образом: ID = 5 – на 1 порту RS-485, ID = 6 – на 2 порту RS-485, ID = 7 – на 3 порту RS-485.&lt;br /&gt;
&lt;br /&gt;
Для доступа к датчикам на конверторе ZLAN установлены адреса IP-портов с помощью прилагающейся к нему софтины &#039;&#039;&#039;ZLVirCom&#039;&#039;&#039;, которую можно запустить с рабочего стола на узле &#039;&#039;&#039;MCM-NODE2&#039;&#039;&#039; (&#039;&#039;&#039;Примечание:&#039;&#039;&#039; &#039;&#039;&#039;в текущей конфигурации стенда вся работа с MODBUS производится с этого узла&#039;&#039;&#039;). ZLVirCom сам опрашивает локальную сеть и находит там конвертор, после чего подключается к нему, и его можно конфигурировать:&lt;br /&gt;
[[Файл:Modbus1.png|центр|Рис. 4 - Главное окно ZLVirCom|обрамить]]&lt;br /&gt;
&lt;br /&gt;
При нажатии на кнопку &#039;&#039;&#039;Device&#039;&#039;&#039; в верхнем меню открывается список портов, в котором можно провалиться в конкретный порт и выполнить его настройки:&lt;br /&gt;
[[Файл:Modbus2.png|центр|мини|848x848пкс|Рис. 5 - Окно со списком портов RS-485 на устройстве ZLAN5843]]&lt;br /&gt;
&lt;br /&gt;
Настройки портов, к которым подключены датчики, должны выглядеть следующим образом:&lt;br /&gt;
[[Файл:Modbus3.png|центр|обрамить|Рис. 6 - Окно настройки параметров выбранного порта RS-485 на устройстве ZLAN]]&lt;br /&gt;
&lt;br /&gt;
Если все настроено корректно, то Modbus Poll сможет подключится к соответствующим RS-485-портам конвертора по указанному для них IP Address и Port (см. рис. 6).&lt;br /&gt;
&lt;br /&gt;
Непосредственно для выполнения опроса датчиков нужно запустить &#039;&#039;&#039;Modbus Poll&#039;&#039;&#039; с рабочего стола на узле &#039;&#039;&#039;MCM-NODE2&#039;&#039;&#039;:&lt;br /&gt;
[[Файл:Modbus4.png|центр|мини|852x852пкс|Рис. 7 - Главное окно Modbus Poll]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Далее в меню Connection следует выбрать Connect (или нажать F3), откроется окно настроек подключения, где нужно указать следующие параметры:&lt;br /&gt;
[[Файл:Modbus5.png|центр|мини|424x424пкс|Рис. 8 - Параметры подключения к порту RS-485 на устройстве ZLAN]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В поле IP Address or Node Name нужно указать адрес порта, который будем опрашивать (соответственно, &#039;&#039;&#039;10.0.0.241, .242, .243 для портов 1, 2, 3 конвертора&#039;&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
Далее будет выполнено подключение к железке ZLAN и при попытке опроса вылезет ошибка “Timeout error”, так как не сконфигурированы параметры опроса.&lt;br /&gt;
[[Файл:Modbus6.png|центр|мини|878x878пкс|Рис. 9 - Окно программы Modbus Poll при несконфигурированных параметрах опроса]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Для их настройки следует зайти в меню &#039;&#039;&#039;Setup -&amp;gt; Read/Write Definition&#039;&#039;&#039; (или нажать F8) и указать следующие параметры:&lt;br /&gt;
[[Файл:Modbus7.png|центр|мини|Рис. 10 - Настройка параметров опроса порта]]&lt;br /&gt;
&lt;br /&gt;
В поле &#039;&#039;&#039;Slave ID&#039;&#039;&#039; нужно указать адрес датчика (&#039;&#039;&#039;5, 6 или 7&#039;&#039;&#039;), в поле &#039;&#039;&#039;Function&#039;&#039;&#039; выбрать &#039;&#039;&#039;«04 Read Input Registers (3х)»&#039;&#039;&#039;, в полях &#039;&#039;&#039;Address&#039;&#039;&#039; и &#039;&#039;&#039;Quantity&#039;&#039;&#039; указать значение 1. Если номер датчика соответствует выбранному при подключении порту, то опрос пойдет корректно (&#039;&#039;&#039;Tx увеличивается, Err = 0)&#039;&#039;&#039;:&lt;br /&gt;
[[Файл:Modbus8.png|центр|мини|893x893пкс|Рис. 11 - Выполнение опроса порта в установленном режиме]]&lt;br /&gt;
&lt;br /&gt;
Результат опроса можно увидеть, нажав кнопку &#039;&#039;&#039;Display communication traffic&#039;&#039;&#039; в панели инструментов (&#039;&#039;&#039;Tx – байты с запросом, Rx – байты ответа от датчика&#039;&#039;&#039;). В случае ошибки опроса или недоступности устройства Rx в трафике не будет, а будут только строки с отправкой (Tx).&lt;br /&gt;
[[Файл:Modbus9.png|центр|мини|Рис. 12 - Просмотр трафика при опросе порта]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Примечание:&#039;&#039;&#039; Весь трафик между &#039;&#039;&#039;Modbus Poll&#039;&#039;&#039; на узле &#039;&#039;&#039;MCM-NODE2&#039;&#039;&#039; и каким-либо из датчиков пролетает через сервер &#039;&#039;&#039;MCM-SNIFFER&#039;&#039;&#039; (см. схему). Соответственно, если в настройках перехвата указать порт на сервере &#039;&#039;&#039;MCM-SNIFFER&#039;&#039;&#039;,  к которому подключен &#039;&#039;&#039;MCM-NODE2&#039;&#039;&#039; (например, &#039;&#039;&#039;enp7s0&#039;&#039;&#039;), то МКИ на сервере &#039;&#039;&#039;MCM-SNIFFER&#039;&#039;&#039; сможет перехватывать трафик MODBUS и, соответственно, его анализировать.&lt;/div&gt;</summary>
		<author><name>Dima</name></author>
	</entry>
	<entry>
		<id>https://wiki.entcor.ru/index.php?title=%D0%9C%D0%9A%D0%98&amp;diff=444</id>
		<title>МКИ</title>
		<link rel="alternate" type="text/html" href="https://wiki.entcor.ru/index.php?title=%D0%9C%D0%9A%D0%98&amp;diff=444"/>
		<updated>2025-03-28T09:43:05Z</updated>

		<summary type="html">&lt;p&gt;Dima: /* Проверка информационного обмена по протоколу МЭК-60870-5-104 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= &#039;&#039;&#039;Система мониторинга качества измерений (МКИ)&#039;&#039;&#039; =&lt;br /&gt;
&lt;br /&gt;
=== Схема тестового стенда ===&lt;br /&gt;
[[Файл:Стенд для МКИ (декабрь 2024).drawio.png|альт=Стенд для МКИ (декабрь 2024)|мини|978x978пкс|Стенд для МКИ (декабрь 2024)]]&lt;br /&gt;
&lt;br /&gt;
=== Подключение и настойка оборудования ===&lt;br /&gt;
Подключение компонентов стенда производится в соответствии со схемой подключения. При этом для корректного выполнения дальнейших инструкций подключение устройств к физическим портам и сетевые настройки интерфейсов должны быть выполнены  согласно табл. 1:&lt;br /&gt;
&lt;br /&gt;
==== Таблица 1 - Параметры сетевых настроек устройств стенда ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Хост&lt;br /&gt;
!Порт&lt;br /&gt;
!Интерфейс&lt;br /&gt;
!IP&lt;br /&gt;
!Подключен к &lt;br /&gt;
устройство/порт&lt;br /&gt;
!Описание&lt;br /&gt;
|-&lt;br /&gt;
|MCM-SNIFFER&lt;br /&gt;
|Eth1&lt;br /&gt;
|enp5s0&lt;br /&gt;
|192.168.2.15/24&lt;br /&gt;
|L2 Switch&lt;br /&gt;
|Интерфейс управления для Sniffer&lt;br /&gt;
|-&lt;br /&gt;
|MCM-SNIFFER&lt;br /&gt;
|Eth2&lt;br /&gt;
|enp6s0&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;-&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|MCM-NODE1 / Eth2&lt;br /&gt;
|Участвует в L2 Bridge&lt;br /&gt;
|-&lt;br /&gt;
|MCM-SNIFFER&lt;br /&gt;
|Eth3&lt;br /&gt;
|enp7s0&lt;br /&gt;
| -&lt;br /&gt;
|MCM-NODE2 / Eth2&lt;br /&gt;
|Участвует в L2 Bridge&lt;br /&gt;
|-&lt;br /&gt;
|MCM-SNIFFER&lt;br /&gt;
|Eth4&lt;br /&gt;
|enp8s0&lt;br /&gt;
| -&lt;br /&gt;
|ZLAN / Eth&lt;br /&gt;
|Участвует в L2 Bridge&lt;br /&gt;
|-&lt;br /&gt;
|MCM-NODE1&lt;br /&gt;
|Eth1&lt;br /&gt;
|EXTERNAL&lt;br /&gt;
|192.168.2.156/24&lt;br /&gt;
|L2 Switch&lt;br /&gt;
|Интерфейс управления для Node1&lt;br /&gt;
|-&lt;br /&gt;
|MCM-NODE1&lt;br /&gt;
|Eth2&lt;br /&gt;
|INTERNAL&lt;br /&gt;
|10.0.0.1/24&lt;br /&gt;
|MCM-SNIFFER / Eth2&lt;br /&gt;
|Интерфейс обмена данными для Node1&lt;br /&gt;
|-&lt;br /&gt;
|MCM-NODE2&lt;br /&gt;
|Eth1&lt;br /&gt;
|EXTERNAL&lt;br /&gt;
|192.168.2.195/24&lt;br /&gt;
|L2 Switch&lt;br /&gt;
|Интерфейс управления для Node2&lt;br /&gt;
|-&lt;br /&gt;
|MCM-NODE2&lt;br /&gt;
|Eth2&lt;br /&gt;
|INTERNAL&lt;br /&gt;
|10.0.0.2/24&lt;br /&gt;
|MCM-SNIFFER / Eth3&lt;br /&gt;
|Интерфейс обмена данными для Node2&lt;br /&gt;
|-&lt;br /&gt;
|ZLAN&lt;br /&gt;
|Eth&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
|MCM-SNIFFER / Eth4&lt;br /&gt;
|Интерфейс обмена данными для ZLAN&lt;br /&gt;
|-&lt;br /&gt;
|ZLAN&lt;br /&gt;
|RS-485 #1&lt;br /&gt;
|ZLDEV0001&lt;br /&gt;
|10.0.0.241/24&lt;br /&gt;
|&lt;br /&gt;
|Подключение датчика с MODBUS-адресом 5&lt;br /&gt;
|-&lt;br /&gt;
|ZLAN&lt;br /&gt;
|RS-485 #2&lt;br /&gt;
|ZLDEV0002&lt;br /&gt;
|10.0.0.242/24&lt;br /&gt;
|&lt;br /&gt;
|Подключение датчика с MODBUS-адресом 6&lt;br /&gt;
|-&lt;br /&gt;
|ZLAN&lt;br /&gt;
|RS-485 #3&lt;br /&gt;
|ZLDEV0003&lt;br /&gt;
|10.0.0.243/24&lt;br /&gt;
|&lt;br /&gt;
|Подключение датчика с MODBUS-адресом 7&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Развертывание системы ===&lt;br /&gt;
&lt;br /&gt;
==== Установка базовых систем ====&lt;br /&gt;
Установка ОС Windows на компьютерах &#039;&#039;&#039;MCM-NODE1&#039;&#039;&#039; и &#039;&#039;&#039;MCM-NODE2&#039;&#039;&#039; производится обычным образом, при этом  соответствующим сетевым интерфейсам должны быть присвоены адреса согласно данным табл. 1, также для совместимости должны быть указаны следующие параметры настройки системы:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Таблица 2 - Параметры настройки узлов MCM-NODE1 и MCM-NODE2&lt;br /&gt;
!Параметр&lt;br /&gt;
!Значение&lt;br /&gt;
|-&lt;br /&gt;
|Имя компьютера&lt;br /&gt;
|MCM-NODE1/MCM-NODE2&lt;br /&gt;
|-&lt;br /&gt;
|Имя пользователя c правами локального администратора&lt;br /&gt;
|entcor&lt;br /&gt;
|-&lt;br /&gt;
|Пароль&lt;br /&gt;
|1&lt;br /&gt;
|}&lt;br /&gt;
Установка базовой системы Ubuntu Server 24.0x на компьютер &#039;&#039;&#039;MCM-SNIFFER&#039;&#039;&#039; производится обычным образом в режиме инсталляции по умолчанию, при этом при выборе параметров установки необходимо включить установку сервера OpenSSH, а также для совместимости следует  указать следующие значения прочих параметров:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Таблица 3 - Параметры настройки узла MCM-SNIFFER&lt;br /&gt;
!Параметр&lt;br /&gt;
!Значение&lt;br /&gt;
|-&lt;br /&gt;
|Имя компьютера&lt;br /&gt;
|MCM-SNIFFER&lt;br /&gt;
|-&lt;br /&gt;
|Имя пользователя c правами root                       &lt;br /&gt;
|entcor&lt;br /&gt;
|-&lt;br /&gt;
|Пароль&lt;br /&gt;
|ng3-dcc20&lt;br /&gt;
|}&lt;br /&gt;
После установки системы необходимо установить обновления:&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt full-upgrade&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
а также проверить доступ к серверу по SSH с компьютера администратора:&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
ssh entcor@192.168.2.15 (текущий адрес сервера MCM-SNIFFER)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&#039;&#039;&#039;Примечание:&#039;&#039;&#039; для удобства работы с файлами настоятельно рекомендуется также первым делом вкатить Midnight Commander:&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt install mc&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Также в дальнейшем целесообразно запускать Midnight Commander через &#039;&#039;&#039;sudo&#039;&#039;&#039;:&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
sudo mc&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Это позволит, во-первых, невозбранно редактировать все необходимые файлы и, во-вторых, при скрытии окон Midnight Commander выполнять из-под него с командной строки команды в режиме root без необходимости париться с sudo для каждой отдельной команды.&lt;br /&gt;
&lt;br /&gt;
==== Настройка сетевых интерфейсов ====&lt;br /&gt;
Для корректной работы сетевых интерфейсов и сохранения их параметров после перезагрузки сервера необходимо в каталоге &#039;&#039;&#039;/etc/netplan&#039;&#039;&#039; создать файл с расширением .yaml (например, &#039;&#039;&#039;01-network.yaml&#039;&#039;&#039;) со следующим содержимым:&amp;lt;syntaxhighlight lang=&amp;quot;yaml&amp;quot;&amp;gt;&lt;br /&gt;
network:&lt;br /&gt;
    version: 2&lt;br /&gt;
    ethernets:&lt;br /&gt;
        enp5s0:&lt;br /&gt;
            dhcp4: false&lt;br /&gt;
            addresses: &lt;br /&gt;
                - 192.168.2.15/24&lt;br /&gt;
            routes:&lt;br /&gt;
              - to: default&lt;br /&gt;
                via: 192.168.2.254&lt;br /&gt;
            nameservers: &lt;br /&gt;
                addresses: [192.168.2.60, 176.114.16.33]&lt;br /&gt;
        enp6s0:&lt;br /&gt;
            dhcp4: false&lt;br /&gt;
        enp7s0:&lt;br /&gt;
            dhcp4: false&lt;br /&gt;
        enp8s0:&lt;br /&gt;
            dhcp4: false&lt;br /&gt;
    bridges:&lt;br /&gt;
        docker0:&lt;br /&gt;
            interfaces: [enp6s0, enp7s0, enp8s0]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&#039;&#039;&#039;Примечания:&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
# Для интерфейса &#039;&#039;&#039;enp5s0&#039;&#039;&#039; вместо 192.168.2.15/24 следует указать нужный статический адрес сервера, также при необходимости следует указать фактически используемые адреса шлюза и DNS (в &#039;&#039;&#039;via&#039;&#039;&#039; и &#039;&#039;&#039;nameservers&#039;&#039;&#039; соответственно).&lt;br /&gt;
# В файле конфигурации заранее определяется мост &#039;&#039;&#039;docker0&#039;&#039;&#039;, который будет использоваться Docker&#039;ом после его установки. Таким образом, интерфейсы &#039;&#039;&#039;enp6s0/enp7s0/enp8s0&#039;&#039;&#039; заранее подключаются к мосту &#039;&#039;&#039;docker0&#039;&#039;&#039;, и, соответственно, в будущем будут доступны из Docker.&lt;br /&gt;
# Для удобства проще скопировать готовый файл &#039;&#039;&#039;01-network.yaml&#039;&#039;&#039; с компьютера администратора и положить его в &#039;&#039;&#039;/etc/netplan&#039;&#039;&#039; .&lt;br /&gt;
# Как показывает практика, существующий в &#039;&#039;&#039;/etc/netplan&#039;&#039;&#039; файл конфигурации по умолчанию &#039;&#039;&#039;50-cloud-init.yaml&#039;&#039;&#039; лучше переименовать во что-то типа &#039;&#039;&#039;50-cloud-init.yaml.bak,&#039;&#039;&#039; иначе у интерфейса &#039;&#039;&#039;enp5s0&#039;&#039;&#039; будет образовываться 2 адреса - статический из настроек в &#039;&#039;&#039;01-network.yaml&#039;&#039;&#039; и динамический, который будет дополнительно прилетать по DHCP и создавать путаницу. Вроде бы, должно лечиться установкой в файле &#039;&#039;&#039;50-cloud-init.yaml&#039;&#039;&#039; для интерфейса &#039;&#039;&#039;enp5s0&#039;&#039;&#039; параметра &#039;&#039;&#039;dchp4: false&#039;&#039;&#039;, но по факту не помогает, поэтому лучше от греха подальше во избежание конфликтов держать в &#039;&#039;&#039;/etc/netplan&#039;&#039;&#039;  только один файл &#039;&#039;&#039;01-network.yaml&#039;&#039;&#039; с настройками интерфейсов.&lt;br /&gt;
# Для применения настроек интерфейсов и сохранения настроек после перезагрузки сервера рекомендуется выполнение &#039;&#039;&#039;netplan try&#039;&#039;&#039; . Это позволит проверить конфигурацию перед применением и отловить возможные ошибки. Также рекомендуется в обязательном порядке выполнить контрольную перезагрузку сервера, чтобы убедиться, что настройки после нее восстанавливаются правильно.&lt;br /&gt;
# Для проверки работоспособности моста &#039;&#039;&#039;docker0&#039;&#039;&#039; перед настройкой интерфейсов следует запустить постоянный пинг (с параметром &#039;&#039;&#039;-t&#039;&#039;&#039;) с &#039;&#039;&#039;MCM-NODE1&#039;&#039;&#039; (10.0.0.1) на &#039;&#039;&#039;MCM-NODE2&#039;&#039;&#039; (10.0.0.2) и наоборот и убедиться в том, что узлы недоступны друг для друга. После настройки конфигурации интерфейсов и выполнения &#039;&#039;&#039;netplan try&#039;&#039;&#039; следует проверить, что пинг с MCM-NODE1 (10.0.0.1) на MCM-NODE2 (10.0.0.2) в обе стороны проходит успешно, т.е. узлы общаются между собой напрямую через мост &#039;&#039;&#039;docker0&#039;&#039;&#039;.&lt;br /&gt;
==== Установка сертификата Entcor ====&lt;br /&gt;
С компьютера администратора следует скопировать файл сертификата &#039;&#039;&#039;entcor.crt&#039;&#039;&#039; на узел &#039;&#039;&#039;MCM-SNIFFER&#039;&#039;&#039; по следующему пути (необходимо использовать фактический IP-адрес сервера MCM-SNIFFER):&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
scp entcor.crt entcor@192.168.2.23:/home/entcor&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Затем на компьютере &#039;&#039;&#039;MCM-SNIFFER&#039;&#039;&#039; следует перенести сертификат в необходимый каталог и выполнить его обновление:&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
sudo mv entcor.crt /usr/local/share/ca-certificates&lt;br /&gt;
sudo update-ca-certificates &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&#039;&#039;&#039;Примечание:&#039;&#039;&#039; после обновления сертификатов необходимо выполнить перезагрузку компьютера &#039;&#039;&#039;MCM-SNIFFER&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==== Установка Docker ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
# Add Docker&#039;s official GPG key:&lt;br /&gt;
&lt;br /&gt;
sudo apt-get update&lt;br /&gt;
sudo apt-get install ca-certificates curl&lt;br /&gt;
sudo install -m 0755 -d /etc/apt/keyrings&lt;br /&gt;
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc&lt;br /&gt;
sudo chmod a+r /etc/apt/keyrings/docker.asc&lt;br /&gt;
&lt;br /&gt;
# Add the repository to Apt sources:&lt;br /&gt;
&lt;br /&gt;
echo \&lt;br /&gt;
&amp;quot;deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \&lt;br /&gt;
$(. /etc/os-release &amp;amp;&amp;amp; echo &amp;quot;$VERSION_CODENAME&amp;quot;) stable&amp;quot; | \&lt;br /&gt;
sudo tee /etc/apt/sources.list.d/docker.list &amp;gt; /dev/null&lt;br /&gt;
&lt;br /&gt;
sudo apt-get update&lt;br /&gt;
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Ссылка на руководство: https://docs.docker.com/engine/install/ubuntu/#install-using-the-repository&lt;br /&gt;
&lt;br /&gt;
==== Установка компонентов системы МКИ ====&lt;br /&gt;
Установка компонентов системы МКИ может осуществляться посредством получения последней версии инсталляционного пакета (предпочтительно), либо из репозитория Git (может применяться для целей отладки или быстрого накатывания патчей/фикса ошибок).&lt;br /&gt;
&lt;br /&gt;
==== Вариант 1: Установка с помощью инсталляционного пакета ====&lt;br /&gt;
Получение последней версии инсталляционного пакета производится с FTP-сервера Jenkins. Для этого необходимо подключиться к нему с устройства МКИ по протоколу FTP, используя соответствующую пару логин-пароль, и выкачать оттуда файлы &#039;&#039;&#039;install.sh&#039;&#039;&#039; и &#039;&#039;&#039;latest.tar.gz&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Перед запуском инсталляционного скрипта install.sh необходимо установить для него права на выполнение посредством команды chmod:&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
chmod +x install.sh&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Также для корректной работы стека common необходимо предварительно авторизоваться под нужной учетной записью в docker-репозитории Harbor:&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
docker login registry.entcor&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Далее непосредственное развертывание контейнеров производится запуском на выполнение скрипта &#039;&#039;&#039;install.sh&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
После завершения установки компонентов ПАК «еNODE.МКИ» следует выполнить переход в каталог &#039;&#039;&#039;/opt/e-node/deploy&#039;&#039;&#039;, куда выполнялось развертывание компонентов системы инсталляционным скриптом &#039;&#039;&#039;install.sh&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Далее в том же каталоге следует создать/отредактировать файла &#039;&#039;&#039;.env&#039;&#039;&#039;, в котором следует установить следующие параметры:&lt;br /&gt;
&lt;br /&gt;
* MONITOR_DATA_IF = &amp;lt;имя интерфейса на узле &#039;&#039;&#039;MCM-SNIFFER&#039;&#039;&#039;,  на котором выполняется прослушка, например, enp7s&lt;br /&gt;
* MODE = enode &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Примечание:&#039;&#039;&#039; вообще-то для работы МКИ параметр MODE должен иметь  значение asutp, но работает пока только вот так. &lt;br /&gt;
&lt;br /&gt;
==== Вариант 2: Установка непосредственно из репозитория Git ====&lt;br /&gt;
&lt;br /&gt;
Получение последней версии инсталляционного пакета производится из  Git-репозитория &#039;&#039;&#039;e-deploy&#039;&#039;&#039;, находящегося по адресу  &#039;&#039;&#039;&amp;lt;nowiki&amp;gt;http://192.168.2.61&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;, (нужно будет ввести соответствующие логин-пароль для доступа к репозиторию, а также выполнить переключение на ветку &#039;&#039;&#039;develop&#039;&#039;&#039;): &amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
git clone http://192.168.2.61/e-node/e-deploy.git&lt;br /&gt;
git switch develop&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Далее следует авторизоваться под нужной учетной записью в Docker-репозитории Harbor:&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
docker login registry.entcor&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;после чего нужно перейти в каталог &#039;&#039;&#039;e-deploy&#039;&#039;&#039; (в том каталоге, где выполнялся git clone) и выполнить следующую команду:&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
./enode.sh init&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Далее в том же каталоге следует создать/отредактировать файла &#039;&#039;&#039;.env&#039;&#039;&#039;, в котором следует установить следующие параметры:&lt;br /&gt;
&lt;br /&gt;
MONITOR_DATA_IF = &amp;lt;имя интерфейса на узле &#039;&#039;&#039;MCM-SNIFFER&#039;&#039;&#039;,  на котором выполняется прослушка, например, enp7s0&amp;gt; &lt;br /&gt;
&lt;br /&gt;
MODE = enode &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Примечание:&#039;&#039;&#039; вообще-то для работы МКИ параметр MODE должен иметь  значение asutp, но работает пока только вот так. &lt;br /&gt;
==== Запуск компонентов системы МКИ ====&lt;br /&gt;
После установки компонентов МКИ можно выполнить их запуск следующей командой: &amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
enode &amp;lt;имя стека&amp;gt; start&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&#039;&#039;&#039;Примечание:&#039;&#039;&#039; названия нужных стеков можно посмотреть в каталоге &#039;&#039;&#039;stacks&#039;&#039;&#039;  в &#039;&#039;&#039;e-deploy&#039;&#039;&#039; (имена стеков соответствуют именам подкаталогов). Как минимум должны быть запущены следующие стеки:&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
enode analytic start&lt;br /&gt;
enode common start&lt;br /&gt;
enode asutp start&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&#039;&#039;&#039;Примечание:&#039;&#039;&#039;  стек &#039;&#039;&#039;analytic&#039;&#039;&#039; рекомендуется запускать перед стеком &#039;&#039;&#039;common&#039;&#039;&#039; из-за каких-то особенностей функционирования:&lt;br /&gt;
&lt;br /&gt;
Проверка запуска сервисов производится обычным образом с помощью команды:&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
docker ps&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Проверка информационного обмена по протоколу МЭК-60870-5-104 ===&lt;br /&gt;
Проверка информационного обмена по протоколу МЭК-60870-5-104 производится между узлами стенда &#039;&#039;&#039;MCM-NODE1&#039;&#039;&#039; и &#039;&#039;&#039;MCM-NODE2&#039;&#039;&#039; посредством программного обеспечения  IEC Test, которое эмулирует передачу пакетов протокола МЭК-60870-5-104 поверх соединения Ethernet. &lt;br /&gt;
&lt;br /&gt;
Для проверки работы протокола МЭК-60870-5-104 во внутренней сети обмена на одном из узлов ПО IEC Test запускается в режиме сервера с показанными ниже настройками: &lt;br /&gt;
&lt;br /&gt;
TCP/IP Link Role - Server &lt;br /&gt;
&lt;br /&gt;
IP Address - адрес внутреннего интерфейса для информационного обмена (в данном примере - 10.0.0.2) &lt;br /&gt;
&lt;br /&gt;
Далее устанавливается канал обмена последовательным нажатием кнопок &amp;quot;Build String&amp;quot; и &amp;quot;Open Channel&amp;quot; (индикатор &amp;quot;1 channel&amp;quot; должен стать темно-зеленым). &lt;br /&gt;
[[Файл:IEC Test - 2.png|мини|794x794пкс|Рис. 1 - Настройки программы IEC Test для организации обмена  между узлами стенда MCM-NODE1 и MCM-NODE2 по протоколу МЭК-60870-5-104 (серверная часть)|центр]]Соответственно, на другом узле ПО IEC Test запускается в режиме клиента с показанными ниже настройками:&lt;br /&gt;
&lt;br /&gt;
TCP/IP Link Role - Client &lt;br /&gt;
&lt;br /&gt;
IP Address - адрес сервера, находящегося во внутренней сети для информационного обмена  (в данном примере - 10.0.0.2). &lt;br /&gt;
&lt;br /&gt;
Далее устанавливается канал обмена последовательным нажатием кнопок &amp;quot;Build String&amp;quot; и &amp;quot;Open Channel&amp;quot; (индикатор &amp;quot;1 channel&amp;quot; должен стать темно-зеленым).&lt;br /&gt;
&lt;br /&gt;
Для начала непосредственно информационного взаимодействия следует послать с клиента на сервер специальную команду посредством нажатия кнопки &amp;quot;Start DT&amp;quot; (индикатор &amp;quot;1 channel&amp;quot; должен стать светло-зеленым как показано на рисунке ниже). С этого момента канал обмена установлен и активирован, а между экземплярами ПО IEC Test могут передаваться пакеты протокола МЭК-60870-5-104.&lt;br /&gt;
[[Файл:IEC Test - 3.png|центр|мини|791x791пкс|Рис. 2 - Настройки программы IEC Test для организации обмена  между узлами стенда MCM-NODE1 и MCM-NODE2 по протоколу МЭК-60870-5-104 (клиентская часть)]]Для создания трафика по протоколу МЭК-60870-5-104 между узлами &#039;&#039;&#039;MCM-NODE1&#039;&#039;&#039; и &#039;&#039;&#039;MCM-NODE2&#039;&#039;&#039; следует использовать специальный макрос, имитирующий последовательную передачу данных протокола МЭК-60870-5-104 между узлами. Для этого необходимо на любом из узлов в ПО IEC Test перейти во вкладку &amp;quot;870 Commander&amp;quot;, нажатием кнопки &amp;quot;Загрузить&amp;quot; загрузить макрос &amp;quot;ДУ по циклу 5 сек.rtm&amp;quot; и выполнить его нажатием кнопки &amp;quot;Выполнить&amp;quot;:&lt;br /&gt;
[[Файл:IEC Test - 4.png|альт=Выполнение макроса в ПО IEC Test для создания трафика по протоколу МЭК-60870-5-104|центр|мини|797x797пкс|Рис. 3 - Выполнение макроса в ПО IEC Test для создания трафика по протоколу МЭК-60870-5-104]]В случае правильно настроенных узлов стенда и экземпляров ПО IEC Test на принимающем узле во вкладке &amp;quot;870 Commander&amp;quot; в соответствующем окне можно будет увидеть информацию о принятых сообщениях, отправленных макросом с передающего узла, что свидетельствует о состоявшемся информационном обмене по протоколу МЭК-60870-5-104 между узлами.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Примечание:&#039;&#039;&#039; в случае, если система МКИ выполняет прослушивание на одном из интерфейсов, входящих во внутреннюю сеть информационного обмена, а также при правильном конфигурировании компонента Grafana, при подключении браузером по адресу сервера  &#039;&#039;&#039;MCM-SNIFFER&#039;&#039;&#039; в соответствующих дашбордах должна появиться информация о перехваченных пакетах протокола МЭК-60870-5-104, создающих описанный выше трафик.&lt;br /&gt;
&lt;br /&gt;
=== Проверка информационного обмена по протоколу MODBUS ===&lt;br /&gt;
&lt;br /&gt;
Работа стенда по протоколу MODBUS осуществляется посредством ПО &#039;&#039;&#039;Modbus Poll&#039;&#039;&#039;, запущенного на узле &#039;&#039;&#039;MDM-NODE2&#039;&#039;&#039; (см. схему). Modbus Poll подключается по протоколу MODBUS-TCP к железке-конвертору ZLAN (см. схему) и через него опрашивает устройства (температурные датчики), подключенные к RS-485-портам №1, №2 и №3 конвертора ZLAN. Также на датчиках изменены их базовые адреса следующим образом: ID = 5 – на 1 порту RS-485, ID = 6 – на 2 порту RS-485, ID = 7 – на 3 порту RS-485.&lt;br /&gt;
&lt;br /&gt;
Для доступа к датчикам на конверторе ZLAN установлены адреса IP-портов с помощью прилагающейся к нему софтины &#039;&#039;&#039;ZLVirCom&#039;&#039;&#039;, которую можно запустить с рабочего стола на узле &#039;&#039;&#039;MCM-NODE2&#039;&#039;&#039; (&#039;&#039;&#039;Примечание:&#039;&#039;&#039; &#039;&#039;&#039;в текущей конфигурации стенда вся работа с MODBUS производится с этого узла&#039;&#039;&#039;). ZLVirCom сам опрашивает локальную сеть и находит там конвертор, после чего подключается к нему, и его можно конфигурировать:&lt;br /&gt;
[[Файл:Modbus1.png|центр|Рис. 4 - Главное окно ZLVirCom|обрамить]]&lt;br /&gt;
&lt;br /&gt;
При нажатии на кнопку Device в верхнем меню открывается список портов, в котором можно провалиться в конкретный порт и выполнить его настройки:&lt;br /&gt;
[[Файл:Modbus2.png|центр|мини|848x848пкс|Рис. 5 - Окно со списком портов RS-485 на устройстве ZLAN5843]]&lt;br /&gt;
&lt;br /&gt;
Настройки портов, к которым подключены датчики, должны выглядеть следующим образом:&lt;br /&gt;
[[Файл:Modbus3.png|центр|обрамить|Рис. 6 - Окно настройки параметров выбранного порта RS-485 на устройстве ZLAN]]&lt;br /&gt;
&lt;br /&gt;
Если все настроено корректно, то Modbus Poll сможет подключится к соответствующим RS-485-портам конвертора по указанному для них IP Address и Port (см. рис. 6).&lt;br /&gt;
&lt;br /&gt;
Непосредственно для выполнения опроса датчиков нужно запустить &#039;&#039;&#039;Modbus Poll&#039;&#039;&#039; с рабочего стола на узле &#039;&#039;&#039;MCM-NODE2&#039;&#039;&#039;:&lt;br /&gt;
[[Файл:Modbus4.png|центр|мини|852x852пкс|Рис. 7 - Главное окно Modbus Poll]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Далее в меню Connection следует выбрать Connect (или нажать F3), откроется окно настроек подключения, где нужно указать следующие параметры:&lt;br /&gt;
[[Файл:Modbus5.png|центр|мини|424x424пкс|Рис. 8 - Параметры подключения к порту RS-485 на устройстве ZLAN]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В поле IP Address or Node Name нужно указать адрес порта, который будем опрашивать (соответственно, &#039;&#039;&#039;10.0.0.241, .242, .243 для портов 1, 2, 3 конвертора&#039;&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
Далее будет выполнено подключение к железке ZLAN и при попытке опроса вылезет ошибка “Timeout error”, так как не сконфигурированы параметры опроса.&lt;br /&gt;
[[Файл:Modbus6.png|центр|мини|878x878пкс|Рис. 9 - Окно программы Modbus Poll при несконфигурированных параметрах опроса]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Для их настройки следует зайти в меню &#039;&#039;&#039;Setup -&amp;gt; Read/Write Definition&#039;&#039;&#039; (или нажать F8) и указать следующие параметры:&lt;br /&gt;
[[Файл:Modbus7.png|центр|мини|Рис. 10 - Настройка параметров опроса порта]]&lt;br /&gt;
&lt;br /&gt;
В поле &#039;&#039;&#039;Slave ID&#039;&#039;&#039; нужно указать адрес датчика (&#039;&#039;&#039;5, 6 или 7&#039;&#039;&#039;), в поле &#039;&#039;&#039;Function&#039;&#039;&#039; выбрать &#039;&#039;&#039;«04 Read Input Registers (3х)»&#039;&#039;&#039;, в полях &#039;&#039;&#039;Address&#039;&#039;&#039; и &#039;&#039;&#039;Quantity&#039;&#039;&#039; указать значение 1. Если номер датчика соответствует выбранному при подключении порту, то опрос пойдет корректно (&#039;&#039;&#039;Tx увеличивается, Err = 0)&#039;&#039;&#039;:&lt;br /&gt;
[[Файл:Modbus8.png|центр|мини|893x893пкс|Рис. 11 - Выполнение опроса порта в установленном режиме]]&lt;br /&gt;
&lt;br /&gt;
Результат опроса можно увидеть, нажав кнопку &#039;&#039;&#039;Display communication traffic&#039;&#039;&#039; в панели инструментов (&#039;&#039;&#039;Tx – байты с запросом, Rx – байты ответа от датчика&#039;&#039;&#039;). В случае ошибки опроса или недоступности устройства Rx в трафике не будет, а будут только строки с отправкой (Tx).&lt;br /&gt;
[[Файл:Modbus9.png|центр|мини|Рис. 12 - Просмотр трафика при опросе порта]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Примечание:&#039;&#039;&#039; Весь трафик между &#039;&#039;&#039;Modbus Poll&#039;&#039;&#039; на узле &#039;&#039;&#039;MCM-NODE2&#039;&#039;&#039; и каким-либо из датчиков пролетает через сервер &#039;&#039;&#039;MCM-SNIFFER&#039;&#039;&#039; (см. схему). Соответственно, если в настройках перехвата указать порт на сервере &#039;&#039;&#039;MCM-SNIFFER&#039;&#039;&#039;,  к которому подключен &#039;&#039;&#039;MCM-NODE2&#039;&#039;&#039; (например, &#039;&#039;&#039;enp7s0&#039;&#039;&#039;), то МКИ на сервере &#039;&#039;&#039;MCM-SNIFFER&#039;&#039;&#039; сможет перехватывать трафик MODBUS и, соответственно, его анализировать.&lt;/div&gt;</summary>
		<author><name>Dima</name></author>
	</entry>
	<entry>
		<id>https://wiki.entcor.ru/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Modbus9.png&amp;diff=443</id>
		<title>Файл:Modbus9.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.entcor.ru/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Modbus9.png&amp;diff=443"/>
		<updated>2025-03-28T09:40:12Z</updated>

		<summary type="html">&lt;p&gt;Dima: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Просмотр трафика при опросе порта&lt;/div&gt;</summary>
		<author><name>Dima</name></author>
	</entry>
	<entry>
		<id>https://wiki.entcor.ru/index.php?title=%D0%9C%D0%9A%D0%98&amp;diff=442</id>
		<title>МКИ</title>
		<link rel="alternate" type="text/html" href="https://wiki.entcor.ru/index.php?title=%D0%9C%D0%9A%D0%98&amp;diff=442"/>
		<updated>2025-03-28T09:37:13Z</updated>

		<summary type="html">&lt;p&gt;Dima: /* Проверка информационного обмена по протоколу МЭК-60870-5-104 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= &#039;&#039;&#039;Система мониторинга качества измерений (МКИ)&#039;&#039;&#039; =&lt;br /&gt;
&lt;br /&gt;
=== Схема тестового стенда ===&lt;br /&gt;
[[Файл:Стенд для МКИ (декабрь 2024).drawio.png|альт=Стенд для МКИ (декабрь 2024)|мини|978x978пкс|Стенд для МКИ (декабрь 2024)]]&lt;br /&gt;
&lt;br /&gt;
=== Подключение и настойка оборудования ===&lt;br /&gt;
Подключение компонентов стенда производится в соответствии со схемой подключения. При этом для корректного выполнения дальнейших инструкций подключение устройств к физическим портам и сетевые настройки интерфейсов должны быть выполнены  согласно табл. 1:&lt;br /&gt;
&lt;br /&gt;
==== Таблица 1 - Параметры сетевых настроек устройств стенда ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Хост&lt;br /&gt;
!Порт&lt;br /&gt;
!Интерфейс&lt;br /&gt;
!IP&lt;br /&gt;
!Подключен к &lt;br /&gt;
устройство/порт&lt;br /&gt;
!Описание&lt;br /&gt;
|-&lt;br /&gt;
|MCM-SNIFFER&lt;br /&gt;
|Eth1&lt;br /&gt;
|enp5s0&lt;br /&gt;
|192.168.2.15/24&lt;br /&gt;
|L2 Switch&lt;br /&gt;
|Интерфейс управления для Sniffer&lt;br /&gt;
|-&lt;br /&gt;
|MCM-SNIFFER&lt;br /&gt;
|Eth2&lt;br /&gt;
|enp6s0&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;-&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|MCM-NODE1 / Eth2&lt;br /&gt;
|Участвует в L2 Bridge&lt;br /&gt;
|-&lt;br /&gt;
|MCM-SNIFFER&lt;br /&gt;
|Eth3&lt;br /&gt;
|enp7s0&lt;br /&gt;
| -&lt;br /&gt;
|MCM-NODE2 / Eth2&lt;br /&gt;
|Участвует в L2 Bridge&lt;br /&gt;
|-&lt;br /&gt;
|MCM-SNIFFER&lt;br /&gt;
|Eth4&lt;br /&gt;
|enp8s0&lt;br /&gt;
| -&lt;br /&gt;
|ZLAN / Eth&lt;br /&gt;
|Участвует в L2 Bridge&lt;br /&gt;
|-&lt;br /&gt;
|MCM-NODE1&lt;br /&gt;
|Eth1&lt;br /&gt;
|EXTERNAL&lt;br /&gt;
|192.168.2.156/24&lt;br /&gt;
|L2 Switch&lt;br /&gt;
|Интерфейс управления для Node1&lt;br /&gt;
|-&lt;br /&gt;
|MCM-NODE1&lt;br /&gt;
|Eth2&lt;br /&gt;
|INTERNAL&lt;br /&gt;
|10.0.0.1/24&lt;br /&gt;
|MCM-SNIFFER / Eth2&lt;br /&gt;
|Интерфейс обмена данными для Node1&lt;br /&gt;
|-&lt;br /&gt;
|MCM-NODE2&lt;br /&gt;
|Eth1&lt;br /&gt;
|EXTERNAL&lt;br /&gt;
|192.168.2.195/24&lt;br /&gt;
|L2 Switch&lt;br /&gt;
|Интерфейс управления для Node2&lt;br /&gt;
|-&lt;br /&gt;
|MCM-NODE2&lt;br /&gt;
|Eth2&lt;br /&gt;
|INTERNAL&lt;br /&gt;
|10.0.0.2/24&lt;br /&gt;
|MCM-SNIFFER / Eth3&lt;br /&gt;
|Интерфейс обмена данными для Node2&lt;br /&gt;
|-&lt;br /&gt;
|ZLAN&lt;br /&gt;
|Eth&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
|MCM-SNIFFER / Eth4&lt;br /&gt;
|Интерфейс обмена данными для ZLAN&lt;br /&gt;
|-&lt;br /&gt;
|ZLAN&lt;br /&gt;
|RS-485 #1&lt;br /&gt;
|ZLDEV0001&lt;br /&gt;
|10.0.0.241/24&lt;br /&gt;
|&lt;br /&gt;
|Подключение датчика с MODBUS-адресом 5&lt;br /&gt;
|-&lt;br /&gt;
|ZLAN&lt;br /&gt;
|RS-485 #2&lt;br /&gt;
|ZLDEV0002&lt;br /&gt;
|10.0.0.242/24&lt;br /&gt;
|&lt;br /&gt;
|Подключение датчика с MODBUS-адресом 6&lt;br /&gt;
|-&lt;br /&gt;
|ZLAN&lt;br /&gt;
|RS-485 #3&lt;br /&gt;
|ZLDEV0003&lt;br /&gt;
|10.0.0.243/24&lt;br /&gt;
|&lt;br /&gt;
|Подключение датчика с MODBUS-адресом 7&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Развертывание системы ===&lt;br /&gt;
&lt;br /&gt;
==== Установка базовых систем ====&lt;br /&gt;
Установка ОС Windows на компьютерах &#039;&#039;&#039;MCM-NODE1&#039;&#039;&#039; и &#039;&#039;&#039;MCM-NODE2&#039;&#039;&#039; производится обычным образом, при этом  соответствующим сетевым интерфейсам должны быть присвоены адреса согласно данным табл. 1, также для совместимости должны быть указаны следующие параметры настройки системы:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Таблица 2 - Параметры настройки узлов MCM-NODE1 и MCM-NODE2&lt;br /&gt;
!Параметр&lt;br /&gt;
!Значение&lt;br /&gt;
|-&lt;br /&gt;
|Имя компьютера&lt;br /&gt;
|MCM-NODE1/MCM-NODE2&lt;br /&gt;
|-&lt;br /&gt;
|Имя пользователя c правами локального администратора&lt;br /&gt;
|entcor&lt;br /&gt;
|-&lt;br /&gt;
|Пароль&lt;br /&gt;
|1&lt;br /&gt;
|}&lt;br /&gt;
Установка базовой системы Ubuntu Server 24.0x на компьютер &#039;&#039;&#039;MCM-SNIFFER&#039;&#039;&#039; производится обычным образом в режиме инсталляции по умолчанию, при этом при выборе параметров установки необходимо включить установку сервера OpenSSH, а также для совместимости следует  указать следующие значения прочих параметров:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Таблица 3 - Параметры настройки узла MCM-SNIFFER&lt;br /&gt;
!Параметр&lt;br /&gt;
!Значение&lt;br /&gt;
|-&lt;br /&gt;
|Имя компьютера&lt;br /&gt;
|MCM-SNIFFER&lt;br /&gt;
|-&lt;br /&gt;
|Имя пользователя c правами root                       &lt;br /&gt;
|entcor&lt;br /&gt;
|-&lt;br /&gt;
|Пароль&lt;br /&gt;
|ng3-dcc20&lt;br /&gt;
|}&lt;br /&gt;
После установки системы необходимо установить обновления:&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt full-upgrade&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
а также проверить доступ к серверу по SSH с компьютера администратора:&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
ssh entcor@192.168.2.15 (текущий адрес сервера MCM-SNIFFER)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&#039;&#039;&#039;Примечание:&#039;&#039;&#039; для удобства работы с файлами настоятельно рекомендуется также первым делом вкатить Midnight Commander:&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt install mc&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Также в дальнейшем целесообразно запускать Midnight Commander через &#039;&#039;&#039;sudo&#039;&#039;&#039;:&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
sudo mc&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Это позволит, во-первых, невозбранно редактировать все необходимые файлы и, во-вторых, при скрытии окон Midnight Commander выполнять из-под него с командной строки команды в режиме root без необходимости париться с sudo для каждой отдельной команды.&lt;br /&gt;
&lt;br /&gt;
==== Настройка сетевых интерфейсов ====&lt;br /&gt;
Для корректной работы сетевых интерфейсов и сохранения их параметров после перезагрузки сервера необходимо в каталоге &#039;&#039;&#039;/etc/netplan&#039;&#039;&#039; создать файл с расширением .yaml (например, &#039;&#039;&#039;01-network.yaml&#039;&#039;&#039;) со следующим содержимым:&amp;lt;syntaxhighlight lang=&amp;quot;yaml&amp;quot;&amp;gt;&lt;br /&gt;
network:&lt;br /&gt;
    version: 2&lt;br /&gt;
    ethernets:&lt;br /&gt;
        enp5s0:&lt;br /&gt;
            dhcp4: false&lt;br /&gt;
            addresses: &lt;br /&gt;
                - 192.168.2.15/24&lt;br /&gt;
            routes:&lt;br /&gt;
              - to: default&lt;br /&gt;
                via: 192.168.2.254&lt;br /&gt;
            nameservers: &lt;br /&gt;
                addresses: [192.168.2.60, 176.114.16.33]&lt;br /&gt;
        enp6s0:&lt;br /&gt;
            dhcp4: false&lt;br /&gt;
        enp7s0:&lt;br /&gt;
            dhcp4: false&lt;br /&gt;
        enp8s0:&lt;br /&gt;
            dhcp4: false&lt;br /&gt;
    bridges:&lt;br /&gt;
        docker0:&lt;br /&gt;
            interfaces: [enp6s0, enp7s0, enp8s0]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&#039;&#039;&#039;Примечания:&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
# Для интерфейса &#039;&#039;&#039;enp5s0&#039;&#039;&#039; вместо 192.168.2.15/24 следует указать нужный статический адрес сервера, также при необходимости следует указать фактически используемые адреса шлюза и DNS (в &#039;&#039;&#039;via&#039;&#039;&#039; и &#039;&#039;&#039;nameservers&#039;&#039;&#039; соответственно).&lt;br /&gt;
# В файле конфигурации заранее определяется мост &#039;&#039;&#039;docker0&#039;&#039;&#039;, который будет использоваться Docker&#039;ом после его установки. Таким образом, интерфейсы &#039;&#039;&#039;enp6s0/enp7s0/enp8s0&#039;&#039;&#039; заранее подключаются к мосту &#039;&#039;&#039;docker0&#039;&#039;&#039;, и, соответственно, в будущем будут доступны из Docker.&lt;br /&gt;
# Для удобства проще скопировать готовый файл &#039;&#039;&#039;01-network.yaml&#039;&#039;&#039; с компьютера администратора и положить его в &#039;&#039;&#039;/etc/netplan&#039;&#039;&#039; .&lt;br /&gt;
# Как показывает практика, существующий в &#039;&#039;&#039;/etc/netplan&#039;&#039;&#039; файл конфигурации по умолчанию &#039;&#039;&#039;50-cloud-init.yaml&#039;&#039;&#039; лучше переименовать во что-то типа &#039;&#039;&#039;50-cloud-init.yaml.bak,&#039;&#039;&#039; иначе у интерфейса &#039;&#039;&#039;enp5s0&#039;&#039;&#039; будет образовываться 2 адреса - статический из настроек в &#039;&#039;&#039;01-network.yaml&#039;&#039;&#039; и динамический, который будет дополнительно прилетать по DHCP и создавать путаницу. Вроде бы, должно лечиться установкой в файле &#039;&#039;&#039;50-cloud-init.yaml&#039;&#039;&#039; для интерфейса &#039;&#039;&#039;enp5s0&#039;&#039;&#039; параметра &#039;&#039;&#039;dchp4: false&#039;&#039;&#039;, но по факту не помогает, поэтому лучше от греха подальше во избежание конфликтов держать в &#039;&#039;&#039;/etc/netplan&#039;&#039;&#039;  только один файл &#039;&#039;&#039;01-network.yaml&#039;&#039;&#039; с настройками интерфейсов.&lt;br /&gt;
# Для применения настроек интерфейсов и сохранения настроек после перезагрузки сервера рекомендуется выполнение &#039;&#039;&#039;netplan try&#039;&#039;&#039; . Это позволит проверить конфигурацию перед применением и отловить возможные ошибки. Также рекомендуется в обязательном порядке выполнить контрольную перезагрузку сервера, чтобы убедиться, что настройки после нее восстанавливаются правильно.&lt;br /&gt;
# Для проверки работоспособности моста &#039;&#039;&#039;docker0&#039;&#039;&#039; перед настройкой интерфейсов следует запустить постоянный пинг (с параметром &#039;&#039;&#039;-t&#039;&#039;&#039;) с &#039;&#039;&#039;MCM-NODE1&#039;&#039;&#039; (10.0.0.1) на &#039;&#039;&#039;MCM-NODE2&#039;&#039;&#039; (10.0.0.2) и наоборот и убедиться в том, что узлы недоступны друг для друга. После настройки конфигурации интерфейсов и выполнения &#039;&#039;&#039;netplan try&#039;&#039;&#039; следует проверить, что пинг с MCM-NODE1 (10.0.0.1) на MCM-NODE2 (10.0.0.2) в обе стороны проходит успешно, т.е. узлы общаются между собой напрямую через мост &#039;&#039;&#039;docker0&#039;&#039;&#039;.&lt;br /&gt;
==== Установка сертификата Entcor ====&lt;br /&gt;
С компьютера администратора следует скопировать файл сертификата &#039;&#039;&#039;entcor.crt&#039;&#039;&#039; на узел &#039;&#039;&#039;MCM-SNIFFER&#039;&#039;&#039; по следующему пути (необходимо использовать фактический IP-адрес сервера MCM-SNIFFER):&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
scp entcor.crt entcor@192.168.2.23:/home/entcor&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Затем на компьютере &#039;&#039;&#039;MCM-SNIFFER&#039;&#039;&#039; следует перенести сертификат в необходимый каталог и выполнить его обновление:&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
sudo mv entcor.crt /usr/local/share/ca-certificates&lt;br /&gt;
sudo update-ca-certificates &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&#039;&#039;&#039;Примечание:&#039;&#039;&#039; после обновления сертификатов необходимо выполнить перезагрузку компьютера &#039;&#039;&#039;MCM-SNIFFER&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==== Установка Docker ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
# Add Docker&#039;s official GPG key:&lt;br /&gt;
&lt;br /&gt;
sudo apt-get update&lt;br /&gt;
sudo apt-get install ca-certificates curl&lt;br /&gt;
sudo install -m 0755 -d /etc/apt/keyrings&lt;br /&gt;
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc&lt;br /&gt;
sudo chmod a+r /etc/apt/keyrings/docker.asc&lt;br /&gt;
&lt;br /&gt;
# Add the repository to Apt sources:&lt;br /&gt;
&lt;br /&gt;
echo \&lt;br /&gt;
&amp;quot;deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \&lt;br /&gt;
$(. /etc/os-release &amp;amp;&amp;amp; echo &amp;quot;$VERSION_CODENAME&amp;quot;) stable&amp;quot; | \&lt;br /&gt;
sudo tee /etc/apt/sources.list.d/docker.list &amp;gt; /dev/null&lt;br /&gt;
&lt;br /&gt;
sudo apt-get update&lt;br /&gt;
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Ссылка на руководство: https://docs.docker.com/engine/install/ubuntu/#install-using-the-repository&lt;br /&gt;
&lt;br /&gt;
==== Установка компонентов системы МКИ ====&lt;br /&gt;
Установка компонентов системы МКИ может осуществляться посредством получения последней версии инсталляционного пакета (предпочтительно), либо из репозитория Git (может применяться для целей отладки или быстрого накатывания патчей/фикса ошибок).&lt;br /&gt;
&lt;br /&gt;
==== Вариант 1: Установка с помощью инсталляционного пакета ====&lt;br /&gt;
Получение последней версии инсталляционного пакета производится с FTP-сервера Jenkins. Для этого необходимо подключиться к нему с устройства МКИ по протоколу FTP, используя соответствующую пару логин-пароль, и выкачать оттуда файлы &#039;&#039;&#039;install.sh&#039;&#039;&#039; и &#039;&#039;&#039;latest.tar.gz&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Перед запуском инсталляционного скрипта install.sh необходимо установить для него права на выполнение посредством команды chmod:&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
chmod +x install.sh&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Также для корректной работы стека common необходимо предварительно авторизоваться под нужной учетной записью в docker-репозитории Harbor:&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
docker login registry.entcor&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Далее непосредственное развертывание контейнеров производится запуском на выполнение скрипта &#039;&#039;&#039;install.sh&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
После завершения установки компонентов ПАК «еNODE.МКИ» следует выполнить переход в каталог &#039;&#039;&#039;/opt/e-node/deploy&#039;&#039;&#039;, куда выполнялось развертывание компонентов системы инсталляционным скриптом &#039;&#039;&#039;install.sh&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Далее в том же каталоге следует создать/отредактировать файла &#039;&#039;&#039;.env&#039;&#039;&#039;, в котором следует установить следующие параметры:&lt;br /&gt;
&lt;br /&gt;
* MONITOR_DATA_IF = &amp;lt;имя интерфейса на узле &#039;&#039;&#039;MCM-SNIFFER&#039;&#039;&#039;,  на котором выполняется прослушка, например, enp7s&lt;br /&gt;
* MODE = enode &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Примечание:&#039;&#039;&#039; вообще-то для работы МКИ параметр MODE должен иметь  значение asutp, но работает пока только вот так. &lt;br /&gt;
&lt;br /&gt;
==== Вариант 2: Установка непосредственно из репозитория Git ====&lt;br /&gt;
&lt;br /&gt;
Получение последней версии инсталляционного пакета производится из  Git-репозитория &#039;&#039;&#039;e-deploy&#039;&#039;&#039;, находящегося по адресу  &#039;&#039;&#039;&amp;lt;nowiki&amp;gt;http://192.168.2.61&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;, (нужно будет ввести соответствующие логин-пароль для доступа к репозиторию, а также выполнить переключение на ветку &#039;&#039;&#039;develop&#039;&#039;&#039;): &amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
git clone http://192.168.2.61/e-node/e-deploy.git&lt;br /&gt;
git switch develop&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Далее следует авторизоваться под нужной учетной записью в Docker-репозитории Harbor:&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
docker login registry.entcor&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;после чего нужно перейти в каталог &#039;&#039;&#039;e-deploy&#039;&#039;&#039; (в том каталоге, где выполнялся git clone) и выполнить следующую команду:&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
./enode.sh init&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Далее в том же каталоге следует создать/отредактировать файла &#039;&#039;&#039;.env&#039;&#039;&#039;, в котором следует установить следующие параметры:&lt;br /&gt;
&lt;br /&gt;
MONITOR_DATA_IF = &amp;lt;имя интерфейса на узле &#039;&#039;&#039;MCM-SNIFFER&#039;&#039;&#039;,  на котором выполняется прослушка, например, enp7s0&amp;gt; &lt;br /&gt;
&lt;br /&gt;
MODE = enode &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Примечание:&#039;&#039;&#039; вообще-то для работы МКИ параметр MODE должен иметь  значение asutp, но работает пока только вот так. &lt;br /&gt;
==== Запуск компонентов системы МКИ ====&lt;br /&gt;
После установки компонентов МКИ можно выполнить их запуск следующей командой: &amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
enode &amp;lt;имя стека&amp;gt; start&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&#039;&#039;&#039;Примечание:&#039;&#039;&#039; названия нужных стеков можно посмотреть в каталоге &#039;&#039;&#039;stacks&#039;&#039;&#039;  в &#039;&#039;&#039;e-deploy&#039;&#039;&#039; (имена стеков соответствуют именам подкаталогов). Как минимум должны быть запущены следующие стеки:&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
enode analytic start&lt;br /&gt;
enode common start&lt;br /&gt;
enode asutp start&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&#039;&#039;&#039;Примечание:&#039;&#039;&#039;  стек &#039;&#039;&#039;analytic&#039;&#039;&#039; рекомендуется запускать перед стеком &#039;&#039;&#039;common&#039;&#039;&#039; из-за каких-то особенностей функционирования:&lt;br /&gt;
&lt;br /&gt;
Проверка запуска сервисов производится обычным образом с помощью команды:&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
docker ps&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Проверка информационного обмена по протоколу МЭК-60870-5-104 ===&lt;br /&gt;
Проверка информационного обмена по протоколу МЭК-60870-5-104 производится между узлами стенда &#039;&#039;&#039;MCM-NODE1&#039;&#039;&#039; и &#039;&#039;&#039;MCM-NODE2&#039;&#039;&#039; посредством программного обеспечения  IEC Test, которое эмулирует передачу пакетов протокола МЭК-60870-5-104 поверх соединения Ethernet. &lt;br /&gt;
&lt;br /&gt;
Для проверки работы протокола МЭК-60870-5-104 во внутренней сети обмена на одном из узлов ПО IEC Test запускается в режиме сервера с показанными ниже настройками: &lt;br /&gt;
&lt;br /&gt;
TCP/IP Link Role - Server &lt;br /&gt;
&lt;br /&gt;
IP Address - адрес внутреннего интерфейса для информационного обмена (в данном примере - 10.0.0.2) &lt;br /&gt;
&lt;br /&gt;
Далее устанавливается канал обмена последовательным нажатием кнопок &amp;quot;Build String&amp;quot; и &amp;quot;Open Channel&amp;quot; (индикатор &amp;quot;1 channel&amp;quot; должен стать темно-зеленым). &lt;br /&gt;
[[Файл:IEC Test - 2.png|мини|794x794пкс|Рис. 1 - Настройки программы IEC Test для организации обмена  между узлами стенда MCM-NODE1 и MCM-NODE2 по протоколу МЭК-60870-5-104 (серверная часть)|центр]]Соответственно, на другом узле ПО IEC Test запускается в режиме клиента с показанными ниже настройками:&lt;br /&gt;
&lt;br /&gt;
TCP/IP Link Role - Client &lt;br /&gt;
&lt;br /&gt;
IP Address - адрес сервера, находящегося во внутренней сети для информационного обмена  (в данном примере - 10.0.0.2). &lt;br /&gt;
&lt;br /&gt;
Далее устанавливается канал обмена последовательным нажатием кнопок &amp;quot;Build String&amp;quot; и &amp;quot;Open Channel&amp;quot; (индикатор &amp;quot;1 channel&amp;quot; должен стать темно-зеленым).&lt;br /&gt;
&lt;br /&gt;
Для начала непосредственно информационного взаимодействия следует послать с клиента на сервер специальную команду посредством нажатия кнопки &amp;quot;Start DT&amp;quot; (индикатор &amp;quot;1 channel&amp;quot; должен стать светло-зеленым как показано на рисунке ниже). С этого момента канал обмена установлен и активирован, а между экземплярами ПО IEC Test могут передаваться пакеты протокола МЭК-60870-5-104.&lt;br /&gt;
[[Файл:IEC Test - 3.png|центр|мини|791x791пкс|Рис. 2 - Настройки программы IEC Test для организации обмена  между узлами стенда MCM-NODE1 и MCM-NODE2 по протоколу МЭК-60870-5-104 (клиентская часть)]]Для создания трафика по протоколу МЭК-60870-5-104 между узлами &#039;&#039;&#039;MCM-NODE1&#039;&#039;&#039; и &#039;&#039;&#039;MCM-NODE2&#039;&#039;&#039; следует использовать специальный макрос, имитирующий последовательную передачу данных протокола МЭК-60870-5-104 между узлами. Для этого необходимо на любом из узлов в ПО IEC Test перейти во вкладку &amp;quot;870 Commander&amp;quot;, нажатием кнопки &amp;quot;Загрузить&amp;quot; загрузить макрос &amp;quot;ДУ по циклу 5 сек.rtm&amp;quot; и выполнить его нажатием кнопки &amp;quot;Выполнить&amp;quot;:&lt;br /&gt;
[[Файл:IEC Test - 4.png|альт=Выполнение макроса в ПО IEC Test для создания трафика по протоколу МЭК-60870-5-104|центр|мини|797x797пкс|Рис. 3 - Выполнение макроса в ПО IEC Test для создания трафика по протоколу МЭК-60870-5-104]]В случае правильно настроенных узлов стенда и экземпляров ПО IEC Test на принимающем узле во вкладке &amp;quot;870 Commander&amp;quot; в соответствующем окне можно будет увидеть информацию о принятых сообщениях, отправленных макросом с передающего узла, что свидетельствует о состоявшемся информационном обмене по протоколу МЭК-60870-5-104 между узлами.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Примечание:&#039;&#039;&#039; в случае, если система МКИ выполняет прослушивание на одном из интерфейсов, входящих во внутреннюю сеть информационного обмена, а также при правильном конфигурировании компонента Grafana, при подключении браузером по адресу сервера  &#039;&#039;&#039;MCM-SNIFFER&#039;&#039;&#039; в соответствующих дашбордах должна появиться информация о перехваченных пакетах протокола МЭК-60870-5-104, создающих описанный выше трафик.&lt;br /&gt;
&lt;br /&gt;
=== Проверка информационного обмена по протоколу MODBUS ===&lt;br /&gt;
&lt;br /&gt;
Работа стенда по протоколу MODBUS осуществляется посредством ПО &#039;&#039;&#039;Modbus Poll&#039;&#039;&#039;, запущенного на узле &#039;&#039;&#039;MDM-NODE2&#039;&#039;&#039; (см. схему). Modbus Poll подключается по протоколу MODBUS-TCP к железке-конвертору ZLAN (см. схему) и через него опрашивает устройства (температурные датчики), подключенные к RS-485-портам №1, №2 и №3 конвертора ZLAN. Также на датчиках изменены их базовые адреса следующим образом: ID = 5 – на 1 порту RS-485, ID = 6 – на 2 порту RS-485, ID = 7 – на 3 порту RS-485.&lt;br /&gt;
&lt;br /&gt;
Для доступа к датчикам на конверторе ZLAN установлены адреса IP-портов с помощью прилагающейся к нему софтины &#039;&#039;&#039;ZLVirCom&#039;&#039;&#039;, которую можно запустить с рабочего стола на узле &#039;&#039;&#039;MCM-NODE2&#039;&#039;&#039; (&#039;&#039;&#039;Примечание:&#039;&#039;&#039; &#039;&#039;&#039;в текущей конфигурации стенда вся работа с MODBUS производится с этого узла&#039;&#039;&#039;). ZLVirCom сам опрашивает локальную сеть и находит там конвертор, после чего подключается к нему, и его можно конфигурировать:&lt;br /&gt;
[[Файл:Modbus1.png|центр|Рис. 4 - Главное окно ZLVirCom|обрамить]]&lt;br /&gt;
&lt;br /&gt;
При нажатии на кнопку Device в верхнем меню открывается список портов, в котором можно провалиться в конкретный порт и выполнить его настройки:&lt;br /&gt;
[[Файл:Modbus2.png|центр|мини|848x848пкс|Рис. 5 - Окно со списком портов RS-485 на устройстве ZLAN5843]]&lt;br /&gt;
&lt;br /&gt;
Настройки портов, к которым подключены датчики, должны выглядеть следующим образом:&lt;br /&gt;
[[Файл:Modbus3.png|центр|обрамить|Рис. 6 - Окно настройки параметров выбранного порта RS-485 на устройстве ZLAN]]&lt;br /&gt;
&lt;br /&gt;
Если все настроено корректно, то Modbus Poll сможет подключится к соответствующим RS-485-портам конвертора по указанному для них IP Address и Port (см. рис. 6).&lt;br /&gt;
&lt;br /&gt;
Непосредственно для выполнения опроса датчиков нужно запустить &#039;&#039;&#039;Modbus Poll&#039;&#039;&#039; с рабочего стола на узле &#039;&#039;&#039;MCM-NODE2&#039;&#039;&#039;:&lt;br /&gt;
[[Файл:Modbus4.png|центр|мини|852x852пкс|Рис. 7 - Главное окно Modbus Poll]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Далее в меню Connection следует выбрать Connect (или нажать F3), откроется окно настроек подключения, где нужно указать следующие параметры:&lt;br /&gt;
[[Файл:Modbus5.png|центр|мини|424x424пкс|Рис. 8 - Параметры подключения к порту RS-485 на устройстве ZLAN]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В поле IP Address or Node Name нужно указать адрес порта, который будем опрашивать (соответственно, &#039;&#039;&#039;10.0.0.241, .242, .243 для портов 1, 2, 3 конвертора&#039;&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
Далее будет выполнено подключение к железке ZLAN и при попытке опроса вылезет ошибка “Timeout error”, так как не сконфигурированы параметры опроса.&lt;br /&gt;
[[Файл:Modbus6.png|центр|мини|878x878пкс|Рис. 9 - Окно программы Modbus Poll при несконфигурированных параметрах опроса]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Для их настройки следует зайти в меню &#039;&#039;&#039;Setup -&amp;gt; Read/Write Definition&#039;&#039;&#039; (или нажать F8) и указать следующие параметры:&lt;br /&gt;
[[Файл:Modbus7.png|центр|мини|Рис. 10 - Настройка параметров опроса порта]]&lt;br /&gt;
&lt;br /&gt;
В поле &#039;&#039;&#039;Slave ID&#039;&#039;&#039; нужно указать адрес датчика (&#039;&#039;&#039;5, 6 или 7&#039;&#039;&#039;), в поле &#039;&#039;&#039;Function&#039;&#039;&#039; выбрать &#039;&#039;&#039;«04 Read Input Registers (3х)»&#039;&#039;&#039;, в полях &#039;&#039;&#039;Address&#039;&#039;&#039; и &#039;&#039;&#039;Quantity&#039;&#039;&#039; указать значение 1. Если номер датчика соответствует выбранному при подключении порту, то опрос пойдет корректно (&#039;&#039;&#039;Tx увеличивается, Err = 0)&#039;&#039;&#039;:&lt;br /&gt;
[[Файл:Modbus8.png|центр|мини|893x893пкс|Рис. 11 - Выполнение опроса порта в установленном режиме]]&lt;br /&gt;
&lt;br /&gt;
Результат опроса можно увидеть, нажав кнопку Display communication traffic в панели инструментов (Tx – байты с запросом, Rx – байты ответа от датчика). В случае ошибки опроса или недоступности устройства Rx в трафике не будет, а будут только строки с отправкой (Tx).&lt;br /&gt;
&lt;br /&gt;
4.     Весь трафик между Modbus Poll на узле MCM-NODE2 и каким-либо из датчиков пролетает через сервер МКИ (который MCM-SNIFFER, см. схему). Соответственно, если в настройках перехвата указать порт на сервере,  к которому подключен MCM-NODE2 (enp7s0 на данный момент), то еНОД.МКИ на сервере MCM-SNIFFER сможет перехватывать трафик MODBUS и, соответственно, его анализировать.&lt;/div&gt;</summary>
		<author><name>Dima</name></author>
	</entry>
	<entry>
		<id>https://wiki.entcor.ru/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Modbus8.png&amp;diff=441</id>
		<title>Файл:Modbus8.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.entcor.ru/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Modbus8.png&amp;diff=441"/>
		<updated>2025-03-28T09:36:25Z</updated>

		<summary type="html">&lt;p&gt;Dima: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Выполнение опроса порта в установленном режиме&lt;/div&gt;</summary>
		<author><name>Dima</name></author>
	</entry>
	<entry>
		<id>https://wiki.entcor.ru/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Modbus7.png&amp;diff=440</id>
		<title>Файл:Modbus7.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.entcor.ru/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Modbus7.png&amp;diff=440"/>
		<updated>2025-03-28T09:33:58Z</updated>

		<summary type="html">&lt;p&gt;Dima: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Настройка параметров опроса порта&lt;/div&gt;</summary>
		<author><name>Dima</name></author>
	</entry>
	<entry>
		<id>https://wiki.entcor.ru/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Modbus6.png&amp;diff=439</id>
		<title>Файл:Modbus6.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.entcor.ru/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Modbus6.png&amp;diff=439"/>
		<updated>2025-03-28T09:31:56Z</updated>

		<summary type="html">&lt;p&gt;Dima: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Окно программы Modbus Poll при несконфигурированных параметрах опроса&lt;/div&gt;</summary>
		<author><name>Dima</name></author>
	</entry>
	<entry>
		<id>https://wiki.entcor.ru/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Modbus5.png&amp;diff=438</id>
		<title>Файл:Modbus5.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.entcor.ru/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Modbus5.png&amp;diff=438"/>
		<updated>2025-03-28T09:28:17Z</updated>

		<summary type="html">&lt;p&gt;Dima: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Параметры подключения к серверу MODBUS&lt;/div&gt;</summary>
		<author><name>Dima</name></author>
	</entry>
	<entry>
		<id>https://wiki.entcor.ru/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Modbus4.png&amp;diff=437</id>
		<title>Файл:Modbus4.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.entcor.ru/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Modbus4.png&amp;diff=437"/>
		<updated>2025-03-28T09:26:10Z</updated>

		<summary type="html">&lt;p&gt;Dima: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Главное окно Modbus Poll&lt;/div&gt;</summary>
		<author><name>Dima</name></author>
	</entry>
	<entry>
		<id>https://wiki.entcor.ru/index.php?title=%D0%9C%D0%9A%D0%98&amp;diff=436</id>
		<title>МКИ</title>
		<link rel="alternate" type="text/html" href="https://wiki.entcor.ru/index.php?title=%D0%9C%D0%9A%D0%98&amp;diff=436"/>
		<updated>2025-03-28T09:22:30Z</updated>

		<summary type="html">&lt;p&gt;Dima: /* Проверка информационного обмена по протоколу MODBUS */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= &#039;&#039;&#039;Система мониторинга качества измерений (МКИ)&#039;&#039;&#039; =&lt;br /&gt;
&lt;br /&gt;
=== Схема тестового стенда ===&lt;br /&gt;
[[Файл:Стенд для МКИ (декабрь 2024).drawio.png|альт=Стенд для МКИ (декабрь 2024)|мини|978x978пкс|Стенд для МКИ (декабрь 2024)]]&lt;br /&gt;
&lt;br /&gt;
=== Подключение и настойка оборудования ===&lt;br /&gt;
Подключение компонентов стенда производится в соответствии со схемой подключения. При этом для корректного выполнения дальнейших инструкций подключение устройств к физическим портам и сетевые настройки интерфейсов должны быть выполнены  согласно табл. 1:&lt;br /&gt;
&lt;br /&gt;
==== Таблица 1 - Параметры сетевых настроек устройств стенда ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Хост&lt;br /&gt;
!Порт&lt;br /&gt;
!Интерфейс&lt;br /&gt;
!IP&lt;br /&gt;
!Подключен к &lt;br /&gt;
устройство/порт&lt;br /&gt;
!Описание&lt;br /&gt;
|-&lt;br /&gt;
|MCM-SNIFFER&lt;br /&gt;
|Eth1&lt;br /&gt;
|enp5s0&lt;br /&gt;
|192.168.2.15/24&lt;br /&gt;
|L2 Switch&lt;br /&gt;
|Интерфейс управления для Sniffer&lt;br /&gt;
|-&lt;br /&gt;
|MCM-SNIFFER&lt;br /&gt;
|Eth2&lt;br /&gt;
|enp6s0&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;-&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|MCM-NODE1 / Eth2&lt;br /&gt;
|Участвует в L2 Bridge&lt;br /&gt;
|-&lt;br /&gt;
|MCM-SNIFFER&lt;br /&gt;
|Eth3&lt;br /&gt;
|enp7s0&lt;br /&gt;
| -&lt;br /&gt;
|MCM-NODE2 / Eth2&lt;br /&gt;
|Участвует в L2 Bridge&lt;br /&gt;
|-&lt;br /&gt;
|MCM-SNIFFER&lt;br /&gt;
|Eth4&lt;br /&gt;
|enp8s0&lt;br /&gt;
| -&lt;br /&gt;
|ZLAN / Eth&lt;br /&gt;
|Участвует в L2 Bridge&lt;br /&gt;
|-&lt;br /&gt;
|MCM-NODE1&lt;br /&gt;
|Eth1&lt;br /&gt;
|EXTERNAL&lt;br /&gt;
|192.168.2.156/24&lt;br /&gt;
|L2 Switch&lt;br /&gt;
|Интерфейс управления для Node1&lt;br /&gt;
|-&lt;br /&gt;
|MCM-NODE1&lt;br /&gt;
|Eth2&lt;br /&gt;
|INTERNAL&lt;br /&gt;
|10.0.0.1/24&lt;br /&gt;
|MCM-SNIFFER / Eth2&lt;br /&gt;
|Интерфейс обмена данными для Node1&lt;br /&gt;
|-&lt;br /&gt;
|MCM-NODE2&lt;br /&gt;
|Eth1&lt;br /&gt;
|EXTERNAL&lt;br /&gt;
|192.168.2.195/24&lt;br /&gt;
|L2 Switch&lt;br /&gt;
|Интерфейс управления для Node2&lt;br /&gt;
|-&lt;br /&gt;
|MCM-NODE2&lt;br /&gt;
|Eth2&lt;br /&gt;
|INTERNAL&lt;br /&gt;
|10.0.0.2/24&lt;br /&gt;
|MCM-SNIFFER / Eth3&lt;br /&gt;
|Интерфейс обмена данными для Node2&lt;br /&gt;
|-&lt;br /&gt;
|ZLAN&lt;br /&gt;
|Eth&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
|MCM-SNIFFER / Eth4&lt;br /&gt;
|Интерфейс обмена данными для ZLAN&lt;br /&gt;
|-&lt;br /&gt;
|ZLAN&lt;br /&gt;
|RS-485 #1&lt;br /&gt;
|ZLDEV0001&lt;br /&gt;
|10.0.0.241/24&lt;br /&gt;
|&lt;br /&gt;
|Подключение датчика с MODBUS-адресом 5&lt;br /&gt;
|-&lt;br /&gt;
|ZLAN&lt;br /&gt;
|RS-485 #2&lt;br /&gt;
|ZLDEV0002&lt;br /&gt;
|10.0.0.242/24&lt;br /&gt;
|&lt;br /&gt;
|Подключение датчика с MODBUS-адресом 6&lt;br /&gt;
|-&lt;br /&gt;
|ZLAN&lt;br /&gt;
|RS-485 #3&lt;br /&gt;
|ZLDEV0003&lt;br /&gt;
|10.0.0.243/24&lt;br /&gt;
|&lt;br /&gt;
|Подключение датчика с MODBUS-адресом 7&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Развертывание системы ===&lt;br /&gt;
&lt;br /&gt;
==== Установка базовых систем ====&lt;br /&gt;
Установка ОС Windows на компьютерах &#039;&#039;&#039;MCM-NODE1&#039;&#039;&#039; и &#039;&#039;&#039;MCM-NODE2&#039;&#039;&#039; производится обычным образом, при этом  соответствующим сетевым интерфейсам должны быть присвоены адреса согласно данным табл. 1, также для совместимости должны быть указаны следующие параметры настройки системы:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Таблица 2 - Параметры настройки узлов MCM-NODE1 и MCM-NODE2&lt;br /&gt;
!Параметр&lt;br /&gt;
!Значение&lt;br /&gt;
|-&lt;br /&gt;
|Имя компьютера&lt;br /&gt;
|MCM-NODE1/MCM-NODE2&lt;br /&gt;
|-&lt;br /&gt;
|Имя пользователя c правами локального администратора&lt;br /&gt;
|entcor&lt;br /&gt;
|-&lt;br /&gt;
|Пароль&lt;br /&gt;
|1&lt;br /&gt;
|}&lt;br /&gt;
Установка базовой системы Ubuntu Server 24.0x на компьютер &#039;&#039;&#039;MCM-SNIFFER&#039;&#039;&#039; производится обычным образом в режиме инсталляции по умолчанию, при этом при выборе параметров установки необходимо включить установку сервера OpenSSH, а также для совместимости следует  указать следующие значения прочих параметров:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Таблица 3 - Параметры настройки узла MCM-SNIFFER&lt;br /&gt;
!Параметр&lt;br /&gt;
!Значение&lt;br /&gt;
|-&lt;br /&gt;
|Имя компьютера&lt;br /&gt;
|MCM-SNIFFER&lt;br /&gt;
|-&lt;br /&gt;
|Имя пользователя c правами root                       &lt;br /&gt;
|entcor&lt;br /&gt;
|-&lt;br /&gt;
|Пароль&lt;br /&gt;
|ng3-dcc20&lt;br /&gt;
|}&lt;br /&gt;
После установки системы необходимо установить обновления:&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt full-upgrade&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
а также проверить доступ к серверу по SSH с компьютера администратора:&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
ssh entcor@192.168.2.15 (текущий адрес сервера MCM-SNIFFER)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&#039;&#039;&#039;Примечание:&#039;&#039;&#039; для удобства работы с файлами настоятельно рекомендуется также первым делом вкатить Midnight Commander:&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt install mc&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Также в дальнейшем целесообразно запускать Midnight Commander через &#039;&#039;&#039;sudo&#039;&#039;&#039;:&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
sudo mc&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Это позволит, во-первых, невозбранно редактировать все необходимые файлы и, во-вторых, при скрытии окон Midnight Commander выполнять из-под него с командной строки команды в режиме root без необходимости париться с sudo для каждой отдельной команды.&lt;br /&gt;
&lt;br /&gt;
==== Настройка сетевых интерфейсов ====&lt;br /&gt;
Для корректной работы сетевых интерфейсов и сохранения их параметров после перезагрузки сервера необходимо в каталоге &#039;&#039;&#039;/etc/netplan&#039;&#039;&#039; создать файл с расширением .yaml (например, &#039;&#039;&#039;01-network.yaml&#039;&#039;&#039;) со следующим содержимым:&amp;lt;syntaxhighlight lang=&amp;quot;yaml&amp;quot;&amp;gt;&lt;br /&gt;
network:&lt;br /&gt;
    version: 2&lt;br /&gt;
    ethernets:&lt;br /&gt;
        enp5s0:&lt;br /&gt;
            dhcp4: false&lt;br /&gt;
            addresses: &lt;br /&gt;
                - 192.168.2.15/24&lt;br /&gt;
            routes:&lt;br /&gt;
              - to: default&lt;br /&gt;
                via: 192.168.2.254&lt;br /&gt;
            nameservers: &lt;br /&gt;
                addresses: [192.168.2.60, 176.114.16.33]&lt;br /&gt;
        enp6s0:&lt;br /&gt;
            dhcp4: false&lt;br /&gt;
        enp7s0:&lt;br /&gt;
            dhcp4: false&lt;br /&gt;
        enp8s0:&lt;br /&gt;
            dhcp4: false&lt;br /&gt;
    bridges:&lt;br /&gt;
        docker0:&lt;br /&gt;
            interfaces: [enp6s0, enp7s0, enp8s0]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&#039;&#039;&#039;Примечания:&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
# Для интерфейса &#039;&#039;&#039;enp5s0&#039;&#039;&#039; вместо 192.168.2.15/24 следует указать нужный статический адрес сервера, также при необходимости следует указать фактически используемые адреса шлюза и DNS (в &#039;&#039;&#039;via&#039;&#039;&#039; и &#039;&#039;&#039;nameservers&#039;&#039;&#039; соответственно).&lt;br /&gt;
# В файле конфигурации заранее определяется мост &#039;&#039;&#039;docker0&#039;&#039;&#039;, который будет использоваться Docker&#039;ом после его установки. Таким образом, интерфейсы &#039;&#039;&#039;enp6s0/enp7s0/enp8s0&#039;&#039;&#039; заранее подключаются к мосту &#039;&#039;&#039;docker0&#039;&#039;&#039;, и, соответственно, в будущем будут доступны из Docker.&lt;br /&gt;
# Для удобства проще скопировать готовый файл &#039;&#039;&#039;01-network.yaml&#039;&#039;&#039; с компьютера администратора и положить его в &#039;&#039;&#039;/etc/netplan&#039;&#039;&#039; .&lt;br /&gt;
# Как показывает практика, существующий в &#039;&#039;&#039;/etc/netplan&#039;&#039;&#039; файл конфигурации по умолчанию &#039;&#039;&#039;50-cloud-init.yaml&#039;&#039;&#039; лучше переименовать во что-то типа &#039;&#039;&#039;50-cloud-init.yaml.bak,&#039;&#039;&#039; иначе у интерфейса &#039;&#039;&#039;enp5s0&#039;&#039;&#039; будет образовываться 2 адреса - статический из настроек в &#039;&#039;&#039;01-network.yaml&#039;&#039;&#039; и динамический, который будет дополнительно прилетать по DHCP и создавать путаницу. Вроде бы, должно лечиться установкой в файле &#039;&#039;&#039;50-cloud-init.yaml&#039;&#039;&#039; для интерфейса &#039;&#039;&#039;enp5s0&#039;&#039;&#039; параметра &#039;&#039;&#039;dchp4: false&#039;&#039;&#039;, но по факту не помогает, поэтому лучше от греха подальше во избежание конфликтов держать в &#039;&#039;&#039;/etc/netplan&#039;&#039;&#039;  только один файл &#039;&#039;&#039;01-network.yaml&#039;&#039;&#039; с настройками интерфейсов.&lt;br /&gt;
# Для применения настроек интерфейсов и сохранения настроек после перезагрузки сервера рекомендуется выполнение &#039;&#039;&#039;netplan try&#039;&#039;&#039; . Это позволит проверить конфигурацию перед применением и отловить возможные ошибки. Также рекомендуется в обязательном порядке выполнить контрольную перезагрузку сервера, чтобы убедиться, что настройки после нее восстанавливаются правильно.&lt;br /&gt;
# Для проверки работоспособности моста &#039;&#039;&#039;docker0&#039;&#039;&#039; перед настройкой интерфейсов следует запустить постоянный пинг (с параметром &#039;&#039;&#039;-t&#039;&#039;&#039;) с &#039;&#039;&#039;MCM-NODE1&#039;&#039;&#039; (10.0.0.1) на &#039;&#039;&#039;MCM-NODE2&#039;&#039;&#039; (10.0.0.2) и наоборот и убедиться в том, что узлы недоступны друг для друга. После настройки конфигурации интерфейсов и выполнения &#039;&#039;&#039;netplan try&#039;&#039;&#039; следует проверить, что пинг с MCM-NODE1 (10.0.0.1) на MCM-NODE2 (10.0.0.2) в обе стороны проходит успешно, т.е. узлы общаются между собой напрямую через мост &#039;&#039;&#039;docker0&#039;&#039;&#039;.&lt;br /&gt;
==== Установка сертификата Entcor ====&lt;br /&gt;
С компьютера администратора следует скопировать файл сертификата &#039;&#039;&#039;entcor.crt&#039;&#039;&#039; на узел &#039;&#039;&#039;MCM-SNIFFER&#039;&#039;&#039; по следующему пути (необходимо использовать фактический IP-адрес сервера MCM-SNIFFER):&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
scp entcor.crt entcor@192.168.2.23:/home/entcor&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Затем на компьютере &#039;&#039;&#039;MCM-SNIFFER&#039;&#039;&#039; следует перенести сертификат в необходимый каталог и выполнить его обновление:&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
sudo mv entcor.crt /usr/local/share/ca-certificates&lt;br /&gt;
sudo update-ca-certificates &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&#039;&#039;&#039;Примечание:&#039;&#039;&#039; после обновления сертификатов необходимо выполнить перезагрузку компьютера &#039;&#039;&#039;MCM-SNIFFER&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==== Установка Docker ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
# Add Docker&#039;s official GPG key:&lt;br /&gt;
&lt;br /&gt;
sudo apt-get update&lt;br /&gt;
sudo apt-get install ca-certificates curl&lt;br /&gt;
sudo install -m 0755 -d /etc/apt/keyrings&lt;br /&gt;
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc&lt;br /&gt;
sudo chmod a+r /etc/apt/keyrings/docker.asc&lt;br /&gt;
&lt;br /&gt;
# Add the repository to Apt sources:&lt;br /&gt;
&lt;br /&gt;
echo \&lt;br /&gt;
&amp;quot;deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \&lt;br /&gt;
$(. /etc/os-release &amp;amp;&amp;amp; echo &amp;quot;$VERSION_CODENAME&amp;quot;) stable&amp;quot; | \&lt;br /&gt;
sudo tee /etc/apt/sources.list.d/docker.list &amp;gt; /dev/null&lt;br /&gt;
&lt;br /&gt;
sudo apt-get update&lt;br /&gt;
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Ссылка на руководство: https://docs.docker.com/engine/install/ubuntu/#install-using-the-repository&lt;br /&gt;
&lt;br /&gt;
==== Установка компонентов системы МКИ ====&lt;br /&gt;
Установка компонентов системы МКИ может осуществляться посредством получения последней версии инсталляционного пакета (предпочтительно), либо из репозитория Git (может применяться для целей отладки или быстрого накатывания патчей/фикса ошибок).&lt;br /&gt;
&lt;br /&gt;
==== Вариант 1: Установка с помощью инсталляционного пакета ====&lt;br /&gt;
Получение последней версии инсталляционного пакета производится с FTP-сервера Jenkins. Для этого необходимо подключиться к нему с устройства МКИ по протоколу FTP, используя соответствующую пару логин-пароль, и выкачать оттуда файлы &#039;&#039;&#039;install.sh&#039;&#039;&#039; и &#039;&#039;&#039;latest.tar.gz&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Перед запуском инсталляционного скрипта install.sh необходимо установить для него права на выполнение посредством команды chmod:&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
chmod +x install.sh&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Также для корректной работы стека common необходимо предварительно авторизоваться под нужной учетной записью в docker-репозитории Harbor:&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
docker login registry.entcor&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Далее непосредственное развертывание контейнеров производится запуском на выполнение скрипта &#039;&#039;&#039;install.sh&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
После завершения установки компонентов ПАК «еNODE.МКИ» следует выполнить переход в каталог &#039;&#039;&#039;/opt/e-node/deploy&#039;&#039;&#039;, куда выполнялось развертывание компонентов системы инсталляционным скриптом &#039;&#039;&#039;install.sh&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Далее в том же каталоге следует создать/отредактировать файла &#039;&#039;&#039;.env&#039;&#039;&#039;, в котором следует установить следующие параметры:&lt;br /&gt;
&lt;br /&gt;
* MONITOR_DATA_IF = &amp;lt;имя интерфейса на узле &#039;&#039;&#039;MCM-SNIFFER&#039;&#039;&#039;,  на котором выполняется прослушка, например, enp7s&lt;br /&gt;
* MODE = enode &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Примечание:&#039;&#039;&#039; вообще-то для работы МКИ параметр MODE должен иметь  значение asutp, но работает пока только вот так. &lt;br /&gt;
&lt;br /&gt;
==== Вариант 2: Установка непосредственно из репозитория Git ====&lt;br /&gt;
&lt;br /&gt;
Получение последней версии инсталляционного пакета производится из  Git-репозитория &#039;&#039;&#039;e-deploy&#039;&#039;&#039;, находящегося по адресу  &#039;&#039;&#039;&amp;lt;nowiki&amp;gt;http://192.168.2.61&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;, (нужно будет ввести соответствующие логин-пароль для доступа к репозиторию, а также выполнить переключение на ветку &#039;&#039;&#039;develop&#039;&#039;&#039;): &amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
git clone http://192.168.2.61/e-node/e-deploy.git&lt;br /&gt;
git switch develop&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Далее следует авторизоваться под нужной учетной записью в Docker-репозитории Harbor:&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
docker login registry.entcor&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;после чего нужно перейти в каталог &#039;&#039;&#039;e-deploy&#039;&#039;&#039; (в том каталоге, где выполнялся git clone) и выполнить следующую команду:&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
./enode.sh init&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Далее в том же каталоге следует создать/отредактировать файла &#039;&#039;&#039;.env&#039;&#039;&#039;, в котором следует установить следующие параметры:&lt;br /&gt;
&lt;br /&gt;
MONITOR_DATA_IF = &amp;lt;имя интерфейса на узле &#039;&#039;&#039;MCM-SNIFFER&#039;&#039;&#039;,  на котором выполняется прослушка, например, enp7s0&amp;gt; &lt;br /&gt;
&lt;br /&gt;
MODE = enode &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Примечание:&#039;&#039;&#039; вообще-то для работы МКИ параметр MODE должен иметь  значение asutp, но работает пока только вот так. &lt;br /&gt;
==== Запуск компонентов системы МКИ ====&lt;br /&gt;
После установки компонентов МКИ можно выполнить их запуск следующей командой: &amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
enode &amp;lt;имя стека&amp;gt; start&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&#039;&#039;&#039;Примечание:&#039;&#039;&#039; названия нужных стеков можно посмотреть в каталоге &#039;&#039;&#039;stacks&#039;&#039;&#039;  в &#039;&#039;&#039;e-deploy&#039;&#039;&#039; (имена стеков соответствуют именам подкаталогов). Как минимум должны быть запущены следующие стеки:&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
enode analytic start&lt;br /&gt;
enode common start&lt;br /&gt;
enode asutp start&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&#039;&#039;&#039;Примечание:&#039;&#039;&#039;  стек &#039;&#039;&#039;analytic&#039;&#039;&#039; рекомендуется запускать перед стеком &#039;&#039;&#039;common&#039;&#039;&#039; из-за каких-то особенностей функционирования:&lt;br /&gt;
&lt;br /&gt;
Проверка запуска сервисов производится обычным образом с помощью команды:&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
docker ps&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Проверка информационного обмена по протоколу МЭК-60870-5-104 ===&lt;br /&gt;
Проверка информационного обмена по протоколу МЭК-60870-5-104 производится между узлами стенда &#039;&#039;&#039;MCM-NODE1&#039;&#039;&#039; и &#039;&#039;&#039;MCM-NODE2&#039;&#039;&#039; посредством программного обеспечения  IEC Test, которое эмулирует передачу пакетов протокола МЭК-60870-5-104 поверх соединения Ethernet. &lt;br /&gt;
&lt;br /&gt;
Для проверки работы протокола МЭК-60870-5-104 во внутренней сети обмена на одном из узлов ПО IEC Test запускается в режиме сервера с показанными ниже настройками: &lt;br /&gt;
&lt;br /&gt;
TCP/IP Link Role - Server &lt;br /&gt;
&lt;br /&gt;
IP Address - адрес внутреннего интерфейса для информационного обмена (в данном примере - 10.0.0.2) &lt;br /&gt;
&lt;br /&gt;
Далее устанавливается канал обмена последовательным нажатием кнопок &amp;quot;Build String&amp;quot; и &amp;quot;Open Channel&amp;quot; (индикатор &amp;quot;1 channel&amp;quot; должен стать темно-зеленым). &lt;br /&gt;
[[Файл:IEC Test - 2.png|мини|794x794пкс|Настройки программы IEC Test для организации обмена  между узлами стенда MCM-NODE1 и MCM-NODE2 по протоколу МЭК-60870-5-104 (серверная часть)|центр]]Соответственно, на другом узле ПО IEC Test запускается в режиме клиента с показанными ниже настройками:&lt;br /&gt;
&lt;br /&gt;
TCP/IP Link Role - Client &lt;br /&gt;
&lt;br /&gt;
IP Address - адрес сервера, находящегося во внутренней сети для информационного обмена  (в данном примере - 10.0.0.2). &lt;br /&gt;
&lt;br /&gt;
Далее устанавливается канал обмена последовательным нажатием кнопок &amp;quot;Build String&amp;quot; и &amp;quot;Open Channel&amp;quot; (индикатор &amp;quot;1 channel&amp;quot; должен стать темно-зеленым).&lt;br /&gt;
&lt;br /&gt;
Для начала непосредственно информационного взаимодействия следует послать с клиента на сервер специальную команду посредством нажатия кнопки &amp;quot;Start DT&amp;quot; (индикатор &amp;quot;1 channel&amp;quot; должен стать светло-зеленым как показано на рисунке ниже). С этого момента канал обмена установлен и активирован, а между экземплярами ПО IEC Test могут передаваться пакеты протокола МЭК-60870-5-104.&lt;br /&gt;
[[Файл:IEC Test - 3.png|центр|мини|791x791пкс|Настройки программы IEC Test для организации обмена  между узлами стенда MCM-NODE1 и MCM-NODE2 по протоколу МЭК-60870-5-104 (клиентская часть)]]Для создания трафика по протоколу МЭК-60870-5-104 между узлами &#039;&#039;&#039;MCM-NODE1&#039;&#039;&#039; и &#039;&#039;&#039;MCM-NODE2&#039;&#039;&#039; следует использовать специальный макрос, имитирующий последовательную передачу данных протокола МЭК-60870-5-104 между узлами. Для этого необходимо на любом из узлов в ПО IEC Test перейти во вкладку &amp;quot;870 Commander&amp;quot;, нажатием кнопки &amp;quot;Загрузить&amp;quot; загрузить макрос &amp;quot;ДУ по циклу 5 сек.rtm&amp;quot; и выполнить его нажатием кнопки &amp;quot;Выполнить&amp;quot;:&lt;br /&gt;
[[Файл:IEC Test - 4.png|альт=Выполнение макроса в ПО IEC Test для создания трафика по протоколу МЭК-60870-5-104|центр|мини|797x797пкс|Выполнение макроса в ПО IEC Test для создания трафика по протоколу МЭК-60870-5-104]]В случае правильно настроенных узлов стенда и экземпляров ПО IEC Test на принимающем узле во вкладке &amp;quot;870 Commander&amp;quot; в соответствующем окне можно будет увидеть информацию о принятых сообщениях, отправленных макросом с передающего узла, что свидетельствует о состоявшемся информационном обмене по протоколу МЭК-60870-5-104 между узлами.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Примечание:&#039;&#039;&#039; в случае, если система МКИ выполняет прослушивание на одном из интерфейсов, входящих во внутреннюю сеть информационного обмена, а также при правильном конфигурировании компонента Grafana, при подключении браузером по адресу сервера  &#039;&#039;&#039;MCM-SNIFFER&#039;&#039;&#039; в соответствующих дашбордах должна появиться информация о перехваченных пакетах протокола МЭК-60870-5-104, создающих описанный выше трафик.&lt;br /&gt;
&lt;br /&gt;
=== Проверка информационного обмена по протоколу MODBUS ===&lt;br /&gt;
&lt;br /&gt;
Работа стенда по протоколу MODBUS осуществляется посредством ПО &#039;&#039;&#039;Modbus Poll&#039;&#039;&#039;, запущенного на узле &#039;&#039;&#039;MDM-NODE2&#039;&#039;&#039; (см. схему). Modbus Poll подключается по протоколу MODBUS-TCP к железке-конвертору ZLAN (см. схему) и через него опрашивает устройства (температурные датчики), подключенные к RS-485-портам №1, №2 и №3 конвертора ZLAN. Также на датчиках изменены их базовые адреса следующим образом: ID = 5 – на 1 порту RS-485, ID = 6 – на 2 порту RS-485, ID = 7 – на 3 порту RS-485.&lt;br /&gt;
&lt;br /&gt;
Для доступа к датчикам на конверторе ZLAN установлены адреса IP-портов с помощью прилагающейся к нему софтины &#039;&#039;&#039;ZLVirCom&#039;&#039;&#039;, которую можно запустить с рабочего стола на узле &#039;&#039;&#039;MCM-NODE2&#039;&#039;&#039; (&#039;&#039;&#039;Примечание:&#039;&#039;&#039; &#039;&#039;&#039;в текущей конфигурации стенда вся работа с MODBUS производится с этого узла&#039;&#039;&#039;). ZLVirCom сам опрашивает локальную сеть и находит там конвертор, после чего подключается к нему, и его можно конфигурировать:&lt;br /&gt;
[[Файл:Modbus1.png|центр|Главное окно ZLVirCom|обрамить]]&lt;br /&gt;
&lt;br /&gt;
При нажатии на кнопку Device в верхнем меню открывается список портов, в котором можно провалиться в конкретный порт и выполнить его настройки:&lt;br /&gt;
[[Файл:Modbus2.png|центр|мини|848x848пкс|Окно со списком портов RS-485 на устройстве ZLAN5843]]&lt;br /&gt;
&lt;br /&gt;
Настройки портов, к которым подключены датчики, должны выглядеть следующим образом:&lt;br /&gt;
[[Файл:Modbus3.png|центр|обрамить|Окно настройки параметров выбранного порта RS-485 на устройстве ZLAN]]&lt;br /&gt;
&lt;br /&gt;
Если все настроено корректно, то Modbus Poll сможет подключится к соответствующим RS-485-портам конвертора по указанному для них IP Address и Port (см. скриншот).&lt;br /&gt;
&lt;br /&gt;
3.      Непосредственно для выполнения опроса датчиков нужно запустить Modbus Poll с рабочего стола на узле MCM-NODE2:&lt;br /&gt;
&lt;br /&gt;
Далее в меню Connection выбрать Connect (или нажать F3), откроется окно настроек подключения, где нужно указать следующие параметры:&lt;br /&gt;
&lt;br /&gt;
В поле IP Address or Node Name нужно указать адрес порта, который будем опрашивать (соответственно, 10.0.0.241, .242, .243 для портов 1, 2, 3 конвертора.&lt;br /&gt;
&lt;br /&gt;
Далее будет выполнено подключение к железке ZLAN и при попытке опроса вылезет ошибка “Timeout error”, так как не сконфигурированы параметры опроса.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Для их настройки надо зайти в меню Setup -&amp;gt; Read/Write Definition (или нажать F8) и указать следующие параметры:&lt;br /&gt;
&lt;br /&gt;
В поле Slave ID нужно указать адрес датчика (5, 6 или 7), в поле Function выбрать «04 Read Input Registers (3х)», в полях Address и Quantity указать значение 1. Если номер датчика соответствует выбранному при подключении порту, то опрос пойдет корректно (Tx увеличивается, Err = 0):&lt;br /&gt;
&lt;br /&gt;
Результат опроса можно увидеть, нажав кнопку Display communication traffic в панели инструментов (Tx – байты с запросом, Rx – байты ответа от датчика). В случае ошибки опроса или недоступности устройства Rx в трафике не будет, а будут только строки с отправкой (Tx).&lt;br /&gt;
&lt;br /&gt;
4.     Весь трафик между Modbus Poll на узле MCM-NODE2 и каким-либо из датчиков пролетает через сервер МКИ (который MCM-SNIFFER, см. схему). Соответственно, если в настройках перехвата указать порт на сервере,  к которому подключен MCM-NODE2 (enp7s0 на данный момент), то еНОД.МКИ на сервере MCM-SNIFFER сможет перехватывать трафик MODBUS и, соответственно, его анализировать.&lt;/div&gt;</summary>
		<author><name>Dima</name></author>
	</entry>
	<entry>
		<id>https://wiki.entcor.ru/index.php?title=%D0%9C%D0%9A%D0%98&amp;diff=435</id>
		<title>МКИ</title>
		<link rel="alternate" type="text/html" href="https://wiki.entcor.ru/index.php?title=%D0%9C%D0%9A%D0%98&amp;diff=435"/>
		<updated>2025-03-28T09:18:00Z</updated>

		<summary type="html">&lt;p&gt;Dima: /* Проверка информационного обмена по протоколу MODBUS */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= &#039;&#039;&#039;Система мониторинга качества измерений (МКИ)&#039;&#039;&#039; =&lt;br /&gt;
&lt;br /&gt;
=== Схема тестового стенда ===&lt;br /&gt;
[[Файл:Стенд для МКИ (декабрь 2024).drawio.png|альт=Стенд для МКИ (декабрь 2024)|мини|978x978пкс|Стенд для МКИ (декабрь 2024)]]&lt;br /&gt;
&lt;br /&gt;
=== Подключение и настойка оборудования ===&lt;br /&gt;
Подключение компонентов стенда производится в соответствии со схемой подключения. При этом для корректного выполнения дальнейших инструкций подключение устройств к физическим портам и сетевые настройки интерфейсов должны быть выполнены  согласно табл. 1:&lt;br /&gt;
&lt;br /&gt;
==== Таблица 1 - Параметры сетевых настроек устройств стенда ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Хост&lt;br /&gt;
!Порт&lt;br /&gt;
!Интерфейс&lt;br /&gt;
!IP&lt;br /&gt;
!Подключен к &lt;br /&gt;
устройство/порт&lt;br /&gt;
!Описание&lt;br /&gt;
|-&lt;br /&gt;
|MCM-SNIFFER&lt;br /&gt;
|Eth1&lt;br /&gt;
|enp5s0&lt;br /&gt;
|192.168.2.15/24&lt;br /&gt;
|L2 Switch&lt;br /&gt;
|Интерфейс управления для Sniffer&lt;br /&gt;
|-&lt;br /&gt;
|MCM-SNIFFER&lt;br /&gt;
|Eth2&lt;br /&gt;
|enp6s0&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;-&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|MCM-NODE1 / Eth2&lt;br /&gt;
|Участвует в L2 Bridge&lt;br /&gt;
|-&lt;br /&gt;
|MCM-SNIFFER&lt;br /&gt;
|Eth3&lt;br /&gt;
|enp7s0&lt;br /&gt;
| -&lt;br /&gt;
|MCM-NODE2 / Eth2&lt;br /&gt;
|Участвует в L2 Bridge&lt;br /&gt;
|-&lt;br /&gt;
|MCM-SNIFFER&lt;br /&gt;
|Eth4&lt;br /&gt;
|enp8s0&lt;br /&gt;
| -&lt;br /&gt;
|ZLAN / Eth&lt;br /&gt;
|Участвует в L2 Bridge&lt;br /&gt;
|-&lt;br /&gt;
|MCM-NODE1&lt;br /&gt;
|Eth1&lt;br /&gt;
|EXTERNAL&lt;br /&gt;
|192.168.2.156/24&lt;br /&gt;
|L2 Switch&lt;br /&gt;
|Интерфейс управления для Node1&lt;br /&gt;
|-&lt;br /&gt;
|MCM-NODE1&lt;br /&gt;
|Eth2&lt;br /&gt;
|INTERNAL&lt;br /&gt;
|10.0.0.1/24&lt;br /&gt;
|MCM-SNIFFER / Eth2&lt;br /&gt;
|Интерфейс обмена данными для Node1&lt;br /&gt;
|-&lt;br /&gt;
|MCM-NODE2&lt;br /&gt;
|Eth1&lt;br /&gt;
|EXTERNAL&lt;br /&gt;
|192.168.2.195/24&lt;br /&gt;
|L2 Switch&lt;br /&gt;
|Интерфейс управления для Node2&lt;br /&gt;
|-&lt;br /&gt;
|MCM-NODE2&lt;br /&gt;
|Eth2&lt;br /&gt;
|INTERNAL&lt;br /&gt;
|10.0.0.2/24&lt;br /&gt;
|MCM-SNIFFER / Eth3&lt;br /&gt;
|Интерфейс обмена данными для Node2&lt;br /&gt;
|-&lt;br /&gt;
|ZLAN&lt;br /&gt;
|Eth&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
|MCM-SNIFFER / Eth4&lt;br /&gt;
|Интерфейс обмена данными для ZLAN&lt;br /&gt;
|-&lt;br /&gt;
|ZLAN&lt;br /&gt;
|RS-485 #1&lt;br /&gt;
|ZLDEV0001&lt;br /&gt;
|10.0.0.241/24&lt;br /&gt;
|&lt;br /&gt;
|Подключение датчика с MODBUS-адресом 5&lt;br /&gt;
|-&lt;br /&gt;
|ZLAN&lt;br /&gt;
|RS-485 #2&lt;br /&gt;
|ZLDEV0002&lt;br /&gt;
|10.0.0.242/24&lt;br /&gt;
|&lt;br /&gt;
|Подключение датчика с MODBUS-адресом 6&lt;br /&gt;
|-&lt;br /&gt;
|ZLAN&lt;br /&gt;
|RS-485 #3&lt;br /&gt;
|ZLDEV0003&lt;br /&gt;
|10.0.0.243/24&lt;br /&gt;
|&lt;br /&gt;
|Подключение датчика с MODBUS-адресом 7&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Развертывание системы ===&lt;br /&gt;
&lt;br /&gt;
==== Установка базовых систем ====&lt;br /&gt;
Установка ОС Windows на компьютерах &#039;&#039;&#039;MCM-NODE1&#039;&#039;&#039; и &#039;&#039;&#039;MCM-NODE2&#039;&#039;&#039; производится обычным образом, при этом  соответствующим сетевым интерфейсам должны быть присвоены адреса согласно данным табл. 1, также для совместимости должны быть указаны следующие параметры настройки системы:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Таблица 2 - Параметры настройки узлов MCM-NODE1 и MCM-NODE2&lt;br /&gt;
!Параметр&lt;br /&gt;
!Значение&lt;br /&gt;
|-&lt;br /&gt;
|Имя компьютера&lt;br /&gt;
|MCM-NODE1/MCM-NODE2&lt;br /&gt;
|-&lt;br /&gt;
|Имя пользователя c правами локального администратора&lt;br /&gt;
|entcor&lt;br /&gt;
|-&lt;br /&gt;
|Пароль&lt;br /&gt;
|1&lt;br /&gt;
|}&lt;br /&gt;
Установка базовой системы Ubuntu Server 24.0x на компьютер &#039;&#039;&#039;MCM-SNIFFER&#039;&#039;&#039; производится обычным образом в режиме инсталляции по умолчанию, при этом при выборе параметров установки необходимо включить установку сервера OpenSSH, а также для совместимости следует  указать следующие значения прочих параметров:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Таблица 3 - Параметры настройки узла MCM-SNIFFER&lt;br /&gt;
!Параметр&lt;br /&gt;
!Значение&lt;br /&gt;
|-&lt;br /&gt;
|Имя компьютера&lt;br /&gt;
|MCM-SNIFFER&lt;br /&gt;
|-&lt;br /&gt;
|Имя пользователя c правами root                       &lt;br /&gt;
|entcor&lt;br /&gt;
|-&lt;br /&gt;
|Пароль&lt;br /&gt;
|ng3-dcc20&lt;br /&gt;
|}&lt;br /&gt;
После установки системы необходимо установить обновления:&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt full-upgrade&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
а также проверить доступ к серверу по SSH с компьютера администратора:&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
ssh entcor@192.168.2.15 (текущий адрес сервера MCM-SNIFFER)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&#039;&#039;&#039;Примечание:&#039;&#039;&#039; для удобства работы с файлами настоятельно рекомендуется также первым делом вкатить Midnight Commander:&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt install mc&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Также в дальнейшем целесообразно запускать Midnight Commander через &#039;&#039;&#039;sudo&#039;&#039;&#039;:&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
sudo mc&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Это позволит, во-первых, невозбранно редактировать все необходимые файлы и, во-вторых, при скрытии окон Midnight Commander выполнять из-под него с командной строки команды в режиме root без необходимости париться с sudo для каждой отдельной команды.&lt;br /&gt;
&lt;br /&gt;
==== Настройка сетевых интерфейсов ====&lt;br /&gt;
Для корректной работы сетевых интерфейсов и сохранения их параметров после перезагрузки сервера необходимо в каталоге &#039;&#039;&#039;/etc/netplan&#039;&#039;&#039; создать файл с расширением .yaml (например, &#039;&#039;&#039;01-network.yaml&#039;&#039;&#039;) со следующим содержимым:&amp;lt;syntaxhighlight lang=&amp;quot;yaml&amp;quot;&amp;gt;&lt;br /&gt;
network:&lt;br /&gt;
    version: 2&lt;br /&gt;
    ethernets:&lt;br /&gt;
        enp5s0:&lt;br /&gt;
            dhcp4: false&lt;br /&gt;
            addresses: &lt;br /&gt;
                - 192.168.2.15/24&lt;br /&gt;
            routes:&lt;br /&gt;
              - to: default&lt;br /&gt;
                via: 192.168.2.254&lt;br /&gt;
            nameservers: &lt;br /&gt;
                addresses: [192.168.2.60, 176.114.16.33]&lt;br /&gt;
        enp6s0:&lt;br /&gt;
            dhcp4: false&lt;br /&gt;
        enp7s0:&lt;br /&gt;
            dhcp4: false&lt;br /&gt;
        enp8s0:&lt;br /&gt;
            dhcp4: false&lt;br /&gt;
    bridges:&lt;br /&gt;
        docker0:&lt;br /&gt;
            interfaces: [enp6s0, enp7s0, enp8s0]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&#039;&#039;&#039;Примечания:&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
# Для интерфейса &#039;&#039;&#039;enp5s0&#039;&#039;&#039; вместо 192.168.2.15/24 следует указать нужный статический адрес сервера, также при необходимости следует указать фактически используемые адреса шлюза и DNS (в &#039;&#039;&#039;via&#039;&#039;&#039; и &#039;&#039;&#039;nameservers&#039;&#039;&#039; соответственно).&lt;br /&gt;
# В файле конфигурации заранее определяется мост &#039;&#039;&#039;docker0&#039;&#039;&#039;, который будет использоваться Docker&#039;ом после его установки. Таким образом, интерфейсы &#039;&#039;&#039;enp6s0/enp7s0/enp8s0&#039;&#039;&#039; заранее подключаются к мосту &#039;&#039;&#039;docker0&#039;&#039;&#039;, и, соответственно, в будущем будут доступны из Docker.&lt;br /&gt;
# Для удобства проще скопировать готовый файл &#039;&#039;&#039;01-network.yaml&#039;&#039;&#039; с компьютера администратора и положить его в &#039;&#039;&#039;/etc/netplan&#039;&#039;&#039; .&lt;br /&gt;
# Как показывает практика, существующий в &#039;&#039;&#039;/etc/netplan&#039;&#039;&#039; файл конфигурации по умолчанию &#039;&#039;&#039;50-cloud-init.yaml&#039;&#039;&#039; лучше переименовать во что-то типа &#039;&#039;&#039;50-cloud-init.yaml.bak,&#039;&#039;&#039; иначе у интерфейса &#039;&#039;&#039;enp5s0&#039;&#039;&#039; будет образовываться 2 адреса - статический из настроек в &#039;&#039;&#039;01-network.yaml&#039;&#039;&#039; и динамический, который будет дополнительно прилетать по DHCP и создавать путаницу. Вроде бы, должно лечиться установкой в файле &#039;&#039;&#039;50-cloud-init.yaml&#039;&#039;&#039; для интерфейса &#039;&#039;&#039;enp5s0&#039;&#039;&#039; параметра &#039;&#039;&#039;dchp4: false&#039;&#039;&#039;, но по факту не помогает, поэтому лучше от греха подальше во избежание конфликтов держать в &#039;&#039;&#039;/etc/netplan&#039;&#039;&#039;  только один файл &#039;&#039;&#039;01-network.yaml&#039;&#039;&#039; с настройками интерфейсов.&lt;br /&gt;
# Для применения настроек интерфейсов и сохранения настроек после перезагрузки сервера рекомендуется выполнение &#039;&#039;&#039;netplan try&#039;&#039;&#039; . Это позволит проверить конфигурацию перед применением и отловить возможные ошибки. Также рекомендуется в обязательном порядке выполнить контрольную перезагрузку сервера, чтобы убедиться, что настройки после нее восстанавливаются правильно.&lt;br /&gt;
# Для проверки работоспособности моста &#039;&#039;&#039;docker0&#039;&#039;&#039; перед настройкой интерфейсов следует запустить постоянный пинг (с параметром &#039;&#039;&#039;-t&#039;&#039;&#039;) с &#039;&#039;&#039;MCM-NODE1&#039;&#039;&#039; (10.0.0.1) на &#039;&#039;&#039;MCM-NODE2&#039;&#039;&#039; (10.0.0.2) и наоборот и убедиться в том, что узлы недоступны друг для друга. После настройки конфигурации интерфейсов и выполнения &#039;&#039;&#039;netplan try&#039;&#039;&#039; следует проверить, что пинг с MCM-NODE1 (10.0.0.1) на MCM-NODE2 (10.0.0.2) в обе стороны проходит успешно, т.е. узлы общаются между собой напрямую через мост &#039;&#039;&#039;docker0&#039;&#039;&#039;.&lt;br /&gt;
==== Установка сертификата Entcor ====&lt;br /&gt;
С компьютера администратора следует скопировать файл сертификата &#039;&#039;&#039;entcor.crt&#039;&#039;&#039; на узел &#039;&#039;&#039;MCM-SNIFFER&#039;&#039;&#039; по следующему пути (необходимо использовать фактический IP-адрес сервера MCM-SNIFFER):&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
scp entcor.crt entcor@192.168.2.23:/home/entcor&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Затем на компьютере &#039;&#039;&#039;MCM-SNIFFER&#039;&#039;&#039; следует перенести сертификат в необходимый каталог и выполнить его обновление:&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
sudo mv entcor.crt /usr/local/share/ca-certificates&lt;br /&gt;
sudo update-ca-certificates &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&#039;&#039;&#039;Примечание:&#039;&#039;&#039; после обновления сертификатов необходимо выполнить перезагрузку компьютера &#039;&#039;&#039;MCM-SNIFFER&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==== Установка Docker ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
# Add Docker&#039;s official GPG key:&lt;br /&gt;
&lt;br /&gt;
sudo apt-get update&lt;br /&gt;
sudo apt-get install ca-certificates curl&lt;br /&gt;
sudo install -m 0755 -d /etc/apt/keyrings&lt;br /&gt;
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc&lt;br /&gt;
sudo chmod a+r /etc/apt/keyrings/docker.asc&lt;br /&gt;
&lt;br /&gt;
# Add the repository to Apt sources:&lt;br /&gt;
&lt;br /&gt;
echo \&lt;br /&gt;
&amp;quot;deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \&lt;br /&gt;
$(. /etc/os-release &amp;amp;&amp;amp; echo &amp;quot;$VERSION_CODENAME&amp;quot;) stable&amp;quot; | \&lt;br /&gt;
sudo tee /etc/apt/sources.list.d/docker.list &amp;gt; /dev/null&lt;br /&gt;
&lt;br /&gt;
sudo apt-get update&lt;br /&gt;
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Ссылка на руководство: https://docs.docker.com/engine/install/ubuntu/#install-using-the-repository&lt;br /&gt;
&lt;br /&gt;
==== Установка компонентов системы МКИ ====&lt;br /&gt;
Установка компонентов системы МКИ может осуществляться посредством получения последней версии инсталляционного пакета (предпочтительно), либо из репозитория Git (может применяться для целей отладки или быстрого накатывания патчей/фикса ошибок).&lt;br /&gt;
&lt;br /&gt;
==== Вариант 1: Установка с помощью инсталляционного пакета ====&lt;br /&gt;
Получение последней версии инсталляционного пакета производится с FTP-сервера Jenkins. Для этого необходимо подключиться к нему с устройства МКИ по протоколу FTP, используя соответствующую пару логин-пароль, и выкачать оттуда файлы &#039;&#039;&#039;install.sh&#039;&#039;&#039; и &#039;&#039;&#039;latest.tar.gz&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Перед запуском инсталляционного скрипта install.sh необходимо установить для него права на выполнение посредством команды chmod:&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
chmod +x install.sh&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Также для корректной работы стека common необходимо предварительно авторизоваться под нужной учетной записью в docker-репозитории Harbor:&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
docker login registry.entcor&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Далее непосредственное развертывание контейнеров производится запуском на выполнение скрипта &#039;&#039;&#039;install.sh&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
После завершения установки компонентов ПАК «еNODE.МКИ» следует выполнить переход в каталог &#039;&#039;&#039;/opt/e-node/deploy&#039;&#039;&#039;, куда выполнялось развертывание компонентов системы инсталляционным скриптом &#039;&#039;&#039;install.sh&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Далее в том же каталоге следует создать/отредактировать файла &#039;&#039;&#039;.env&#039;&#039;&#039;, в котором следует установить следующие параметры:&lt;br /&gt;
&lt;br /&gt;
* MONITOR_DATA_IF = &amp;lt;имя интерфейса на узле &#039;&#039;&#039;MCM-SNIFFER&#039;&#039;&#039;,  на котором выполняется прослушка, например, enp7s&lt;br /&gt;
* MODE = enode &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Примечание:&#039;&#039;&#039; вообще-то для работы МКИ параметр MODE должен иметь  значение asutp, но работает пока только вот так. &lt;br /&gt;
&lt;br /&gt;
==== Вариант 2: Установка непосредственно из репозитория Git ====&lt;br /&gt;
&lt;br /&gt;
Получение последней версии инсталляционного пакета производится из  Git-репозитория &#039;&#039;&#039;e-deploy&#039;&#039;&#039;, находящегося по адресу  &#039;&#039;&#039;&amp;lt;nowiki&amp;gt;http://192.168.2.61&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;, (нужно будет ввести соответствующие логин-пароль для доступа к репозиторию, а также выполнить переключение на ветку &#039;&#039;&#039;develop&#039;&#039;&#039;): &amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
git clone http://192.168.2.61/e-node/e-deploy.git&lt;br /&gt;
git switch develop&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Далее следует авторизоваться под нужной учетной записью в Docker-репозитории Harbor:&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
docker login registry.entcor&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;после чего нужно перейти в каталог &#039;&#039;&#039;e-deploy&#039;&#039;&#039; (в том каталоге, где выполнялся git clone) и выполнить следующую команду:&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
./enode.sh init&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Далее в том же каталоге следует создать/отредактировать файла &#039;&#039;&#039;.env&#039;&#039;&#039;, в котором следует установить следующие параметры:&lt;br /&gt;
&lt;br /&gt;
MONITOR_DATA_IF = &amp;lt;имя интерфейса на узле &#039;&#039;&#039;MCM-SNIFFER&#039;&#039;&#039;,  на котором выполняется прослушка, например, enp7s0&amp;gt; &lt;br /&gt;
&lt;br /&gt;
MODE = enode &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Примечание:&#039;&#039;&#039; вообще-то для работы МКИ параметр MODE должен иметь  значение asutp, но работает пока только вот так. &lt;br /&gt;
==== Запуск компонентов системы МКИ ====&lt;br /&gt;
После установки компонентов МКИ можно выполнить их запуск следующей командой: &amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
enode &amp;lt;имя стека&amp;gt; start&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&#039;&#039;&#039;Примечание:&#039;&#039;&#039; названия нужных стеков можно посмотреть в каталоге &#039;&#039;&#039;stacks&#039;&#039;&#039;  в &#039;&#039;&#039;e-deploy&#039;&#039;&#039; (имена стеков соответствуют именам подкаталогов). Как минимум должны быть запущены следующие стеки:&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
enode analytic start&lt;br /&gt;
enode common start&lt;br /&gt;
enode asutp start&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&#039;&#039;&#039;Примечание:&#039;&#039;&#039;  стек &#039;&#039;&#039;analytic&#039;&#039;&#039; рекомендуется запускать перед стеком &#039;&#039;&#039;common&#039;&#039;&#039; из-за каких-то особенностей функционирования:&lt;br /&gt;
&lt;br /&gt;
Проверка запуска сервисов производится обычным образом с помощью команды:&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
docker ps&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Проверка информационного обмена по протоколу МЭК-60870-5-104 ===&lt;br /&gt;
Проверка информационного обмена по протоколу МЭК-60870-5-104 производится между узлами стенда &#039;&#039;&#039;MCM-NODE1&#039;&#039;&#039; и &#039;&#039;&#039;MCM-NODE2&#039;&#039;&#039; посредством программного обеспечения  IEC Test, которое эмулирует передачу пакетов протокола МЭК-60870-5-104 поверх соединения Ethernet. &lt;br /&gt;
&lt;br /&gt;
Для проверки работы протокола МЭК-60870-5-104 во внутренней сети обмена на одном из узлов ПО IEC Test запускается в режиме сервера с показанными ниже настройками: &lt;br /&gt;
&lt;br /&gt;
TCP/IP Link Role - Server &lt;br /&gt;
&lt;br /&gt;
IP Address - адрес внутреннего интерфейса для информационного обмена (в данном примере - 10.0.0.2) &lt;br /&gt;
&lt;br /&gt;
Далее устанавливается канал обмена последовательным нажатием кнопок &amp;quot;Build String&amp;quot; и &amp;quot;Open Channel&amp;quot; (индикатор &amp;quot;1 channel&amp;quot; должен стать темно-зеленым). &lt;br /&gt;
[[Файл:IEC Test - 2.png|мини|794x794пкс|Настройки программы IEC Test для организации обмена  между узлами стенда MCM-NODE1 и MCM-NODE2 по протоколу МЭК-60870-5-104 (серверная часть)|центр]]Соответственно, на другом узле ПО IEC Test запускается в режиме клиента с показанными ниже настройками:&lt;br /&gt;
&lt;br /&gt;
TCP/IP Link Role - Client &lt;br /&gt;
&lt;br /&gt;
IP Address - адрес сервера, находящегося во внутренней сети для информационного обмена  (в данном примере - 10.0.0.2). &lt;br /&gt;
&lt;br /&gt;
Далее устанавливается канал обмена последовательным нажатием кнопок &amp;quot;Build String&amp;quot; и &amp;quot;Open Channel&amp;quot; (индикатор &amp;quot;1 channel&amp;quot; должен стать темно-зеленым).&lt;br /&gt;
&lt;br /&gt;
Для начала непосредственно информационного взаимодействия следует послать с клиента на сервер специальную команду посредством нажатия кнопки &amp;quot;Start DT&amp;quot; (индикатор &amp;quot;1 channel&amp;quot; должен стать светло-зеленым как показано на рисунке ниже). С этого момента канал обмена установлен и активирован, а между экземплярами ПО IEC Test могут передаваться пакеты протокола МЭК-60870-5-104.&lt;br /&gt;
[[Файл:IEC Test - 3.png|центр|мини|791x791пкс|Настройки программы IEC Test для организации обмена  между узлами стенда MCM-NODE1 и MCM-NODE2 по протоколу МЭК-60870-5-104 (клиентская часть)]]Для создания трафика по протоколу МЭК-60870-5-104 между узлами &#039;&#039;&#039;MCM-NODE1&#039;&#039;&#039; и &#039;&#039;&#039;MCM-NODE2&#039;&#039;&#039; следует использовать специальный макрос, имитирующий последовательную передачу данных протокола МЭК-60870-5-104 между узлами. Для этого необходимо на любом из узлов в ПО IEC Test перейти во вкладку &amp;quot;870 Commander&amp;quot;, нажатием кнопки &amp;quot;Загрузить&amp;quot; загрузить макрос &amp;quot;ДУ по циклу 5 сек.rtm&amp;quot; и выполнить его нажатием кнопки &amp;quot;Выполнить&amp;quot;:&lt;br /&gt;
[[Файл:IEC Test - 4.png|альт=Выполнение макроса в ПО IEC Test для создания трафика по протоколу МЭК-60870-5-104|центр|мини|797x797пкс|Выполнение макроса в ПО IEC Test для создания трафика по протоколу МЭК-60870-5-104]]В случае правильно настроенных узлов стенда и экземпляров ПО IEC Test на принимающем узле во вкладке &amp;quot;870 Commander&amp;quot; в соответствующем окне можно будет увидеть информацию о принятых сообщениях, отправленных макросом с передающего узла, что свидетельствует о состоявшемся информационном обмене по протоколу МЭК-60870-5-104 между узлами.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Примечание:&#039;&#039;&#039; в случае, если система МКИ выполняет прослушивание на одном из интерфейсов, входящих во внутреннюю сеть информационного обмена, а также при правильном конфигурировании компонента Grafana, при подключении браузером по адресу сервера  &#039;&#039;&#039;MCM-SNIFFER&#039;&#039;&#039; в соответствующих дашбордах должна появиться информация о перехваченных пакетах протокола МЭК-60870-5-104, создающих описанный выше трафик.&lt;br /&gt;
&lt;br /&gt;
=== Проверка информационного обмена по протоколу MODBUS ===&lt;br /&gt;
&lt;br /&gt;
Работа стенда по протоколу MODBUS осуществляется посредством ПО Modbus Poll, запущенного на узле MDM-NODE2 (см. схему). Modbus Poll подключается по протоколу MODBUS-TCP к железке-конвертору ZLAN (см. схему) и через него опрашивает устройства (температурные датчики), подключенные к RS-485-портам №1, №2 и №3 конвертора ZLAN. Также на датчиках изменены их базовые адреса следующим образом: ID = 5 – на 1 порту RS-485, ID = 6 – на 2 порту RS-485, ID = 7 – на 3 порту RS-485.&lt;br /&gt;
&lt;br /&gt;
Для доступа к датчикам на конверторе ZLAN установлены адреса IP-портов с помощью прилагающейся к нему софтины ZLVirCom, которую можно запустить с рабочего стола на узле MCM-NODE2 (&#039;&#039;&#039;Примечание:&#039;&#039;&#039; &#039;&#039;&#039;в текущей конфигурации стенда вся работа с MODBUS производится с этого узла&#039;&#039;&#039;). ZLVirCom сам опрашивает локальную сеть и находит там конвертор, после чего подключается к нему, и его можно конфигурировать:&lt;br /&gt;
[[Файл:Modbus1.png|центр|мини|794x794пкс|Главное окно ZLVirCom]]&lt;br /&gt;
&lt;br /&gt;
При нажатии на кнопку Device в верхнем меню открывается список портов, в котором можно провалиться в конкретный порт и выполнить его настройки:&lt;br /&gt;
[[Файл:Modbus2.png|центр|мини|848x848пкс|Окно со списком портов RS-485 на устройстве ZLAN5843]]&lt;br /&gt;
&lt;br /&gt;
Настройки портов, к которым подключены датчики, должны выглядеть следующим образом:&lt;br /&gt;
[[Файл:Modbus3.png|центр|обрамить|Окно настройки параметров выбранного порта RS-485 на устройстве ZLAN]]&lt;br /&gt;
&lt;br /&gt;
Если все настроено корректно, то Modbus Poll сможет подключится к соответствующим RS-485-портам конвертора по указанному для них IP Address и Port (см. скриншот).&lt;br /&gt;
&lt;br /&gt;
3.      Непосредственно для выполнения опроса датчиков нужно запустить Modbus Poll с рабочего стола на узле MCM-NODE2:&lt;br /&gt;
&lt;br /&gt;
Далее в меню Connection выбрать Connect (или нажать F3), откроется окно настроек подключения, где нужно указать следующие параметры:&lt;br /&gt;
&lt;br /&gt;
В поле IP Address or Node Name нужно указать адрес порта, который будем опрашивать (соответственно, 10.0.0.241, .242, .243 для портов 1, 2, 3 конвертора.&lt;br /&gt;
&lt;br /&gt;
Далее будет выполнено подключение к железке ZLAN и при попытке опроса вылезет ошибка “Timeout error”, так как не сконфигурированы параметры опроса.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Для их настройки надо зайти в меню Setup -&amp;gt; Read/Write Definition (или нажать F8) и указать следующие параметры:&lt;br /&gt;
&lt;br /&gt;
В поле Slave ID нужно указать адрес датчика (5, 6 или 7), в поле Function выбрать «04 Read Input Registers (3х)», в полях Address и Quantity указать значение 1. Если номер датчика соответствует выбранному при подключении порту, то опрос пойдет корректно (Tx увеличивается, Err = 0):&lt;br /&gt;
&lt;br /&gt;
Результат опроса можно увидеть, нажав кнопку Display communication traffic в панели инструментов (Tx – байты с запросом, Rx – байты ответа от датчика). В случае ошибки опроса или недоступности устройства Rx в трафике не будет, а будут только строки с отправкой (Tx).&lt;br /&gt;
&lt;br /&gt;
4.     Весь трафик между Modbus Poll на узле MCM-NODE2 и каким-либо из датчиков пролетает через сервер МКИ (который MCM-SNIFFER, см. схему). Соответственно, если в настройках перехвата указать порт на сервере,  к которому подключен MCM-NODE2 (enp7s0 на данный момент), то еНОД.МКИ на сервере MCM-SNIFFER сможет перехватывать трафик MODBUS и, соответственно, его анализировать.&lt;/div&gt;</summary>
		<author><name>Dima</name></author>
	</entry>
	<entry>
		<id>https://wiki.entcor.ru/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Modbus3.png&amp;diff=434</id>
		<title>Файл:Modbus3.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.entcor.ru/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Modbus3.png&amp;diff=434"/>
		<updated>2025-03-28T09:16:20Z</updated>

		<summary type="html">&lt;p&gt;Dima: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Окно настройки параметров выбранного порта RS-485 на устройстве ZLAN&lt;/div&gt;</summary>
		<author><name>Dima</name></author>
	</entry>
	<entry>
		<id>https://wiki.entcor.ru/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Modbus2.png&amp;diff=433</id>
		<title>Файл:Modbus2.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.entcor.ru/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Modbus2.png&amp;diff=433"/>
		<updated>2025-03-28T09:10:57Z</updated>

		<summary type="html">&lt;p&gt;Dima: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Окно с перечнем портов RS-485 на устройстве ZLAN&lt;/div&gt;</summary>
		<author><name>Dima</name></author>
	</entry>
	<entry>
		<id>https://wiki.entcor.ru/index.php?title=%D0%9C%D0%9A%D0%98&amp;diff=432</id>
		<title>МКИ</title>
		<link rel="alternate" type="text/html" href="https://wiki.entcor.ru/index.php?title=%D0%9C%D0%9A%D0%98&amp;diff=432"/>
		<updated>2025-03-28T09:09:05Z</updated>

		<summary type="html">&lt;p&gt;Dima: /* Проверка информационного обмена по протоколу МЭК-60870-5-104 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= &#039;&#039;&#039;Система мониторинга качества измерений (МКИ)&#039;&#039;&#039; =&lt;br /&gt;
&lt;br /&gt;
=== Схема тестового стенда ===&lt;br /&gt;
[[Файл:Стенд для МКИ (декабрь 2024).drawio.png|альт=Стенд для МКИ (декабрь 2024)|мини|978x978пкс|Стенд для МКИ (декабрь 2024)]]&lt;br /&gt;
&lt;br /&gt;
=== Подключение и настойка оборудования ===&lt;br /&gt;
Подключение компонентов стенда производится в соответствии со схемой подключения. При этом для корректного выполнения дальнейших инструкций подключение устройств к физическим портам и сетевые настройки интерфейсов должны быть выполнены  согласно табл. 1:&lt;br /&gt;
&lt;br /&gt;
==== Таблица 1 - Параметры сетевых настроек устройств стенда ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Хост&lt;br /&gt;
!Порт&lt;br /&gt;
!Интерфейс&lt;br /&gt;
!IP&lt;br /&gt;
!Подключен к &lt;br /&gt;
устройство/порт&lt;br /&gt;
!Описание&lt;br /&gt;
|-&lt;br /&gt;
|MCM-SNIFFER&lt;br /&gt;
|Eth1&lt;br /&gt;
|enp5s0&lt;br /&gt;
|192.168.2.15/24&lt;br /&gt;
|L2 Switch&lt;br /&gt;
|Интерфейс управления для Sniffer&lt;br /&gt;
|-&lt;br /&gt;
|MCM-SNIFFER&lt;br /&gt;
|Eth2&lt;br /&gt;
|enp6s0&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;-&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|MCM-NODE1 / Eth2&lt;br /&gt;
|Участвует в L2 Bridge&lt;br /&gt;
|-&lt;br /&gt;
|MCM-SNIFFER&lt;br /&gt;
|Eth3&lt;br /&gt;
|enp7s0&lt;br /&gt;
| -&lt;br /&gt;
|MCM-NODE2 / Eth2&lt;br /&gt;
|Участвует в L2 Bridge&lt;br /&gt;
|-&lt;br /&gt;
|MCM-SNIFFER&lt;br /&gt;
|Eth4&lt;br /&gt;
|enp8s0&lt;br /&gt;
| -&lt;br /&gt;
|ZLAN / Eth&lt;br /&gt;
|Участвует в L2 Bridge&lt;br /&gt;
|-&lt;br /&gt;
|MCM-NODE1&lt;br /&gt;
|Eth1&lt;br /&gt;
|EXTERNAL&lt;br /&gt;
|192.168.2.156/24&lt;br /&gt;
|L2 Switch&lt;br /&gt;
|Интерфейс управления для Node1&lt;br /&gt;
|-&lt;br /&gt;
|MCM-NODE1&lt;br /&gt;
|Eth2&lt;br /&gt;
|INTERNAL&lt;br /&gt;
|10.0.0.1/24&lt;br /&gt;
|MCM-SNIFFER / Eth2&lt;br /&gt;
|Интерфейс обмена данными для Node1&lt;br /&gt;
|-&lt;br /&gt;
|MCM-NODE2&lt;br /&gt;
|Eth1&lt;br /&gt;
|EXTERNAL&lt;br /&gt;
|192.168.2.195/24&lt;br /&gt;
|L2 Switch&lt;br /&gt;
|Интерфейс управления для Node2&lt;br /&gt;
|-&lt;br /&gt;
|MCM-NODE2&lt;br /&gt;
|Eth2&lt;br /&gt;
|INTERNAL&lt;br /&gt;
|10.0.0.2/24&lt;br /&gt;
|MCM-SNIFFER / Eth3&lt;br /&gt;
|Интерфейс обмена данными для Node2&lt;br /&gt;
|-&lt;br /&gt;
|ZLAN&lt;br /&gt;
|Eth&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
|MCM-SNIFFER / Eth4&lt;br /&gt;
|Интерфейс обмена данными для ZLAN&lt;br /&gt;
|-&lt;br /&gt;
|ZLAN&lt;br /&gt;
|RS-485 #1&lt;br /&gt;
|ZLDEV0001&lt;br /&gt;
|10.0.0.241/24&lt;br /&gt;
|&lt;br /&gt;
|Подключение датчика с MODBUS-адресом 5&lt;br /&gt;
|-&lt;br /&gt;
|ZLAN&lt;br /&gt;
|RS-485 #2&lt;br /&gt;
|ZLDEV0002&lt;br /&gt;
|10.0.0.242/24&lt;br /&gt;
|&lt;br /&gt;
|Подключение датчика с MODBUS-адресом 6&lt;br /&gt;
|-&lt;br /&gt;
|ZLAN&lt;br /&gt;
|RS-485 #3&lt;br /&gt;
|ZLDEV0003&lt;br /&gt;
|10.0.0.243/24&lt;br /&gt;
|&lt;br /&gt;
|Подключение датчика с MODBUS-адресом 7&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Развертывание системы ===&lt;br /&gt;
&lt;br /&gt;
==== Установка базовых систем ====&lt;br /&gt;
Установка ОС Windows на компьютерах &#039;&#039;&#039;MCM-NODE1&#039;&#039;&#039; и &#039;&#039;&#039;MCM-NODE2&#039;&#039;&#039; производится обычным образом, при этом  соответствующим сетевым интерфейсам должны быть присвоены адреса согласно данным табл. 1, также для совместимости должны быть указаны следующие параметры настройки системы:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Таблица 2 - Параметры настройки узлов MCM-NODE1 и MCM-NODE2&lt;br /&gt;
!Параметр&lt;br /&gt;
!Значение&lt;br /&gt;
|-&lt;br /&gt;
|Имя компьютера&lt;br /&gt;
|MCM-NODE1/MCM-NODE2&lt;br /&gt;
|-&lt;br /&gt;
|Имя пользователя c правами локального администратора&lt;br /&gt;
|entcor&lt;br /&gt;
|-&lt;br /&gt;
|Пароль&lt;br /&gt;
|1&lt;br /&gt;
|}&lt;br /&gt;
Установка базовой системы Ubuntu Server 24.0x на компьютер &#039;&#039;&#039;MCM-SNIFFER&#039;&#039;&#039; производится обычным образом в режиме инсталляции по умолчанию, при этом при выборе параметров установки необходимо включить установку сервера OpenSSH, а также для совместимости следует  указать следующие значения прочих параметров:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Таблица 3 - Параметры настройки узла MCM-SNIFFER&lt;br /&gt;
!Параметр&lt;br /&gt;
!Значение&lt;br /&gt;
|-&lt;br /&gt;
|Имя компьютера&lt;br /&gt;
|MCM-SNIFFER&lt;br /&gt;
|-&lt;br /&gt;
|Имя пользователя c правами root                       &lt;br /&gt;
|entcor&lt;br /&gt;
|-&lt;br /&gt;
|Пароль&lt;br /&gt;
|ng3-dcc20&lt;br /&gt;
|}&lt;br /&gt;
После установки системы необходимо установить обновления:&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt full-upgrade&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
а также проверить доступ к серверу по SSH с компьютера администратора:&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
ssh entcor@192.168.2.15 (текущий адрес сервера MCM-SNIFFER)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&#039;&#039;&#039;Примечание:&#039;&#039;&#039; для удобства работы с файлами настоятельно рекомендуется также первым делом вкатить Midnight Commander:&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt install mc&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Также в дальнейшем целесообразно запускать Midnight Commander через &#039;&#039;&#039;sudo&#039;&#039;&#039;:&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
sudo mc&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Это позволит, во-первых, невозбранно редактировать все необходимые файлы и, во-вторых, при скрытии окон Midnight Commander выполнять из-под него с командной строки команды в режиме root без необходимости париться с sudo для каждой отдельной команды.&lt;br /&gt;
&lt;br /&gt;
==== Настройка сетевых интерфейсов ====&lt;br /&gt;
Для корректной работы сетевых интерфейсов и сохранения их параметров после перезагрузки сервера необходимо в каталоге &#039;&#039;&#039;/etc/netplan&#039;&#039;&#039; создать файл с расширением .yaml (например, &#039;&#039;&#039;01-network.yaml&#039;&#039;&#039;) со следующим содержимым:&amp;lt;syntaxhighlight lang=&amp;quot;yaml&amp;quot;&amp;gt;&lt;br /&gt;
network:&lt;br /&gt;
    version: 2&lt;br /&gt;
    ethernets:&lt;br /&gt;
        enp5s0:&lt;br /&gt;
            dhcp4: false&lt;br /&gt;
            addresses: &lt;br /&gt;
                - 192.168.2.15/24&lt;br /&gt;
            routes:&lt;br /&gt;
              - to: default&lt;br /&gt;
                via: 192.168.2.254&lt;br /&gt;
            nameservers: &lt;br /&gt;
                addresses: [192.168.2.60, 176.114.16.33]&lt;br /&gt;
        enp6s0:&lt;br /&gt;
            dhcp4: false&lt;br /&gt;
        enp7s0:&lt;br /&gt;
            dhcp4: false&lt;br /&gt;
        enp8s0:&lt;br /&gt;
            dhcp4: false&lt;br /&gt;
    bridges:&lt;br /&gt;
        docker0:&lt;br /&gt;
            interfaces: [enp6s0, enp7s0, enp8s0]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&#039;&#039;&#039;Примечания:&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
# Для интерфейса &#039;&#039;&#039;enp5s0&#039;&#039;&#039; вместо 192.168.2.15/24 следует указать нужный статический адрес сервера, также при необходимости следует указать фактически используемые адреса шлюза и DNS (в &#039;&#039;&#039;via&#039;&#039;&#039; и &#039;&#039;&#039;nameservers&#039;&#039;&#039; соответственно).&lt;br /&gt;
# В файле конфигурации заранее определяется мост &#039;&#039;&#039;docker0&#039;&#039;&#039;, который будет использоваться Docker&#039;ом после его установки. Таким образом, интерфейсы &#039;&#039;&#039;enp6s0/enp7s0/enp8s0&#039;&#039;&#039; заранее подключаются к мосту &#039;&#039;&#039;docker0&#039;&#039;&#039;, и, соответственно, в будущем будут доступны из Docker.&lt;br /&gt;
# Для удобства проще скопировать готовый файл &#039;&#039;&#039;01-network.yaml&#039;&#039;&#039; с компьютера администратора и положить его в &#039;&#039;&#039;/etc/netplan&#039;&#039;&#039; .&lt;br /&gt;
# Как показывает практика, существующий в &#039;&#039;&#039;/etc/netplan&#039;&#039;&#039; файл конфигурации по умолчанию &#039;&#039;&#039;50-cloud-init.yaml&#039;&#039;&#039; лучше переименовать во что-то типа &#039;&#039;&#039;50-cloud-init.yaml.bak,&#039;&#039;&#039; иначе у интерфейса &#039;&#039;&#039;enp5s0&#039;&#039;&#039; будет образовываться 2 адреса - статический из настроек в &#039;&#039;&#039;01-network.yaml&#039;&#039;&#039; и динамический, который будет дополнительно прилетать по DHCP и создавать путаницу. Вроде бы, должно лечиться установкой в файле &#039;&#039;&#039;50-cloud-init.yaml&#039;&#039;&#039; для интерфейса &#039;&#039;&#039;enp5s0&#039;&#039;&#039; параметра &#039;&#039;&#039;dchp4: false&#039;&#039;&#039;, но по факту не помогает, поэтому лучше от греха подальше во избежание конфликтов держать в &#039;&#039;&#039;/etc/netplan&#039;&#039;&#039;  только один файл &#039;&#039;&#039;01-network.yaml&#039;&#039;&#039; с настройками интерфейсов.&lt;br /&gt;
# Для применения настроек интерфейсов и сохранения настроек после перезагрузки сервера рекомендуется выполнение &#039;&#039;&#039;netplan try&#039;&#039;&#039; . Это позволит проверить конфигурацию перед применением и отловить возможные ошибки. Также рекомендуется в обязательном порядке выполнить контрольную перезагрузку сервера, чтобы убедиться, что настройки после нее восстанавливаются правильно.&lt;br /&gt;
# Для проверки работоспособности моста &#039;&#039;&#039;docker0&#039;&#039;&#039; перед настройкой интерфейсов следует запустить постоянный пинг (с параметром &#039;&#039;&#039;-t&#039;&#039;&#039;) с &#039;&#039;&#039;MCM-NODE1&#039;&#039;&#039; (10.0.0.1) на &#039;&#039;&#039;MCM-NODE2&#039;&#039;&#039; (10.0.0.2) и наоборот и убедиться в том, что узлы недоступны друг для друга. После настройки конфигурации интерфейсов и выполнения &#039;&#039;&#039;netplan try&#039;&#039;&#039; следует проверить, что пинг с MCM-NODE1 (10.0.0.1) на MCM-NODE2 (10.0.0.2) в обе стороны проходит успешно, т.е. узлы общаются между собой напрямую через мост &#039;&#039;&#039;docker0&#039;&#039;&#039;.&lt;br /&gt;
==== Установка сертификата Entcor ====&lt;br /&gt;
С компьютера администратора следует скопировать файл сертификата &#039;&#039;&#039;entcor.crt&#039;&#039;&#039; на узел &#039;&#039;&#039;MCM-SNIFFER&#039;&#039;&#039; по следующему пути (необходимо использовать фактический IP-адрес сервера MCM-SNIFFER):&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
scp entcor.crt entcor@192.168.2.23:/home/entcor&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Затем на компьютере &#039;&#039;&#039;MCM-SNIFFER&#039;&#039;&#039; следует перенести сертификат в необходимый каталог и выполнить его обновление:&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
sudo mv entcor.crt /usr/local/share/ca-certificates&lt;br /&gt;
sudo update-ca-certificates &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&#039;&#039;&#039;Примечание:&#039;&#039;&#039; после обновления сертификатов необходимо выполнить перезагрузку компьютера &#039;&#039;&#039;MCM-SNIFFER&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==== Установка Docker ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
# Add Docker&#039;s official GPG key:&lt;br /&gt;
&lt;br /&gt;
sudo apt-get update&lt;br /&gt;
sudo apt-get install ca-certificates curl&lt;br /&gt;
sudo install -m 0755 -d /etc/apt/keyrings&lt;br /&gt;
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc&lt;br /&gt;
sudo chmod a+r /etc/apt/keyrings/docker.asc&lt;br /&gt;
&lt;br /&gt;
# Add the repository to Apt sources:&lt;br /&gt;
&lt;br /&gt;
echo \&lt;br /&gt;
&amp;quot;deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \&lt;br /&gt;
$(. /etc/os-release &amp;amp;&amp;amp; echo &amp;quot;$VERSION_CODENAME&amp;quot;) stable&amp;quot; | \&lt;br /&gt;
sudo tee /etc/apt/sources.list.d/docker.list &amp;gt; /dev/null&lt;br /&gt;
&lt;br /&gt;
sudo apt-get update&lt;br /&gt;
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Ссылка на руководство: https://docs.docker.com/engine/install/ubuntu/#install-using-the-repository&lt;br /&gt;
&lt;br /&gt;
==== Установка компонентов системы МКИ ====&lt;br /&gt;
Установка компонентов системы МКИ может осуществляться посредством получения последней версии инсталляционного пакета (предпочтительно), либо из репозитория Git (может применяться для целей отладки или быстрого накатывания патчей/фикса ошибок).&lt;br /&gt;
&lt;br /&gt;
==== Вариант 1: Установка с помощью инсталляционного пакета ====&lt;br /&gt;
Получение последней версии инсталляционного пакета производится с FTP-сервера Jenkins. Для этого необходимо подключиться к нему с устройства МКИ по протоколу FTP, используя соответствующую пару логин-пароль, и выкачать оттуда файлы &#039;&#039;&#039;install.sh&#039;&#039;&#039; и &#039;&#039;&#039;latest.tar.gz&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Перед запуском инсталляционного скрипта install.sh необходимо установить для него права на выполнение посредством команды chmod:&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
chmod +x install.sh&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Также для корректной работы стека common необходимо предварительно авторизоваться под нужной учетной записью в docker-репозитории Harbor:&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
docker login registry.entcor&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Далее непосредственное развертывание контейнеров производится запуском на выполнение скрипта &#039;&#039;&#039;install.sh&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
После завершения установки компонентов ПАК «еNODE.МКИ» следует выполнить переход в каталог &#039;&#039;&#039;/opt/e-node/deploy&#039;&#039;&#039;, куда выполнялось развертывание компонентов системы инсталляционным скриптом &#039;&#039;&#039;install.sh&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Далее в том же каталоге следует создать/отредактировать файла &#039;&#039;&#039;.env&#039;&#039;&#039;, в котором следует установить следующие параметры:&lt;br /&gt;
&lt;br /&gt;
* MONITOR_DATA_IF = &amp;lt;имя интерфейса на узле &#039;&#039;&#039;MCM-SNIFFER&#039;&#039;&#039;,  на котором выполняется прослушка, например, enp7s&lt;br /&gt;
* MODE = enode &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Примечание:&#039;&#039;&#039; вообще-то для работы МКИ параметр MODE должен иметь  значение asutp, но работает пока только вот так. &lt;br /&gt;
&lt;br /&gt;
==== Вариант 2: Установка непосредственно из репозитория Git ====&lt;br /&gt;
&lt;br /&gt;
Получение последней версии инсталляционного пакета производится из  Git-репозитория &#039;&#039;&#039;e-deploy&#039;&#039;&#039;, находящегося по адресу  &#039;&#039;&#039;&amp;lt;nowiki&amp;gt;http://192.168.2.61&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;, (нужно будет ввести соответствующие логин-пароль для доступа к репозиторию, а также выполнить переключение на ветку &#039;&#039;&#039;develop&#039;&#039;&#039;): &amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
git clone http://192.168.2.61/e-node/e-deploy.git&lt;br /&gt;
git switch develop&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Далее следует авторизоваться под нужной учетной записью в Docker-репозитории Harbor:&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
docker login registry.entcor&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;после чего нужно перейти в каталог &#039;&#039;&#039;e-deploy&#039;&#039;&#039; (в том каталоге, где выполнялся git clone) и выполнить следующую команду:&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
./enode.sh init&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Далее в том же каталоге следует создать/отредактировать файла &#039;&#039;&#039;.env&#039;&#039;&#039;, в котором следует установить следующие параметры:&lt;br /&gt;
&lt;br /&gt;
MONITOR_DATA_IF = &amp;lt;имя интерфейса на узле &#039;&#039;&#039;MCM-SNIFFER&#039;&#039;&#039;,  на котором выполняется прослушка, например, enp7s0&amp;gt; &lt;br /&gt;
&lt;br /&gt;
MODE = enode &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Примечание:&#039;&#039;&#039; вообще-то для работы МКИ параметр MODE должен иметь  значение asutp, но работает пока только вот так. &lt;br /&gt;
==== Запуск компонентов системы МКИ ====&lt;br /&gt;
После установки компонентов МКИ можно выполнить их запуск следующей командой: &amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
enode &amp;lt;имя стека&amp;gt; start&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&#039;&#039;&#039;Примечание:&#039;&#039;&#039; названия нужных стеков можно посмотреть в каталоге &#039;&#039;&#039;stacks&#039;&#039;&#039;  в &#039;&#039;&#039;e-deploy&#039;&#039;&#039; (имена стеков соответствуют именам подкаталогов). Как минимум должны быть запущены следующие стеки:&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
enode analytic start&lt;br /&gt;
enode common start&lt;br /&gt;
enode asutp start&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&#039;&#039;&#039;Примечание:&#039;&#039;&#039;  стек &#039;&#039;&#039;analytic&#039;&#039;&#039; рекомендуется запускать перед стеком &#039;&#039;&#039;common&#039;&#039;&#039; из-за каких-то особенностей функционирования:&lt;br /&gt;
&lt;br /&gt;
Проверка запуска сервисов производится обычным образом с помощью команды:&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
docker ps&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Проверка информационного обмена по протоколу МЭК-60870-5-104 ===&lt;br /&gt;
Проверка информационного обмена по протоколу МЭК-60870-5-104 производится между узлами стенда &#039;&#039;&#039;MCM-NODE1&#039;&#039;&#039; и &#039;&#039;&#039;MCM-NODE2&#039;&#039;&#039; посредством программного обеспечения  IEC Test, которое эмулирует передачу пакетов протокола МЭК-60870-5-104 поверх соединения Ethernet. &lt;br /&gt;
&lt;br /&gt;
Для проверки работы протокола МЭК-60870-5-104 во внутренней сети обмена на одном из узлов ПО IEC Test запускается в режиме сервера с показанными ниже настройками: &lt;br /&gt;
&lt;br /&gt;
TCP/IP Link Role - Server &lt;br /&gt;
&lt;br /&gt;
IP Address - адрес внутреннего интерфейса для информационного обмена (в данном примере - 10.0.0.2) &lt;br /&gt;
&lt;br /&gt;
Далее устанавливается канал обмена последовательным нажатием кнопок &amp;quot;Build String&amp;quot; и &amp;quot;Open Channel&amp;quot; (индикатор &amp;quot;1 channel&amp;quot; должен стать темно-зеленым). &lt;br /&gt;
[[Файл:IEC Test - 2.png|мини|794x794пкс|Настройки программы IEC Test для организации обмена  между узлами стенда MCM-NODE1 и MCM-NODE2 по протоколу МЭК-60870-5-104 (серверная часть)|центр]]Соответственно, на другом узле ПО IEC Test запускается в режиме клиента с показанными ниже настройками:&lt;br /&gt;
&lt;br /&gt;
TCP/IP Link Role - Client &lt;br /&gt;
&lt;br /&gt;
IP Address - адрес сервера, находящегося во внутренней сети для информационного обмена  (в данном примере - 10.0.0.2). &lt;br /&gt;
&lt;br /&gt;
Далее устанавливается канал обмена последовательным нажатием кнопок &amp;quot;Build String&amp;quot; и &amp;quot;Open Channel&amp;quot; (индикатор &amp;quot;1 channel&amp;quot; должен стать темно-зеленым).&lt;br /&gt;
&lt;br /&gt;
Для начала непосредственно информационного взаимодействия следует послать с клиента на сервер специальную команду посредством нажатия кнопки &amp;quot;Start DT&amp;quot; (индикатор &amp;quot;1 channel&amp;quot; должен стать светло-зеленым как показано на рисунке ниже). С этого момента канал обмена установлен и активирован, а между экземплярами ПО IEC Test могут передаваться пакеты протокола МЭК-60870-5-104.&lt;br /&gt;
[[Файл:IEC Test - 3.png|центр|мини|791x791пкс|Настройки программы IEC Test для организации обмена  между узлами стенда MCM-NODE1 и MCM-NODE2 по протоколу МЭК-60870-5-104 (клиентская часть)]]Для создания трафика по протоколу МЭК-60870-5-104 между узлами &#039;&#039;&#039;MCM-NODE1&#039;&#039;&#039; и &#039;&#039;&#039;MCM-NODE2&#039;&#039;&#039; следует использовать специальный макрос, имитирующий последовательную передачу данных протокола МЭК-60870-5-104 между узлами. Для этого необходимо на любом из узлов в ПО IEC Test перейти во вкладку &amp;quot;870 Commander&amp;quot;, нажатием кнопки &amp;quot;Загрузить&amp;quot; загрузить макрос &amp;quot;ДУ по циклу 5 сек.rtm&amp;quot; и выполнить его нажатием кнопки &amp;quot;Выполнить&amp;quot;:&lt;br /&gt;
[[Файл:IEC Test - 4.png|альт=Выполнение макроса в ПО IEC Test для создания трафика по протоколу МЭК-60870-5-104|центр|мини|797x797пкс|Выполнение макроса в ПО IEC Test для создания трафика по протоколу МЭК-60870-5-104]]В случае правильно настроенных узлов стенда и экземпляров ПО IEC Test на принимающем узле во вкладке &amp;quot;870 Commander&amp;quot; в соответствующем окне можно будет увидеть информацию о принятых сообщениях, отправленных макросом с передающего узла, что свидетельствует о состоявшемся информационном обмене по протоколу МЭК-60870-5-104 между узлами.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Примечание:&#039;&#039;&#039; в случае, если система МКИ выполняет прослушивание на одном из интерфейсов, входящих во внутреннюю сеть информационного обмена, а также при правильном конфигурировании компонента Grafana, при подключении браузером по адресу сервера  &#039;&#039;&#039;MCM-SNIFFER&#039;&#039;&#039; в соответствующих дашбордах должна появиться информация о перехваченных пакетах протокола МЭК-60870-5-104, создающих описанный выше трафик.&lt;br /&gt;
&lt;br /&gt;
=== Проверка информационного обмена по протоколу MODBUS ===&lt;br /&gt;
&lt;br /&gt;
Работа стенда по протоколу MODBUS осуществляется посредством ПО Modbus Poll, запущенного на узле MDM-NODE2 (см. схему). Modbus Poll подключается по протоколу MODBUS-TCP к железке-конвертору ZLAN (см. схему) и через него опрашивает устройства (температурные датчики), подключенные к RS-485-портам №1, №2 и №3 конвертора ZLAN. Также на датчиках изменены их базовые адреса следующим образом: ID = 5 – на 1 порту RS-485, ID = 6 – на 2 порту RS-485, ID = 7 – на 3 порту RS-485.&lt;br /&gt;
&lt;br /&gt;
Для доступа к датчикам на конверторе ZLAN установлены адреса IP-портов с помощью прилагающейся к нему софтины ZLVirCom, которую можно запустить с рабочего стола на узле MCM-NODE2 (в принципе, в текущей конфигурации стенда вся работа с MODBUS производится с этого узла!). ZLVirCom сам опрашивает локальную сеть и находит там конвертор, после чего подключается к нему, и его можно конфигурировать:&lt;br /&gt;
[[Файл:Modbus1.png|центр|мини|794x794пкс|Главное окно ZLVirCom]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
При нажатии на кнопку Device в верхнем меню открывается список портов, в котором можно провалиться в конкретный порт и выполнить его настройки:&lt;br /&gt;
&lt;br /&gt;
Настройки портов, к которым подключены датчики, должны выглядеть следующим образом:&lt;br /&gt;
&lt;br /&gt;
Если все настроено корректно, то Modbus Poll сможет подключится к соответствующим RS-485-портам конвертора по указанному для них IP Address и Port (см. скриншот).&lt;br /&gt;
&lt;br /&gt;
3.      Непосредственно для выполнения опроса датчиков нужно запустить Modbus Poll с рабочего стола на узле MCM-NODE2:&lt;br /&gt;
&lt;br /&gt;
Далее в меню Connection выбрать Connect (или нажать F3), откроется окно настроек подключения, где нужно указать следующие параметры:&lt;br /&gt;
&lt;br /&gt;
В поле IP Address or Node Name нужно указать адрес порта, который будем опрашивать (соответственно, 10.0.0.241, .242, .243 для портов 1, 2, 3 конвертора.&lt;br /&gt;
&lt;br /&gt;
Далее будет выполнено подключение к железке ZLAN и при попытке опроса вылезет ошибка “Timeout error”, так как не сконфигурированы параметры опроса.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Для их настройки надо зайти в меню Setup -&amp;gt; Read/Write Definition (или нажать F8) и указать следующие параметры:&lt;br /&gt;
&lt;br /&gt;
В поле Slave ID нужно указать адрес датчика (5, 6 или 7), в поле Function выбрать «04 Read Input Registers (3х)», в полях Address и Quantity указать значение 1. Если номер датчика соответствует выбранному при подключении порту, то опрос пойдет корректно (Tx увеличивается, Err = 0):&lt;br /&gt;
&lt;br /&gt;
Результат опроса можно увидеть, нажав кнопку Display communication traffic в панели инструментов (Tx – байты с запросом, Rx – байты ответа от датчика). В случае ошибки опроса или недоступности устройства Rx в трафике не будет, а будут только строки с отправкой (Tx).&lt;br /&gt;
&lt;br /&gt;
4.     Весь трафик между Modbus Poll на узле MCM-NODE2 и каким-либо из датчиков пролетает через сервер МКИ (который MCM-SNIFFER, см. схему). Соответственно, если в настройках перехвата указать порт на сервере,  к которому подключен MCM-NODE2 (enp7s0 на данный момент), то еНОД.МКИ на сервере MCM-SNIFFER сможет перехватывать трафик MODBUS и, соответственно, его анализировать.&lt;/div&gt;</summary>
		<author><name>Dima</name></author>
	</entry>
	<entry>
		<id>https://wiki.entcor.ru/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Modbus1.png&amp;diff=431</id>
		<title>Файл:Modbus1.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.entcor.ru/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Modbus1.png&amp;diff=431"/>
		<updated>2025-03-28T09:06:52Z</updated>

		<summary type="html">&lt;p&gt;Dima: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Главное окно ZLVirCom&lt;/div&gt;</summary>
		<author><name>Dima</name></author>
	</entry>
	<entry>
		<id>https://wiki.entcor.ru/index.php?title=%D0%9C%D0%9A%D0%98&amp;diff=416</id>
		<title>МКИ</title>
		<link rel="alternate" type="text/html" href="https://wiki.entcor.ru/index.php?title=%D0%9C%D0%9A%D0%98&amp;diff=416"/>
		<updated>2025-03-28T05:09:40Z</updated>

		<summary type="html">&lt;p&gt;Dima: /* Проверка информационного обмена по протоколу МЭК-60870-5-104 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= &#039;&#039;&#039;Система мониторинга качества измерений (МКИ)&#039;&#039;&#039; =&lt;br /&gt;
&lt;br /&gt;
=== Схема тестового стенда ===&lt;br /&gt;
[[Файл:Стенд для МКИ (декабрь 2024).drawio.png|альт=Стенд для МКИ (декабрь 2024)|мини|978x978пкс|Стенд для МКИ (декабрь 2024)]]&lt;br /&gt;
&lt;br /&gt;
=== Подключение и настойка оборудования ===&lt;br /&gt;
Подключение компонентов стенда производится в соответствии со схемой подключения. При этом для корректного выполнения дальнейших инструкций подключение устройств к физическим портам и сетевые настройки интерфейсов должны быть выполнены  согласно табл. 1:&lt;br /&gt;
&lt;br /&gt;
==== Таблица 1 - Параметры сетевых настроек устройств стенда ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Хост&lt;br /&gt;
!Порт&lt;br /&gt;
!Интерфейс&lt;br /&gt;
!IP&lt;br /&gt;
!Подключен к &lt;br /&gt;
устройство/порт&lt;br /&gt;
!Описание&lt;br /&gt;
|-&lt;br /&gt;
|MCM-SNIFFER&lt;br /&gt;
|Eth1&lt;br /&gt;
|enp5s0&lt;br /&gt;
|192.168.2.15/24&lt;br /&gt;
|L2 Switch&lt;br /&gt;
|Интерфейс управления для Sniffer&lt;br /&gt;
|-&lt;br /&gt;
|MCM-SNIFFER&lt;br /&gt;
|Eth2&lt;br /&gt;
|enp6s0&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;-&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|MCM-NODE1 / Eth2&lt;br /&gt;
|Участвует в L2 Bridge&lt;br /&gt;
|-&lt;br /&gt;
|MCM-SNIFFER&lt;br /&gt;
|Eth3&lt;br /&gt;
|enp7s0&lt;br /&gt;
| -&lt;br /&gt;
|MCM-NODE2 / Eth2&lt;br /&gt;
|Участвует в L2 Bridge&lt;br /&gt;
|-&lt;br /&gt;
|MCM-SNIFFER&lt;br /&gt;
|Eth4&lt;br /&gt;
|enp8s0&lt;br /&gt;
| -&lt;br /&gt;
|ZLAN / Eth&lt;br /&gt;
|Участвует в L2 Bridge&lt;br /&gt;
|-&lt;br /&gt;
|MCM-NODE1&lt;br /&gt;
|Eth1&lt;br /&gt;
|EXTERNAL&lt;br /&gt;
|192.168.2.156/24&lt;br /&gt;
|L2 Switch&lt;br /&gt;
|Интерфейс управления для Node1&lt;br /&gt;
|-&lt;br /&gt;
|MCM-NODE1&lt;br /&gt;
|Eth2&lt;br /&gt;
|INTERNAL&lt;br /&gt;
|10.0.0.1/24&lt;br /&gt;
|MCM-SNIFFER / Eth2&lt;br /&gt;
|Интерфейс обмена данными для Node1&lt;br /&gt;
|-&lt;br /&gt;
|MCM-NODE2&lt;br /&gt;
|Eth1&lt;br /&gt;
|EXTERNAL&lt;br /&gt;
|192.168.2.195/24&lt;br /&gt;
|L2 Switch&lt;br /&gt;
|Интерфейс управления для Node2&lt;br /&gt;
|-&lt;br /&gt;
|MCM-NODE2&lt;br /&gt;
|Eth2&lt;br /&gt;
|INTERNAL&lt;br /&gt;
|10.0.0.2/24&lt;br /&gt;
|MCM-SNIFFER / Eth3&lt;br /&gt;
|Интерфейс обмена данными для Node2&lt;br /&gt;
|-&lt;br /&gt;
|ZLAN&lt;br /&gt;
|Eth&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
|MCM-SNIFFER / Eth4&lt;br /&gt;
|Интерфейс обмена данными для ZLAN&lt;br /&gt;
|-&lt;br /&gt;
|ZLAN&lt;br /&gt;
|RS-485 #1&lt;br /&gt;
|ZLDEV0001&lt;br /&gt;
|10.0.0.241/24&lt;br /&gt;
|&lt;br /&gt;
|Подключение датчика с MODBUS-адресом 5&lt;br /&gt;
|-&lt;br /&gt;
|ZLAN&lt;br /&gt;
|RS-485 #2&lt;br /&gt;
|ZLDEV0002&lt;br /&gt;
|10.0.0.242/24&lt;br /&gt;
|&lt;br /&gt;
|Подключение датчика с MODBUS-адресом 6&lt;br /&gt;
|-&lt;br /&gt;
|ZLAN&lt;br /&gt;
|RS-485 #3&lt;br /&gt;
|ZLDEV0003&lt;br /&gt;
|10.0.0.243/24&lt;br /&gt;
|&lt;br /&gt;
|Подключение датчика с MODBUS-адресом 7&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Развертывание системы ===&lt;br /&gt;
&lt;br /&gt;
==== Установка базовых систем ====&lt;br /&gt;
Установка ОС Windows на компьютерах &#039;&#039;&#039;MCM-NODE1&#039;&#039;&#039; и &#039;&#039;&#039;MCM-NODE2&#039;&#039;&#039; производится обычным образом, при этом  соответствующим сетевым интерфейсам должны быть присвоены адреса согласно данным табл. 1, также для совместимости должны быть указаны следующие параметры настройки системы:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Таблица 2 - Параметры настройки узлов MCM-NODE1 и MCM-NODE2&lt;br /&gt;
!Параметр&lt;br /&gt;
!Значение&lt;br /&gt;
|-&lt;br /&gt;
|Имя компьютера&lt;br /&gt;
|MCM-NODE1/MCM-NODE2&lt;br /&gt;
|-&lt;br /&gt;
|Имя пользователя c правами локального администратора&lt;br /&gt;
|entcor&lt;br /&gt;
|-&lt;br /&gt;
|Пароль&lt;br /&gt;
|1&lt;br /&gt;
|}&lt;br /&gt;
Установка базовой системы Ubuntu Server 24.0x на компьютер &#039;&#039;&#039;MCM-SNIFFER&#039;&#039;&#039; производится обычным образом в режиме инсталляции по умолчанию, при этом при выборе параметров установки необходимо включить установку сервера OpenSSH, а также для совместимости следует  указать следующие значения прочих параметров:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Таблица 3 - Параметры настройки узла MCM-SNIFFER&lt;br /&gt;
!Параметр&lt;br /&gt;
!Значение&lt;br /&gt;
|-&lt;br /&gt;
|Имя компьютера&lt;br /&gt;
|MCM-SNIFFER&lt;br /&gt;
|-&lt;br /&gt;
|Имя пользователя c правами root                       &lt;br /&gt;
|entcor&lt;br /&gt;
|-&lt;br /&gt;
|Пароль&lt;br /&gt;
|ng3-dcc20&lt;br /&gt;
|}&lt;br /&gt;
После установки системы необходимо установить обновления:&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt full-upgrade&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
а также проверить доступ к серверу по SSH с компьютера администратора:&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
ssh entcor@192.168.2.15 (текущий адрес сервера MCM-SNIFFER)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&#039;&#039;&#039;Примечание:&#039;&#039;&#039; для удобства работы с файлами настоятельно рекомендуется также первым делом вкатить Midnight Commander:&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt install mc&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Также в дальнейшем целесообразно запускать Midnight Commander через &#039;&#039;&#039;sudo&#039;&#039;&#039;:&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
sudo mc&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Это позволит, во-первых, невозбранно редактировать все необходимые файлы и, во-вторых, при скрытии окон Midnight Commander выполнять из-под него с командной строки команды в режиме root без необходимости париться с sudo для каждой отдельной команды.&lt;br /&gt;
&lt;br /&gt;
==== Настройка сетевых интерфейсов ====&lt;br /&gt;
Для корректной работы сетевых интерфейсов и сохранения их параметров после перезагрузки сервера необходимо в каталоге &#039;&#039;&#039;/etc/netplan&#039;&#039;&#039; создать файл с расширением .yaml (например, &#039;&#039;&#039;01-network.yaml&#039;&#039;&#039;) со следующим содержимым:&amp;lt;syntaxhighlight lang=&amp;quot;yaml&amp;quot;&amp;gt;&lt;br /&gt;
network:&lt;br /&gt;
    version: 2&lt;br /&gt;
    ethernets:&lt;br /&gt;
        enp5s0:&lt;br /&gt;
            dhcp4: false&lt;br /&gt;
            addresses: &lt;br /&gt;
                - 192.168.2.15/24&lt;br /&gt;
            routes:&lt;br /&gt;
              - to: default&lt;br /&gt;
                via: 192.168.2.254&lt;br /&gt;
            nameservers: &lt;br /&gt;
                addresses: [192.168.2.60, 176.114.16.33]&lt;br /&gt;
        enp6s0:&lt;br /&gt;
            dhcp4: false&lt;br /&gt;
        enp7s0:&lt;br /&gt;
            dhcp4: false&lt;br /&gt;
        enp8s0:&lt;br /&gt;
            dhcp4: false&lt;br /&gt;
    bridges:&lt;br /&gt;
        docker0:&lt;br /&gt;
            interfaces: [enp6s0, enp7s0, enp8s0]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&#039;&#039;&#039;Примечания:&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
# Для интерфейса &#039;&#039;&#039;enp5s0&#039;&#039;&#039; вместо 192.168.2.15/24 следует указать нужный статический адрес сервера, также при необходимости следует указать фактически используемые адреса шлюза и DNS (в &#039;&#039;&#039;via&#039;&#039;&#039; и &#039;&#039;&#039;nameservers&#039;&#039;&#039; соответственно).&lt;br /&gt;
# В файле конфигурации заранее определяется мост &#039;&#039;&#039;docker0&#039;&#039;&#039;, который будет использоваться Docker&#039;ом после его установки. Таким образом, интерфейсы &#039;&#039;&#039;enp6s0/enp7s0/enp8s0&#039;&#039;&#039; заранее подключаются к мосту &#039;&#039;&#039;docker0&#039;&#039;&#039;, и, соответственно, в будущем будут доступны из Docker.&lt;br /&gt;
# Для удобства проще скопировать готовый файл &#039;&#039;&#039;01-network.yaml&#039;&#039;&#039; с компьютера администратора и положить его в &#039;&#039;&#039;/etc/netplan&#039;&#039;&#039; .&lt;br /&gt;
# Как показывает практика, существующий в &#039;&#039;&#039;/etc/netplan&#039;&#039;&#039; файл конфигурации по умолчанию &#039;&#039;&#039;50-cloud-init.yaml&#039;&#039;&#039; лучше переименовать во что-то типа &#039;&#039;&#039;50-cloud-init.yaml.bak,&#039;&#039;&#039; иначе у интерфейса &#039;&#039;&#039;enp5s0&#039;&#039;&#039; будет образовываться 2 адреса - статический из настроек в &#039;&#039;&#039;01-network.yaml&#039;&#039;&#039; и динамический, который будет дополнительно прилетать по DHCP и создавать путаницу. Вроде бы, должно лечиться установкой в файле &#039;&#039;&#039;50-cloud-init.yaml&#039;&#039;&#039; для интерфейса &#039;&#039;&#039;enp5s0&#039;&#039;&#039; параметра &#039;&#039;&#039;dchp4: false&#039;&#039;&#039;, но по факту не помогает, поэтому лучше от греха подальше во избежание конфликтов держать в &#039;&#039;&#039;/etc/netplan&#039;&#039;&#039;  только один файл &#039;&#039;&#039;01-network.yaml&#039;&#039;&#039; с настройками интерфейсов.&lt;br /&gt;
# Для применения настроек интерфейсов и сохранения настроек после перезагрузки сервера рекомендуется выполнение &#039;&#039;&#039;netplan try&#039;&#039;&#039; . Это позволит проверить конфигурацию перед применением и отловить возможные ошибки. Также рекомендуется в обязательном порядке выполнить контрольную перезагрузку сервера, чтобы убедиться, что настройки после нее восстанавливаются правильно.&lt;br /&gt;
# Для проверки работоспособности моста &#039;&#039;&#039;docker0&#039;&#039;&#039; перед настройкой интерфейсов следует запустить постоянный пинг (с параметром &#039;&#039;&#039;-t&#039;&#039;&#039;) с &#039;&#039;&#039;MCM-NODE1&#039;&#039;&#039; (10.0.0.1) на &#039;&#039;&#039;MCM-NODE2&#039;&#039;&#039; (10.0.0.2) и наоборот и убедиться в том, что узлы недоступны друг для друга. После настройки конфигурации интерфейсов и выполнения &#039;&#039;&#039;netplan try&#039;&#039;&#039; следует проверить, что пинг с MCM-NODE1 (10.0.0.1) на MCM-NODE2 (10.0.0.2) в обе стороны проходит успешно, т.е. узлы общаются между собой напрямую через мост &#039;&#039;&#039;docker0&#039;&#039;&#039;.&lt;br /&gt;
==== Установка сертификата Entcor ====&lt;br /&gt;
С компьютера администратора следует скопировать файл сертификата &#039;&#039;&#039;entcor.crt&#039;&#039;&#039; на узел &#039;&#039;&#039;MCM-SNIFFER&#039;&#039;&#039; по следующему пути (необходимо использовать фактический IP-адрес сервера MCM-SNIFFER):&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
scp entcor.crt entcor@192.168.2.23:/home/entcor&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Затем на компьютере &#039;&#039;&#039;MCM-SNIFFER&#039;&#039;&#039; следует перенести сертификат в необходимый каталог и выполнить его обновление:&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
sudo mv entcor.crt /usr/local/share/ca-certificates&lt;br /&gt;
sudo update-ca-certificates &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&#039;&#039;&#039;Примечание:&#039;&#039;&#039; после обновления сертификатов необходимо выполнить перезагрузку компьютера &#039;&#039;&#039;MCM-SNIFFER&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==== Установка Docker ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
# Add Docker&#039;s official GPG key:&lt;br /&gt;
&lt;br /&gt;
sudo apt-get update&lt;br /&gt;
sudo apt-get install ca-certificates curl&lt;br /&gt;
sudo install -m 0755 -d /etc/apt/keyrings&lt;br /&gt;
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc&lt;br /&gt;
sudo chmod a+r /etc/apt/keyrings/docker.asc&lt;br /&gt;
&lt;br /&gt;
# Add the repository to Apt sources:&lt;br /&gt;
&lt;br /&gt;
echo \&lt;br /&gt;
&amp;quot;deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \&lt;br /&gt;
$(. /etc/os-release &amp;amp;&amp;amp; echo &amp;quot;$VERSION_CODENAME&amp;quot;) stable&amp;quot; | \&lt;br /&gt;
sudo tee /etc/apt/sources.list.d/docker.list &amp;gt; /dev/null&lt;br /&gt;
&lt;br /&gt;
sudo apt-get update&lt;br /&gt;
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Ссылка на руководство: https://docs.docker.com/engine/install/ubuntu/#install-using-the-repository&lt;br /&gt;
&lt;br /&gt;
==== Установка компонентов системы МКИ ====&lt;br /&gt;
Установка компонентов системы МКИ может осуществляться посредством получения последней версии инсталляционного пакета (предпочтительно), либо из репозитория Git (может применяться для целей отладки или быстрого накатывания патчей/фикса ошибок).&lt;br /&gt;
&lt;br /&gt;
==== Вариант 1: Установка с помощью инсталляционного пакета ====&lt;br /&gt;
Получение последней версии инсталляционного пакета производится с FTP-сервера Jenkins. Для этого необходимо подключиться к нему с устройства МКИ по протоколу FTP, используя соответствующую пару логин-пароль, и выкачать оттуда файлы &#039;&#039;&#039;install.sh&#039;&#039;&#039; и &#039;&#039;&#039;latest.tar.gz&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Перед запуском инсталляционного скрипта install.sh необходимо установить для него права на выполнение посредством команды chmod:&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
chmod +x install.sh&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Также для корректной работы стека common необходимо предварительно авторизоваться под нужной учетной записью в docker-репозитории Harbor:&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
docker login registry.entcor&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Далее непосредственное развертывание контейнеров производится запуском на выполнение скрипта &#039;&#039;&#039;install.sh&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
После завершения установки компонентов ПАК «еNODE.МКИ» следует выполнить переход в каталог &#039;&#039;&#039;/opt/e-node/deploy&#039;&#039;&#039;, куда выполнялось развертывание компонентов системы инсталляционным скриптом &#039;&#039;&#039;install.sh&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Далее в том же каталоге следует создать/отредактировать файла &#039;&#039;&#039;.env&#039;&#039;&#039;, в котором следует установить следующие параметры:&lt;br /&gt;
&lt;br /&gt;
* MONITOR_DATA_IF = &amp;lt;имя интерфейса на узле &#039;&#039;&#039;MCM-SNIFFER&#039;&#039;&#039;,  на котором выполняется прослушка, например, enp7s&lt;br /&gt;
* MODE = enode &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Примечание:&#039;&#039;&#039; вообще-то для работы МКИ параметр MODE должен иметь  значение asutp, но работает пока только вот так. &lt;br /&gt;
&lt;br /&gt;
==== Вариант 2: Установка непосредственно из репозитория Git ====&lt;br /&gt;
&lt;br /&gt;
Получение последней версии инсталляционного пакета производится из  Git-репозитория &#039;&#039;&#039;e-deploy&#039;&#039;&#039;, находящегося по адресу  &#039;&#039;&#039;&amp;lt;nowiki&amp;gt;http://192.168.2.61&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;, (нужно будет ввести соответствующие логин-пароль для доступа к репозиторию, а также выполнить переключение на ветку &#039;&#039;&#039;develop&#039;&#039;&#039;): &amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
git clone http://192.168.2.61/e-node/e-deploy.git&lt;br /&gt;
git switch develop&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Далее следует авторизоваться под нужной учетной записью в Docker-репозитории Harbor:&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
docker login registry.entcor&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;после чего нужно перейти в каталог &#039;&#039;&#039;e-deploy&#039;&#039;&#039; (в том каталоге, где выполнялся git clone) и выполнить следующую команду:&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
./enode.sh init&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Далее в том же каталоге следует создать/отредактировать файла &#039;&#039;&#039;.env&#039;&#039;&#039;, в котором следует установить следующие параметры:&lt;br /&gt;
&lt;br /&gt;
MONITOR_DATA_IF = &amp;lt;имя интерфейса на узле &#039;&#039;&#039;MCM-SNIFFER&#039;&#039;&#039;,  на котором выполняется прослушка, например, enp7s0&amp;gt; &lt;br /&gt;
&lt;br /&gt;
MODE = enode &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Примечание:&#039;&#039;&#039; вообще-то для работы МКИ параметр MODE должен иметь  значение asutp, но работает пока только вот так. &lt;br /&gt;
==== Запуск компонентов системы МКИ ====&lt;br /&gt;
После установки компонентов МКИ можно выполнить их запуск следующей командой: &amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
enode &amp;lt;имя стека&amp;gt; start&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&#039;&#039;&#039;Примечание:&#039;&#039;&#039; названия нужных стеков можно посмотреть в каталоге &#039;&#039;&#039;stacks&#039;&#039;&#039;  в &#039;&#039;&#039;e-deploy&#039;&#039;&#039; (имена стеков соответствуют именам подкаталогов). Как минимум должны быть запущены следующие стеки:&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
enode analytic start&lt;br /&gt;
enode common start&lt;br /&gt;
enode asutp start&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&#039;&#039;&#039;Примечание:&#039;&#039;&#039;  стек &#039;&#039;&#039;analytic&#039;&#039;&#039; рекомендуется запускать перед стеком &#039;&#039;&#039;common&#039;&#039;&#039; из-за каких-то особенностей функционирования:&lt;br /&gt;
&lt;br /&gt;
Проверка запуска сервисов производится обычным образом с помощью команды:&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
docker ps&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Проверка информационного обмена по протоколу МЭК-60870-5-104 ===&lt;br /&gt;
Проверка информационного обмена по протоколу МЭК-60870-5-104 производится между узлами стенда &#039;&#039;&#039;MCM-NODE1&#039;&#039;&#039; и &#039;&#039;&#039;MCM-NODE2&#039;&#039;&#039; посредством программного обеспечения  IEC Test, которое эмулирует передачу пакетов протокола МЭК-60870-5-104 поверх соединения Ethernet. &lt;br /&gt;
&lt;br /&gt;
Для проверки работы протокола МЭК-60870-5-104 во внутренней сети обмена на одном из узлов ПО IEC Test запускается в режиме сервера с показанными ниже настройками: &lt;br /&gt;
&lt;br /&gt;
TCP/IP Link Role - Server &lt;br /&gt;
&lt;br /&gt;
IP Address - адрес внутреннего интерфейса для информационного обмена (в данном примере - 10.0.0.2) &lt;br /&gt;
&lt;br /&gt;
Далее устанавливается канал обмена последовательным нажатием кнопок &amp;quot;Build String&amp;quot; и &amp;quot;Open Channel&amp;quot; (индикатор &amp;quot;1 channel&amp;quot; должен стать темно-зеленым). &lt;br /&gt;
[[Файл:IEC Test - 2.png|мини|794x794пкс|Настройки программы IEC Test для организации обмена  между узлами стенда MCM-NODE1 и MCM-NODE2 по протоколу МЭК-60870-5-104 (серверная часть)|центр]]Соответственно, на другом узле ПО IEC Test запускается в режиме клиента с показанными ниже настройками:&lt;br /&gt;
&lt;br /&gt;
TCP/IP Link Role - Client &lt;br /&gt;
&lt;br /&gt;
IP Address - адрес сервера, находящегося во внутренней сети для информационного обмена  (в данном примере - 10.0.0.2). &lt;br /&gt;
&lt;br /&gt;
Далее устанавливается канал обмена последовательным нажатием кнопок &amp;quot;Build String&amp;quot; и &amp;quot;Open Channel&amp;quot; (индикатор &amp;quot;1 channel&amp;quot; должен стать темно-зеленым).&lt;br /&gt;
&lt;br /&gt;
Для начала непосредственно информационного взаимодействия следует послать с клиента на сервер специальную команду посредством нажатия кнопки &amp;quot;Start DT&amp;quot; (индикатор &amp;quot;1 channel&amp;quot; должен стать светло-зеленым как показано на рисунке ниже). С этого момента канал обмена установлен и активирован, а между экземплярами ПО IEC Test могут передаваться пакеты протокола МЭК-60870-5-104.&lt;br /&gt;
[[Файл:IEC Test - 3.png|центр|мини|791x791пкс|Настройки программы IEC Test для организации обмена  между узлами стенда MCM-NODE1 и MCM-NODE2 по протоколу МЭК-60870-5-104 (клиентская часть)]]Для создания трафика по протоколу МЭК-60870-5-104 между узлами &#039;&#039;&#039;MCM-NODE1&#039;&#039;&#039; и &#039;&#039;&#039;MCM-NODE2&#039;&#039;&#039; следует использовать специальный макрос, имитирующий последовательную передачу данных протокола МЭК-60870-5-104 между узлами. Для этого необходимо на любом из узлов в ПО IEC Test перейти во вкладку &amp;quot;870 Commander&amp;quot;, нажатием кнопки &amp;quot;Загрузить&amp;quot; загрузить макрос &amp;quot;ДУ по циклу 5 сек.rtm&amp;quot; и выполнить его нажатием кнопки &amp;quot;Выполнить&amp;quot;:&lt;br /&gt;
[[Файл:IEC Test - 4.png|альт=Выполнение макроса в ПО IEC Test для создания трафика по протоколу МЭК-60870-5-104|центр|мини|797x797пкс|Выполнение макроса в ПО IEC Test для создания трафика по протоколу МЭК-60870-5-104]]В случае правильно настроенных узлов стенда и экземпляров ПО IEC Test на принимающем узле во вкладке &amp;quot;870 Commander&amp;quot; в соответствующем окне можно будет увидеть информацию о принятых сообщениях, отправленных макросом с передающего узла, что свидетельствует о состоявшемся информационном обмене по протоколу МЭК-60870-5-104 между узлами.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Примечание:&#039;&#039;&#039; в случае, если система МКИ выполняет прослушивание на одном из интерфейсов, входящих во внутреннюю сеть информационного обмена, а также при правильном конфигурировании компонента Grafana, при подключении браузером по адресу сервера  &#039;&#039;&#039;MCM-SNIFFER&#039;&#039;&#039; (&#039;&#039;&#039;&amp;lt;nowiki&amp;gt;http://192.168.2.142&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;) в соответствующих дашбордах должна появиться информация о перехваченных пакетах протокола МЭК-60870-5-104, создающих описанный выше трафик.&lt;br /&gt;
&lt;br /&gt;
=== Проверка информационного обмена по протоколу МЭК-60870-5-104 ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
1.      Работа стенда по протоколу MODBUS осуществляется посредством ПО Modbus Poll, запущенного на узле MDM-NODE2 (см. схему). Modbus Poll подключается по протоколу MODBUS-TCP к железке-конвертору ZLAN (см. схему) и через него опрашивает устройства (температурные датчики), подключенные к RS-485-портам №1, №2 и №3 конвертора ZLAN. Также на датчиках изменены их базовые адреса следующим образом: ID = 5 – на 1 порту RS-485, ID = 6 – на 2 порту RS-485, ID = 7 – на 3 порту RS-485.&lt;br /&gt;
&lt;br /&gt;
2.      Для доступа к датчикам на конверторе ZLAN установлены адреса IP-портов с помощью прилагающейся к нему софтины ZLVirCom, которую можно запустить с рабочего стола на узле MCM-NODE2 с IP 192.168.2.195 (в принципе, в текущей конфигурации стенда вся работа с MODBUS производится с этого узла!). ZLVirCom сам опрашивает локальную сеть и находит там конвертор, после чего подключается к нему, и его можно конфигурировать:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
При нажатии на кнопку Device в верхнем меню открывается список портов, в котором можно провалиться в конкретный порт и выполнить его настройки:&lt;br /&gt;
&lt;br /&gt;
Настройки портов, к которым подключены датчики, должны выглядеть следующим образом:&lt;br /&gt;
&lt;br /&gt;
Если все настроено корректно, то Modbus Poll сможет подключится к соответствующим RS-485-портам конвертора по указанному для них IP Address и Port (см. скриншот).&lt;br /&gt;
&lt;br /&gt;
3.      Непосредственно для выполнения опроса датчиков нужно запустить Modbus Poll с рабочего стола на узле MCM-NODE2:&lt;br /&gt;
&lt;br /&gt;
Далее в меню Connection выбрать Connect (или нажать F3), откроется окно настроек подключения, где нужно указать следующие параметры:&lt;br /&gt;
&lt;br /&gt;
В поле IP Address or Node Name нужно указать адрес порта, который будем опрашивать (соответственно, 10.0.0.241, .242, .243 для портов 1, 2, 3 конвертора.&lt;br /&gt;
&lt;br /&gt;
Далее будет выполнено подключение к железке ZLAN и при попытке опроса вылезет ошибка “Timeout error”, так как не сконфигурированы параметры опроса.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Для их настройки надо зайти в меню Setup -&amp;gt; Read/Write Definition (или нажать F8) и указать следующие параметры:&lt;br /&gt;
&lt;br /&gt;
В поле Slave ID нужно указать адрес датчика (5, 6 или 7), в поле Function выбрать «04 Read Input Registers (3х)», в полях Address и Quantity указать значение 1. Если номер датчика соответствует выбранному при подключении порту, то опрос пойдет корректно (Tx увеличивается, Err = 0):&lt;br /&gt;
&lt;br /&gt;
Результат опроса можно увидеть, нажав кнопку Display communication traffic в панели инструментов (Tx – байты с запросом, Rx – байты ответа от датчика). В случае ошибки опроса или недоступности устройства Rx в трафике не будет, а будут только строки с отправкой (Tx).&lt;br /&gt;
&lt;br /&gt;
4.     Весь трафик между Modbus Poll на узле MCM-NODE2 и каким-либо из датчиков пролетает через сервер МКИ (который MCM-SNIFFER, см. схему). Соответственно, если в настройках перехвата указать порт на сервере,  к которому подключен MCM-NODE2 (enp7s0 на данный момент), то еНОД.МКИ на сервере MCM-SNIFFER сможет перехватывать трафик MODBUS и, соответственно, его анализировать.&lt;/div&gt;</summary>
		<author><name>Dima</name></author>
	</entry>
	<entry>
		<id>https://wiki.entcor.ru/index.php?title=%D0%9C%D0%9A%D0%98&amp;diff=415</id>
		<title>МКИ</title>
		<link rel="alternate" type="text/html" href="https://wiki.entcor.ru/index.php?title=%D0%9C%D0%9A%D0%98&amp;diff=415"/>
		<updated>2025-03-28T05:07:13Z</updated>

		<summary type="html">&lt;p&gt;Dima: /* Вариант 1: Установка с помощью инсталляционного пакета */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= &#039;&#039;&#039;Система мониторинга качества измерений (МКИ)&#039;&#039;&#039; =&lt;br /&gt;
&lt;br /&gt;
=== Схема тестового стенда ===&lt;br /&gt;
[[Файл:Стенд для МКИ (декабрь 2024).drawio.png|альт=Стенд для МКИ (декабрь 2024)|мини|978x978пкс|Стенд для МКИ (декабрь 2024)]]&lt;br /&gt;
&lt;br /&gt;
=== Подключение и настойка оборудования ===&lt;br /&gt;
Подключение компонентов стенда производится в соответствии со схемой подключения. При этом для корректного выполнения дальнейших инструкций подключение устройств к физическим портам и сетевые настройки интерфейсов должны быть выполнены  согласно табл. 1:&lt;br /&gt;
&lt;br /&gt;
==== Таблица 1 - Параметры сетевых настроек устройств стенда ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Хост&lt;br /&gt;
!Порт&lt;br /&gt;
!Интерфейс&lt;br /&gt;
!IP&lt;br /&gt;
!Подключен к &lt;br /&gt;
устройство/порт&lt;br /&gt;
!Описание&lt;br /&gt;
|-&lt;br /&gt;
|MCM-SNIFFER&lt;br /&gt;
|Eth1&lt;br /&gt;
|enp5s0&lt;br /&gt;
|192.168.2.15/24&lt;br /&gt;
|L2 Switch&lt;br /&gt;
|Интерфейс управления для Sniffer&lt;br /&gt;
|-&lt;br /&gt;
|MCM-SNIFFER&lt;br /&gt;
|Eth2&lt;br /&gt;
|enp6s0&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;-&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|MCM-NODE1 / Eth2&lt;br /&gt;
|Участвует в L2 Bridge&lt;br /&gt;
|-&lt;br /&gt;
|MCM-SNIFFER&lt;br /&gt;
|Eth3&lt;br /&gt;
|enp7s0&lt;br /&gt;
| -&lt;br /&gt;
|MCM-NODE2 / Eth2&lt;br /&gt;
|Участвует в L2 Bridge&lt;br /&gt;
|-&lt;br /&gt;
|MCM-SNIFFER&lt;br /&gt;
|Eth4&lt;br /&gt;
|enp8s0&lt;br /&gt;
| -&lt;br /&gt;
|ZLAN / Eth&lt;br /&gt;
|Участвует в L2 Bridge&lt;br /&gt;
|-&lt;br /&gt;
|MCM-NODE1&lt;br /&gt;
|Eth1&lt;br /&gt;
|EXTERNAL&lt;br /&gt;
|192.168.2.156/24&lt;br /&gt;
|L2 Switch&lt;br /&gt;
|Интерфейс управления для Node1&lt;br /&gt;
|-&lt;br /&gt;
|MCM-NODE1&lt;br /&gt;
|Eth2&lt;br /&gt;
|INTERNAL&lt;br /&gt;
|10.0.0.1/24&lt;br /&gt;
|MCM-SNIFFER / Eth2&lt;br /&gt;
|Интерфейс обмена данными для Node1&lt;br /&gt;
|-&lt;br /&gt;
|MCM-NODE2&lt;br /&gt;
|Eth1&lt;br /&gt;
|EXTERNAL&lt;br /&gt;
|192.168.2.195/24&lt;br /&gt;
|L2 Switch&lt;br /&gt;
|Интерфейс управления для Node2&lt;br /&gt;
|-&lt;br /&gt;
|MCM-NODE2&lt;br /&gt;
|Eth2&lt;br /&gt;
|INTERNAL&lt;br /&gt;
|10.0.0.2/24&lt;br /&gt;
|MCM-SNIFFER / Eth3&lt;br /&gt;
|Интерфейс обмена данными для Node2&lt;br /&gt;
|-&lt;br /&gt;
|ZLAN&lt;br /&gt;
|Eth&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
|MCM-SNIFFER / Eth4&lt;br /&gt;
|Интерфейс обмена данными для ZLAN&lt;br /&gt;
|-&lt;br /&gt;
|ZLAN&lt;br /&gt;
|RS-485 #1&lt;br /&gt;
|ZLDEV0001&lt;br /&gt;
|10.0.0.241/24&lt;br /&gt;
|&lt;br /&gt;
|Подключение датчика с MODBUS-адресом 5&lt;br /&gt;
|-&lt;br /&gt;
|ZLAN&lt;br /&gt;
|RS-485 #2&lt;br /&gt;
|ZLDEV0002&lt;br /&gt;
|10.0.0.242/24&lt;br /&gt;
|&lt;br /&gt;
|Подключение датчика с MODBUS-адресом 6&lt;br /&gt;
|-&lt;br /&gt;
|ZLAN&lt;br /&gt;
|RS-485 #3&lt;br /&gt;
|ZLDEV0003&lt;br /&gt;
|10.0.0.243/24&lt;br /&gt;
|&lt;br /&gt;
|Подключение датчика с MODBUS-адресом 7&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Развертывание системы ===&lt;br /&gt;
&lt;br /&gt;
==== Установка базовых систем ====&lt;br /&gt;
Установка ОС Windows на компьютерах &#039;&#039;&#039;MCM-NODE1&#039;&#039;&#039; и &#039;&#039;&#039;MCM-NODE2&#039;&#039;&#039; производится обычным образом, при этом  соответствующим сетевым интерфейсам должны быть присвоены адреса согласно данным табл. 1, также для совместимости должны быть указаны следующие параметры настройки системы:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Таблица 2 - Параметры настройки узлов MCM-NODE1 и MCM-NODE2&lt;br /&gt;
!Параметр&lt;br /&gt;
!Значение&lt;br /&gt;
|-&lt;br /&gt;
|Имя компьютера&lt;br /&gt;
|MCM-NODE1/MCM-NODE2&lt;br /&gt;
|-&lt;br /&gt;
|Имя пользователя c правами локального администратора&lt;br /&gt;
|entcor&lt;br /&gt;
|-&lt;br /&gt;
|Пароль&lt;br /&gt;
|1&lt;br /&gt;
|}&lt;br /&gt;
Установка базовой системы Ubuntu Server 24.0x на компьютер &#039;&#039;&#039;MCM-SNIFFER&#039;&#039;&#039; производится обычным образом в режиме инсталляции по умолчанию, при этом при выборе параметров установки необходимо включить установку сервера OpenSSH, а также для совместимости следует  указать следующие значения прочих параметров:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Таблица 3 - Параметры настройки узла MCM-SNIFFER&lt;br /&gt;
!Параметр&lt;br /&gt;
!Значение&lt;br /&gt;
|-&lt;br /&gt;
|Имя компьютера&lt;br /&gt;
|MCM-SNIFFER&lt;br /&gt;
|-&lt;br /&gt;
|Имя пользователя c правами root                       &lt;br /&gt;
|entcor&lt;br /&gt;
|-&lt;br /&gt;
|Пароль&lt;br /&gt;
|ng3-dcc20&lt;br /&gt;
|}&lt;br /&gt;
После установки системы необходимо установить обновления:&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt full-upgrade&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
а также проверить доступ к серверу по SSH с компьютера администратора:&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
ssh entcor@192.168.2.15 (текущий адрес сервера MCM-SNIFFER)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&#039;&#039;&#039;Примечание:&#039;&#039;&#039; для удобства работы с файлами настоятельно рекомендуется также первым делом вкатить Midnight Commander:&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt install mc&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Также в дальнейшем целесообразно запускать Midnight Commander через &#039;&#039;&#039;sudo&#039;&#039;&#039;:&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
sudo mc&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Это позволит, во-первых, невозбранно редактировать все необходимые файлы и, во-вторых, при скрытии окон Midnight Commander выполнять из-под него с командной строки команды в режиме root без необходимости париться с sudo для каждой отдельной команды.&lt;br /&gt;
&lt;br /&gt;
==== Настройка сетевых интерфейсов ====&lt;br /&gt;
Для корректной работы сетевых интерфейсов и сохранения их параметров после перезагрузки сервера необходимо в каталоге &#039;&#039;&#039;/etc/netplan&#039;&#039;&#039; создать файл с расширением .yaml (например, &#039;&#039;&#039;01-network.yaml&#039;&#039;&#039;) со следующим содержимым:&amp;lt;syntaxhighlight lang=&amp;quot;yaml&amp;quot;&amp;gt;&lt;br /&gt;
network:&lt;br /&gt;
    version: 2&lt;br /&gt;
    ethernets:&lt;br /&gt;
        enp5s0:&lt;br /&gt;
            dhcp4: false&lt;br /&gt;
            addresses: &lt;br /&gt;
                - 192.168.2.15/24&lt;br /&gt;
            routes:&lt;br /&gt;
              - to: default&lt;br /&gt;
                via: 192.168.2.254&lt;br /&gt;
            nameservers: &lt;br /&gt;
                addresses: [192.168.2.60, 176.114.16.33]&lt;br /&gt;
        enp6s0:&lt;br /&gt;
            dhcp4: false&lt;br /&gt;
        enp7s0:&lt;br /&gt;
            dhcp4: false&lt;br /&gt;
        enp8s0:&lt;br /&gt;
            dhcp4: false&lt;br /&gt;
    bridges:&lt;br /&gt;
        docker0:&lt;br /&gt;
            interfaces: [enp6s0, enp7s0, enp8s0]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&#039;&#039;&#039;Примечания:&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
# Для интерфейса &#039;&#039;&#039;enp5s0&#039;&#039;&#039; вместо 192.168.2.15/24 следует указать нужный статический адрес сервера, также при необходимости следует указать фактически используемые адреса шлюза и DNS (в &#039;&#039;&#039;via&#039;&#039;&#039; и &#039;&#039;&#039;nameservers&#039;&#039;&#039; соответственно).&lt;br /&gt;
# В файле конфигурации заранее определяется мост &#039;&#039;&#039;docker0&#039;&#039;&#039;, который будет использоваться Docker&#039;ом после его установки. Таким образом, интерфейсы &#039;&#039;&#039;enp6s0/enp7s0/enp8s0&#039;&#039;&#039; заранее подключаются к мосту &#039;&#039;&#039;docker0&#039;&#039;&#039;, и, соответственно, в будущем будут доступны из Docker.&lt;br /&gt;
# Для удобства проще скопировать готовый файл &#039;&#039;&#039;01-network.yaml&#039;&#039;&#039; с компьютера администратора и положить его в &#039;&#039;&#039;/etc/netplan&#039;&#039;&#039; .&lt;br /&gt;
# Как показывает практика, существующий в &#039;&#039;&#039;/etc/netplan&#039;&#039;&#039; файл конфигурации по умолчанию &#039;&#039;&#039;50-cloud-init.yaml&#039;&#039;&#039; лучше переименовать во что-то типа &#039;&#039;&#039;50-cloud-init.yaml.bak,&#039;&#039;&#039; иначе у интерфейса &#039;&#039;&#039;enp5s0&#039;&#039;&#039; будет образовываться 2 адреса - статический из настроек в &#039;&#039;&#039;01-network.yaml&#039;&#039;&#039; и динамический, который будет дополнительно прилетать по DHCP и создавать путаницу. Вроде бы, должно лечиться установкой в файле &#039;&#039;&#039;50-cloud-init.yaml&#039;&#039;&#039; для интерфейса &#039;&#039;&#039;enp5s0&#039;&#039;&#039; параметра &#039;&#039;&#039;dchp4: false&#039;&#039;&#039;, но по факту не помогает, поэтому лучше от греха подальше во избежание конфликтов держать в &#039;&#039;&#039;/etc/netplan&#039;&#039;&#039;  только один файл &#039;&#039;&#039;01-network.yaml&#039;&#039;&#039; с настройками интерфейсов.&lt;br /&gt;
# Для применения настроек интерфейсов и сохранения настроек после перезагрузки сервера рекомендуется выполнение &#039;&#039;&#039;netplan try&#039;&#039;&#039; . Это позволит проверить конфигурацию перед применением и отловить возможные ошибки. Также рекомендуется в обязательном порядке выполнить контрольную перезагрузку сервера, чтобы убедиться, что настройки после нее восстанавливаются правильно.&lt;br /&gt;
# Для проверки работоспособности моста &#039;&#039;&#039;docker0&#039;&#039;&#039; перед настройкой интерфейсов следует запустить постоянный пинг (с параметром &#039;&#039;&#039;-t&#039;&#039;&#039;) с &#039;&#039;&#039;MCM-NODE1&#039;&#039;&#039; (10.0.0.1) на &#039;&#039;&#039;MCM-NODE2&#039;&#039;&#039; (10.0.0.2) и наоборот и убедиться в том, что узлы недоступны друг для друга. После настройки конфигурации интерфейсов и выполнения &#039;&#039;&#039;netplan try&#039;&#039;&#039; следует проверить, что пинг с MCM-NODE1 (10.0.0.1) на MCM-NODE2 (10.0.0.2) в обе стороны проходит успешно, т.е. узлы общаются между собой напрямую через мост &#039;&#039;&#039;docker0&#039;&#039;&#039;.&lt;br /&gt;
==== Установка сертификата Entcor ====&lt;br /&gt;
С компьютера администратора следует скопировать файл сертификата &#039;&#039;&#039;entcor.crt&#039;&#039;&#039; на узел &#039;&#039;&#039;MCM-SNIFFER&#039;&#039;&#039; по следующему пути (необходимо использовать фактический IP-адрес сервера MCM-SNIFFER):&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
scp entcor.crt entcor@192.168.2.23:/home/entcor&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Затем на компьютере &#039;&#039;&#039;MCM-SNIFFER&#039;&#039;&#039; следует перенести сертификат в необходимый каталог и выполнить его обновление:&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
sudo mv entcor.crt /usr/local/share/ca-certificates&lt;br /&gt;
sudo update-ca-certificates &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&#039;&#039;&#039;Примечание:&#039;&#039;&#039; после обновления сертификатов необходимо выполнить перезагрузку компьютера &#039;&#039;&#039;MCM-SNIFFER&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==== Установка Docker ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
# Add Docker&#039;s official GPG key:&lt;br /&gt;
&lt;br /&gt;
sudo apt-get update&lt;br /&gt;
sudo apt-get install ca-certificates curl&lt;br /&gt;
sudo install -m 0755 -d /etc/apt/keyrings&lt;br /&gt;
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc&lt;br /&gt;
sudo chmod a+r /etc/apt/keyrings/docker.asc&lt;br /&gt;
&lt;br /&gt;
# Add the repository to Apt sources:&lt;br /&gt;
&lt;br /&gt;
echo \&lt;br /&gt;
&amp;quot;deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \&lt;br /&gt;
$(. /etc/os-release &amp;amp;&amp;amp; echo &amp;quot;$VERSION_CODENAME&amp;quot;) stable&amp;quot; | \&lt;br /&gt;
sudo tee /etc/apt/sources.list.d/docker.list &amp;gt; /dev/null&lt;br /&gt;
&lt;br /&gt;
sudo apt-get update&lt;br /&gt;
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Ссылка на руководство: https://docs.docker.com/engine/install/ubuntu/#install-using-the-repository&lt;br /&gt;
&lt;br /&gt;
==== Установка компонентов системы МКИ ====&lt;br /&gt;
Установка компонентов системы МКИ может осуществляться посредством получения последней версии инсталляционного пакета (предпочтительно), либо из репозитория Git (может применяться для целей отладки или быстрого накатывания патчей/фикса ошибок).&lt;br /&gt;
&lt;br /&gt;
==== Вариант 1: Установка с помощью инсталляционного пакета ====&lt;br /&gt;
Получение последней версии инсталляционного пакета производится с FTP-сервера Jenkins. Для этого необходимо подключиться к нему с устройства МКИ по протоколу FTP, используя соответствующую пару логин-пароль, и выкачать оттуда файлы &#039;&#039;&#039;install.sh&#039;&#039;&#039; и &#039;&#039;&#039;latest.tar.gz&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Перед запуском инсталляционного скрипта install.sh необходимо установить для него права на выполнение посредством команды chmod:&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
chmod +x install.sh&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Также для корректной работы стека common необходимо предварительно авторизоваться под нужной учетной записью в docker-репозитории Harbor:&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
docker login registry.entcor&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Далее непосредственное развертывание контейнеров производится запуском на выполнение скрипта &#039;&#039;&#039;install.sh&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
После завершения установки компонентов ПАК «еNODE.МКИ» следует выполнить переход в каталог &#039;&#039;&#039;/opt/e-node/deploy&#039;&#039;&#039;, куда выполнялось развертывание компонентов системы инсталляционным скриптом &#039;&#039;&#039;install.sh&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Далее в том же каталоге следует создать/отредактировать файла &#039;&#039;&#039;.env&#039;&#039;&#039;, в котором следует установить следующие параметры:&lt;br /&gt;
&lt;br /&gt;
* MONITOR_DATA_IF = &amp;lt;имя интерфейса на узле &#039;&#039;&#039;MCM-SNIFFER&#039;&#039;&#039;,  на котором выполняется прослушка, например, enp7s&lt;br /&gt;
* MODE = enode &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Примечание:&#039;&#039;&#039; вообще-то для работы МКИ параметр MODE должен иметь  значение asutp, но работает пока только вот так. &lt;br /&gt;
&lt;br /&gt;
==== Вариант 2: Установка непосредственно из репозитория Git ====&lt;br /&gt;
&lt;br /&gt;
Получение последней версии инсталляционного пакета производится из  Git-репозитория &#039;&#039;&#039;e-deploy&#039;&#039;&#039;, находящегося по адресу  &#039;&#039;&#039;&amp;lt;nowiki&amp;gt;http://192.168.2.61&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;, (нужно будет ввести соответствующие логин-пароль для доступа к репозиторию, а также выполнить переключение на ветку &#039;&#039;&#039;develop&#039;&#039;&#039;): &amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
git clone http://192.168.2.61/e-node/e-deploy.git&lt;br /&gt;
git switch develop&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Далее следует авторизоваться под нужной учетной записью в Docker-репозитории Harbor:&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
docker login registry.entcor&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;после чего нужно перейти в каталог &#039;&#039;&#039;e-deploy&#039;&#039;&#039; (в том каталоге, где выполнялся git clone) и выполнить следующую команду:&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
./enode.sh init&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Далее в том же каталоге следует создать/отредактировать файла &#039;&#039;&#039;.env&#039;&#039;&#039;, в котором следует установить следующие параметры:&lt;br /&gt;
&lt;br /&gt;
MONITOR_DATA_IF = &amp;lt;имя интерфейса на узле &#039;&#039;&#039;MCM-SNIFFER&#039;&#039;&#039;,  на котором выполняется прослушка, например, enp7s0&amp;gt; &lt;br /&gt;
&lt;br /&gt;
MODE = enode &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Примечание:&#039;&#039;&#039; вообще-то для работы МКИ параметр MODE должен иметь  значение asutp, но работает пока только вот так. &lt;br /&gt;
==== Запуск компонентов системы МКИ ====&lt;br /&gt;
После установки компонентов МКИ можно выполнить их запуск следующей командой: &amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
enode &amp;lt;имя стека&amp;gt; start&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&#039;&#039;&#039;Примечание:&#039;&#039;&#039; названия нужных стеков можно посмотреть в каталоге &#039;&#039;&#039;stacks&#039;&#039;&#039;  в &#039;&#039;&#039;e-deploy&#039;&#039;&#039; (имена стеков соответствуют именам подкаталогов). Как минимум должны быть запущены следующие стеки:&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
enode analytic start&lt;br /&gt;
enode common start&lt;br /&gt;
enode asutp start&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&#039;&#039;&#039;Примечание:&#039;&#039;&#039;  стек &#039;&#039;&#039;analytic&#039;&#039;&#039; рекомендуется запускать перед стеком &#039;&#039;&#039;common&#039;&#039;&#039; из-за каких-то особенностей функционирования:&lt;br /&gt;
&lt;br /&gt;
Проверка запуска сервисов производится обычным образом с помощью команды:&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
docker ps&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Проверка информационного обмена по протоколу МЭК-60870-5-104 ====&lt;br /&gt;
Проверка информационного обмена по протоколу МЭК-60870-5-104 производится между узлами стенда &#039;&#039;&#039;MCM-NODE1&#039;&#039;&#039; и &#039;&#039;&#039;MCM-NODE2&#039;&#039;&#039; посредством программного обеспечения  IEC Test, которое эмулирует передачу пакетов протокола МЭК-60870-5-104 поверх соединения Ethernet. &lt;br /&gt;
&lt;br /&gt;
Для проверки работы протокола МЭК-60870-5-104 во внутренней сети обмена на одном из узлов ПО IEC Test запускается в режиме сервера с показанными ниже настройками: &lt;br /&gt;
&lt;br /&gt;
TCP/IP Link Role - Server &lt;br /&gt;
&lt;br /&gt;
IP Address - адрес внутреннего интерфейса для информационного обмена (в данном примере - 10.0.0.2) &lt;br /&gt;
&lt;br /&gt;
Далее устанавливается канал обмена последовательным нажатием кнопок &amp;quot;Build String&amp;quot; и &amp;quot;Open Channel&amp;quot; (индикатор &amp;quot;1 channel&amp;quot; должен стать темно-зеленым). &lt;br /&gt;
[[Файл:IEC Test - 2.png|мини|794x794пкс|Настройки программы IEC Test для организации обмена  между узлами стенда MCM-NODE1 и MCM-NODE2 по протоколу МЭК-60870-5-104 (серверная часть)|центр]]Соответственно, на другом узле ПО IEC Test запускается в режиме клиента с показанными ниже настройками:&lt;br /&gt;
&lt;br /&gt;
TCP/IP Link Role - Client &lt;br /&gt;
&lt;br /&gt;
IP Address - адрес сервера, находящегося во внутренней сети для информационного обмена  (в данном примере - 10.0.0.2). &lt;br /&gt;
&lt;br /&gt;
Далее устанавливается канал обмена последовательным нажатием кнопок &amp;quot;Build String&amp;quot; и &amp;quot;Open Channel&amp;quot; (индикатор &amp;quot;1 channel&amp;quot; должен стать темно-зеленым).&lt;br /&gt;
&lt;br /&gt;
Для начала непосредственно информационного взаимодействия следует послать с клиента на сервер специальную команду посредством нажатия кнопки &amp;quot;Start DT&amp;quot; (индикатор &amp;quot;1 channel&amp;quot; должен стать светло-зеленым как показано на рисунке ниже). С этого момента канал обмена установлен и активирован, а между экземплярами ПО IEC Test могут передаваться пакеты протокола МЭК-60870-5-104.&lt;br /&gt;
[[Файл:IEC Test - 3.png|центр|мини|791x791пкс|Настройки программы IEC Test для организации обмена  между узлами стенда MCM-NODE1 и MCM-NODE2 по протоколу МЭК-60870-5-104 (клиентская часть)]]Для создания трафика по протоколу МЭК-60870-5-104 между узлами &#039;&#039;&#039;MCM-NODE1&#039;&#039;&#039; и &#039;&#039;&#039;MCM-NODE2&#039;&#039;&#039; следует использовать специальный макрос, имитирующий последовательную передачу данных протокола МЭК-60870-5-104 между узлами. Для этого необходимо на любом из узлов в ПО IEC Test перейти во вкладку &amp;quot;870 Commander&amp;quot;, нажатием кнопки &amp;quot;Загрузить&amp;quot; загрузить макрос &amp;quot;ДУ по циклу 5 сек.rtm&amp;quot; и выполнить его нажатием кнопки &amp;quot;Выполнить&amp;quot;:&lt;br /&gt;
[[Файл:IEC Test - 4.png|альт=Выполнение макроса в ПО IEC Test для создания трафика по протоколу МЭК-60870-5-104|центр|мини|797x797пкс|Выполнение макроса в ПО IEC Test для создания трафика по протоколу МЭК-60870-5-104]]В случае правильно настроенных узлов стенда и экземпляров ПО IEC Test на принимающем узле во вкладке &amp;quot;870 Commander&amp;quot; в соответствующем окне можно будет увидеть информацию о принятых сообщениях, отправленных макросом с передающего узла, что свидетельствует о состоявшемся информационном обмене по протоколу МЭК-60870-5-104 между узлами.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Примечание:&#039;&#039;&#039; в случае, если система МКИ выполняет прослушивание на одном из интерфейсов, входящих во внутреннюю сеть информационного обмена, а также при правильном конфигурировании компонента Grafana, при подключении браузером по адресу сервера  &#039;&#039;&#039;MCM-SNIFFER&#039;&#039;&#039; (&#039;&#039;&#039;&amp;lt;nowiki&amp;gt;http://192.168.2.142&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;) в соответствующих дашбордах должна появиться информация о перехваченных пакетах протокола МЭК-60870-5-104, создающих описанный выше трафик.&lt;/div&gt;</summary>
		<author><name>Dima</name></author>
	</entry>
	<entry>
		<id>https://wiki.entcor.ru/index.php?title=%D0%9C%D0%9A%D0%98&amp;diff=414</id>
		<title>МКИ</title>
		<link rel="alternate" type="text/html" href="https://wiki.entcor.ru/index.php?title=%D0%9C%D0%9A%D0%98&amp;diff=414"/>
		<updated>2025-03-28T04:59:48Z</updated>

		<summary type="html">&lt;p&gt;Dima: /* Установка компонентов системы МКИ */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= &#039;&#039;&#039;Система мониторинга качества измерений (МКИ)&#039;&#039;&#039; =&lt;br /&gt;
&lt;br /&gt;
=== Схема тестового стенда ===&lt;br /&gt;
[[Файл:Стенд для МКИ (декабрь 2024).drawio.png|альт=Стенд для МКИ (декабрь 2024)|мини|978x978пкс|Стенд для МКИ (декабрь 2024)]]&lt;br /&gt;
&lt;br /&gt;
=== Подключение и настойка оборудования ===&lt;br /&gt;
Подключение компонентов стенда производится в соответствии со схемой подключения. При этом для корректного выполнения дальнейших инструкций подключение устройств к физическим портам и сетевые настройки интерфейсов должны быть выполнены  согласно табл. 1:&lt;br /&gt;
&lt;br /&gt;
==== Таблица 1 - Параметры сетевых настроек устройств стенда ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Хост&lt;br /&gt;
!Порт&lt;br /&gt;
!Интерфейс&lt;br /&gt;
!IP&lt;br /&gt;
!Подключен к &lt;br /&gt;
устройство/порт&lt;br /&gt;
!Описание&lt;br /&gt;
|-&lt;br /&gt;
|MCM-SNIFFER&lt;br /&gt;
|Eth1&lt;br /&gt;
|enp5s0&lt;br /&gt;
|192.168.2.15/24&lt;br /&gt;
|L2 Switch&lt;br /&gt;
|Интерфейс управления для Sniffer&lt;br /&gt;
|-&lt;br /&gt;
|MCM-SNIFFER&lt;br /&gt;
|Eth2&lt;br /&gt;
|enp6s0&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;-&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|MCM-NODE1 / Eth2&lt;br /&gt;
|Участвует в L2 Bridge&lt;br /&gt;
|-&lt;br /&gt;
|MCM-SNIFFER&lt;br /&gt;
|Eth3&lt;br /&gt;
|enp7s0&lt;br /&gt;
| -&lt;br /&gt;
|MCM-NODE2 / Eth2&lt;br /&gt;
|Участвует в L2 Bridge&lt;br /&gt;
|-&lt;br /&gt;
|MCM-SNIFFER&lt;br /&gt;
|Eth4&lt;br /&gt;
|enp8s0&lt;br /&gt;
| -&lt;br /&gt;
|ZLAN / Eth&lt;br /&gt;
|Участвует в L2 Bridge&lt;br /&gt;
|-&lt;br /&gt;
|MCM-NODE1&lt;br /&gt;
|Eth1&lt;br /&gt;
|EXTERNAL&lt;br /&gt;
|192.168.2.156/24&lt;br /&gt;
|L2 Switch&lt;br /&gt;
|Интерфейс управления для Node1&lt;br /&gt;
|-&lt;br /&gt;
|MCM-NODE1&lt;br /&gt;
|Eth2&lt;br /&gt;
|INTERNAL&lt;br /&gt;
|10.0.0.1/24&lt;br /&gt;
|MCM-SNIFFER / Eth2&lt;br /&gt;
|Интерфейс обмена данными для Node1&lt;br /&gt;
|-&lt;br /&gt;
|MCM-NODE2&lt;br /&gt;
|Eth1&lt;br /&gt;
|EXTERNAL&lt;br /&gt;
|192.168.2.195/24&lt;br /&gt;
|L2 Switch&lt;br /&gt;
|Интерфейс управления для Node2&lt;br /&gt;
|-&lt;br /&gt;
|MCM-NODE2&lt;br /&gt;
|Eth2&lt;br /&gt;
|INTERNAL&lt;br /&gt;
|10.0.0.2/24&lt;br /&gt;
|MCM-SNIFFER / Eth3&lt;br /&gt;
|Интерфейс обмена данными для Node2&lt;br /&gt;
|-&lt;br /&gt;
|ZLAN&lt;br /&gt;
|Eth&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
|MCM-SNIFFER / Eth4&lt;br /&gt;
|Интерфейс обмена данными для ZLAN&lt;br /&gt;
|-&lt;br /&gt;
|ZLAN&lt;br /&gt;
|RS-485 #1&lt;br /&gt;
|ZLDEV0001&lt;br /&gt;
|10.0.0.241/24&lt;br /&gt;
|&lt;br /&gt;
|Подключение датчика с MODBUS-адресом 5&lt;br /&gt;
|-&lt;br /&gt;
|ZLAN&lt;br /&gt;
|RS-485 #2&lt;br /&gt;
|ZLDEV0002&lt;br /&gt;
|10.0.0.242/24&lt;br /&gt;
|&lt;br /&gt;
|Подключение датчика с MODBUS-адресом 6&lt;br /&gt;
|-&lt;br /&gt;
|ZLAN&lt;br /&gt;
|RS-485 #3&lt;br /&gt;
|ZLDEV0003&lt;br /&gt;
|10.0.0.243/24&lt;br /&gt;
|&lt;br /&gt;
|Подключение датчика с MODBUS-адресом 7&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Развертывание системы ===&lt;br /&gt;
&lt;br /&gt;
==== Установка базовых систем ====&lt;br /&gt;
Установка ОС Windows на компьютерах &#039;&#039;&#039;MCM-NODE1&#039;&#039;&#039; и &#039;&#039;&#039;MCM-NODE2&#039;&#039;&#039; производится обычным образом, при этом  соответствующим сетевым интерфейсам должны быть присвоены адреса согласно данным табл. 1, также для совместимости должны быть указаны следующие параметры настройки системы:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Таблица 2 - Параметры настройки узлов MCM-NODE1 и MCM-NODE2&lt;br /&gt;
!Параметр&lt;br /&gt;
!Значение&lt;br /&gt;
|-&lt;br /&gt;
|Имя компьютера&lt;br /&gt;
|MCM-NODE1/MCM-NODE2&lt;br /&gt;
|-&lt;br /&gt;
|Имя пользователя c правами локального администратора&lt;br /&gt;
|entcor&lt;br /&gt;
|-&lt;br /&gt;
|Пароль&lt;br /&gt;
|1&lt;br /&gt;
|}&lt;br /&gt;
Установка базовой системы Ubuntu Server 24.0x на компьютер &#039;&#039;&#039;MCM-SNIFFER&#039;&#039;&#039; производится обычным образом в режиме инсталляции по умолчанию, при этом при выборе параметров установки необходимо включить установку сервера OpenSSH, а также для совместимости следует  указать следующие значения прочих параметров:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Таблица 3 - Параметры настройки узла MCM-SNIFFER&lt;br /&gt;
!Параметр&lt;br /&gt;
!Значение&lt;br /&gt;
|-&lt;br /&gt;
|Имя компьютера&lt;br /&gt;
|MCM-SNIFFER&lt;br /&gt;
|-&lt;br /&gt;
|Имя пользователя c правами root                       &lt;br /&gt;
|entcor&lt;br /&gt;
|-&lt;br /&gt;
|Пароль&lt;br /&gt;
|ng3-dcc20&lt;br /&gt;
|}&lt;br /&gt;
После установки системы необходимо установить обновления:&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt full-upgrade&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
а также проверить доступ к серверу по SSH с компьютера администратора:&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
ssh entcor@192.168.2.15 (текущий адрес сервера MCM-SNIFFER)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&#039;&#039;&#039;Примечание:&#039;&#039;&#039; для удобства работы с файлами настоятельно рекомендуется также первым делом вкатить Midnight Commander:&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt install mc&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Также в дальнейшем целесообразно запускать Midnight Commander через &#039;&#039;&#039;sudo&#039;&#039;&#039;:&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
sudo mc&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Это позволит, во-первых, невозбранно редактировать все необходимые файлы и, во-вторых, при скрытии окон Midnight Commander выполнять из-под него с командной строки команды в режиме root без необходимости париться с sudo для каждой отдельной команды.&lt;br /&gt;
&lt;br /&gt;
==== Настройка сетевых интерфейсов ====&lt;br /&gt;
Для корректной работы сетевых интерфейсов и сохранения их параметров после перезагрузки сервера необходимо в каталоге &#039;&#039;&#039;/etc/netplan&#039;&#039;&#039; создать файл с расширением .yaml (например, &#039;&#039;&#039;01-network.yaml&#039;&#039;&#039;) со следующим содержимым:&amp;lt;syntaxhighlight lang=&amp;quot;yaml&amp;quot;&amp;gt;&lt;br /&gt;
network:&lt;br /&gt;
    version: 2&lt;br /&gt;
    ethernets:&lt;br /&gt;
        enp5s0:&lt;br /&gt;
            dhcp4: false&lt;br /&gt;
            addresses: &lt;br /&gt;
                - 192.168.2.15/24&lt;br /&gt;
            routes:&lt;br /&gt;
              - to: default&lt;br /&gt;
                via: 192.168.2.254&lt;br /&gt;
            nameservers: &lt;br /&gt;
                addresses: [192.168.2.60, 176.114.16.33]&lt;br /&gt;
        enp6s0:&lt;br /&gt;
            dhcp4: false&lt;br /&gt;
        enp7s0:&lt;br /&gt;
            dhcp4: false&lt;br /&gt;
        enp8s0:&lt;br /&gt;
            dhcp4: false&lt;br /&gt;
    bridges:&lt;br /&gt;
        docker0:&lt;br /&gt;
            interfaces: [enp6s0, enp7s0, enp8s0]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&#039;&#039;&#039;Примечания:&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
# Для интерфейса &#039;&#039;&#039;enp5s0&#039;&#039;&#039; вместо 192.168.2.15/24 следует указать нужный статический адрес сервера, также при необходимости следует указать фактически используемые адреса шлюза и DNS (в &#039;&#039;&#039;via&#039;&#039;&#039; и &#039;&#039;&#039;nameservers&#039;&#039;&#039; соответственно).&lt;br /&gt;
# В файле конфигурации заранее определяется мост &#039;&#039;&#039;docker0&#039;&#039;&#039;, который будет использоваться Docker&#039;ом после его установки. Таким образом, интерфейсы &#039;&#039;&#039;enp6s0/enp7s0/enp8s0&#039;&#039;&#039; заранее подключаются к мосту &#039;&#039;&#039;docker0&#039;&#039;&#039;, и, соответственно, в будущем будут доступны из Docker.&lt;br /&gt;
# Для удобства проще скопировать готовый файл &#039;&#039;&#039;01-network.yaml&#039;&#039;&#039; с компьютера администратора и положить его в &#039;&#039;&#039;/etc/netplan&#039;&#039;&#039; .&lt;br /&gt;
# Как показывает практика, существующий в &#039;&#039;&#039;/etc/netplan&#039;&#039;&#039; файл конфигурации по умолчанию &#039;&#039;&#039;50-cloud-init.yaml&#039;&#039;&#039; лучше переименовать во что-то типа &#039;&#039;&#039;50-cloud-init.yaml.bak,&#039;&#039;&#039; иначе у интерфейса &#039;&#039;&#039;enp5s0&#039;&#039;&#039; будет образовываться 2 адреса - статический из настроек в &#039;&#039;&#039;01-network.yaml&#039;&#039;&#039; и динамический, который будет дополнительно прилетать по DHCP и создавать путаницу. Вроде бы, должно лечиться установкой в файле &#039;&#039;&#039;50-cloud-init.yaml&#039;&#039;&#039; для интерфейса &#039;&#039;&#039;enp5s0&#039;&#039;&#039; параметра &#039;&#039;&#039;dchp4: false&#039;&#039;&#039;, но по факту не помогает, поэтому лучше от греха подальше во избежание конфликтов держать в &#039;&#039;&#039;/etc/netplan&#039;&#039;&#039;  только один файл &#039;&#039;&#039;01-network.yaml&#039;&#039;&#039; с настройками интерфейсов.&lt;br /&gt;
# Для применения настроек интерфейсов и сохранения настроек после перезагрузки сервера рекомендуется выполнение &#039;&#039;&#039;netplan try&#039;&#039;&#039; . Это позволит проверить конфигурацию перед применением и отловить возможные ошибки. Также рекомендуется в обязательном порядке выполнить контрольную перезагрузку сервера, чтобы убедиться, что настройки после нее восстанавливаются правильно.&lt;br /&gt;
# Для проверки работоспособности моста &#039;&#039;&#039;docker0&#039;&#039;&#039; перед настройкой интерфейсов следует запустить постоянный пинг (с параметром &#039;&#039;&#039;-t&#039;&#039;&#039;) с &#039;&#039;&#039;MCM-NODE1&#039;&#039;&#039; (10.0.0.1) на &#039;&#039;&#039;MCM-NODE2&#039;&#039;&#039; (10.0.0.2) и наоборот и убедиться в том, что узлы недоступны друг для друга. После настройки конфигурации интерфейсов и выполнения &#039;&#039;&#039;netplan try&#039;&#039;&#039; следует проверить, что пинг с MCM-NODE1 (10.0.0.1) на MCM-NODE2 (10.0.0.2) в обе стороны проходит успешно, т.е. узлы общаются между собой напрямую через мост &#039;&#039;&#039;docker0&#039;&#039;&#039;.&lt;br /&gt;
==== Установка сертификата Entcor ====&lt;br /&gt;
С компьютера администратора следует скопировать файл сертификата &#039;&#039;&#039;entcor.crt&#039;&#039;&#039; на узел &#039;&#039;&#039;MCM-SNIFFER&#039;&#039;&#039; по следующему пути (необходимо использовать фактический IP-адрес сервера MCM-SNIFFER):&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
scp entcor.crt entcor@192.168.2.23:/home/entcor&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Затем на компьютере &#039;&#039;&#039;MCM-SNIFFER&#039;&#039;&#039; следует перенести сертификат в необходимый каталог и выполнить его обновление:&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
sudo mv entcor.crt /usr/local/share/ca-certificates&lt;br /&gt;
sudo update-ca-certificates &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&#039;&#039;&#039;Примечание:&#039;&#039;&#039; после обновления сертификатов необходимо выполнить перезагрузку компьютера &#039;&#039;&#039;MCM-SNIFFER&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==== Установка Docker ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
# Add Docker&#039;s official GPG key:&lt;br /&gt;
&lt;br /&gt;
sudo apt-get update&lt;br /&gt;
sudo apt-get install ca-certificates curl&lt;br /&gt;
sudo install -m 0755 -d /etc/apt/keyrings&lt;br /&gt;
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc&lt;br /&gt;
sudo chmod a+r /etc/apt/keyrings/docker.asc&lt;br /&gt;
&lt;br /&gt;
# Add the repository to Apt sources:&lt;br /&gt;
&lt;br /&gt;
echo \&lt;br /&gt;
&amp;quot;deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \&lt;br /&gt;
$(. /etc/os-release &amp;amp;&amp;amp; echo &amp;quot;$VERSION_CODENAME&amp;quot;) stable&amp;quot; | \&lt;br /&gt;
sudo tee /etc/apt/sources.list.d/docker.list &amp;gt; /dev/null&lt;br /&gt;
&lt;br /&gt;
sudo apt-get update&lt;br /&gt;
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Ссылка на руководство: https://docs.docker.com/engine/install/ubuntu/#install-using-the-repository&lt;br /&gt;
&lt;br /&gt;
==== Установка компонентов системы МКИ ====&lt;br /&gt;
Установка компонентов системы МКИ может осуществляться посредством получения последней версии инсталляционного пакета (предпочтительно), либо из репозитория Git (может применяться для целей отладки или быстрого накатывания патчей/фикса ошибок).&lt;br /&gt;
&lt;br /&gt;
==== Вариант 1: Установка с помощью инсталляционного пакета ====&lt;br /&gt;
Получение последней версии инсталляционного пакета производится с FTP-сервера Jenkins. Для этого необходимо подключиться к нему с устройства МКИ по протоколу FTP, используя соответствующую пару логин-пароль, и выкачать оттуда файлы &#039;&#039;&#039;install.sh&#039;&#039;&#039; и &#039;&#039;&#039;latest.tar.gz&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Перед запуском инсталляционного скрипта install.sh необходимо установить для него права на выполнение посредством команды chmod:&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
chmod +x install.sh&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Также для корректной работы стека common необходимо предварительно авторизоваться под нужной учетной записью в docker-репозитории Harbor:&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
docker login registry.entcor&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Далее непосредственное развертывание контейнеров производится запуском на выполнение скрипта &#039;&#039;&#039;install.sh&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
После завершения установки компонентов ПАК «еNODE.МКИ» следует выполнить переход в каталог &#039;&#039;&#039;/opt/e-node/deploy&#039;&#039;&#039;, куда выполнялось развертывание компонентов системы инсталляционным скриптом &#039;&#039;&#039;install.sh&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Далее в том же каталоге следует создать/отредактировать файла &#039;&#039;&#039;.env&#039;&#039;&#039;, в котором следует установить следующие параметры:&lt;br /&gt;
&lt;br /&gt;
* MONITOR_DATA_IF = &amp;lt;имя интерфейса на узле &#039;&#039;&#039;MCM-SNIFFER&#039;&#039;&#039;,  на котором выполняется прослушка, например, enp7s&lt;br /&gt;
* MODE = enode &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Примечание:&#039;&#039;&#039; вообще-то для работы МКИ параметр MODE должен иметь  значение asutp, но работает пока только вот так. &lt;br /&gt;
&lt;br /&gt;
После выполнения конфигурирования параметров системы непосредственный запуск компонентов ПАК «еNODE.МКИ» осуществляется из каталога /opt/e-node/deploy следующей командой:&lt;br /&gt;
&lt;br /&gt;
enode &amp;lt;имя стека&amp;gt; start&lt;br /&gt;
&lt;br /&gt;
==== Вариант 2: Установка непосредственно из репозитория Git ====&lt;br /&gt;
&lt;br /&gt;
Получение последней версии инсталляционного пакета производится из  Git-репозитория &#039;&#039;&#039;e-deploy&#039;&#039;&#039;, находящегося по адресу  &#039;&#039;&#039;&amp;lt;nowiki&amp;gt;http://192.168.2.61&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;, (нужно будет ввести соответствующие логин-пароль для доступа к репозиторию, а также выполнить переключение на ветку &#039;&#039;&#039;develop&#039;&#039;&#039;): &amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
git clone http://192.168.2.61/e-node/e-deploy.git&lt;br /&gt;
git switch develop&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Далее следует авторизоваться под нужной учетной записью в Docker-репозитории Harbor:&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
docker login registry.entcor&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;после чего нужно перейти в каталог &#039;&#039;&#039;e-deploy&#039;&#039;&#039; (в том каталоге, где выполнялся git clone) и выполнить следующую команду:&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
./enode.sh init&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Далее в том же каталоге следует создать/отредактировать файла &#039;&#039;&#039;.env&#039;&#039;&#039;, в котором следует установить следующие параметры:&lt;br /&gt;
&lt;br /&gt;
MONITOR_DATA_IF = &amp;lt;имя интерфейса на узле &#039;&#039;&#039;MCM-SNIFFER&#039;&#039;&#039;,  на котором выполняется прослушка, например, enp7s0&amp;gt; &lt;br /&gt;
&lt;br /&gt;
MODE = enode &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Примечание:&#039;&#039;&#039; вообще-то для работы МКИ параметр MODE должен иметь  значение asutp, но работает пока только вот так. &lt;br /&gt;
&lt;br /&gt;
Далее требуется выполнить загрузку и обновление контейнеров посредством запуска скрипта &#039;&#039;&#039;enode&#039;&#039;&#039; с параметром update:&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
enode analytic update&lt;br /&gt;
enode common update&lt;br /&gt;
enode asutp update&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Запуск компонентов системы МКИ ====&lt;br /&gt;
После установки компонентов МКИ можно выполнить их запуск следующей командой: &amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
enode &amp;lt;имя стека&amp;gt; start&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&#039;&#039;&#039;Примечание:&#039;&#039;&#039; названия нужных стеков можно посмотреть в каталоге &#039;&#039;&#039;stacks&#039;&#039;&#039;  в &#039;&#039;&#039;e-deploy&#039;&#039;&#039; (имена стеков соответствуют именам подкаталогов). Как минимум должны быть запущены следующие стеки:&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
enode analytic start&lt;br /&gt;
enode common start&lt;br /&gt;
enode asutp start&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&#039;&#039;&#039;Примечание:&#039;&#039;&#039;  стек &#039;&#039;&#039;analytic&#039;&#039;&#039; рекомендуется запускать перед стеком &#039;&#039;&#039;common&#039;&#039;&#039; из-за каких-то особенностей функционирования:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Проверка запуска сервисов производится обычным образом с помощью команды:&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
docker ps&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Проверка информационного обмена по протоколу МЭК-60870-5-104 ====&lt;br /&gt;
Проверка информационного обмена по протоколу МЭК-60870-5-104 производится между узлами стенда &#039;&#039;&#039;MCM-NODE1&#039;&#039;&#039; и &#039;&#039;&#039;MCM-NODE2&#039;&#039;&#039; посредством программного обеспечения  IEC Test, которое эмулирует передачу пакетов протокола МЭК-60870-5-104 поверх соединения Ethernet. &lt;br /&gt;
&lt;br /&gt;
Для проверки работы протокола МЭК-60870-5-104 во внутренней сети обмена на одном из узлов ПО IEC Test запускается в режиме сервера с показанными ниже настройками: &lt;br /&gt;
&lt;br /&gt;
TCP/IP Link Role - Server &lt;br /&gt;
&lt;br /&gt;
IP Address - адрес внутреннего интерфейса для информационного обмена (в данном примере - 10.0.0.2) &lt;br /&gt;
&lt;br /&gt;
Далее устанавливается канал обмена последовательным нажатием кнопок &amp;quot;Build String&amp;quot; и &amp;quot;Open Channel&amp;quot; (индикатор &amp;quot;1 channel&amp;quot; должен стать темно-зеленым). &lt;br /&gt;
[[Файл:IEC Test - 2.png|мини|794x794пкс|Настройки программы IEC Test для организации обмена  между узлами стенда MCM-NODE1 и MCM-NODE2 по протоколу МЭК-60870-5-104 (серверная часть)|центр]]Соответственно, на другом узле ПО IEC Test запускается в режиме клиента с показанными ниже настройками:&lt;br /&gt;
&lt;br /&gt;
TCP/IP Link Role - Client &lt;br /&gt;
&lt;br /&gt;
IP Address - адрес сервера, находящегося во внутренней сети для информационного обмена  (в данном примере - 10.0.0.2). &lt;br /&gt;
&lt;br /&gt;
Далее устанавливается канал обмена последовательным нажатием кнопок &amp;quot;Build String&amp;quot; и &amp;quot;Open Channel&amp;quot; (индикатор &amp;quot;1 channel&amp;quot; должен стать темно-зеленым).&lt;br /&gt;
&lt;br /&gt;
Для начала непосредственно информационного взаимодействия следует послать с клиента на сервер специальную команду посредством нажатия кнопки &amp;quot;Start DT&amp;quot; (индикатор &amp;quot;1 channel&amp;quot; должен стать светло-зеленым как показано на рисунке ниже). С этого момента канал обмена установлен и активирован, а между экземплярами ПО IEC Test могут передаваться пакеты протокола МЭК-60870-5-104.&lt;br /&gt;
[[Файл:IEC Test - 3.png|центр|мини|791x791пкс|Настройки программы IEC Test для организации обмена  между узлами стенда MCM-NODE1 и MCM-NODE2 по протоколу МЭК-60870-5-104 (клиентская часть)]]Для создания трафика по протоколу МЭК-60870-5-104 между узлами &#039;&#039;&#039;MCM-NODE1&#039;&#039;&#039; и &#039;&#039;&#039;MCM-NODE2&#039;&#039;&#039; следует использовать специальный макрос, имитирующий последовательную передачу данных протокола МЭК-60870-5-104 между узлами. Для этого необходимо на любом из узлов в ПО IEC Test перейти во вкладку &amp;quot;870 Commander&amp;quot;, нажатием кнопки &amp;quot;Загрузить&amp;quot; загрузить макрос &amp;quot;ДУ по циклу 5 сек.rtm&amp;quot; и выполнить его нажатием кнопки &amp;quot;Выполнить&amp;quot;:&lt;br /&gt;
[[Файл:IEC Test - 4.png|альт=Выполнение макроса в ПО IEC Test для создания трафика по протоколу МЭК-60870-5-104|центр|мини|797x797пкс|Выполнение макроса в ПО IEC Test для создания трафика по протоколу МЭК-60870-5-104]]В случае правильно настроенных узлов стенда и экземпляров ПО IEC Test на принимающем узле во вкладке &amp;quot;870 Commander&amp;quot; в соответствующем окне можно будет увидеть информацию о принятых сообщениях, отправленных макросом с передающего узла, что свидетельствует о состоявшемся информационном обмене по протоколу МЭК-60870-5-104 между узлами.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Примечание:&#039;&#039;&#039; в случае, если система МКИ выполняет прослушивание на одном из интерфейсов, входящих во внутреннюю сеть информационного обмена, а также при правильном конфигурировании компонента Grafana, при подключении браузером по адресу сервера  &#039;&#039;&#039;MCM-SNIFFER&#039;&#039;&#039; (&#039;&#039;&#039;&amp;lt;nowiki&amp;gt;http://192.168.2.142&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;) в соответствующих дашбордах должна появиться информация о перехваченных пакетах протокола МЭК-60870-5-104, создающих описанный выше трафик.&lt;/div&gt;</summary>
		<author><name>Dima</name></author>
	</entry>
	<entry>
		<id>https://wiki.entcor.ru/index.php?title=%D0%9C%D0%9A%D0%98&amp;diff=413</id>
		<title>МКИ</title>
		<link rel="alternate" type="text/html" href="https://wiki.entcor.ru/index.php?title=%D0%9C%D0%9A%D0%98&amp;diff=413"/>
		<updated>2025-03-28T04:53:44Z</updated>

		<summary type="html">&lt;p&gt;Dima: /* Установка компонентов системы МКИ */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= &#039;&#039;&#039;Система мониторинга качества измерений (МКИ)&#039;&#039;&#039; =&lt;br /&gt;
&lt;br /&gt;
=== Схема тестового стенда ===&lt;br /&gt;
[[Файл:Стенд для МКИ (декабрь 2024).drawio.png|альт=Стенд для МКИ (декабрь 2024)|мини|978x978пкс|Стенд для МКИ (декабрь 2024)]]&lt;br /&gt;
&lt;br /&gt;
=== Подключение и настойка оборудования ===&lt;br /&gt;
Подключение компонентов стенда производится в соответствии со схемой подключения. При этом для корректного выполнения дальнейших инструкций подключение устройств к физическим портам и сетевые настройки интерфейсов должны быть выполнены  согласно табл. 1:&lt;br /&gt;
&lt;br /&gt;
==== Таблица 1 - Параметры сетевых настроек устройств стенда ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Хост&lt;br /&gt;
!Порт&lt;br /&gt;
!Интерфейс&lt;br /&gt;
!IP&lt;br /&gt;
!Подключен к &lt;br /&gt;
устройство/порт&lt;br /&gt;
!Описание&lt;br /&gt;
|-&lt;br /&gt;
|MCM-SNIFFER&lt;br /&gt;
|Eth1&lt;br /&gt;
|enp5s0&lt;br /&gt;
|192.168.2.15/24&lt;br /&gt;
|L2 Switch&lt;br /&gt;
|Интерфейс управления для Sniffer&lt;br /&gt;
|-&lt;br /&gt;
|MCM-SNIFFER&lt;br /&gt;
|Eth2&lt;br /&gt;
|enp6s0&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;-&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|MCM-NODE1 / Eth2&lt;br /&gt;
|Участвует в L2 Bridge&lt;br /&gt;
|-&lt;br /&gt;
|MCM-SNIFFER&lt;br /&gt;
|Eth3&lt;br /&gt;
|enp7s0&lt;br /&gt;
| -&lt;br /&gt;
|MCM-NODE2 / Eth2&lt;br /&gt;
|Участвует в L2 Bridge&lt;br /&gt;
|-&lt;br /&gt;
|MCM-SNIFFER&lt;br /&gt;
|Eth4&lt;br /&gt;
|enp8s0&lt;br /&gt;
| -&lt;br /&gt;
|ZLAN / Eth&lt;br /&gt;
|Участвует в L2 Bridge&lt;br /&gt;
|-&lt;br /&gt;
|MCM-NODE1&lt;br /&gt;
|Eth1&lt;br /&gt;
|EXTERNAL&lt;br /&gt;
|192.168.2.156/24&lt;br /&gt;
|L2 Switch&lt;br /&gt;
|Интерфейс управления для Node1&lt;br /&gt;
|-&lt;br /&gt;
|MCM-NODE1&lt;br /&gt;
|Eth2&lt;br /&gt;
|INTERNAL&lt;br /&gt;
|10.0.0.1/24&lt;br /&gt;
|MCM-SNIFFER / Eth2&lt;br /&gt;
|Интерфейс обмена данными для Node1&lt;br /&gt;
|-&lt;br /&gt;
|MCM-NODE2&lt;br /&gt;
|Eth1&lt;br /&gt;
|EXTERNAL&lt;br /&gt;
|192.168.2.195/24&lt;br /&gt;
|L2 Switch&lt;br /&gt;
|Интерфейс управления для Node2&lt;br /&gt;
|-&lt;br /&gt;
|MCM-NODE2&lt;br /&gt;
|Eth2&lt;br /&gt;
|INTERNAL&lt;br /&gt;
|10.0.0.2/24&lt;br /&gt;
|MCM-SNIFFER / Eth3&lt;br /&gt;
|Интерфейс обмена данными для Node2&lt;br /&gt;
|-&lt;br /&gt;
|ZLAN&lt;br /&gt;
|Eth&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
|MCM-SNIFFER / Eth4&lt;br /&gt;
|Интерфейс обмена данными для ZLAN&lt;br /&gt;
|-&lt;br /&gt;
|ZLAN&lt;br /&gt;
|RS-485 #1&lt;br /&gt;
|ZLDEV0001&lt;br /&gt;
|10.0.0.241/24&lt;br /&gt;
|&lt;br /&gt;
|Подключение датчика с MODBUS-адресом 5&lt;br /&gt;
|-&lt;br /&gt;
|ZLAN&lt;br /&gt;
|RS-485 #2&lt;br /&gt;
|ZLDEV0002&lt;br /&gt;
|10.0.0.242/24&lt;br /&gt;
|&lt;br /&gt;
|Подключение датчика с MODBUS-адресом 6&lt;br /&gt;
|-&lt;br /&gt;
|ZLAN&lt;br /&gt;
|RS-485 #3&lt;br /&gt;
|ZLDEV0003&lt;br /&gt;
|10.0.0.243/24&lt;br /&gt;
|&lt;br /&gt;
|Подключение датчика с MODBUS-адресом 7&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Развертывание системы ===&lt;br /&gt;
&lt;br /&gt;
==== Установка базовых систем ====&lt;br /&gt;
Установка ОС Windows на компьютерах &#039;&#039;&#039;MCM-NODE1&#039;&#039;&#039; и &#039;&#039;&#039;MCM-NODE2&#039;&#039;&#039; производится обычным образом, при этом  соответствующим сетевым интерфейсам должны быть присвоены адреса согласно данным табл. 1, также для совместимости должны быть указаны следующие параметры настройки системы:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Таблица 2 - Параметры настройки узлов MCM-NODE1 и MCM-NODE2&lt;br /&gt;
!Параметр&lt;br /&gt;
!Значение&lt;br /&gt;
|-&lt;br /&gt;
|Имя компьютера&lt;br /&gt;
|MCM-NODE1/MCM-NODE2&lt;br /&gt;
|-&lt;br /&gt;
|Имя пользователя c правами локального администратора&lt;br /&gt;
|entcor&lt;br /&gt;
|-&lt;br /&gt;
|Пароль&lt;br /&gt;
|1&lt;br /&gt;
|}&lt;br /&gt;
Установка базовой системы Ubuntu Server 24.0x на компьютер &#039;&#039;&#039;MCM-SNIFFER&#039;&#039;&#039; производится обычным образом в режиме инсталляции по умолчанию, при этом при выборе параметров установки необходимо включить установку сервера OpenSSH, а также для совместимости следует  указать следующие значения прочих параметров:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Таблица 3 - Параметры настройки узла MCM-SNIFFER&lt;br /&gt;
!Параметр&lt;br /&gt;
!Значение&lt;br /&gt;
|-&lt;br /&gt;
|Имя компьютера&lt;br /&gt;
|MCM-SNIFFER&lt;br /&gt;
|-&lt;br /&gt;
|Имя пользователя c правами root                       &lt;br /&gt;
|entcor&lt;br /&gt;
|-&lt;br /&gt;
|Пароль&lt;br /&gt;
|ng3-dcc20&lt;br /&gt;
|}&lt;br /&gt;
После установки системы необходимо установить обновления:&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt full-upgrade&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
а также проверить доступ к серверу по SSH с компьютера администратора:&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
ssh entcor@192.168.2.15 (текущий адрес сервера MCM-SNIFFER)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&#039;&#039;&#039;Примечание:&#039;&#039;&#039; для удобства работы с файлами настоятельно рекомендуется также первым делом вкатить Midnight Commander:&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt install mc&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Также в дальнейшем целесообразно запускать Midnight Commander через &#039;&#039;&#039;sudo&#039;&#039;&#039;:&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
sudo mc&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Это позволит, во-первых, невозбранно редактировать все необходимые файлы и, во-вторых, при скрытии окон Midnight Commander выполнять из-под него с командной строки команды в режиме root без необходимости париться с sudo для каждой отдельной команды.&lt;br /&gt;
&lt;br /&gt;
==== Настройка сетевых интерфейсов ====&lt;br /&gt;
Для корректной работы сетевых интерфейсов и сохранения их параметров после перезагрузки сервера необходимо в каталоге &#039;&#039;&#039;/etc/netplan&#039;&#039;&#039; создать файл с расширением .yaml (например, &#039;&#039;&#039;01-network.yaml&#039;&#039;&#039;) со следующим содержимым:&amp;lt;syntaxhighlight lang=&amp;quot;yaml&amp;quot;&amp;gt;&lt;br /&gt;
network:&lt;br /&gt;
    version: 2&lt;br /&gt;
    ethernets:&lt;br /&gt;
        enp5s0:&lt;br /&gt;
            dhcp4: false&lt;br /&gt;
            addresses: &lt;br /&gt;
                - 192.168.2.15/24&lt;br /&gt;
            routes:&lt;br /&gt;
              - to: default&lt;br /&gt;
                via: 192.168.2.254&lt;br /&gt;
            nameservers: &lt;br /&gt;
                addresses: [192.168.2.60, 176.114.16.33]&lt;br /&gt;
        enp6s0:&lt;br /&gt;
            dhcp4: false&lt;br /&gt;
        enp7s0:&lt;br /&gt;
            dhcp4: false&lt;br /&gt;
        enp8s0:&lt;br /&gt;
            dhcp4: false&lt;br /&gt;
    bridges:&lt;br /&gt;
        docker0:&lt;br /&gt;
            interfaces: [enp6s0, enp7s0, enp8s0]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&#039;&#039;&#039;Примечания:&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
# Для интерфейса &#039;&#039;&#039;enp5s0&#039;&#039;&#039; вместо 192.168.2.15/24 следует указать нужный статический адрес сервера, также при необходимости следует указать фактически используемые адреса шлюза и DNS (в &#039;&#039;&#039;via&#039;&#039;&#039; и &#039;&#039;&#039;nameservers&#039;&#039;&#039; соответственно).&lt;br /&gt;
# В файле конфигурации заранее определяется мост &#039;&#039;&#039;docker0&#039;&#039;&#039;, который будет использоваться Docker&#039;ом после его установки. Таким образом, интерфейсы &#039;&#039;&#039;enp6s0/enp7s0/enp8s0&#039;&#039;&#039; заранее подключаются к мосту &#039;&#039;&#039;docker0&#039;&#039;&#039;, и, соответственно, в будущем будут доступны из Docker.&lt;br /&gt;
# Для удобства проще скопировать готовый файл &#039;&#039;&#039;01-network.yaml&#039;&#039;&#039; с компьютера администратора и положить его в &#039;&#039;&#039;/etc/netplan&#039;&#039;&#039; .&lt;br /&gt;
# Как показывает практика, существующий в &#039;&#039;&#039;/etc/netplan&#039;&#039;&#039; файл конфигурации по умолчанию &#039;&#039;&#039;50-cloud-init.yaml&#039;&#039;&#039; лучше переименовать во что-то типа &#039;&#039;&#039;50-cloud-init.yaml.bak,&#039;&#039;&#039; иначе у интерфейса &#039;&#039;&#039;enp5s0&#039;&#039;&#039; будет образовываться 2 адреса - статический из настроек в &#039;&#039;&#039;01-network.yaml&#039;&#039;&#039; и динамический, который будет дополнительно прилетать по DHCP и создавать путаницу. Вроде бы, должно лечиться установкой в файле &#039;&#039;&#039;50-cloud-init.yaml&#039;&#039;&#039; для интерфейса &#039;&#039;&#039;enp5s0&#039;&#039;&#039; параметра &#039;&#039;&#039;dchp4: false&#039;&#039;&#039;, но по факту не помогает, поэтому лучше от греха подальше во избежание конфликтов держать в &#039;&#039;&#039;/etc/netplan&#039;&#039;&#039;  только один файл &#039;&#039;&#039;01-network.yaml&#039;&#039;&#039; с настройками интерфейсов.&lt;br /&gt;
# Для применения настроек интерфейсов и сохранения настроек после перезагрузки сервера рекомендуется выполнение &#039;&#039;&#039;netplan try&#039;&#039;&#039; . Это позволит проверить конфигурацию перед применением и отловить возможные ошибки. Также рекомендуется в обязательном порядке выполнить контрольную перезагрузку сервера, чтобы убедиться, что настройки после нее восстанавливаются правильно.&lt;br /&gt;
# Для проверки работоспособности моста &#039;&#039;&#039;docker0&#039;&#039;&#039; перед настройкой интерфейсов следует запустить постоянный пинг (с параметром &#039;&#039;&#039;-t&#039;&#039;&#039;) с &#039;&#039;&#039;MCM-NODE1&#039;&#039;&#039; (10.0.0.1) на &#039;&#039;&#039;MCM-NODE2&#039;&#039;&#039; (10.0.0.2) и наоборот и убедиться в том, что узлы недоступны друг для друга. После настройки конфигурации интерфейсов и выполнения &#039;&#039;&#039;netplan try&#039;&#039;&#039; следует проверить, что пинг с MCM-NODE1 (10.0.0.1) на MCM-NODE2 (10.0.0.2) в обе стороны проходит успешно, т.е. узлы общаются между собой напрямую через мост &#039;&#039;&#039;docker0&#039;&#039;&#039;.&lt;br /&gt;
==== Установка сертификата Entcor ====&lt;br /&gt;
С компьютера администратора следует скопировать файл сертификата &#039;&#039;&#039;entcor.crt&#039;&#039;&#039; на узел &#039;&#039;&#039;MCM-SNIFFER&#039;&#039;&#039; по следующему пути (необходимо использовать фактический IP-адрес сервера MCM-SNIFFER):&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
scp entcor.crt entcor@192.168.2.23:/home/entcor&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Затем на компьютере &#039;&#039;&#039;MCM-SNIFFER&#039;&#039;&#039; следует перенести сертификат в необходимый каталог и выполнить его обновление:&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
sudo mv entcor.crt /usr/local/share/ca-certificates&lt;br /&gt;
sudo update-ca-certificates &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&#039;&#039;&#039;Примечание:&#039;&#039;&#039; после обновления сертификатов необходимо выполнить перезагрузку компьютера &#039;&#039;&#039;MCM-SNIFFER&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==== Установка Docker ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
# Add Docker&#039;s official GPG key:&lt;br /&gt;
&lt;br /&gt;
sudo apt-get update&lt;br /&gt;
sudo apt-get install ca-certificates curl&lt;br /&gt;
sudo install -m 0755 -d /etc/apt/keyrings&lt;br /&gt;
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc&lt;br /&gt;
sudo chmod a+r /etc/apt/keyrings/docker.asc&lt;br /&gt;
&lt;br /&gt;
# Add the repository to Apt sources:&lt;br /&gt;
&lt;br /&gt;
echo \&lt;br /&gt;
&amp;quot;deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \&lt;br /&gt;
$(. /etc/os-release &amp;amp;&amp;amp; echo &amp;quot;$VERSION_CODENAME&amp;quot;) stable&amp;quot; | \&lt;br /&gt;
sudo tee /etc/apt/sources.list.d/docker.list &amp;gt; /dev/null&lt;br /&gt;
&lt;br /&gt;
sudo apt-get update&lt;br /&gt;
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Ссылка на руководство: https://docs.docker.com/engine/install/ubuntu/#install-using-the-repository&lt;br /&gt;
&lt;br /&gt;
==== Установка компонентов системы МКИ ====&lt;br /&gt;
Установка компонентов системы МКИ может осуществляться посредством получения последней версии инсталляционного пакета (предпочтительно), либо из репозитория Git (может применяться для целей отладки или быстрого накатывания патчей/фикса ошибок).&lt;br /&gt;
&lt;br /&gt;
==== Сценарий 1: Установка непосредственно из репозитория Git ====&lt;br /&gt;
Получение последней версии инсталляционного пакета производится с FTP-сервера Jenkins. Для этого необходимо подключиться к нему с устройства МКИ по протоколу FTP, используя соответствующую пару логин-пароль, и выкачать оттуда файлы install.sh и latest.tar.gz.&lt;br /&gt;
&lt;br /&gt;
Перед запуском инсталляционного скрипта install.sh необходимо установить для него права на выполнение посредством команды chmod:&lt;br /&gt;
&lt;br /&gt;
chmod +x install.sh&lt;br /&gt;
&lt;br /&gt;
Также для корректной работы стека common необходимо предварительно авторизоваться под нужной учетной записью в docker-репозитории Harbor:&lt;br /&gt;
&lt;br /&gt;
docker login registry.entcor&lt;br /&gt;
&lt;br /&gt;
Далее непосредственное развертывание контейнеров производится запуском на выполнение скрипта install.sh.&lt;br /&gt;
&lt;br /&gt;
После завершения установки компонентов ПАК «еNODE.МКИ» следует выполнить переход в каталог /opt/e-node/deploy, куда выполнялось развертывание компонентов системы инсталляционным скриптом install.sh.&lt;br /&gt;
&lt;br /&gt;
Находясь в указанном каталоге, необходимо выполнить конфигурирование ПАК «еNODE.МКИ» посредством редактирования файла .env, которое может быть выполнено с помощью любого текстового редактора (vim, nano, mc и т.п.) на усмотрение администратора ПАК «еNODE.МКИ», например, следующим образом:&lt;br /&gt;
&lt;br /&gt;
sudo nano .env&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В файле конфигурации .env  необходимо указать следующие параметры, влияющие на функционирование ПАК «еNODE.МКИ»:&lt;br /&gt;
&lt;br /&gt;
§ MONITOR_DATA_IF = &amp;lt;имя интерфейса на устройстве МКИ, на котором выполняется перехват трафика, например, eno1&amp;gt;&lt;br /&gt;
&lt;br /&gt;
§ MODE = asutp&lt;br /&gt;
&lt;br /&gt;
После выполнения конфигурирования параметров системы непосредственный запуск компонентов ПАК «еNODE.МКИ» осуществляется из каталога /opt/e-node/deploy следующей командой:&lt;br /&gt;
&lt;br /&gt;
enode &amp;lt;имя стека&amp;gt; start&lt;br /&gt;
&lt;br /&gt;
==== Сценарий 2: Установка непосредственно из репозитория Git ====&lt;br /&gt;
&lt;br /&gt;
Получение последней версии инсталляционного пакета производится из  Git-репозитория &#039;&#039;&#039;e-deploy&#039;&#039;&#039;, находящегося по адресу  &#039;&#039;&#039;&amp;lt;nowiki&amp;gt;http://192.168.2.61&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;, (нужно будет ввести соответствующие логин-пароль для доступа к репозиторию, а также выполнить переключение на ветку &#039;&#039;&#039;develop&#039;&#039;&#039;): &amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
git clone http://192.168.2.61/e-node/e-deploy.git&lt;br /&gt;
git switch develop&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Далее следует авторизоваться под нужной учетной записью в Docker-репозитории Harbor:&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
docker login registry.entcor&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;после чего нужно перейти в каталог &#039;&#039;&#039;e-deploy&#039;&#039;&#039; (в том каталоге, где выполнялся git clone) и выполнить следующую команду:&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
./enode.sh init&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Далее в том же каталоге следует создать/отредактировать файла &#039;&#039;&#039;.env&#039;&#039;&#039;, в котором следует установить следующие параметры:&lt;br /&gt;
&lt;br /&gt;
MONITOR_DATA_IF = &amp;lt;имя интерфейса на узле &#039;&#039;&#039;MCM-SNIFFER&#039;&#039;&#039;,  на котором выполняется прослушка, например, enp7s0&amp;gt; &lt;br /&gt;
&lt;br /&gt;
MODE = enode &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Примечание:&#039;&#039;&#039; вообще-то для работы МКИ параметр MODE должен иметь  значение asutp, но работает пока только вот так. &lt;br /&gt;
&lt;br /&gt;
Далее требуется выполнить загрузку и обновление контейнеров посредством запуска скрипта &#039;&#039;&#039;enode&#039;&#039;&#039; с параметром update:&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
enode analytic update&lt;br /&gt;
enode common update&lt;br /&gt;
enode asutp update&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Запуск компонентов системы МКИ ====&lt;br /&gt;
После установки компонентов МКИ можно выполнить их запуск следующей командой: &amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
enode &amp;lt;имя стека&amp;gt; start&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&#039;&#039;&#039;Примечание:&#039;&#039;&#039; названия нужных стеков можно посмотреть в каталоге &#039;&#039;&#039;stacks&#039;&#039;&#039;  в &#039;&#039;&#039;e-deploy&#039;&#039;&#039; (имена стеков соответствуют именам подкаталогов). Как минимум должны быть запущены следующие стеки:&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
enode analytic start&lt;br /&gt;
enode common start&lt;br /&gt;
enode asutp start&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&#039;&#039;&#039;Примечание:&#039;&#039;&#039;  стек &#039;&#039;&#039;analytic&#039;&#039;&#039; рекомендуется запускать перед стеком &#039;&#039;&#039;common&#039;&#039;&#039; из-за каких-то особенностей функционирования:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Проверка запуска сервисов производится обычным образом с помощью команды:&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
docker ps&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Проверка информационного обмена по протоколу МЭК-60870-5-104 ====&lt;br /&gt;
Проверка информационного обмена по протоколу МЭК-60870-5-104 производится между узлами стенда &#039;&#039;&#039;MCM-NODE1&#039;&#039;&#039; и &#039;&#039;&#039;MCM-NODE2&#039;&#039;&#039; посредством программного обеспечения  IEC Test, которое эмулирует передачу пакетов протокола МЭК-60870-5-104 поверх соединения Ethernet. &lt;br /&gt;
&lt;br /&gt;
Для проверки работы протокола МЭК-60870-5-104 во внутренней сети обмена на одном из узлов ПО IEC Test запускается в режиме сервера с показанными ниже настройками: &lt;br /&gt;
&lt;br /&gt;
TCP/IP Link Role - Server &lt;br /&gt;
&lt;br /&gt;
IP Address - адрес внутреннего интерфейса для информационного обмена (в данном примере - 10.0.0.2) &lt;br /&gt;
&lt;br /&gt;
Далее устанавливается канал обмена последовательным нажатием кнопок &amp;quot;Build String&amp;quot; и &amp;quot;Open Channel&amp;quot; (индикатор &amp;quot;1 channel&amp;quot; должен стать темно-зеленым). &lt;br /&gt;
[[Файл:IEC Test - 2.png|мини|794x794пкс|Настройки программы IEC Test для организации обмена  между узлами стенда MCM-NODE1 и MCM-NODE2 по протоколу МЭК-60870-5-104 (серверная часть)|центр]]Соответственно, на другом узле ПО IEC Test запускается в режиме клиента с показанными ниже настройками:&lt;br /&gt;
&lt;br /&gt;
TCP/IP Link Role - Client &lt;br /&gt;
&lt;br /&gt;
IP Address - адрес сервера, находящегося во внутренней сети для информационного обмена  (в данном примере - 10.0.0.2). &lt;br /&gt;
&lt;br /&gt;
Далее устанавливается канал обмена последовательным нажатием кнопок &amp;quot;Build String&amp;quot; и &amp;quot;Open Channel&amp;quot; (индикатор &amp;quot;1 channel&amp;quot; должен стать темно-зеленым).&lt;br /&gt;
&lt;br /&gt;
Для начала непосредственно информационного взаимодействия следует послать с клиента на сервер специальную команду посредством нажатия кнопки &amp;quot;Start DT&amp;quot; (индикатор &amp;quot;1 channel&amp;quot; должен стать светло-зеленым как показано на рисунке ниже). С этого момента канал обмена установлен и активирован, а между экземплярами ПО IEC Test могут передаваться пакеты протокола МЭК-60870-5-104.&lt;br /&gt;
[[Файл:IEC Test - 3.png|центр|мини|791x791пкс|Настройки программы IEC Test для организации обмена  между узлами стенда MCM-NODE1 и MCM-NODE2 по протоколу МЭК-60870-5-104 (клиентская часть)]]Для создания трафика по протоколу МЭК-60870-5-104 между узлами &#039;&#039;&#039;MCM-NODE1&#039;&#039;&#039; и &#039;&#039;&#039;MCM-NODE2&#039;&#039;&#039; следует использовать специальный макрос, имитирующий последовательную передачу данных протокола МЭК-60870-5-104 между узлами. Для этого необходимо на любом из узлов в ПО IEC Test перейти во вкладку &amp;quot;870 Commander&amp;quot;, нажатием кнопки &amp;quot;Загрузить&amp;quot; загрузить макрос &amp;quot;ДУ по циклу 5 сек.rtm&amp;quot; и выполнить его нажатием кнопки &amp;quot;Выполнить&amp;quot;:&lt;br /&gt;
[[Файл:IEC Test - 4.png|альт=Выполнение макроса в ПО IEC Test для создания трафика по протоколу МЭК-60870-5-104|центр|мини|797x797пкс|Выполнение макроса в ПО IEC Test для создания трафика по протоколу МЭК-60870-5-104]]В случае правильно настроенных узлов стенда и экземпляров ПО IEC Test на принимающем узле во вкладке &amp;quot;870 Commander&amp;quot; в соответствующем окне можно будет увидеть информацию о принятых сообщениях, отправленных макросом с передающего узла, что свидетельствует о состоявшемся информационном обмене по протоколу МЭК-60870-5-104 между узлами.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Примечание:&#039;&#039;&#039; в случае, если система МКИ выполняет прослушивание на одном из интерфейсов, входящих во внутреннюю сеть информационного обмена, а также при правильном конфигурировании компонента Grafana, при подключении браузером по адресу сервера  &#039;&#039;&#039;MCM-SNIFFER&#039;&#039;&#039; (&#039;&#039;&#039;&amp;lt;nowiki&amp;gt;http://192.168.2.142&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;) в соответствующих дашбордах должна появиться информация о перехваченных пакетах протокола МЭК-60870-5-104, создающих описанный выше трафик.&lt;/div&gt;</summary>
		<author><name>Dima</name></author>
	</entry>
	<entry>
		<id>https://wiki.entcor.ru/index.php?title=%D0%9C%D0%9A%D0%98&amp;diff=412</id>
		<title>МКИ</title>
		<link rel="alternate" type="text/html" href="https://wiki.entcor.ru/index.php?title=%D0%9C%D0%9A%D0%98&amp;diff=412"/>
		<updated>2025-03-28T04:14:06Z</updated>

		<summary type="html">&lt;p&gt;Dima: /* Подключение интерфейсов к L2 Bridge для Docker */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= &#039;&#039;&#039;Система мониторинга качества измерений (МКИ)&#039;&#039;&#039; =&lt;br /&gt;
&lt;br /&gt;
=== Схема тестового стенда ===&lt;br /&gt;
[[Файл:Стенд для МКИ (декабрь 2024).drawio.png|альт=Стенд для МКИ (декабрь 2024)|мини|978x978пкс|Стенд для МКИ (декабрь 2024)]]&lt;br /&gt;
&lt;br /&gt;
=== Подключение и настойка оборудования ===&lt;br /&gt;
Подключение компонентов стенда производится в соответствии со схемой подключения. При этом для корректного выполнения дальнейших инструкций подключение устройств к физическим портам и сетевые настройки интерфейсов должны быть выполнены  согласно табл. 1:&lt;br /&gt;
&lt;br /&gt;
==== Таблица 1 - Параметры сетевых настроек устройств стенда ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Хост&lt;br /&gt;
!Порт&lt;br /&gt;
!Интерфейс&lt;br /&gt;
!IP&lt;br /&gt;
!Подключен к &lt;br /&gt;
устройство/порт&lt;br /&gt;
!Описание&lt;br /&gt;
|-&lt;br /&gt;
|MCM-SNIFFER&lt;br /&gt;
|Eth1&lt;br /&gt;
|enp5s0&lt;br /&gt;
|192.168.2.15/24&lt;br /&gt;
|L2 Switch&lt;br /&gt;
|Интерфейс управления для Sniffer&lt;br /&gt;
|-&lt;br /&gt;
|MCM-SNIFFER&lt;br /&gt;
|Eth2&lt;br /&gt;
|enp6s0&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;-&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|MCM-NODE1 / Eth2&lt;br /&gt;
|Участвует в L2 Bridge&lt;br /&gt;
|-&lt;br /&gt;
|MCM-SNIFFER&lt;br /&gt;
|Eth3&lt;br /&gt;
|enp7s0&lt;br /&gt;
| -&lt;br /&gt;
|MCM-NODE2 / Eth2&lt;br /&gt;
|Участвует в L2 Bridge&lt;br /&gt;
|-&lt;br /&gt;
|MCM-SNIFFER&lt;br /&gt;
|Eth4&lt;br /&gt;
|enp8s0&lt;br /&gt;
| -&lt;br /&gt;
|ZLAN / Eth&lt;br /&gt;
|Участвует в L2 Bridge&lt;br /&gt;
|-&lt;br /&gt;
|MCM-NODE1&lt;br /&gt;
|Eth1&lt;br /&gt;
|EXTERNAL&lt;br /&gt;
|192.168.2.156/24&lt;br /&gt;
|L2 Switch&lt;br /&gt;
|Интерфейс управления для Node1&lt;br /&gt;
|-&lt;br /&gt;
|MCM-NODE1&lt;br /&gt;
|Eth2&lt;br /&gt;
|INTERNAL&lt;br /&gt;
|10.0.0.1/24&lt;br /&gt;
|MCM-SNIFFER / Eth2&lt;br /&gt;
|Интерфейс обмена данными для Node1&lt;br /&gt;
|-&lt;br /&gt;
|MCM-NODE2&lt;br /&gt;
|Eth1&lt;br /&gt;
|EXTERNAL&lt;br /&gt;
|192.168.2.195/24&lt;br /&gt;
|L2 Switch&lt;br /&gt;
|Интерфейс управления для Node2&lt;br /&gt;
|-&lt;br /&gt;
|MCM-NODE2&lt;br /&gt;
|Eth2&lt;br /&gt;
|INTERNAL&lt;br /&gt;
|10.0.0.2/24&lt;br /&gt;
|MCM-SNIFFER / Eth3&lt;br /&gt;
|Интерфейс обмена данными для Node2&lt;br /&gt;
|-&lt;br /&gt;
|ZLAN&lt;br /&gt;
|Eth&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
|MCM-SNIFFER / Eth4&lt;br /&gt;
|Интерфейс обмена данными для ZLAN&lt;br /&gt;
|-&lt;br /&gt;
|ZLAN&lt;br /&gt;
|RS-485 #1&lt;br /&gt;
|ZLDEV0001&lt;br /&gt;
|10.0.0.241/24&lt;br /&gt;
|&lt;br /&gt;
|Подключение датчика с MODBUS-адресом 5&lt;br /&gt;
|-&lt;br /&gt;
|ZLAN&lt;br /&gt;
|RS-485 #2&lt;br /&gt;
|ZLDEV0002&lt;br /&gt;
|10.0.0.242/24&lt;br /&gt;
|&lt;br /&gt;
|Подключение датчика с MODBUS-адресом 6&lt;br /&gt;
|-&lt;br /&gt;
|ZLAN&lt;br /&gt;
|RS-485 #3&lt;br /&gt;
|ZLDEV0003&lt;br /&gt;
|10.0.0.243/24&lt;br /&gt;
|&lt;br /&gt;
|Подключение датчика с MODBUS-адресом 7&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Развертывание системы ===&lt;br /&gt;
&lt;br /&gt;
==== Установка базовых систем ====&lt;br /&gt;
Установка ОС Windows на компьютерах &#039;&#039;&#039;MCM-NODE1&#039;&#039;&#039; и &#039;&#039;&#039;MCM-NODE2&#039;&#039;&#039; производится обычным образом, при этом  соответствующим сетевым интерфейсам должны быть присвоены адреса согласно данным табл. 1, также для совместимости должны быть указаны следующие параметры настройки системы:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Таблица 2 - Параметры настройки узлов MCM-NODE1 и MCM-NODE2&lt;br /&gt;
!Параметр&lt;br /&gt;
!Значение&lt;br /&gt;
|-&lt;br /&gt;
|Имя компьютера&lt;br /&gt;
|MCM-NODE1/MCM-NODE2&lt;br /&gt;
|-&lt;br /&gt;
|Имя пользователя c правами локального администратора&lt;br /&gt;
|entcor&lt;br /&gt;
|-&lt;br /&gt;
|Пароль&lt;br /&gt;
|1&lt;br /&gt;
|}&lt;br /&gt;
Установка базовой системы Ubuntu Server 24.0x на компьютер &#039;&#039;&#039;MCM-SNIFFER&#039;&#039;&#039; производится обычным образом в режиме инсталляции по умолчанию, при этом при выборе параметров установки необходимо включить установку сервера OpenSSH, а также для совместимости следует  указать следующие значения прочих параметров:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Таблица 3 - Параметры настройки узла MCM-SNIFFER&lt;br /&gt;
!Параметр&lt;br /&gt;
!Значение&lt;br /&gt;
|-&lt;br /&gt;
|Имя компьютера&lt;br /&gt;
|MCM-SNIFFER&lt;br /&gt;
|-&lt;br /&gt;
|Имя пользователя c правами root                       &lt;br /&gt;
|entcor&lt;br /&gt;
|-&lt;br /&gt;
|Пароль&lt;br /&gt;
|ng3-dcc20&lt;br /&gt;
|}&lt;br /&gt;
После установки системы необходимо установить обновления:&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt full-upgrade&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
а также проверить доступ к серверу по SSH с компьютера администратора:&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
ssh entcor@192.168.2.15 (текущий адрес сервера MCM-SNIFFER)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&#039;&#039;&#039;Примечание:&#039;&#039;&#039; для удобства работы с файлами настоятельно рекомендуется также первым делом вкатить Midnight Commander:&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt install mc&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Также в дальнейшем целесообразно запускать Midnight Commander через &#039;&#039;&#039;sudo&#039;&#039;&#039;:&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
sudo mc&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Это позволит, во-первых, невозбранно редактировать все необходимые файлы и, во-вторых, при скрытии окон Midnight Commander выполнять из-под него с командной строки команды в режиме root без необходимости париться с sudo для каждой отдельной команды.&lt;br /&gt;
&lt;br /&gt;
==== Настройка сетевых интерфейсов ====&lt;br /&gt;
Для корректной работы сетевых интерфейсов и сохранения их параметров после перезагрузки сервера необходимо в каталоге &#039;&#039;&#039;/etc/netplan&#039;&#039;&#039; создать файл с расширением .yaml (например, &#039;&#039;&#039;01-network.yaml&#039;&#039;&#039;) со следующим содержимым:&amp;lt;syntaxhighlight lang=&amp;quot;yaml&amp;quot;&amp;gt;&lt;br /&gt;
network:&lt;br /&gt;
    version: 2&lt;br /&gt;
    ethernets:&lt;br /&gt;
        enp5s0:&lt;br /&gt;
            dhcp4: false&lt;br /&gt;
            addresses: &lt;br /&gt;
                - 192.168.2.15/24&lt;br /&gt;
            routes:&lt;br /&gt;
              - to: default&lt;br /&gt;
                via: 192.168.2.254&lt;br /&gt;
            nameservers: &lt;br /&gt;
                addresses: [192.168.2.60, 176.114.16.33]&lt;br /&gt;
        enp6s0:&lt;br /&gt;
            dhcp4: false&lt;br /&gt;
        enp7s0:&lt;br /&gt;
            dhcp4: false&lt;br /&gt;
        enp8s0:&lt;br /&gt;
            dhcp4: false&lt;br /&gt;
    bridges:&lt;br /&gt;
        docker0:&lt;br /&gt;
            interfaces: [enp6s0, enp7s0, enp8s0]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&#039;&#039;&#039;Примечания:&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
# Для интерфейса &#039;&#039;&#039;enp5s0&#039;&#039;&#039; вместо 192.168.2.15/24 следует указать нужный статический адрес сервера, также при необходимости следует указать фактически используемые адреса шлюза и DNS (в &#039;&#039;&#039;via&#039;&#039;&#039; и &#039;&#039;&#039;nameservers&#039;&#039;&#039; соответственно).&lt;br /&gt;
# В файле конфигурации заранее определяется мост &#039;&#039;&#039;docker0&#039;&#039;&#039;, который будет использоваться Docker&#039;ом после его установки. Таким образом, интерфейсы &#039;&#039;&#039;enp6s0/enp7s0/enp8s0&#039;&#039;&#039; заранее подключаются к мосту &#039;&#039;&#039;docker0&#039;&#039;&#039;, и, соответственно, в будущем будут доступны из Docker.&lt;br /&gt;
# Для удобства проще скопировать готовый файл &#039;&#039;&#039;01-network.yaml&#039;&#039;&#039; с компьютера администратора и положить его в &#039;&#039;&#039;/etc/netplan&#039;&#039;&#039; .&lt;br /&gt;
# Как показывает практика, существующий в &#039;&#039;&#039;/etc/netplan&#039;&#039;&#039; файл конфигурации по умолчанию &#039;&#039;&#039;50-cloud-init.yaml&#039;&#039;&#039; лучше переименовать во что-то типа &#039;&#039;&#039;50-cloud-init.yaml.bak,&#039;&#039;&#039; иначе у интерфейса &#039;&#039;&#039;enp5s0&#039;&#039;&#039; будет образовываться 2 адреса - статический из настроек в &#039;&#039;&#039;01-network.yaml&#039;&#039;&#039; и динамический, который будет дополнительно прилетать по DHCP и создавать путаницу. Вроде бы, должно лечиться установкой в файле &#039;&#039;&#039;50-cloud-init.yaml&#039;&#039;&#039; для интерфейса &#039;&#039;&#039;enp5s0&#039;&#039;&#039; параметра &#039;&#039;&#039;dchp4: false&#039;&#039;&#039;, но по факту не помогает, поэтому лучше от греха подальше во избежание конфликтов держать в &#039;&#039;&#039;/etc/netplan&#039;&#039;&#039;  только один файл &#039;&#039;&#039;01-network.yaml&#039;&#039;&#039; с настройками интерфейсов.&lt;br /&gt;
# Для применения настроек интерфейсов и сохранения настроек после перезагрузки сервера рекомендуется выполнение &#039;&#039;&#039;netplan try&#039;&#039;&#039; . Это позволит проверить конфигурацию перед применением и отловить возможные ошибки. Также рекомендуется в обязательном порядке выполнить контрольную перезагрузку сервера, чтобы убедиться, что настройки после нее восстанавливаются правильно.&lt;br /&gt;
# Для проверки работоспособности моста &#039;&#039;&#039;docker0&#039;&#039;&#039; перед настройкой интерфейсов следует запустить постоянный пинг (с параметром &#039;&#039;&#039;-t&#039;&#039;&#039;) с &#039;&#039;&#039;MCM-NODE1&#039;&#039;&#039; (10.0.0.1) на &#039;&#039;&#039;MCM-NODE2&#039;&#039;&#039; (10.0.0.2) и наоборот и убедиться в том, что узлы недоступны друг для друга. После настройки конфигурации интерфейсов и выполнения &#039;&#039;&#039;netplan try&#039;&#039;&#039; следует проверить, что пинг с MCM-NODE1 (10.0.0.1) на MCM-NODE2 (10.0.0.2) в обе стороны проходит успешно, т.е. узлы общаются между собой напрямую через мост &#039;&#039;&#039;docker0&#039;&#039;&#039;.&lt;br /&gt;
==== Установка сертификата Entcor ====&lt;br /&gt;
С компьютера администратора следует скопировать файл сертификата &#039;&#039;&#039;entcor.crt&#039;&#039;&#039; на узел &#039;&#039;&#039;MCM-SNIFFER&#039;&#039;&#039; по следующему пути (необходимо использовать фактический IP-адрес сервера MCM-SNIFFER):&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
scp entcor.crt entcor@192.168.2.23:/home/entcor&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Затем на компьютере &#039;&#039;&#039;MCM-SNIFFER&#039;&#039;&#039; следует перенести сертификат в необходимый каталог и выполнить его обновление:&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
sudo mv entcor.crt /usr/local/share/ca-certificates&lt;br /&gt;
sudo update-ca-certificates &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&#039;&#039;&#039;Примечание:&#039;&#039;&#039; после обновления сертификатов необходимо выполнить перезагрузку компьютера &#039;&#039;&#039;MCM-SNIFFER&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==== Установка Docker ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
# Add Docker&#039;s official GPG key:&lt;br /&gt;
&lt;br /&gt;
sudo apt-get update&lt;br /&gt;
sudo apt-get install ca-certificates curl&lt;br /&gt;
sudo install -m 0755 -d /etc/apt/keyrings&lt;br /&gt;
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc&lt;br /&gt;
sudo chmod a+r /etc/apt/keyrings/docker.asc&lt;br /&gt;
&lt;br /&gt;
# Add the repository to Apt sources:&lt;br /&gt;
&lt;br /&gt;
echo \&lt;br /&gt;
&amp;quot;deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \&lt;br /&gt;
$(. /etc/os-release &amp;amp;&amp;amp; echo &amp;quot;$VERSION_CODENAME&amp;quot;) stable&amp;quot; | \&lt;br /&gt;
sudo tee /etc/apt/sources.list.d/docker.list &amp;gt; /dev/null&lt;br /&gt;
&lt;br /&gt;
sudo apt-get update&lt;br /&gt;
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Ссылка на руководство: https://docs.docker.com/engine/install/ubuntu/#install-using-the-repository&lt;br /&gt;
&lt;br /&gt;
==== Установка компонентов системы МКИ ====&lt;br /&gt;
Получение последней версии инсталляционного пакета производится из  Git-репозитория &#039;&#039;&#039;e-deploy&#039;&#039;&#039;, находящегося по адресу  &#039;&#039;&#039;&amp;lt;nowiki&amp;gt;http://192.168.2.61&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;, (нужно будет ввести соответствующие логин-пароль для доступа к репозиторию, а также выполнить переключение на ветку &#039;&#039;&#039;develop&#039;&#039;&#039;): &amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
git clone http://192.168.2.61/e-node/e-deploy.git&lt;br /&gt;
git switch develop&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Далее следует авторизоваться под нужной учетной записью в Docker-репозитории Harbor:&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
docker login registry.entcor&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;после чего нужно перейти в каталог &#039;&#039;&#039;e-deploy&#039;&#039;&#039; (в том каталоге, где выполнялся git clone) и выполнить следующую команду:&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
./enode.sh init&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Далее в том же каталоге следует создать/отредактировать файла &#039;&#039;&#039;.env&#039;&#039;&#039;, в котором следует установить следующие параметры:&lt;br /&gt;
&lt;br /&gt;
MONITOR_DATA_IF = &amp;lt;имя интерфейса на узле &#039;&#039;&#039;MCM-SNIFFER&#039;&#039;&#039;,  на котором выполняется прослушка, например, enp7s0&amp;gt; &lt;br /&gt;
&lt;br /&gt;
MODE = enode &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Примечание:&#039;&#039;&#039; вообще-то для работы МКИ параметр MODE должен иметь  значение asutp, но работает пока только вот так. &lt;br /&gt;
&lt;br /&gt;
Далее требуется выполнить загрузку и обновление контейнеров посредством запуска скрипта &#039;&#039;&#039;enode&#039;&#039;&#039; с параметром update:&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
enode analytic update&lt;br /&gt;
enode common update&lt;br /&gt;
enode asutp update&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Запуск компонентов системы МКИ ====&lt;br /&gt;
После установки компонентов МКИ можно выполнить их запуск следующей командой: &amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
enode &amp;lt;имя стека&amp;gt; start&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&#039;&#039;&#039;Примечание:&#039;&#039;&#039; названия нужных стеков можно посмотреть в каталоге &#039;&#039;&#039;stacks&#039;&#039;&#039;  в &#039;&#039;&#039;e-deploy&#039;&#039;&#039; (имена стеков соответствуют именам подкаталогов). Как минимум должны быть запущены следующие стеки:&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
enode analytic start&lt;br /&gt;
enode common start&lt;br /&gt;
enode asutp start&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&#039;&#039;&#039;Примечание:&#039;&#039;&#039;  стек &#039;&#039;&#039;analytic&#039;&#039;&#039; рекомендуется запускать перед стеком &#039;&#039;&#039;common&#039;&#039;&#039; из-за каких-то особенностей функционирования:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Проверка запуска сервисов производится обычным образом с помощью команды:&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
docker ps&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Проверка информационного обмена по протоколу МЭК-60870-5-104 ====&lt;br /&gt;
Проверка информационного обмена по протоколу МЭК-60870-5-104 производится между узлами стенда &#039;&#039;&#039;MCM-NODE1&#039;&#039;&#039; и &#039;&#039;&#039;MCM-NODE2&#039;&#039;&#039; посредством программного обеспечения  IEC Test, которое эмулирует передачу пакетов протокола МЭК-60870-5-104 поверх соединения Ethernet. &lt;br /&gt;
&lt;br /&gt;
Для проверки работы протокола МЭК-60870-5-104 во внутренней сети обмена на одном из узлов ПО IEC Test запускается в режиме сервера с показанными ниже настройками: &lt;br /&gt;
&lt;br /&gt;
TCP/IP Link Role - Server &lt;br /&gt;
&lt;br /&gt;
IP Address - адрес внутреннего интерфейса для информационного обмена (в данном примере - 10.0.0.2) &lt;br /&gt;
&lt;br /&gt;
Далее устанавливается канал обмена последовательным нажатием кнопок &amp;quot;Build String&amp;quot; и &amp;quot;Open Channel&amp;quot; (индикатор &amp;quot;1 channel&amp;quot; должен стать темно-зеленым). &lt;br /&gt;
[[Файл:IEC Test - 2.png|мини|794x794пкс|Настройки программы IEC Test для организации обмена  между узлами стенда MCM-NODE1 и MCM-NODE2 по протоколу МЭК-60870-5-104 (серверная часть)|центр]]Соответственно, на другом узле ПО IEC Test запускается в режиме клиента с показанными ниже настройками:&lt;br /&gt;
&lt;br /&gt;
TCP/IP Link Role - Client &lt;br /&gt;
&lt;br /&gt;
IP Address - адрес сервера, находящегося во внутренней сети для информационного обмена  (в данном примере - 10.0.0.2). &lt;br /&gt;
&lt;br /&gt;
Далее устанавливается канал обмена последовательным нажатием кнопок &amp;quot;Build String&amp;quot; и &amp;quot;Open Channel&amp;quot; (индикатор &amp;quot;1 channel&amp;quot; должен стать темно-зеленым).&lt;br /&gt;
&lt;br /&gt;
Для начала непосредственно информационного взаимодействия следует послать с клиента на сервер специальную команду посредством нажатия кнопки &amp;quot;Start DT&amp;quot; (индикатор &amp;quot;1 channel&amp;quot; должен стать светло-зеленым как показано на рисунке ниже). С этого момента канал обмена установлен и активирован, а между экземплярами ПО IEC Test могут передаваться пакеты протокола МЭК-60870-5-104.&lt;br /&gt;
[[Файл:IEC Test - 3.png|центр|мини|791x791пкс|Настройки программы IEC Test для организации обмена  между узлами стенда MCM-NODE1 и MCM-NODE2 по протоколу МЭК-60870-5-104 (клиентская часть)]]Для создания трафика по протоколу МЭК-60870-5-104 между узлами &#039;&#039;&#039;MCM-NODE1&#039;&#039;&#039; и &#039;&#039;&#039;MCM-NODE2&#039;&#039;&#039; следует использовать специальный макрос, имитирующий последовательную передачу данных протокола МЭК-60870-5-104 между узлами. Для этого необходимо на любом из узлов в ПО IEC Test перейти во вкладку &amp;quot;870 Commander&amp;quot;, нажатием кнопки &amp;quot;Загрузить&amp;quot; загрузить макрос &amp;quot;ДУ по циклу 5 сек.rtm&amp;quot; и выполнить его нажатием кнопки &amp;quot;Выполнить&amp;quot;:&lt;br /&gt;
[[Файл:IEC Test - 4.png|альт=Выполнение макроса в ПО IEC Test для создания трафика по протоколу МЭК-60870-5-104|центр|мини|797x797пкс|Выполнение макроса в ПО IEC Test для создания трафика по протоколу МЭК-60870-5-104]]В случае правильно настроенных узлов стенда и экземпляров ПО IEC Test на принимающем узле во вкладке &amp;quot;870 Commander&amp;quot; в соответствующем окне можно будет увидеть информацию о принятых сообщениях, отправленных макросом с передающего узла, что свидетельствует о состоявшемся информационном обмене по протоколу МЭК-60870-5-104 между узлами.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Примечание:&#039;&#039;&#039; в случае, если система МКИ выполняет прослушивание на одном из интерфейсов, входящих во внутреннюю сеть информационного обмена, а также при правильном конфигурировании компонента Grafana, при подключении браузером по адресу сервера  &#039;&#039;&#039;MCM-SNIFFER&#039;&#039;&#039; (&#039;&#039;&#039;&amp;lt;nowiki&amp;gt;http://192.168.2.142&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;) в соответствующих дашбордах должна появиться информация о перехваченных пакетах протокола МЭК-60870-5-104, создающих описанный выше трафик.&lt;/div&gt;</summary>
		<author><name>Dima</name></author>
	</entry>
	<entry>
		<id>https://wiki.entcor.ru/index.php?title=%D0%9C%D0%9A%D0%98&amp;diff=411</id>
		<title>МКИ</title>
		<link rel="alternate" type="text/html" href="https://wiki.entcor.ru/index.php?title=%D0%9C%D0%9A%D0%98&amp;diff=411"/>
		<updated>2025-03-28T03:55:52Z</updated>

		<summary type="html">&lt;p&gt;Dima: /* Установка базовых систем */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= &#039;&#039;&#039;Система мониторинга качества измерений (МКИ)&#039;&#039;&#039; =&lt;br /&gt;
&lt;br /&gt;
=== Схема тестового стенда ===&lt;br /&gt;
[[Файл:Стенд для МКИ (декабрь 2024).drawio.png|альт=Стенд для МКИ (декабрь 2024)|мини|978x978пкс|Стенд для МКИ (декабрь 2024)]]&lt;br /&gt;
&lt;br /&gt;
=== Подключение и настойка оборудования ===&lt;br /&gt;
Подключение компонентов стенда производится в соответствии со схемой подключения. При этом для корректного выполнения дальнейших инструкций подключение устройств к физическим портам и сетевые настройки интерфейсов должны быть выполнены  согласно табл. 1:&lt;br /&gt;
&lt;br /&gt;
==== Таблица 1 - Параметры сетевых настроек устройств стенда ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Хост&lt;br /&gt;
!Порт&lt;br /&gt;
!Интерфейс&lt;br /&gt;
!IP&lt;br /&gt;
!Подключен к &lt;br /&gt;
устройство/порт&lt;br /&gt;
!Описание&lt;br /&gt;
|-&lt;br /&gt;
|MCM-SNIFFER&lt;br /&gt;
|Eth1&lt;br /&gt;
|enp5s0&lt;br /&gt;
|192.168.2.15/24&lt;br /&gt;
|L2 Switch&lt;br /&gt;
|Интерфейс управления для Sniffer&lt;br /&gt;
|-&lt;br /&gt;
|MCM-SNIFFER&lt;br /&gt;
|Eth2&lt;br /&gt;
|enp6s0&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;-&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|MCM-NODE1 / Eth2&lt;br /&gt;
|Участвует в L2 Bridge&lt;br /&gt;
|-&lt;br /&gt;
|MCM-SNIFFER&lt;br /&gt;
|Eth3&lt;br /&gt;
|enp7s0&lt;br /&gt;
| -&lt;br /&gt;
|MCM-NODE2 / Eth2&lt;br /&gt;
|Участвует в L2 Bridge&lt;br /&gt;
|-&lt;br /&gt;
|MCM-SNIFFER&lt;br /&gt;
|Eth4&lt;br /&gt;
|enp8s0&lt;br /&gt;
| -&lt;br /&gt;
|ZLAN / Eth&lt;br /&gt;
|Участвует в L2 Bridge&lt;br /&gt;
|-&lt;br /&gt;
|MCM-NODE1&lt;br /&gt;
|Eth1&lt;br /&gt;
|EXTERNAL&lt;br /&gt;
|192.168.2.156/24&lt;br /&gt;
|L2 Switch&lt;br /&gt;
|Интерфейс управления для Node1&lt;br /&gt;
|-&lt;br /&gt;
|MCM-NODE1&lt;br /&gt;
|Eth2&lt;br /&gt;
|INTERNAL&lt;br /&gt;
|10.0.0.1/24&lt;br /&gt;
|MCM-SNIFFER / Eth2&lt;br /&gt;
|Интерфейс обмена данными для Node1&lt;br /&gt;
|-&lt;br /&gt;
|MCM-NODE2&lt;br /&gt;
|Eth1&lt;br /&gt;
|EXTERNAL&lt;br /&gt;
|192.168.2.195/24&lt;br /&gt;
|L2 Switch&lt;br /&gt;
|Интерфейс управления для Node2&lt;br /&gt;
|-&lt;br /&gt;
|MCM-NODE2&lt;br /&gt;
|Eth2&lt;br /&gt;
|INTERNAL&lt;br /&gt;
|10.0.0.2/24&lt;br /&gt;
|MCM-SNIFFER / Eth3&lt;br /&gt;
|Интерфейс обмена данными для Node2&lt;br /&gt;
|-&lt;br /&gt;
|ZLAN&lt;br /&gt;
|Eth&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
|MCM-SNIFFER / Eth4&lt;br /&gt;
|Интерфейс обмена данными для ZLAN&lt;br /&gt;
|-&lt;br /&gt;
|ZLAN&lt;br /&gt;
|RS-485 #1&lt;br /&gt;
|ZLDEV0001&lt;br /&gt;
|10.0.0.241/24&lt;br /&gt;
|&lt;br /&gt;
|Подключение датчика с MODBUS-адресом 5&lt;br /&gt;
|-&lt;br /&gt;
|ZLAN&lt;br /&gt;
|RS-485 #2&lt;br /&gt;
|ZLDEV0002&lt;br /&gt;
|10.0.0.242/24&lt;br /&gt;
|&lt;br /&gt;
|Подключение датчика с MODBUS-адресом 6&lt;br /&gt;
|-&lt;br /&gt;
|ZLAN&lt;br /&gt;
|RS-485 #3&lt;br /&gt;
|ZLDEV0003&lt;br /&gt;
|10.0.0.243/24&lt;br /&gt;
|&lt;br /&gt;
|Подключение датчика с MODBUS-адресом 7&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Развертывание системы ===&lt;br /&gt;
&lt;br /&gt;
==== Установка базовых систем ====&lt;br /&gt;
Установка ОС Windows на компьютерах &#039;&#039;&#039;MCM-NODE1&#039;&#039;&#039; и &#039;&#039;&#039;MCM-NODE2&#039;&#039;&#039; производится обычным образом, при этом  соответствующим сетевым интерфейсам должны быть присвоены адреса согласно данным табл. 1, также для совместимости должны быть указаны следующие параметры настройки системы:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Таблица 2 - Параметры настройки узлов MCM-NODE1 и MCM-NODE2&lt;br /&gt;
!Параметр&lt;br /&gt;
!Значение&lt;br /&gt;
|-&lt;br /&gt;
|Имя компьютера&lt;br /&gt;
|MCM-NODE1/MCM-NODE2&lt;br /&gt;
|-&lt;br /&gt;
|Имя пользователя c правами локального администратора&lt;br /&gt;
|entcor&lt;br /&gt;
|-&lt;br /&gt;
|Пароль&lt;br /&gt;
|1&lt;br /&gt;
|}&lt;br /&gt;
Установка базовой системы Ubuntu Server 24.0x на компьютер &#039;&#039;&#039;MCM-SNIFFER&#039;&#039;&#039; производится обычным образом в режиме инсталляции по умолчанию, при этом при выборе параметров установки необходимо включить установку сервера OpenSSH, а также для совместимости следует  указать следующие значения прочих параметров:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Таблица 3 - Параметры настройки узла MCM-SNIFFER&lt;br /&gt;
!Параметр&lt;br /&gt;
!Значение&lt;br /&gt;
|-&lt;br /&gt;
|Имя компьютера&lt;br /&gt;
|MCM-SNIFFER&lt;br /&gt;
|-&lt;br /&gt;
|Имя пользователя c правами root                       &lt;br /&gt;
|entcor&lt;br /&gt;
|-&lt;br /&gt;
|Пароль&lt;br /&gt;
|ng3-dcc20&lt;br /&gt;
|}&lt;br /&gt;
После установки системы необходимо установить обновления:&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt full-upgrade&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
а также проверить доступ к серверу по SSH с компьютера администратора:&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
ssh entcor@192.168.2.15 (текущий адрес сервера MCM-SNIFFER)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&#039;&#039;&#039;Примечание:&#039;&#039;&#039; для удобства работы с файлами настоятельно рекомендуется также первым делом вкатить Midnight Commander:&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt install mc&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Также в дальнейшем целесообразно запускать Midnight Commander через &#039;&#039;&#039;sudo&#039;&#039;&#039;:&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
sudo mc&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Это позволит, во-первых, невозбранно редактировать все необходимые файлы и, во-вторых, при скрытии окон Midnight Commander выполнять из-под него с командной строки команды в режиме root без необходимости париться с sudo для каждой отдельной команды.&lt;br /&gt;
&lt;br /&gt;
==== Настройка сетевых интерфейсов ====&lt;br /&gt;
Для корректной работы сетевых интерфейсов и сохранения их параметров после перезагрузки сервера необходимо в каталоге &#039;&#039;&#039;/etc/netplan&#039;&#039;&#039; создать файл с расширением .yaml (например, &#039;&#039;&#039;01-network.yaml&#039;&#039;&#039;) со следующим содержимым:&amp;lt;syntaxhighlight lang=&amp;quot;yaml&amp;quot;&amp;gt;&lt;br /&gt;
network:&lt;br /&gt;
    version: 2&lt;br /&gt;
    ethernets:&lt;br /&gt;
        enp5s0:&lt;br /&gt;
            dhcp4: false&lt;br /&gt;
            addresses: &lt;br /&gt;
                - 192.168.2.15/24&lt;br /&gt;
            routes:&lt;br /&gt;
              - to: default&lt;br /&gt;
                via: 192.168.2.254&lt;br /&gt;
            nameservers: &lt;br /&gt;
                addresses: [192.168.2.60, 176.114.16.33]&lt;br /&gt;
        enp6s0:&lt;br /&gt;
            dhcp4: false&lt;br /&gt;
        enp7s0:&lt;br /&gt;
            dhcp4: false&lt;br /&gt;
        enp8s0:&lt;br /&gt;
            dhcp4: false&lt;br /&gt;
    bridges:&lt;br /&gt;
        docker0:&lt;br /&gt;
            interfaces: [enp6s0, enp7s0, enp8s0]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&#039;&#039;&#039;Примечания:&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
# Для интерфейса &#039;&#039;&#039;enp5s0&#039;&#039;&#039; вместо 192.168.2.15/24 следует указать нужный статический адрес сервера, также при необходимости следует указать фактически используемые адреса шлюза и DNS (в &#039;&#039;&#039;via&#039;&#039;&#039; и &#039;&#039;&#039;nameservers&#039;&#039;&#039; соответственно).&lt;br /&gt;
# В файле конфигурации заранее определяется мост &#039;&#039;&#039;docker0&#039;&#039;&#039;, который будет использоваться Docker&#039;ом после его установки. Таким образом, интерфейсы &#039;&#039;&#039;enp6s0/enp7s0/enp8s0&#039;&#039;&#039; заранее подключаются к мосту &#039;&#039;&#039;docker0&#039;&#039;&#039;, и, соответственно, в будущем будут доступны из Docker.&lt;br /&gt;
# Для удобства проще скопировать готовый файл &#039;&#039;&#039;01-network.yaml&#039;&#039;&#039; с компьютера администратора и положить его в &#039;&#039;&#039;/etc/netplan&#039;&#039;&#039; .&lt;br /&gt;
# Как показывает практика, существующий в &#039;&#039;&#039;/etc/netplan&#039;&#039;&#039; файл конфигурации по умолчанию &#039;&#039;&#039;50-cloud-init.yaml&#039;&#039;&#039; лучше переименовать во что-то типа &#039;&#039;&#039;50-cloud-init.yaml.bak,&#039;&#039;&#039; иначе у интерфейса &#039;&#039;&#039;enp5s0&#039;&#039;&#039; будет образовываться 2 адреса - статический из настроек в &#039;&#039;&#039;01-network.yaml&#039;&#039;&#039; и динамический, который будет дополнительно прилетать по DHCP и создавать путаницу. Вроде бы, должно лечиться установкой в файле &#039;&#039;&#039;50-cloud-init.yaml&#039;&#039;&#039; для интерфейса &#039;&#039;&#039;enp5s0&#039;&#039;&#039; параметра &#039;&#039;&#039;dchp4: false&#039;&#039;&#039;, но по факту не помогает, поэтому лучше от греха подальше во избежание конфликтов держать в &#039;&#039;&#039;/etc/netplan&#039;&#039;&#039;  только один файл &#039;&#039;&#039;01-network.yaml&#039;&#039;&#039; с настройками интерфейсов.&lt;br /&gt;
# Для применения настроек интерфейсов и сохранения настроек после перезагрузки сервера рекомендуется выполнение &#039;&#039;&#039;netplan try&#039;&#039;&#039; . Это позволит проверить конфигурацию перед применением и отловить возможные ошибки. Также рекомендуется в обязательном порядке выполнить контрольную перезагрузку сервера, чтобы убедиться, что настройки после нее восстанавливаются правильно.&lt;br /&gt;
==== Установка сертификата Entcor ====&lt;br /&gt;
С компьютера администратора следует скопировать файл сертификата &#039;&#039;&#039;entcor.crt&#039;&#039;&#039; на узел &#039;&#039;&#039;MCM-SNIFFER&#039;&#039;&#039; по следующему пути (необходимо использовать фактический IP-адрес сервера MCM-SNIFFER):&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
scp entcor.crt entcor@192.168.2.23:/home/entcor&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Затем на компьютере &#039;&#039;&#039;MCM-SNIFFER&#039;&#039;&#039; следует перенести сертификат в необходимый каталог и выполнить его обновление:&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
sudo mv entcor.crt /usr/local/share/ca-certificates&lt;br /&gt;
sudo update-ca-certificates &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&#039;&#039;&#039;Примечание:&#039;&#039;&#039; после обновления сертификатов необходимо выполнить перезагрузку компьютера &#039;&#039;&#039;MCM-SNIFFER&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==== Установка Docker ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
# Add Docker&#039;s official GPG key:&lt;br /&gt;
&lt;br /&gt;
sudo apt-get update&lt;br /&gt;
sudo apt-get install ca-certificates curl&lt;br /&gt;
sudo install -m 0755 -d /etc/apt/keyrings&lt;br /&gt;
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc&lt;br /&gt;
sudo chmod a+r /etc/apt/keyrings/docker.asc&lt;br /&gt;
&lt;br /&gt;
# Add the repository to Apt sources:&lt;br /&gt;
&lt;br /&gt;
echo \&lt;br /&gt;
&amp;quot;deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \&lt;br /&gt;
$(. /etc/os-release &amp;amp;&amp;amp; echo &amp;quot;$VERSION_CODENAME&amp;quot;) stable&amp;quot; | \&lt;br /&gt;
sudo tee /etc/apt/sources.list.d/docker.list &amp;gt; /dev/null&lt;br /&gt;
&lt;br /&gt;
sudo apt-get update&lt;br /&gt;
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Ссылка на руководство: https://docs.docker.com/engine/install/ubuntu/#install-using-the-repository&lt;br /&gt;
&lt;br /&gt;
==== Подключение интерфейсов к L2 Bridge для Docker ====&lt;br /&gt;
Предварительно следует запустить постоянный пинг (с параметром &#039;&#039;&#039;-t&#039;&#039;&#039;) с &#039;&#039;&#039;MCM-NODE1&#039;&#039;&#039; (10.0.0.1) на &#039;&#039;&#039;MCM-NODE2&#039;&#039;&#039; (10.0.0.2) и наоборот, убедиться в том, что узлы недоступны друг для друга.&lt;br /&gt;
&lt;br /&gt;
Далее необходимо выполнить подключение внутренних интерфейсов обмена данными к мосту &#039;&#039;&#039;docker0&#039;&#039;&#039;:&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
sudo ip link set dev enp6s0 master docker0&lt;br /&gt;
sudo ip link set dev enp7s0 master docker0&lt;br /&gt;
sudo ip link set dev enp8s0 master docker0&lt;br /&gt;
sudo ip link set dev docker0 up&lt;br /&gt;
ip link show&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Ссылка на руководство: https://chrisjhart.com/Bridge-Network-Interfaces-on-Ubuntu-22.04/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Для сохранения настроек моста &#039;&#039;&#039;docker0&#039;&#039;&#039; после перезагрузки сервера необходимо в каталоге &#039;&#039;&#039;/etc/netplan&#039;&#039;&#039; создать файл с расширением .yaml (например, &#039;&#039;&#039;01-network.yaml&#039;&#039;&#039;) со следующим содержимым:&amp;lt;syntaxhighlight lang=&amp;quot;yaml&amp;quot;&amp;gt;&lt;br /&gt;
network:&lt;br /&gt;
    version: 2&lt;br /&gt;
    ethernets:&lt;br /&gt;
        enp5s0:&lt;br /&gt;
            dhcp4: false&lt;br /&gt;
            addresses: &lt;br /&gt;
                - 192.168.2.15/24&lt;br /&gt;
            routes:&lt;br /&gt;
              - to: default&lt;br /&gt;
                via: 192.168.2.254&lt;br /&gt;
            nameservers: &lt;br /&gt;
                addresses: [192.168.2.60, 176.114.16.33]&lt;br /&gt;
        enp6s0:&lt;br /&gt;
            dhcp4: false&lt;br /&gt;
        enp7s0:&lt;br /&gt;
            dhcp4: false&lt;br /&gt;
        enp8s0:&lt;br /&gt;
            dhcp4: false&lt;br /&gt;
    bridges:&lt;br /&gt;
        docker0:&lt;br /&gt;
            interfaces: [enp6s0, enp7s0, enp8s0]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&#039;&#039;&#039;Примечания:&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
# Для интерфейса &#039;&#039;&#039;enp5s0&#039;&#039;&#039; вместо 192.168.2.15/24 следует указать нужный статический адрес сервера, также при необходимости следует указать фактически используемые адреса шлюза и DNS (в &#039;&#039;&#039;via&#039;&#039;&#039; и &#039;&#039;&#039;nameservers&#039;&#039;&#039; соответственно).&lt;br /&gt;
# Для удобства проще скопировать готовый файл с компьютера администратора и положить его в &#039;&#039;&#039;/etc/netplan&#039;&#039;&#039; .&lt;br /&gt;
# Если нет необходимости сразу задействовать интерфейсы &#039;&#039;&#039;enp6s0/enp7s0/enp8s0&#039;&#039;&#039; в мосте &#039;&#039;&#039;docker0&#039;&#039;&#039;, то можно предыдущие команды &#039;&#039;&#039;ip link set dev&#039;&#039;&#039; не выполнять, а вместо этого отредактировать/скопировать файл в &#039;&#039;&#039;/etc/netplan&#039;&#039;&#039;.&lt;br /&gt;
# В существующем в &#039;&#039;&#039;/etc/netplan&#039;&#039;&#039; файле конфигурации по умолчанию &#039;&#039;&#039;50-cloud-init.yaml&#039;&#039;&#039; следует для интерфейса &#039;&#039;&#039;enp5s0&#039;&#039;&#039; установить параметр &#039;&#039;&#039;dchp4: false&#039;&#039;&#039;, иначе у интерфейса будет 2 адреса - статический из настроек в &#039;&#039;&#039;01-network.yaml&#039;&#039;&#039; и динамический, который будет дополнительно прилетать по DHCP и создавать путаницу.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
После выполнения настройки интерфейсов следует проверить, что пинг с MCM-NODE1 (10.0.0.1) на MCM-NODE2 (10.0.0.2) в обе стороны проходит успешно, т.е. узлы общаются между собой напрямую через мост &#039;&#039;&#039;docker0&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==== Установка компонентов системы МКИ ====&lt;br /&gt;
Получение последней версии инсталляционного пакета производится из  Git-репозитория &#039;&#039;&#039;e-deploy&#039;&#039;&#039;, находящегося по адресу  &#039;&#039;&#039;&amp;lt;nowiki&amp;gt;http://192.168.2.61&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;, (нужно будет ввести соответствующие логин-пароль для доступа к репозиторию, а также выполнить переключение на ветку &#039;&#039;&#039;develop&#039;&#039;&#039;): &amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
git clone http://192.168.2.61/e-node/e-deploy.git&lt;br /&gt;
git switch develop&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Далее следует авторизоваться под нужной учетной записью в Docker-репозитории Harbor:&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
docker login registry.entcor&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;после чего нужно перейти в каталог &#039;&#039;&#039;e-deploy&#039;&#039;&#039; (в том каталоге, где выполнялся git clone) и выполнить следующую команду:&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
./enode.sh init&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Далее в том же каталоге следует создать/отредактировать файла &#039;&#039;&#039;.env&#039;&#039;&#039;, в котором следует установить следующие параметры:&lt;br /&gt;
&lt;br /&gt;
MONITOR_DATA_IF = &amp;lt;имя интерфейса на узле &#039;&#039;&#039;MCM-SNIFFER&#039;&#039;&#039;,  на котором выполняется прослушка, например, enp7s0&amp;gt; &lt;br /&gt;
&lt;br /&gt;
MODE = enode &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Примечание:&#039;&#039;&#039; вообще-то для работы МКИ параметр MODE должен иметь  значение asutp, но работает пока только вот так. &lt;br /&gt;
&lt;br /&gt;
Далее требуется выполнить загрузку и обновление контейнеров посредством запуска скрипта &#039;&#039;&#039;enode&#039;&#039;&#039; с параметром update:&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
enode analytic update&lt;br /&gt;
enode common update&lt;br /&gt;
enode asutp update&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Запуск компонентов системы МКИ ====&lt;br /&gt;
После установки компонентов МКИ можно выполнить их запуск следующей командой: &amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
enode &amp;lt;имя стека&amp;gt; start&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&#039;&#039;&#039;Примечание:&#039;&#039;&#039; названия нужных стеков можно посмотреть в каталоге &#039;&#039;&#039;stacks&#039;&#039;&#039;  в &#039;&#039;&#039;e-deploy&#039;&#039;&#039; (имена стеков соответствуют именам подкаталогов). Как минимум должны быть запущены следующие стеки:&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
enode analytic start&lt;br /&gt;
enode common start&lt;br /&gt;
enode asutp start&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&#039;&#039;&#039;Примечание:&#039;&#039;&#039;  стек &#039;&#039;&#039;analytic&#039;&#039;&#039; рекомендуется запускать перед стеком &#039;&#039;&#039;common&#039;&#039;&#039; из-за каких-то особенностей функционирования:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Проверка запуска сервисов производится обычным образом с помощью команды:&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
docker ps&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Проверка информационного обмена по протоколу МЭК-60870-5-104 ====&lt;br /&gt;
Проверка информационного обмена по протоколу МЭК-60870-5-104 производится между узлами стенда &#039;&#039;&#039;MCM-NODE1&#039;&#039;&#039; и &#039;&#039;&#039;MCM-NODE2&#039;&#039;&#039; посредством программного обеспечения  IEC Test, которое эмулирует передачу пакетов протокола МЭК-60870-5-104 поверх соединения Ethernet. &lt;br /&gt;
&lt;br /&gt;
Для проверки работы протокола МЭК-60870-5-104 во внутренней сети обмена на одном из узлов ПО IEC Test запускается в режиме сервера с показанными ниже настройками: &lt;br /&gt;
&lt;br /&gt;
TCP/IP Link Role - Server &lt;br /&gt;
&lt;br /&gt;
IP Address - адрес внутреннего интерфейса для информационного обмена (в данном примере - 10.0.0.2) &lt;br /&gt;
&lt;br /&gt;
Далее устанавливается канал обмена последовательным нажатием кнопок &amp;quot;Build String&amp;quot; и &amp;quot;Open Channel&amp;quot; (индикатор &amp;quot;1 channel&amp;quot; должен стать темно-зеленым). &lt;br /&gt;
[[Файл:IEC Test - 2.png|мини|794x794пкс|Настройки программы IEC Test для организации обмена  между узлами стенда MCM-NODE1 и MCM-NODE2 по протоколу МЭК-60870-5-104 (серверная часть)|центр]]Соответственно, на другом узле ПО IEC Test запускается в режиме клиента с показанными ниже настройками:&lt;br /&gt;
&lt;br /&gt;
TCP/IP Link Role - Client &lt;br /&gt;
&lt;br /&gt;
IP Address - адрес сервера, находящегося во внутренней сети для информационного обмена  (в данном примере - 10.0.0.2). &lt;br /&gt;
&lt;br /&gt;
Далее устанавливается канал обмена последовательным нажатием кнопок &amp;quot;Build String&amp;quot; и &amp;quot;Open Channel&amp;quot; (индикатор &amp;quot;1 channel&amp;quot; должен стать темно-зеленым).&lt;br /&gt;
&lt;br /&gt;
Для начала непосредственно информационного взаимодействия следует послать с клиента на сервер специальную команду посредством нажатия кнопки &amp;quot;Start DT&amp;quot; (индикатор &amp;quot;1 channel&amp;quot; должен стать светло-зеленым как показано на рисунке ниже). С этого момента канал обмена установлен и активирован, а между экземплярами ПО IEC Test могут передаваться пакеты протокола МЭК-60870-5-104.&lt;br /&gt;
[[Файл:IEC Test - 3.png|центр|мини|791x791пкс|Настройки программы IEC Test для организации обмена  между узлами стенда MCM-NODE1 и MCM-NODE2 по протоколу МЭК-60870-5-104 (клиентская часть)]]Для создания трафика по протоколу МЭК-60870-5-104 между узлами &#039;&#039;&#039;MCM-NODE1&#039;&#039;&#039; и &#039;&#039;&#039;MCM-NODE2&#039;&#039;&#039; следует использовать специальный макрос, имитирующий последовательную передачу данных протокола МЭК-60870-5-104 между узлами. Для этого необходимо на любом из узлов в ПО IEC Test перейти во вкладку &amp;quot;870 Commander&amp;quot;, нажатием кнопки &amp;quot;Загрузить&amp;quot; загрузить макрос &amp;quot;ДУ по циклу 5 сек.rtm&amp;quot; и выполнить его нажатием кнопки &amp;quot;Выполнить&amp;quot;:&lt;br /&gt;
[[Файл:IEC Test - 4.png|альт=Выполнение макроса в ПО IEC Test для создания трафика по протоколу МЭК-60870-5-104|центр|мини|797x797пкс|Выполнение макроса в ПО IEC Test для создания трафика по протоколу МЭК-60870-5-104]]В случае правильно настроенных узлов стенда и экземпляров ПО IEC Test на принимающем узле во вкладке &amp;quot;870 Commander&amp;quot; в соответствующем окне можно будет увидеть информацию о принятых сообщениях, отправленных макросом с передающего узла, что свидетельствует о состоявшемся информационном обмене по протоколу МЭК-60870-5-104 между узлами.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Примечание:&#039;&#039;&#039; в случае, если система МКИ выполняет прослушивание на одном из интерфейсов, входящих во внутреннюю сеть информационного обмена, а также при правильном конфигурировании компонента Grafana, при подключении браузером по адресу сервера  &#039;&#039;&#039;MCM-SNIFFER&#039;&#039;&#039; (&#039;&#039;&#039;&amp;lt;nowiki&amp;gt;http://192.168.2.142&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;) в соответствующих дашбордах должна появиться информация о перехваченных пакетах протокола МЭК-60870-5-104, создающих описанный выше трафик.&lt;/div&gt;</summary>
		<author><name>Dima</name></author>
	</entry>
	<entry>
		<id>https://wiki.entcor.ru/index.php?title=%D0%9C%D0%9A%D0%98&amp;diff=410</id>
		<title>МКИ</title>
		<link rel="alternate" type="text/html" href="https://wiki.entcor.ru/index.php?title=%D0%9C%D0%9A%D0%98&amp;diff=410"/>
		<updated>2025-03-28T03:43:14Z</updated>

		<summary type="html">&lt;p&gt;Dima: /* Система мониторинга качества измерений (МКИ) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= &#039;&#039;&#039;Система мониторинга качества измерений (МКИ)&#039;&#039;&#039; =&lt;br /&gt;
&lt;br /&gt;
=== Схема тестового стенда ===&lt;br /&gt;
[[Файл:Стенд для МКИ (декабрь 2024).drawio.png|альт=Стенд для МКИ (декабрь 2024)|мини|978x978пкс|Стенд для МКИ (декабрь 2024)]]&lt;br /&gt;
&lt;br /&gt;
=== Подключение и настойка оборудования ===&lt;br /&gt;
Подключение компонентов стенда производится в соответствии со схемой подключения. При этом для корректного выполнения дальнейших инструкций подключение устройств к физическим портам и сетевые настройки интерфейсов должны быть выполнены  согласно табл. 1:&lt;br /&gt;
&lt;br /&gt;
==== Таблица 1 - Параметры сетевых настроек устройств стенда ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Хост&lt;br /&gt;
!Порт&lt;br /&gt;
!Интерфейс&lt;br /&gt;
!IP&lt;br /&gt;
!Подключен к &lt;br /&gt;
устройство/порт&lt;br /&gt;
!Описание&lt;br /&gt;
|-&lt;br /&gt;
|MCM-SNIFFER&lt;br /&gt;
|Eth1&lt;br /&gt;
|enp5s0&lt;br /&gt;
|192.168.2.15/24&lt;br /&gt;
|L2 Switch&lt;br /&gt;
|Интерфейс управления для Sniffer&lt;br /&gt;
|-&lt;br /&gt;
|MCM-SNIFFER&lt;br /&gt;
|Eth2&lt;br /&gt;
|enp6s0&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;-&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|MCM-NODE1 / Eth2&lt;br /&gt;
|Участвует в L2 Bridge&lt;br /&gt;
|-&lt;br /&gt;
|MCM-SNIFFER&lt;br /&gt;
|Eth3&lt;br /&gt;
|enp7s0&lt;br /&gt;
| -&lt;br /&gt;
|MCM-NODE2 / Eth2&lt;br /&gt;
|Участвует в L2 Bridge&lt;br /&gt;
|-&lt;br /&gt;
|MCM-SNIFFER&lt;br /&gt;
|Eth4&lt;br /&gt;
|enp8s0&lt;br /&gt;
| -&lt;br /&gt;
|ZLAN / Eth&lt;br /&gt;
|Участвует в L2 Bridge&lt;br /&gt;
|-&lt;br /&gt;
|MCM-NODE1&lt;br /&gt;
|Eth1&lt;br /&gt;
|EXTERNAL&lt;br /&gt;
|192.168.2.156/24&lt;br /&gt;
|L2 Switch&lt;br /&gt;
|Интерфейс управления для Node1&lt;br /&gt;
|-&lt;br /&gt;
|MCM-NODE1&lt;br /&gt;
|Eth2&lt;br /&gt;
|INTERNAL&lt;br /&gt;
|10.0.0.1/24&lt;br /&gt;
|MCM-SNIFFER / Eth2&lt;br /&gt;
|Интерфейс обмена данными для Node1&lt;br /&gt;
|-&lt;br /&gt;
|MCM-NODE2&lt;br /&gt;
|Eth1&lt;br /&gt;
|EXTERNAL&lt;br /&gt;
|192.168.2.195/24&lt;br /&gt;
|L2 Switch&lt;br /&gt;
|Интерфейс управления для Node2&lt;br /&gt;
|-&lt;br /&gt;
|MCM-NODE2&lt;br /&gt;
|Eth2&lt;br /&gt;
|INTERNAL&lt;br /&gt;
|10.0.0.2/24&lt;br /&gt;
|MCM-SNIFFER / Eth3&lt;br /&gt;
|Интерфейс обмена данными для Node2&lt;br /&gt;
|-&lt;br /&gt;
|ZLAN&lt;br /&gt;
|Eth&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
|MCM-SNIFFER / Eth4&lt;br /&gt;
|Интерфейс обмена данными для ZLAN&lt;br /&gt;
|-&lt;br /&gt;
|ZLAN&lt;br /&gt;
|RS-485 #1&lt;br /&gt;
|ZLDEV0001&lt;br /&gt;
|10.0.0.241/24&lt;br /&gt;
|&lt;br /&gt;
|Подключение датчика с MODBUS-адресом 5&lt;br /&gt;
|-&lt;br /&gt;
|ZLAN&lt;br /&gt;
|RS-485 #2&lt;br /&gt;
|ZLDEV0002&lt;br /&gt;
|10.0.0.242/24&lt;br /&gt;
|&lt;br /&gt;
|Подключение датчика с MODBUS-адресом 6&lt;br /&gt;
|-&lt;br /&gt;
|ZLAN&lt;br /&gt;
|RS-485 #3&lt;br /&gt;
|ZLDEV0003&lt;br /&gt;
|10.0.0.243/24&lt;br /&gt;
|&lt;br /&gt;
|Подключение датчика с MODBUS-адресом 7&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Развертывание системы ===&lt;br /&gt;
&lt;br /&gt;
==== Установка базовых систем ====&lt;br /&gt;
Установка ОС Windows на компьютерах &#039;&#039;&#039;MCM-NODE1&#039;&#039;&#039; и &#039;&#039;&#039;MCM-NODE2&#039;&#039;&#039; производится обычным образом, при этом  соответствующим сетевым интерфейсам должны быть присвоены адреса согласно данным табл. 1, также для совместимости должны быть указаны следующие параметры настройки системы:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Таблица 2 - Параметры настройки узлов MCM-NODE1 и MCM-NODE2&lt;br /&gt;
!Параметр&lt;br /&gt;
!Значение&lt;br /&gt;
|-&lt;br /&gt;
|Имя компьютера&lt;br /&gt;
|MCM-NODE1/MCM-NODE2&lt;br /&gt;
|-&lt;br /&gt;
|Имя пользователя c правами локального администратора&lt;br /&gt;
|entcor&lt;br /&gt;
|-&lt;br /&gt;
|Пароль&lt;br /&gt;
|1&lt;br /&gt;
|}&lt;br /&gt;
Установка базовой системы Ubuntu Server 24.0x на компьютер &#039;&#039;&#039;MCM-SNIFFER&#039;&#039;&#039; производится обычным образом в режиме инсталляции по умолчанию, при этом при выборе параметров установки необходимо включить установку сервера OpenSSH, а также для совместимости следует  указать следующие значения прочих параметров:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Таблица 3 - Параметры настройки узла MCM-SNIFFER&lt;br /&gt;
!Параметр&lt;br /&gt;
!Значение&lt;br /&gt;
|-&lt;br /&gt;
|Имя компьютера&lt;br /&gt;
|MCM-SNIFFER&lt;br /&gt;
|-&lt;br /&gt;
|Имя пользователя c правами root                       &lt;br /&gt;
|entcor&lt;br /&gt;
|-&lt;br /&gt;
|Пароль&lt;br /&gt;
|ng3-dcc20&lt;br /&gt;
|}&lt;br /&gt;
После установки системы необходимо установить обновления:&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt full-upgrade&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
а также проверить доступ к серверу по SSH с компьютера администратора:&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
ssh entcor@192.168.2.15 (текущий адрес сервера MCM-SNIFFER)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&#039;&#039;&#039;Примечание:&#039;&#039;&#039; для удобства работы с файлами настоятельно рекомендуется также первым делом вкатить Midnight Commander:&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt install mc&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Также в дальнейшем целесообразно запускать Midnight Commander через &#039;&#039;&#039;sudo&#039;&#039;&#039;:&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
sudo mc&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Это позволит, во-первых, невозбранно редактировать все необходимые файлы и, во-вторых, при скрытии окон Midnight Commander выполнять из-под него с командной строки команды в режиме root.&lt;br /&gt;
&lt;br /&gt;
==== Настройка сетевых интерфейсов ====&lt;br /&gt;
Для корректной работы сетевых интерфейсов и сохранения их параметров после перезагрузки сервера необходимо в каталоге &#039;&#039;&#039;/etc/netplan&#039;&#039;&#039; создать файл с расширением .yaml (например, &#039;&#039;&#039;01-network.yaml&#039;&#039;&#039;) со следующим содержимым:&amp;lt;syntaxhighlight lang=&amp;quot;yaml&amp;quot;&amp;gt;&lt;br /&gt;
network:&lt;br /&gt;
    version: 2&lt;br /&gt;
    ethernets:&lt;br /&gt;
        enp5s0:&lt;br /&gt;
            dhcp4: false&lt;br /&gt;
            addresses: &lt;br /&gt;
                - 192.168.2.15/24&lt;br /&gt;
            routes:&lt;br /&gt;
              - to: default&lt;br /&gt;
                via: 192.168.2.254&lt;br /&gt;
            nameservers: &lt;br /&gt;
                addresses: [192.168.2.60, 176.114.16.33]&lt;br /&gt;
        enp6s0:&lt;br /&gt;
            dhcp4: false&lt;br /&gt;
        enp7s0:&lt;br /&gt;
            dhcp4: false&lt;br /&gt;
        enp8s0:&lt;br /&gt;
            dhcp4: false&lt;br /&gt;
    bridges:&lt;br /&gt;
        docker0:&lt;br /&gt;
            interfaces: [enp6s0, enp7s0, enp8s0]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&#039;&#039;&#039;Примечания:&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
# Для интерфейса &#039;&#039;&#039;enp5s0&#039;&#039;&#039; вместо 192.168.2.15/24 следует указать нужный статический адрес сервера, также при необходимости следует указать фактически используемые адреса шлюза и DNS (в &#039;&#039;&#039;via&#039;&#039;&#039; и &#039;&#039;&#039;nameservers&#039;&#039;&#039; соответственно).&lt;br /&gt;
# В файле конфигурации заранее определяется мост &#039;&#039;&#039;docker0&#039;&#039;&#039;, который будет использоваться Docker&#039;ом после его установки. Таким образом, интерфейсы &#039;&#039;&#039;enp6s0/enp7s0/enp8s0&#039;&#039;&#039; заранее подключаются к мосту &#039;&#039;&#039;docker0&#039;&#039;&#039;, и, соответственно, в будущем будут доступны из Docker.&lt;br /&gt;
# Для удобства проще скопировать готовый файл &#039;&#039;&#039;01-network.yaml&#039;&#039;&#039; с компьютера администратора и положить его в &#039;&#039;&#039;/etc/netplan&#039;&#039;&#039; .&lt;br /&gt;
# Как показывает практика, существующий в &#039;&#039;&#039;/etc/netplan&#039;&#039;&#039; файл конфигурации по умолчанию &#039;&#039;&#039;50-cloud-init.yaml&#039;&#039;&#039; лучше переименовать во что-то типа &#039;&#039;&#039;50-cloud-init.yaml.bak,&#039;&#039;&#039; иначе у интерфейса &#039;&#039;&#039;enp5s0&#039;&#039;&#039; будет образовываться 2 адреса - статический из настроек в &#039;&#039;&#039;01-network.yaml&#039;&#039;&#039; и динамический, который будет дополнительно прилетать по DHCP и создавать путаницу. Вроде бы, должно лечиться установкой в файле &#039;&#039;&#039;50-cloud-init.yaml&#039;&#039;&#039; для интерфейса &#039;&#039;&#039;enp5s0&#039;&#039;&#039; параметра &#039;&#039;&#039;dchp4: false&#039;&#039;&#039;, но по факту не помогает, поэтому лучше от греха подальше во избежание конфликтов держать в &#039;&#039;&#039;/etc/netplan&#039;&#039;&#039;  только один файл &#039;&#039;&#039;01-network.yaml&#039;&#039;&#039; с настройками интерфейсов.&lt;br /&gt;
# Для применения настроек интерфейсов и сохранения настроек после перезагрузки сервера рекомендуется выполнение &#039;&#039;&#039;netplan try&#039;&#039;&#039; . Это позволит проверить конфигурацию перед применением и отловить возможные ошибки. Также рекомендуется в обязательном порядке выполнить контрольную перезагрузку сервера, чтобы убедиться, что настройки после нее восстанавливаются правильно.&lt;br /&gt;
==== Установка сертификата Entcor ====&lt;br /&gt;
С компьютера администратора следует скопировать файл сертификата &#039;&#039;&#039;entcor.crt&#039;&#039;&#039; на узел &#039;&#039;&#039;MCM-SNIFFER&#039;&#039;&#039; по следующему пути (необходимо использовать фактический IP-адрес сервера MCM-SNIFFER):&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
scp entcor.crt entcor@192.168.2.23:/home/entcor&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Затем на компьютере &#039;&#039;&#039;MCM-SNIFFER&#039;&#039;&#039; следует перенести сертификат в необходимый каталог и выполнить его обновление:&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
sudo mv entcor.crt /usr/local/share/ca-certificates&lt;br /&gt;
sudo update-ca-certificates &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&#039;&#039;&#039;Примечание:&#039;&#039;&#039; после обновления сертификатов необходимо выполнить перезагрузку компьютера &#039;&#039;&#039;MCM-SNIFFER&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==== Установка Docker ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
# Add Docker&#039;s official GPG key:&lt;br /&gt;
&lt;br /&gt;
sudo apt-get update&lt;br /&gt;
sudo apt-get install ca-certificates curl&lt;br /&gt;
sudo install -m 0755 -d /etc/apt/keyrings&lt;br /&gt;
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc&lt;br /&gt;
sudo chmod a+r /etc/apt/keyrings/docker.asc&lt;br /&gt;
&lt;br /&gt;
# Add the repository to Apt sources:&lt;br /&gt;
&lt;br /&gt;
echo \&lt;br /&gt;
&amp;quot;deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \&lt;br /&gt;
$(. /etc/os-release &amp;amp;&amp;amp; echo &amp;quot;$VERSION_CODENAME&amp;quot;) stable&amp;quot; | \&lt;br /&gt;
sudo tee /etc/apt/sources.list.d/docker.list &amp;gt; /dev/null&lt;br /&gt;
&lt;br /&gt;
sudo apt-get update&lt;br /&gt;
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Ссылка на руководство: https://docs.docker.com/engine/install/ubuntu/#install-using-the-repository&lt;br /&gt;
&lt;br /&gt;
==== Подключение интерфейсов к L2 Bridge для Docker ====&lt;br /&gt;
Предварительно следует запустить постоянный пинг (с параметром &#039;&#039;&#039;-t&#039;&#039;&#039;) с &#039;&#039;&#039;MCM-NODE1&#039;&#039;&#039; (10.0.0.1) на &#039;&#039;&#039;MCM-NODE2&#039;&#039;&#039; (10.0.0.2) и наоборот, убедиться в том, что узлы недоступны друг для друга.&lt;br /&gt;
&lt;br /&gt;
Далее необходимо выполнить подключение внутренних интерфейсов обмена данными к мосту &#039;&#039;&#039;docker0&#039;&#039;&#039;:&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
sudo ip link set dev enp6s0 master docker0&lt;br /&gt;
sudo ip link set dev enp7s0 master docker0&lt;br /&gt;
sudo ip link set dev enp8s0 master docker0&lt;br /&gt;
sudo ip link set dev docker0 up&lt;br /&gt;
ip link show&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Ссылка на руководство: https://chrisjhart.com/Bridge-Network-Interfaces-on-Ubuntu-22.04/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Для сохранения настроек моста &#039;&#039;&#039;docker0&#039;&#039;&#039; после перезагрузки сервера необходимо в каталоге &#039;&#039;&#039;/etc/netplan&#039;&#039;&#039; создать файл с расширением .yaml (например, &#039;&#039;&#039;01-network.yaml&#039;&#039;&#039;) со следующим содержимым:&amp;lt;syntaxhighlight lang=&amp;quot;yaml&amp;quot;&amp;gt;&lt;br /&gt;
network:&lt;br /&gt;
    version: 2&lt;br /&gt;
    ethernets:&lt;br /&gt;
        enp5s0:&lt;br /&gt;
            dhcp4: false&lt;br /&gt;
            addresses: &lt;br /&gt;
                - 192.168.2.15/24&lt;br /&gt;
            routes:&lt;br /&gt;
              - to: default&lt;br /&gt;
                via: 192.168.2.254&lt;br /&gt;
            nameservers: &lt;br /&gt;
                addresses: [192.168.2.60, 176.114.16.33]&lt;br /&gt;
        enp6s0:&lt;br /&gt;
            dhcp4: false&lt;br /&gt;
        enp7s0:&lt;br /&gt;
            dhcp4: false&lt;br /&gt;
        enp8s0:&lt;br /&gt;
            dhcp4: false&lt;br /&gt;
    bridges:&lt;br /&gt;
        docker0:&lt;br /&gt;
            interfaces: [enp6s0, enp7s0, enp8s0]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&#039;&#039;&#039;Примечания:&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
# Для интерфейса &#039;&#039;&#039;enp5s0&#039;&#039;&#039; вместо 192.168.2.15/24 следует указать нужный статический адрес сервера, также при необходимости следует указать фактически используемые адреса шлюза и DNS (в &#039;&#039;&#039;via&#039;&#039;&#039; и &#039;&#039;&#039;nameservers&#039;&#039;&#039; соответственно).&lt;br /&gt;
# Для удобства проще скопировать готовый файл с компьютера администратора и положить его в &#039;&#039;&#039;/etc/netplan&#039;&#039;&#039; .&lt;br /&gt;
# Если нет необходимости сразу задействовать интерфейсы &#039;&#039;&#039;enp6s0/enp7s0/enp8s0&#039;&#039;&#039; в мосте &#039;&#039;&#039;docker0&#039;&#039;&#039;, то можно предыдущие команды &#039;&#039;&#039;ip link set dev&#039;&#039;&#039; не выполнять, а вместо этого отредактировать/скопировать файл в &#039;&#039;&#039;/etc/netplan&#039;&#039;&#039;.&lt;br /&gt;
# В существующем в &#039;&#039;&#039;/etc/netplan&#039;&#039;&#039; файле конфигурации по умолчанию &#039;&#039;&#039;50-cloud-init.yaml&#039;&#039;&#039; следует для интерфейса &#039;&#039;&#039;enp5s0&#039;&#039;&#039; установить параметр &#039;&#039;&#039;dchp4: false&#039;&#039;&#039;, иначе у интерфейса будет 2 адреса - статический из настроек в &#039;&#039;&#039;01-network.yaml&#039;&#039;&#039; и динамический, который будет дополнительно прилетать по DHCP и создавать путаницу.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
После выполнения настройки интерфейсов следует проверить, что пинг с MCM-NODE1 (10.0.0.1) на MCM-NODE2 (10.0.0.2) в обе стороны проходит успешно, т.е. узлы общаются между собой напрямую через мост &#039;&#039;&#039;docker0&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==== Установка компонентов системы МКИ ====&lt;br /&gt;
Получение последней версии инсталляционного пакета производится из  Git-репозитория &#039;&#039;&#039;e-deploy&#039;&#039;&#039;, находящегося по адресу  &#039;&#039;&#039;&amp;lt;nowiki&amp;gt;http://192.168.2.61&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;, (нужно будет ввести соответствующие логин-пароль для доступа к репозиторию, а также выполнить переключение на ветку &#039;&#039;&#039;develop&#039;&#039;&#039;): &amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
git clone http://192.168.2.61/e-node/e-deploy.git&lt;br /&gt;
git switch develop&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Далее следует авторизоваться под нужной учетной записью в Docker-репозитории Harbor:&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
docker login registry.entcor&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;после чего нужно перейти в каталог &#039;&#039;&#039;e-deploy&#039;&#039;&#039; (в том каталоге, где выполнялся git clone) и выполнить следующую команду:&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
./enode.sh init&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Далее в том же каталоге следует создать/отредактировать файла &#039;&#039;&#039;.env&#039;&#039;&#039;, в котором следует установить следующие параметры:&lt;br /&gt;
&lt;br /&gt;
MONITOR_DATA_IF = &amp;lt;имя интерфейса на узле &#039;&#039;&#039;MCM-SNIFFER&#039;&#039;&#039;,  на котором выполняется прослушка, например, enp7s0&amp;gt; &lt;br /&gt;
&lt;br /&gt;
MODE = enode &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Примечание:&#039;&#039;&#039; вообще-то для работы МКИ параметр MODE должен иметь  значение asutp, но работает пока только вот так. &lt;br /&gt;
&lt;br /&gt;
Далее требуется выполнить загрузку и обновление контейнеров посредством запуска скрипта &#039;&#039;&#039;enode&#039;&#039;&#039; с параметром update:&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
enode analytic update&lt;br /&gt;
enode common update&lt;br /&gt;
enode asutp update&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Запуск компонентов системы МКИ ====&lt;br /&gt;
После установки компонентов МКИ можно выполнить их запуск следующей командой: &amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
enode &amp;lt;имя стека&amp;gt; start&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&#039;&#039;&#039;Примечание:&#039;&#039;&#039; названия нужных стеков можно посмотреть в каталоге &#039;&#039;&#039;stacks&#039;&#039;&#039;  в &#039;&#039;&#039;e-deploy&#039;&#039;&#039; (имена стеков соответствуют именам подкаталогов). Как минимум должны быть запущены следующие стеки:&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
enode analytic start&lt;br /&gt;
enode common start&lt;br /&gt;
enode asutp start&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&#039;&#039;&#039;Примечание:&#039;&#039;&#039;  стек &#039;&#039;&#039;analytic&#039;&#039;&#039; рекомендуется запускать перед стеком &#039;&#039;&#039;common&#039;&#039;&#039; из-за каких-то особенностей функционирования:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Проверка запуска сервисов производится обычным образом с помощью команды:&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
docker ps&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Проверка информационного обмена по протоколу МЭК-60870-5-104 ====&lt;br /&gt;
Проверка информационного обмена по протоколу МЭК-60870-5-104 производится между узлами стенда &#039;&#039;&#039;MCM-NODE1&#039;&#039;&#039; и &#039;&#039;&#039;MCM-NODE2&#039;&#039;&#039; посредством программного обеспечения  IEC Test, которое эмулирует передачу пакетов протокола МЭК-60870-5-104 поверх соединения Ethernet. &lt;br /&gt;
&lt;br /&gt;
Для проверки работы протокола МЭК-60870-5-104 во внутренней сети обмена на одном из узлов ПО IEC Test запускается в режиме сервера с показанными ниже настройками: &lt;br /&gt;
&lt;br /&gt;
TCP/IP Link Role - Server &lt;br /&gt;
&lt;br /&gt;
IP Address - адрес внутреннего интерфейса для информационного обмена (в данном примере - 10.0.0.2) &lt;br /&gt;
&lt;br /&gt;
Далее устанавливается канал обмена последовательным нажатием кнопок &amp;quot;Build String&amp;quot; и &amp;quot;Open Channel&amp;quot; (индикатор &amp;quot;1 channel&amp;quot; должен стать темно-зеленым). &lt;br /&gt;
[[Файл:IEC Test - 2.png|мини|794x794пкс|Настройки программы IEC Test для организации обмена  между узлами стенда MCM-NODE1 и MCM-NODE2 по протоколу МЭК-60870-5-104 (серверная часть)|центр]]Соответственно, на другом узле ПО IEC Test запускается в режиме клиента с показанными ниже настройками:&lt;br /&gt;
&lt;br /&gt;
TCP/IP Link Role - Client &lt;br /&gt;
&lt;br /&gt;
IP Address - адрес сервера, находящегося во внутренней сети для информационного обмена  (в данном примере - 10.0.0.2). &lt;br /&gt;
&lt;br /&gt;
Далее устанавливается канал обмена последовательным нажатием кнопок &amp;quot;Build String&amp;quot; и &amp;quot;Open Channel&amp;quot; (индикатор &amp;quot;1 channel&amp;quot; должен стать темно-зеленым).&lt;br /&gt;
&lt;br /&gt;
Для начала непосредственно информационного взаимодействия следует послать с клиента на сервер специальную команду посредством нажатия кнопки &amp;quot;Start DT&amp;quot; (индикатор &amp;quot;1 channel&amp;quot; должен стать светло-зеленым как показано на рисунке ниже). С этого момента канал обмена установлен и активирован, а между экземплярами ПО IEC Test могут передаваться пакеты протокола МЭК-60870-5-104.&lt;br /&gt;
[[Файл:IEC Test - 3.png|центр|мини|791x791пкс|Настройки программы IEC Test для организации обмена  между узлами стенда MCM-NODE1 и MCM-NODE2 по протоколу МЭК-60870-5-104 (клиентская часть)]]Для создания трафика по протоколу МЭК-60870-5-104 между узлами &#039;&#039;&#039;MCM-NODE1&#039;&#039;&#039; и &#039;&#039;&#039;MCM-NODE2&#039;&#039;&#039; следует использовать специальный макрос, имитирующий последовательную передачу данных протокола МЭК-60870-5-104 между узлами. Для этого необходимо на любом из узлов в ПО IEC Test перейти во вкладку &amp;quot;870 Commander&amp;quot;, нажатием кнопки &amp;quot;Загрузить&amp;quot; загрузить макрос &amp;quot;ДУ по циклу 5 сек.rtm&amp;quot; и выполнить его нажатием кнопки &amp;quot;Выполнить&amp;quot;:&lt;br /&gt;
[[Файл:IEC Test - 4.png|альт=Выполнение макроса в ПО IEC Test для создания трафика по протоколу МЭК-60870-5-104|центр|мини|797x797пкс|Выполнение макроса в ПО IEC Test для создания трафика по протоколу МЭК-60870-5-104]]В случае правильно настроенных узлов стенда и экземпляров ПО IEC Test на принимающем узле во вкладке &amp;quot;870 Commander&amp;quot; в соответствующем окне можно будет увидеть информацию о принятых сообщениях, отправленных макросом с передающего узла, что свидетельствует о состоявшемся информационном обмене по протоколу МЭК-60870-5-104 между узлами.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Примечание:&#039;&#039;&#039; в случае, если система МКИ выполняет прослушивание на одном из интерфейсов, входящих во внутреннюю сеть информационного обмена, а также при правильном конфигурировании компонента Grafana, при подключении браузером по адресу сервера  &#039;&#039;&#039;MCM-SNIFFER&#039;&#039;&#039; (&#039;&#039;&#039;&amp;lt;nowiki&amp;gt;http://192.168.2.142&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;) в соответствующих дашбордах должна появиться информация о перехваченных пакетах протокола МЭК-60870-5-104, создающих описанный выше трафик.&lt;/div&gt;</summary>
		<author><name>Dima</name></author>
	</entry>
	<entry>
		<id>https://wiki.entcor.ru/index.php?title=%D0%A2%D0%BE%D0%BF%D0%B8%D0%BA%D0%B8_mqtt&amp;diff=392</id>
		<title>Топики mqtt</title>
		<link rel="alternate" type="text/html" href="https://wiki.entcor.ru/index.php?title=%D0%A2%D0%BE%D0%BF%D0%B8%D0%BA%D0%B8_mqtt&amp;diff=392"/>
		<updated>2025-02-24T12:52:00Z</updated>

		<summary type="html">&lt;p&gt;Dima: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!&lt;br /&gt;
!Топик&lt;br /&gt;
|-&lt;br /&gt;
|граф sd-wan&lt;br /&gt;
|sd-wan/data&lt;br /&gt;
|-&lt;br /&gt;
|сработка правил&lt;br /&gt;
|events/rules&lt;br /&gt;
|-&lt;br /&gt;
|внешние узлы&lt;br /&gt;
|mirror/externalNodes&lt;br /&gt;
|-&lt;br /&gt;
|очередь внешних узлов&lt;br /&gt;
|mirror/externalNodes/queue/current&lt;br /&gt;
|-&lt;br /&gt;
|потоки&lt;br /&gt;
|mirror/flows&lt;br /&gt;
|-&lt;br /&gt;
|очередь потоков&lt;br /&gt;
|mirror/flows/queue/current&lt;br /&gt;
|-&lt;br /&gt;
|измерения&lt;br /&gt;
|mirror/measures&lt;br /&gt;
|-&lt;br /&gt;
|очередь измерений&lt;br /&gt;
|mirror/measures/queue/current&lt;br /&gt;
|-&lt;br /&gt;
|узлы карты сети&lt;br /&gt;
|mirror/nodes&lt;br /&gt;
|-&lt;br /&gt;
|очередь узлов&lt;br /&gt;
|mirror/nodes/queue/current&lt;br /&gt;
|}&lt;br /&gt;
Ссылка на схемы: https://drive.google.com/file/d/1PqLCC33zCoV3FTqQ7OKWnMz1g54gLhbM/view?usp=sharing&lt;/div&gt;</summary>
		<author><name>Dima</name></author>
	</entry>
	<entry>
		<id>https://wiki.entcor.ru/index.php?title=%D0%9C%D0%9A%D0%98&amp;diff=386</id>
		<title>МКИ</title>
		<link rel="alternate" type="text/html" href="https://wiki.entcor.ru/index.php?title=%D0%9C%D0%9A%D0%98&amp;diff=386"/>
		<updated>2025-02-10T06:40:33Z</updated>

		<summary type="html">&lt;p&gt;Dima: /* Установка компонентов системы МКИ */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= &#039;&#039;&#039;Система мониторинга качества измерений (МКИ)&#039;&#039;&#039; =&lt;br /&gt;
&lt;br /&gt;
=== Схема тестового стенда ===&lt;br /&gt;
[[Файл:Стенд для МКИ (декабрь 2024).drawio.png|альт=Стенд для МКИ (декабрь 2024)|мини|978x978пкс|Стенд для МКИ (декабрь 2024)]]&lt;br /&gt;
&lt;br /&gt;
=== Подключение и настойка оборудования ===&lt;br /&gt;
Подключение компонентов стенда производится в соответствии со схемой подключения. При этом для корректного выполнения дальнейших инструкций подключение устройств к физическим портам и сетевые настройки интерфейсов должны быть выполнены  согласно табл. 1:&lt;br /&gt;
&lt;br /&gt;
==== Таблица 1 - Параметры сетевых настроек устройств стенда ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Хост&lt;br /&gt;
!Порт&lt;br /&gt;
!Интерфейс&lt;br /&gt;
!IP&lt;br /&gt;
!Подключен к &lt;br /&gt;
устройство/порт&lt;br /&gt;
!Описание&lt;br /&gt;
|-&lt;br /&gt;
|MCM-SNIFFER&lt;br /&gt;
|Eth1&lt;br /&gt;
|enp5s0&lt;br /&gt;
|192.168.2.15/24&lt;br /&gt;
|L2 Switch&lt;br /&gt;
|Интерфейс управления для Sniffer&lt;br /&gt;
|-&lt;br /&gt;
|MCM-SNIFFER&lt;br /&gt;
|Eth2&lt;br /&gt;
|enp6s0&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;-&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|MCM-NODE1 / Eth2&lt;br /&gt;
|Участвует в L2 Bridge&lt;br /&gt;
|-&lt;br /&gt;
|MCM-SNIFFER&lt;br /&gt;
|Eth3&lt;br /&gt;
|enp7s0&lt;br /&gt;
| -&lt;br /&gt;
|MCM-NODE2 / Eth2&lt;br /&gt;
|Участвует в L2 Bridge&lt;br /&gt;
|-&lt;br /&gt;
|MCM-SNIFFER&lt;br /&gt;
|Eth4&lt;br /&gt;
|enp8s0&lt;br /&gt;
| -&lt;br /&gt;
|ZLAN / Eth&lt;br /&gt;
|Участвует в L2 Bridge&lt;br /&gt;
|-&lt;br /&gt;
|MCM-NODE1&lt;br /&gt;
|Eth1&lt;br /&gt;
|EXTERNAL&lt;br /&gt;
|192.168.2.156/24&lt;br /&gt;
|L2 Switch&lt;br /&gt;
|Интерфейс управления для Node1&lt;br /&gt;
|-&lt;br /&gt;
|MCM-NODE1&lt;br /&gt;
|Eth2&lt;br /&gt;
|INTERNAL&lt;br /&gt;
|10.0.0.1/24&lt;br /&gt;
|MCM-SNIFFER / Eth2&lt;br /&gt;
|Интерфейс обмена данными для Node1&lt;br /&gt;
|-&lt;br /&gt;
|MCM-NODE2&lt;br /&gt;
|Eth1&lt;br /&gt;
|EXTERNAL&lt;br /&gt;
|192.168.2.195/24&lt;br /&gt;
|L2 Switch&lt;br /&gt;
|Интерфейс управления для Node2&lt;br /&gt;
|-&lt;br /&gt;
|MCM-NODE2&lt;br /&gt;
|Eth2&lt;br /&gt;
|INTERNAL&lt;br /&gt;
|10.0.0.2/24&lt;br /&gt;
|MCM-SNIFFER / Eth3&lt;br /&gt;
|Интерфейс обмена данными для Node2&lt;br /&gt;
|-&lt;br /&gt;
|ZLAN&lt;br /&gt;
|Eth&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
|MCM-SNIFFER / Eth4&lt;br /&gt;
|Интерфейс обмена данными для ZLAN&lt;br /&gt;
|-&lt;br /&gt;
|ZLAN&lt;br /&gt;
|RS-485 #1&lt;br /&gt;
|ZLDEV0001&lt;br /&gt;
|10.0.0.241/24&lt;br /&gt;
|&lt;br /&gt;
|Подключение датчика с MODBUS-адресом 5&lt;br /&gt;
|-&lt;br /&gt;
|ZLAN&lt;br /&gt;
|RS-485 #2&lt;br /&gt;
|ZLDEV0002&lt;br /&gt;
|10.0.0.242/24&lt;br /&gt;
|&lt;br /&gt;
|Подключение датчика с MODBUS-адресом 6&lt;br /&gt;
|-&lt;br /&gt;
|ZLAN&lt;br /&gt;
|RS-485 #3&lt;br /&gt;
|ZLDEV0003&lt;br /&gt;
|10.0.0.243/24&lt;br /&gt;
|&lt;br /&gt;
|Подключение датчика с MODBUS-адресом 7&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Развертывание системы ===&lt;br /&gt;
&lt;br /&gt;
==== Установка базовых систем ====&lt;br /&gt;
Установка ОС Windows на компьютерах &#039;&#039;&#039;MCM-NODE1&#039;&#039;&#039; и &#039;&#039;&#039;MCM-NODE2&#039;&#039;&#039; производится обычным образом, при этом  соответствующим сетевым интерфейсам должны быть присвоены адреса согласно данным табл. 1, также для совместимости должны быть указаны следующие параметры настройки системы:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Таблица 2 - Параметры настройки узлов MCM-NODE1 и MCM-NODE2&lt;br /&gt;
!Параметр&lt;br /&gt;
!Значение&lt;br /&gt;
|-&lt;br /&gt;
|Имя компьютера&lt;br /&gt;
|MCM-NODE1/MCM-NODE2&lt;br /&gt;
|-&lt;br /&gt;
|Имя пользователя c правами локального администратора&lt;br /&gt;
|entcor&lt;br /&gt;
|-&lt;br /&gt;
|Пароль&lt;br /&gt;
|1&lt;br /&gt;
|}&lt;br /&gt;
Установка базовой системы Ubuntu 22.0x Server на компьютер &#039;&#039;&#039;MCM-SNIFFER&#039;&#039;&#039; производится обычным образом в режиме инсталляции по умолчанию, при этом при выборе параметров установки необходимо включить установку сервера OpenSSH, а также для совместимости следует  указать следующие значения прочих параметров:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Таблица 3 - Параметры настройки узла MCM-SNIFFER&lt;br /&gt;
!Параметр&lt;br /&gt;
!Значение&lt;br /&gt;
|-&lt;br /&gt;
|Имя компьютера&lt;br /&gt;
|MCM-SNIFFER&lt;br /&gt;
|-&lt;br /&gt;
|Имя пользователя c правами root                       &lt;br /&gt;
|entcor&lt;br /&gt;
|-&lt;br /&gt;
|Пароль&lt;br /&gt;
|ng3-dcc20&lt;br /&gt;
|}&lt;br /&gt;
После установки системы необходимо установить обновления:&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt full-upgrade&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
а также проверить доступ к серверу по SSH с компьютера администратора:&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
ssh entcor@192.168.2.23 (текущий адрес сервера MCM-SNIFFER)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Установка сертификата Entcor ====&lt;br /&gt;
С компьютера администратора следует скопировать файл сертификата &#039;&#039;&#039;entcor.crt&#039;&#039;&#039; на узел &#039;&#039;&#039;MCM-SNIFFER&#039;&#039;&#039; по следующему пути (необходимо использовать фактический IP-адрес сервера MCM-SNIFFER):&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
scp entcor.crt entcor@192.168.2.23:/home/entcor&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Затем на компьютере &#039;&#039;&#039;MCM-SNIFFER&#039;&#039;&#039; следует перенести сертификат в необходимый каталог и выполнить его обновление:&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
sudo mv entcor.crt /usr/local/share/ca-certificates&lt;br /&gt;
sudo update-ca-certificates &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&#039;&#039;&#039;Примечание:&#039;&#039;&#039; после обновления сертификатов необходимо выполнить перезагрузку компьютера &#039;&#039;&#039;MCM-SNIFFER&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==== Установка Docker ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
# Add Docker&#039;s official GPG key:&lt;br /&gt;
&lt;br /&gt;
sudo apt-get update&lt;br /&gt;
sudo apt-get install ca-certificates curl&lt;br /&gt;
sudo install -m 0755 -d /etc/apt/keyrings&lt;br /&gt;
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc&lt;br /&gt;
sudo chmod a+r /etc/apt/keyrings/docker.asc&lt;br /&gt;
&lt;br /&gt;
# Add the repository to Apt sources:&lt;br /&gt;
&lt;br /&gt;
echo \&lt;br /&gt;
&amp;quot;deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \&lt;br /&gt;
$(. /etc/os-release &amp;amp;&amp;amp; echo &amp;quot;$VERSION_CODENAME&amp;quot;) stable&amp;quot; | \&lt;br /&gt;
sudo tee /etc/apt/sources.list.d/docker.list &amp;gt; /dev/null&lt;br /&gt;
&lt;br /&gt;
sudo apt-get update&lt;br /&gt;
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Ссылка на руководство: https://docs.docker.com/engine/install/ubuntu/#install-using-the-repository&lt;br /&gt;
&lt;br /&gt;
==== Подключение интерфейсов к L2 Bridge для Docker ====&lt;br /&gt;
Предварительно следует запустить постоянный пинг (с параметром &#039;&#039;&#039;-t&#039;&#039;&#039;) с &#039;&#039;&#039;MCM-NODE1&#039;&#039;&#039; (10.0.0.1) на &#039;&#039;&#039;MCM-NODE2&#039;&#039;&#039; (10.0.0.2) и наоборот, убедиться в том, что узлы недоступны друг для друга.&lt;br /&gt;
&lt;br /&gt;
Далее необходимо выполнить подключение внутренних интерфейсов обмена данными к мосту &#039;&#039;&#039;docker0&#039;&#039;&#039;:&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
sudo ip link set dev enp6s0 master docker0&lt;br /&gt;
sudo ip link set dev enp7s0 master docker0&lt;br /&gt;
sudo ip link set dev enp8s0 master docker0&lt;br /&gt;
sudo ip link set dev docker0 up&lt;br /&gt;
ip link show&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Ссылка на руководство: https://chrisjhart.com/Bridge-Network-Interfaces-on-Ubuntu-22.04/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Для сохранения настроек моста &#039;&#039;&#039;docker0&#039;&#039;&#039; после перезагрузки сервера необходимо в каталоге &#039;&#039;&#039;/etc/netplan&#039;&#039;&#039; создать файл с расширением .yaml (например, &#039;&#039;&#039;01-network.yaml&#039;&#039;&#039;) со следующим содержимым:&amp;lt;syntaxhighlight lang=&amp;quot;yaml&amp;quot;&amp;gt;&lt;br /&gt;
network:&lt;br /&gt;
    version: 2&lt;br /&gt;
    ethernets:&lt;br /&gt;
        enp5s0:&lt;br /&gt;
            dhcp4: false&lt;br /&gt;
            addresses: &lt;br /&gt;
                - 192.168.2.15/24&lt;br /&gt;
            routes:&lt;br /&gt;
              - to: default&lt;br /&gt;
                via: 192.168.2.254&lt;br /&gt;
            nameservers: &lt;br /&gt;
                addresses: [192.168.2.60, 176.114.16.33]&lt;br /&gt;
        enp6s0:&lt;br /&gt;
            dhcp4: false&lt;br /&gt;
        enp7s0:&lt;br /&gt;
            dhcp4: false&lt;br /&gt;
        enp8s0:&lt;br /&gt;
            dhcp4: false&lt;br /&gt;
    bridges:&lt;br /&gt;
        docker0:&lt;br /&gt;
            interfaces: [enp6s0, enp7s0, enp8s0]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&#039;&#039;&#039;Примечания:&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
# Для интерфейса &#039;&#039;&#039;enp5s0&#039;&#039;&#039; вместо 192.168.2.15/24 следует указать нужный статический адрес сервера, также при необходимости следует указать фактически используемые адреса шлюза и DNS (в &#039;&#039;&#039;via&#039;&#039;&#039; и &#039;&#039;&#039;nameservers&#039;&#039;&#039; соответственно).&lt;br /&gt;
# Для удобства проще скопировать готовый файл с компьютера администратора и положить его в &#039;&#039;&#039;/etc/netplan&#039;&#039;&#039; .&lt;br /&gt;
# Если нет необходимости сразу задействовать интерфейсы &#039;&#039;&#039;enp6s0/enp7s0/enp8s0&#039;&#039;&#039; в мосте &#039;&#039;&#039;docker0&#039;&#039;&#039;, то можно предыдущие команды &#039;&#039;&#039;ip link set dev&#039;&#039;&#039; не выполнять, а вместо этого отредактировать/скопировать файл в &#039;&#039;&#039;/etc/netplan&#039;&#039;&#039;.&lt;br /&gt;
# В существующем в &#039;&#039;&#039;/etc/netplan&#039;&#039;&#039; файле конфигурации по умолчанию &#039;&#039;&#039;50-cloud-init.yaml&#039;&#039;&#039; следует для интерфейса &#039;&#039;&#039;enp5s0&#039;&#039;&#039; установить параметр &#039;&#039;&#039;dchp4: false&#039;&#039;&#039;, иначе у интерфейса будет 2 адреса - статический из настроек в &#039;&#039;&#039;01-network.yaml&#039;&#039;&#039; и динамический, который будет дополнительно прилетать по DHCP и создавать путаницу.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
После выполнения настройки интерфейсов следует проверить, что пинг с MCM-NODE1 (10.0.0.1) на MCM-NODE2 (10.0.0.2) в обе стороны проходит успешно, т.е. узлы общаются между собой напрямую через мост &#039;&#039;&#039;docker0&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==== Установка компонентов системы МКИ ====&lt;br /&gt;
Получение последней версии инсталляционного пакета производится из  Git-репозитория &#039;&#039;&#039;e-deploy&#039;&#039;&#039;, находящегося по адресу  &#039;&#039;&#039;&amp;lt;nowiki&amp;gt;http://192.168.2.61&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;, (нужно будет ввести соответствующие логин-пароль для доступа к репозиторию, а также выполнить переключение на ветку &#039;&#039;&#039;develop&#039;&#039;&#039;): &amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
git clone http://192.168.2.61/e-node/e-deploy.git&lt;br /&gt;
git switch develop&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Далее следует авторизоваться под нужной учетной записью в Docker-репозитории Harbor:&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
docker login registry.entcor&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;после чего нужно перейти в каталог &#039;&#039;&#039;e-deploy&#039;&#039;&#039; (в том каталоге, где выполнялся git clone) и выполнить следующую команду:&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
./enode.sh init&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Далее в том же каталоге следует создать/отредактировать файла &#039;&#039;&#039;.env&#039;&#039;&#039;, в котором следует установить следующие параметры:&lt;br /&gt;
&lt;br /&gt;
MONITOR_DATA_IF = &amp;lt;имя интерфейса на узле &#039;&#039;&#039;MCM-SNIFFER&#039;&#039;&#039;,  на котором выполняется прослушка, например, enp7s0&amp;gt; &lt;br /&gt;
&lt;br /&gt;
MODE = enode &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Примечание:&#039;&#039;&#039; вообще-то для работы МКИ параметр MODE должен иметь  значение asutp, но работает пока только вот так. &lt;br /&gt;
&lt;br /&gt;
Далее требуется выполнить загрузку и обновление контейнеров посредством запуска скрипта &#039;&#039;&#039;enode&#039;&#039;&#039; с параметром update:&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
enode analytic update&lt;br /&gt;
enode common update&lt;br /&gt;
enode asutp update&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Запуск компонентов системы МКИ ====&lt;br /&gt;
После установки компонентов МКИ можно выполнить их запуск следующей командой: &amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
enode &amp;lt;имя стека&amp;gt; start&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&#039;&#039;&#039;Примечание:&#039;&#039;&#039; названия нужных стеков можно посмотреть в каталоге &#039;&#039;&#039;stacks&#039;&#039;&#039;  в &#039;&#039;&#039;e-deploy&#039;&#039;&#039; (имена стеков соответствуют именам подкаталогов). Как минимум должны быть запущены следующие стеки:&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
enode analytic start&lt;br /&gt;
enode common start&lt;br /&gt;
enode asutp start&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&#039;&#039;&#039;Примечание:&#039;&#039;&#039;  стек &#039;&#039;&#039;analytic&#039;&#039;&#039; рекомендуется запускать перед стеком &#039;&#039;&#039;common&#039;&#039;&#039; из-за каких-то особенностей функционирования:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Проверка запуска сервисов производится обычным образом с помощью команды:&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
docker ps&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Проверка информационного обмена по протоколу МЭК-60870-5-104 ====&lt;br /&gt;
Проверка информационного обмена по протоколу МЭК-60870-5-104 производится между узлами стенда &#039;&#039;&#039;MCM-NODE1&#039;&#039;&#039; и &#039;&#039;&#039;MCM-NODE2&#039;&#039;&#039; посредством программного обеспечения  IEC Test, которое эмулирует передачу пакетов протокола МЭК-60870-5-104 поверх соединения Ethernet. &lt;br /&gt;
&lt;br /&gt;
Для проверки работы протокола МЭК-60870-5-104 во внутренней сети обмена на одном из узлов ПО IEC Test запускается в режиме сервера с показанными ниже настройками: &lt;br /&gt;
&lt;br /&gt;
TCP/IP Link Role - Server &lt;br /&gt;
&lt;br /&gt;
IP Address - адрес внутреннего интерфейса для информационного обмена (в данном примере - 10.0.0.2) &lt;br /&gt;
&lt;br /&gt;
Далее устанавливается канал обмена последовательным нажатием кнопок &amp;quot;Build String&amp;quot; и &amp;quot;Open Channel&amp;quot; (индикатор &amp;quot;1 channel&amp;quot; должен стать темно-зеленым). &lt;br /&gt;
[[Файл:IEC Test - 2.png|мини|794x794пкс|Настройки программы IEC Test для организации обмена  между узлами стенда MCM-NODE1 и MCM-NODE2 по протоколу МЭК-60870-5-104 (серверная часть)|центр]]Соответственно, на другом узле ПО IEC Test запускается в режиме клиента с показанными ниже настройками:&lt;br /&gt;
&lt;br /&gt;
TCP/IP Link Role - Client &lt;br /&gt;
&lt;br /&gt;
IP Address - адрес сервера, находящегося во внутренней сети для информационного обмена  (в данном примере - 10.0.0.2). &lt;br /&gt;
&lt;br /&gt;
Далее устанавливается канал обмена последовательным нажатием кнопок &amp;quot;Build String&amp;quot; и &amp;quot;Open Channel&amp;quot; (индикатор &amp;quot;1 channel&amp;quot; должен стать темно-зеленым).&lt;br /&gt;
&lt;br /&gt;
Для начала непосредственно информационного взаимодействия следует послать с клиента на сервер специальную команду посредством нажатия кнопки &amp;quot;Start DT&amp;quot; (индикатор &amp;quot;1 channel&amp;quot; должен стать светло-зеленым как показано на рисунке ниже). С этого момента канал обмена установлен и активирован, а между экземплярами ПО IEC Test могут передаваться пакеты протокола МЭК-60870-5-104.&lt;br /&gt;
[[Файл:IEC Test - 3.png|центр|мини|791x791пкс|Настройки программы IEC Test для организации обмена  между узлами стенда MCM-NODE1 и MCM-NODE2 по протоколу МЭК-60870-5-104 (клиентская часть)]]Для создания трафика по протоколу МЭК-60870-5-104 между узлами &#039;&#039;&#039;MCM-NODE1&#039;&#039;&#039; и &#039;&#039;&#039;MCM-NODE2&#039;&#039;&#039; следует использовать специальный макрос, имитирующий последовательную передачу данных протокола МЭК-60870-5-104 между узлами. Для этого необходимо на любом из узлов в ПО IEC Test перейти во вкладку &amp;quot;870 Commander&amp;quot;, нажатием кнопки &amp;quot;Загрузить&amp;quot; загрузить макрос &amp;quot;ДУ по циклу 5 сек.rtm&amp;quot; и выполнить его нажатием кнопки &amp;quot;Выполнить&amp;quot;:&lt;br /&gt;
[[Файл:IEC Test - 4.png|альт=Выполнение макроса в ПО IEC Test для создания трафика по протоколу МЭК-60870-5-104|центр|мини|797x797пкс|Выполнение макроса в ПО IEC Test для создания трафика по протоколу МЭК-60870-5-104]]В случае правильно настроенных узлов стенда и экземпляров ПО IEC Test на принимающем узле во вкладке &amp;quot;870 Commander&amp;quot; в соответствующем окне можно будет увидеть информацию о принятых сообщениях, отправленных макросом с передающего узла, что свидетельствует о состоявшемся информационном обмене по протоколу МЭК-60870-5-104 между узлами.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Примечание:&#039;&#039;&#039; в случае, если система МКИ выполняет прослушивание на одном из интерфейсов, входящих во внутреннюю сеть информационного обмена, а также при правильном конфигурировании компонента Grafana, при подключении браузером по адресу сервера  &#039;&#039;&#039;MCM-SNIFFER&#039;&#039;&#039; (&#039;&#039;&#039;&amp;lt;nowiki&amp;gt;http://192.168.2.142&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;) в соответствующих дашбордах должна появиться информация о перехваченных пакетах протокола МЭК-60870-5-104, создающих описанный выше трафик.&lt;/div&gt;</summary>
		<author><name>Dima</name></author>
	</entry>
	<entry>
		<id>https://wiki.entcor.ru/index.php?title=%D0%9C%D0%9A%D0%98&amp;diff=385</id>
		<title>МКИ</title>
		<link rel="alternate" type="text/html" href="https://wiki.entcor.ru/index.php?title=%D0%9C%D0%9A%D0%98&amp;diff=385"/>
		<updated>2025-02-10T06:13:52Z</updated>

		<summary type="html">&lt;p&gt;Dima: /* Установка компонентов системы МКИ */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= &#039;&#039;&#039;Система мониторинга качества измерений (МКИ)&#039;&#039;&#039; =&lt;br /&gt;
&lt;br /&gt;
=== Схема тестового стенда ===&lt;br /&gt;
[[Файл:Стенд для МКИ (декабрь 2024).drawio.png|альт=Стенд для МКИ (декабрь 2024)|мини|978x978пкс|Стенд для МКИ (декабрь 2024)]]&lt;br /&gt;
&lt;br /&gt;
=== Подключение и настойка оборудования ===&lt;br /&gt;
Подключение компонентов стенда производится в соответствии со схемой подключения. При этом для корректного выполнения дальнейших инструкций подключение устройств к физическим портам и сетевые настройки интерфейсов должны быть выполнены  согласно табл. 1:&lt;br /&gt;
&lt;br /&gt;
==== Таблица 1 - Параметры сетевых настроек устройств стенда ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Хост&lt;br /&gt;
!Порт&lt;br /&gt;
!Интерфейс&lt;br /&gt;
!IP&lt;br /&gt;
!Подключен к &lt;br /&gt;
устройство/порт&lt;br /&gt;
!Описание&lt;br /&gt;
|-&lt;br /&gt;
|MCM-SNIFFER&lt;br /&gt;
|Eth1&lt;br /&gt;
|enp5s0&lt;br /&gt;
|192.168.2.15/24&lt;br /&gt;
|L2 Switch&lt;br /&gt;
|Интерфейс управления для Sniffer&lt;br /&gt;
|-&lt;br /&gt;
|MCM-SNIFFER&lt;br /&gt;
|Eth2&lt;br /&gt;
|enp6s0&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;-&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|MCM-NODE1 / Eth2&lt;br /&gt;
|Участвует в L2 Bridge&lt;br /&gt;
|-&lt;br /&gt;
|MCM-SNIFFER&lt;br /&gt;
|Eth3&lt;br /&gt;
|enp7s0&lt;br /&gt;
| -&lt;br /&gt;
|MCM-NODE2 / Eth2&lt;br /&gt;
|Участвует в L2 Bridge&lt;br /&gt;
|-&lt;br /&gt;
|MCM-SNIFFER&lt;br /&gt;
|Eth4&lt;br /&gt;
|enp8s0&lt;br /&gt;
| -&lt;br /&gt;
|ZLAN / Eth&lt;br /&gt;
|Участвует в L2 Bridge&lt;br /&gt;
|-&lt;br /&gt;
|MCM-NODE1&lt;br /&gt;
|Eth1&lt;br /&gt;
|EXTERNAL&lt;br /&gt;
|192.168.2.156/24&lt;br /&gt;
|L2 Switch&lt;br /&gt;
|Интерфейс управления для Node1&lt;br /&gt;
|-&lt;br /&gt;
|MCM-NODE1&lt;br /&gt;
|Eth2&lt;br /&gt;
|INTERNAL&lt;br /&gt;
|10.0.0.1/24&lt;br /&gt;
|MCM-SNIFFER / Eth2&lt;br /&gt;
|Интерфейс обмена данными для Node1&lt;br /&gt;
|-&lt;br /&gt;
|MCM-NODE2&lt;br /&gt;
|Eth1&lt;br /&gt;
|EXTERNAL&lt;br /&gt;
|192.168.2.195/24&lt;br /&gt;
|L2 Switch&lt;br /&gt;
|Интерфейс управления для Node2&lt;br /&gt;
|-&lt;br /&gt;
|MCM-NODE2&lt;br /&gt;
|Eth2&lt;br /&gt;
|INTERNAL&lt;br /&gt;
|10.0.0.2/24&lt;br /&gt;
|MCM-SNIFFER / Eth3&lt;br /&gt;
|Интерфейс обмена данными для Node2&lt;br /&gt;
|-&lt;br /&gt;
|ZLAN&lt;br /&gt;
|Eth&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
|MCM-SNIFFER / Eth4&lt;br /&gt;
|Интерфейс обмена данными для ZLAN&lt;br /&gt;
|-&lt;br /&gt;
|ZLAN&lt;br /&gt;
|RS-485 #1&lt;br /&gt;
|ZLDEV0001&lt;br /&gt;
|10.0.0.241/24&lt;br /&gt;
|&lt;br /&gt;
|Подключение датчика с MODBUS-адресом 5&lt;br /&gt;
|-&lt;br /&gt;
|ZLAN&lt;br /&gt;
|RS-485 #2&lt;br /&gt;
|ZLDEV0002&lt;br /&gt;
|10.0.0.242/24&lt;br /&gt;
|&lt;br /&gt;
|Подключение датчика с MODBUS-адресом 6&lt;br /&gt;
|-&lt;br /&gt;
|ZLAN&lt;br /&gt;
|RS-485 #3&lt;br /&gt;
|ZLDEV0003&lt;br /&gt;
|10.0.0.243/24&lt;br /&gt;
|&lt;br /&gt;
|Подключение датчика с MODBUS-адресом 7&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Развертывание системы ===&lt;br /&gt;
&lt;br /&gt;
==== Установка базовых систем ====&lt;br /&gt;
Установка ОС Windows на компьютерах &#039;&#039;&#039;MCM-NODE1&#039;&#039;&#039; и &#039;&#039;&#039;MCM-NODE2&#039;&#039;&#039; производится обычным образом, при этом  соответствующим сетевым интерфейсам должны быть присвоены адреса согласно данным табл. 1, также для совместимости должны быть указаны следующие параметры настройки системы:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Таблица 2 - Параметры настройки узлов MCM-NODE1 и MCM-NODE2&lt;br /&gt;
!Параметр&lt;br /&gt;
!Значение&lt;br /&gt;
|-&lt;br /&gt;
|Имя компьютера&lt;br /&gt;
|MCM-NODE1/MCM-NODE2&lt;br /&gt;
|-&lt;br /&gt;
|Имя пользователя c правами локального администратора&lt;br /&gt;
|entcor&lt;br /&gt;
|-&lt;br /&gt;
|Пароль&lt;br /&gt;
|1&lt;br /&gt;
|}&lt;br /&gt;
Установка базовой системы Ubuntu 22.0x Server на компьютер &#039;&#039;&#039;MCM-SNIFFER&#039;&#039;&#039; производится обычным образом в режиме инсталляции по умолчанию, при этом при выборе параметров установки необходимо включить установку сервера OpenSSH, а также для совместимости следует  указать следующие значения прочих параметров:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Таблица 3 - Параметры настройки узла MCM-SNIFFER&lt;br /&gt;
!Параметр&lt;br /&gt;
!Значение&lt;br /&gt;
|-&lt;br /&gt;
|Имя компьютера&lt;br /&gt;
|MCM-SNIFFER&lt;br /&gt;
|-&lt;br /&gt;
|Имя пользователя c правами root                       &lt;br /&gt;
|entcor&lt;br /&gt;
|-&lt;br /&gt;
|Пароль&lt;br /&gt;
|ng3-dcc20&lt;br /&gt;
|}&lt;br /&gt;
После установки системы необходимо установить обновления:&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt full-upgrade&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
а также проверить доступ к серверу по SSH с компьютера администратора:&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
ssh entcor@192.168.2.23 (текущий адрес сервера MCM-SNIFFER)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Установка сертификата Entcor ====&lt;br /&gt;
С компьютера администратора следует скопировать файл сертификата &#039;&#039;&#039;entcor.crt&#039;&#039;&#039; на узел &#039;&#039;&#039;MCM-SNIFFER&#039;&#039;&#039; по следующему пути (необходимо использовать фактический IP-адрес сервера MCM-SNIFFER):&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
scp entcor.crt entcor@192.168.2.23:/home/entcor&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Затем на компьютере &#039;&#039;&#039;MCM-SNIFFER&#039;&#039;&#039; следует перенести сертификат в необходимый каталог и выполнить его обновление:&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
sudo mv entcor.crt /usr/local/share/ca-certificates&lt;br /&gt;
sudo update-ca-certificates &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&#039;&#039;&#039;Примечание:&#039;&#039;&#039; после обновления сертификатов необходимо выполнить перезагрузку компьютера &#039;&#039;&#039;MCM-SNIFFER&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==== Установка Docker ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
# Add Docker&#039;s official GPG key:&lt;br /&gt;
&lt;br /&gt;
sudo apt-get update&lt;br /&gt;
sudo apt-get install ca-certificates curl&lt;br /&gt;
sudo install -m 0755 -d /etc/apt/keyrings&lt;br /&gt;
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc&lt;br /&gt;
sudo chmod a+r /etc/apt/keyrings/docker.asc&lt;br /&gt;
&lt;br /&gt;
# Add the repository to Apt sources:&lt;br /&gt;
&lt;br /&gt;
echo \&lt;br /&gt;
&amp;quot;deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \&lt;br /&gt;
$(. /etc/os-release &amp;amp;&amp;amp; echo &amp;quot;$VERSION_CODENAME&amp;quot;) stable&amp;quot; | \&lt;br /&gt;
sudo tee /etc/apt/sources.list.d/docker.list &amp;gt; /dev/null&lt;br /&gt;
&lt;br /&gt;
sudo apt-get update&lt;br /&gt;
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Ссылка на руководство: https://docs.docker.com/engine/install/ubuntu/#install-using-the-repository&lt;br /&gt;
&lt;br /&gt;
==== Подключение интерфейсов к L2 Bridge для Docker ====&lt;br /&gt;
Предварительно следует запустить постоянный пинг (с параметром &#039;&#039;&#039;-t&#039;&#039;&#039;) с &#039;&#039;&#039;MCM-NODE1&#039;&#039;&#039; (10.0.0.1) на &#039;&#039;&#039;MCM-NODE2&#039;&#039;&#039; (10.0.0.2) и наоборот, убедиться в том, что узлы недоступны друг для друга.&lt;br /&gt;
&lt;br /&gt;
Далее необходимо выполнить подключение внутренних интерфейсов обмена данными к мосту &#039;&#039;&#039;docker0&#039;&#039;&#039;:&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
sudo ip link set dev enp6s0 master docker0&lt;br /&gt;
sudo ip link set dev enp7s0 master docker0&lt;br /&gt;
sudo ip link set dev enp8s0 master docker0&lt;br /&gt;
sudo ip link set dev docker0 up&lt;br /&gt;
ip link show&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Ссылка на руководство: https://chrisjhart.com/Bridge-Network-Interfaces-on-Ubuntu-22.04/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Для сохранения настроек моста &#039;&#039;&#039;docker0&#039;&#039;&#039; после перезагрузки сервера необходимо в каталоге &#039;&#039;&#039;/etc/netplan&#039;&#039;&#039; создать файл с расширением .yaml (например, &#039;&#039;&#039;01-network.yaml&#039;&#039;&#039;) со следующим содержимым:&amp;lt;syntaxhighlight lang=&amp;quot;yaml&amp;quot;&amp;gt;&lt;br /&gt;
network:&lt;br /&gt;
    version: 2&lt;br /&gt;
    ethernets:&lt;br /&gt;
        enp5s0:&lt;br /&gt;
            dhcp4: false&lt;br /&gt;
            addresses: &lt;br /&gt;
                - 192.168.2.15/24&lt;br /&gt;
            routes:&lt;br /&gt;
              - to: default&lt;br /&gt;
                via: 192.168.2.254&lt;br /&gt;
            nameservers: &lt;br /&gt;
                addresses: [192.168.2.60, 176.114.16.33]&lt;br /&gt;
        enp6s0:&lt;br /&gt;
            dhcp4: false&lt;br /&gt;
        enp7s0:&lt;br /&gt;
            dhcp4: false&lt;br /&gt;
        enp8s0:&lt;br /&gt;
            dhcp4: false&lt;br /&gt;
    bridges:&lt;br /&gt;
        docker0:&lt;br /&gt;
            interfaces: [enp6s0, enp7s0, enp8s0]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&#039;&#039;&#039;Примечания:&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
# Для интерфейса &#039;&#039;&#039;enp5s0&#039;&#039;&#039; вместо 192.168.2.15/24 следует указать нужный статический адрес сервера, также при необходимости следует указать фактически используемые адреса шлюза и DNS (в &#039;&#039;&#039;via&#039;&#039;&#039; и &#039;&#039;&#039;nameservers&#039;&#039;&#039; соответственно).&lt;br /&gt;
# Для удобства проще скопировать готовый файл с компьютера администратора и положить его в &#039;&#039;&#039;/etc/netplan&#039;&#039;&#039; .&lt;br /&gt;
# Если нет необходимости сразу задействовать интерфейсы &#039;&#039;&#039;enp6s0/enp7s0/enp8s0&#039;&#039;&#039; в мосте &#039;&#039;&#039;docker0&#039;&#039;&#039;, то можно предыдущие команды &#039;&#039;&#039;ip link set dev&#039;&#039;&#039; не выполнять, а вместо этого отредактировать/скопировать файл в &#039;&#039;&#039;/etc/netplan&#039;&#039;&#039;.&lt;br /&gt;
# В существующем в &#039;&#039;&#039;/etc/netplan&#039;&#039;&#039; файле конфигурации по умолчанию &#039;&#039;&#039;50-cloud-init.yaml&#039;&#039;&#039; следует для интерфейса &#039;&#039;&#039;enp5s0&#039;&#039;&#039; установить параметр &#039;&#039;&#039;dchp4: false&#039;&#039;&#039;, иначе у интерфейса будет 2 адреса - статический из настроек в &#039;&#039;&#039;01-network.yaml&#039;&#039;&#039; и динамический, который будет дополнительно прилетать по DHCP и создавать путаницу.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
После выполнения настройки интерфейсов следует проверить, что пинг с MCM-NODE1 (10.0.0.1) на MCM-NODE2 (10.0.0.2) в обе стороны проходит успешно, т.е. узлы общаются между собой напрямую через мост &#039;&#039;&#039;docker0&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==== Установка компонентов системы МКИ ====&lt;br /&gt;
Получение последней версии инсталляционного пакета производится из  Git-репозитория &#039;&#039;&#039;e-deploy&#039;&#039;&#039;, находящегося по адресу  &#039;&#039;&#039;&amp;lt;nowiki&amp;gt;http://192.168.2.61&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;, (нужно будет ввести соответствующие логин-пароль для доступа к репозиторию, а также выполнить переключение на ветку &#039;&#039;&#039;develop&#039;&#039;&#039;): &amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
git clone http://192.168.2.61/e-node/e-deploy.git&lt;br /&gt;
git switch develop&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Далее следует авторизоваться под нужной учетной записью в Docker-репозитории Harbor:&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
docker login registry.entcor&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;после чего нужно перейти в каталог &#039;&#039;&#039;e-deploy&#039;&#039;&#039; (в том каталоге, где выполнялся git clone) и выполнить развертывание контейнеров запуском скрипта &#039;&#039;&#039;install.sh&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Примечание:&#039;&#039;&#039; перед запуском необходимо установить для скрипта &#039;&#039;&#039;install.sh&#039;&#039;&#039; права на выполнение командой chmod:&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
chmod +x install.sh&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Запуск компонентов системы МКИ ====&lt;br /&gt;
После установки компонентов МКИ можно выполнить их запуск посредством скрипта &#039;&#039;&#039;enode.sh&#039;&#039;&#039;, расположенного в каталоге    &#039;&#039;&#039;/opt/e-node/deploy&#039;&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Примечание:&#039;&#039;&#039; для нормальной работы стека &#039;&#039;&#039;common&#039;&#039;&#039; необходимо предварительно авторизоваться под нужной учетной записью в docker-репозитории Harbor:&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
docker login registry.entcor&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Конфигурирование выполняется посредством редактирования файла &#039;&#039;&#039;.env&#039;&#039;&#039;, в котором следует установить следующие параметры: &lt;br /&gt;
&lt;br /&gt;
MONITOR_DATA_IF = &amp;lt;имя интерфейса на узле &#039;&#039;&#039;MCM-SNIFFER&#039;&#039;&#039;,  на котором выполняется прослушка, например, eno1&amp;gt; &lt;br /&gt;
&lt;br /&gt;
MODE = enode &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Примечание:&#039;&#039;&#039; вообще-то для работы МКИ параметр MODE должен иметь  значение asutp, но работает пока только вот так. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Непосредственно запуск компонентов системы МКИ осуществляется из каталога &#039;&#039;&#039;/opt/e-node/deploy&#039;&#039;&#039; следующей командой: &amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
enode &amp;lt;имя стека&amp;gt; start&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&#039;&#039;&#039;Примечание:&#039;&#039;&#039; названия нужных стеков можно посмотреть в каталоге stacks (имена стеков соответствуют именам подкаталогов). Как минимум должны быть запущены следующие стеки:&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
enode common start&lt;br /&gt;
enode asutp start&lt;br /&gt;
enode ha-server start&lt;br /&gt;
enode analytic start&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Проверка запуска сервисов производится обычным образом с помощью команды:&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
docker ps&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Проверка информационного обмена по протоколу МЭК-60870-5-104 ====&lt;br /&gt;
Проверка информационного обмена по протоколу МЭК-60870-5-104 производится между узлами стенда &#039;&#039;&#039;MCM-NODE1&#039;&#039;&#039; и &#039;&#039;&#039;MCM-NODE2&#039;&#039;&#039; посредством программного обеспечения  IEC Test, которое эмулирует передачу пакетов протокола МЭК-60870-5-104 поверх соединения Ethernet. &lt;br /&gt;
&lt;br /&gt;
Для проверки работы протокола МЭК-60870-5-104 во внутренней сети обмена на одном из узлов ПО IEC Test запускается в режиме сервера с показанными ниже настройками: &lt;br /&gt;
&lt;br /&gt;
TCP/IP Link Role - Server &lt;br /&gt;
&lt;br /&gt;
IP Address - адрес внутреннего интерфейса для информационного обмена (в данном примере - 10.0.0.2) &lt;br /&gt;
&lt;br /&gt;
Далее устанавливается канал обмена последовательным нажатием кнопок &amp;quot;Build String&amp;quot; и &amp;quot;Open Channel&amp;quot; (индикатор &amp;quot;1 channel&amp;quot; должен стать темно-зеленым). &lt;br /&gt;
[[Файл:IEC Test - 2.png|мини|794x794пкс|Настройки программы IEC Test для организации обмена  между узлами стенда MCM-NODE1 и MCM-NODE2 по протоколу МЭК-60870-5-104 (серверная часть)|центр]]Соответственно, на другом узле ПО IEC Test запускается в режиме клиента с показанными ниже настройками:&lt;br /&gt;
&lt;br /&gt;
TCP/IP Link Role - Client &lt;br /&gt;
&lt;br /&gt;
IP Address - адрес сервера, находящегося во внутренней сети для информационного обмена  (в данном примере - 10.0.0.2). &lt;br /&gt;
&lt;br /&gt;
Далее устанавливается канал обмена последовательным нажатием кнопок &amp;quot;Build String&amp;quot; и &amp;quot;Open Channel&amp;quot; (индикатор &amp;quot;1 channel&amp;quot; должен стать темно-зеленым).&lt;br /&gt;
&lt;br /&gt;
Для начала непосредственно информационного взаимодействия следует послать с клиента на сервер специальную команду посредством нажатия кнопки &amp;quot;Start DT&amp;quot; (индикатор &amp;quot;1 channel&amp;quot; должен стать светло-зеленым как показано на рисунке ниже). С этого момента канал обмена установлен и активирован, а между экземплярами ПО IEC Test могут передаваться пакеты протокола МЭК-60870-5-104.&lt;br /&gt;
[[Файл:IEC Test - 3.png|центр|мини|791x791пкс|Настройки программы IEC Test для организации обмена  между узлами стенда MCM-NODE1 и MCM-NODE2 по протоколу МЭК-60870-5-104 (клиентская часть)]]Для создания трафика по протоколу МЭК-60870-5-104 между узлами &#039;&#039;&#039;MCM-NODE1&#039;&#039;&#039; и &#039;&#039;&#039;MCM-NODE2&#039;&#039;&#039; следует использовать специальный макрос, имитирующий последовательную передачу данных протокола МЭК-60870-5-104 между узлами. Для этого необходимо на любом из узлов в ПО IEC Test перейти во вкладку &amp;quot;870 Commander&amp;quot;, нажатием кнопки &amp;quot;Загрузить&amp;quot; загрузить макрос &amp;quot;ДУ по циклу 5 сек.rtm&amp;quot; и выполнить его нажатием кнопки &amp;quot;Выполнить&amp;quot;:&lt;br /&gt;
[[Файл:IEC Test - 4.png|альт=Выполнение макроса в ПО IEC Test для создания трафика по протоколу МЭК-60870-5-104|центр|мини|797x797пкс|Выполнение макроса в ПО IEC Test для создания трафика по протоколу МЭК-60870-5-104]]В случае правильно настроенных узлов стенда и экземпляров ПО IEC Test на принимающем узле во вкладке &amp;quot;870 Commander&amp;quot; в соответствующем окне можно будет увидеть информацию о принятых сообщениях, отправленных макросом с передающего узла, что свидетельствует о состоявшемся информационном обмене по протоколу МЭК-60870-5-104 между узлами.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Примечание:&#039;&#039;&#039; в случае, если система МКИ выполняет прослушивание на одном из интерфейсов, входящих во внутреннюю сеть информационного обмена, а также при правильном конфигурировании компонента Grafana, при подключении браузером по адресу сервера  &#039;&#039;&#039;MCM-SNIFFER&#039;&#039;&#039; (&#039;&#039;&#039;&amp;lt;nowiki&amp;gt;http://192.168.2.142&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;) в соответствующих дашбордах должна появиться информация о перехваченных пакетах протокола МЭК-60870-5-104, создающих описанный выше трафик.&lt;/div&gt;</summary>
		<author><name>Dima</name></author>
	</entry>
	<entry>
		<id>https://wiki.entcor.ru/index.php?title=%D0%9C%D0%9A%D0%98&amp;diff=384</id>
		<title>МКИ</title>
		<link rel="alternate" type="text/html" href="https://wiki.entcor.ru/index.php?title=%D0%9C%D0%9A%D0%98&amp;diff=384"/>
		<updated>2025-02-10T05:56:34Z</updated>

		<summary type="html">&lt;p&gt;Dima: /* Подключение интерфейсов к L2 Bridge для Docker */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= &#039;&#039;&#039;Система мониторинга качества измерений (МКИ)&#039;&#039;&#039; =&lt;br /&gt;
&lt;br /&gt;
=== Схема тестового стенда ===&lt;br /&gt;
[[Файл:Стенд для МКИ (декабрь 2024).drawio.png|альт=Стенд для МКИ (декабрь 2024)|мини|978x978пкс|Стенд для МКИ (декабрь 2024)]]&lt;br /&gt;
&lt;br /&gt;
=== Подключение и настойка оборудования ===&lt;br /&gt;
Подключение компонентов стенда производится в соответствии со схемой подключения. При этом для корректного выполнения дальнейших инструкций подключение устройств к физическим портам и сетевые настройки интерфейсов должны быть выполнены  согласно табл. 1:&lt;br /&gt;
&lt;br /&gt;
==== Таблица 1 - Параметры сетевых настроек устройств стенда ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Хост&lt;br /&gt;
!Порт&lt;br /&gt;
!Интерфейс&lt;br /&gt;
!IP&lt;br /&gt;
!Подключен к &lt;br /&gt;
устройство/порт&lt;br /&gt;
!Описание&lt;br /&gt;
|-&lt;br /&gt;
|MCM-SNIFFER&lt;br /&gt;
|Eth1&lt;br /&gt;
|enp5s0&lt;br /&gt;
|192.168.2.15/24&lt;br /&gt;
|L2 Switch&lt;br /&gt;
|Интерфейс управления для Sniffer&lt;br /&gt;
|-&lt;br /&gt;
|MCM-SNIFFER&lt;br /&gt;
|Eth2&lt;br /&gt;
|enp6s0&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;-&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|MCM-NODE1 / Eth2&lt;br /&gt;
|Участвует в L2 Bridge&lt;br /&gt;
|-&lt;br /&gt;
|MCM-SNIFFER&lt;br /&gt;
|Eth3&lt;br /&gt;
|enp7s0&lt;br /&gt;
| -&lt;br /&gt;
|MCM-NODE2 / Eth2&lt;br /&gt;
|Участвует в L2 Bridge&lt;br /&gt;
|-&lt;br /&gt;
|MCM-SNIFFER&lt;br /&gt;
|Eth4&lt;br /&gt;
|enp8s0&lt;br /&gt;
| -&lt;br /&gt;
|ZLAN / Eth&lt;br /&gt;
|Участвует в L2 Bridge&lt;br /&gt;
|-&lt;br /&gt;
|MCM-NODE1&lt;br /&gt;
|Eth1&lt;br /&gt;
|EXTERNAL&lt;br /&gt;
|192.168.2.156/24&lt;br /&gt;
|L2 Switch&lt;br /&gt;
|Интерфейс управления для Node1&lt;br /&gt;
|-&lt;br /&gt;
|MCM-NODE1&lt;br /&gt;
|Eth2&lt;br /&gt;
|INTERNAL&lt;br /&gt;
|10.0.0.1/24&lt;br /&gt;
|MCM-SNIFFER / Eth2&lt;br /&gt;
|Интерфейс обмена данными для Node1&lt;br /&gt;
|-&lt;br /&gt;
|MCM-NODE2&lt;br /&gt;
|Eth1&lt;br /&gt;
|EXTERNAL&lt;br /&gt;
|192.168.2.195/24&lt;br /&gt;
|L2 Switch&lt;br /&gt;
|Интерфейс управления для Node2&lt;br /&gt;
|-&lt;br /&gt;
|MCM-NODE2&lt;br /&gt;
|Eth2&lt;br /&gt;
|INTERNAL&lt;br /&gt;
|10.0.0.2/24&lt;br /&gt;
|MCM-SNIFFER / Eth3&lt;br /&gt;
|Интерфейс обмена данными для Node2&lt;br /&gt;
|-&lt;br /&gt;
|ZLAN&lt;br /&gt;
|Eth&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
|MCM-SNIFFER / Eth4&lt;br /&gt;
|Интерфейс обмена данными для ZLAN&lt;br /&gt;
|-&lt;br /&gt;
|ZLAN&lt;br /&gt;
|RS-485 #1&lt;br /&gt;
|ZLDEV0001&lt;br /&gt;
|10.0.0.241/24&lt;br /&gt;
|&lt;br /&gt;
|Подключение датчика с MODBUS-адресом 5&lt;br /&gt;
|-&lt;br /&gt;
|ZLAN&lt;br /&gt;
|RS-485 #2&lt;br /&gt;
|ZLDEV0002&lt;br /&gt;
|10.0.0.242/24&lt;br /&gt;
|&lt;br /&gt;
|Подключение датчика с MODBUS-адресом 6&lt;br /&gt;
|-&lt;br /&gt;
|ZLAN&lt;br /&gt;
|RS-485 #3&lt;br /&gt;
|ZLDEV0003&lt;br /&gt;
|10.0.0.243/24&lt;br /&gt;
|&lt;br /&gt;
|Подключение датчика с MODBUS-адресом 7&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Развертывание системы ===&lt;br /&gt;
&lt;br /&gt;
==== Установка базовых систем ====&lt;br /&gt;
Установка ОС Windows на компьютерах &#039;&#039;&#039;MCM-NODE1&#039;&#039;&#039; и &#039;&#039;&#039;MCM-NODE2&#039;&#039;&#039; производится обычным образом, при этом  соответствующим сетевым интерфейсам должны быть присвоены адреса согласно данным табл. 1, также для совместимости должны быть указаны следующие параметры настройки системы:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Таблица 2 - Параметры настройки узлов MCM-NODE1 и MCM-NODE2&lt;br /&gt;
!Параметр&lt;br /&gt;
!Значение&lt;br /&gt;
|-&lt;br /&gt;
|Имя компьютера&lt;br /&gt;
|MCM-NODE1/MCM-NODE2&lt;br /&gt;
|-&lt;br /&gt;
|Имя пользователя c правами локального администратора&lt;br /&gt;
|entcor&lt;br /&gt;
|-&lt;br /&gt;
|Пароль&lt;br /&gt;
|1&lt;br /&gt;
|}&lt;br /&gt;
Установка базовой системы Ubuntu 22.0x Server на компьютер &#039;&#039;&#039;MCM-SNIFFER&#039;&#039;&#039; производится обычным образом в режиме инсталляции по умолчанию, при этом при выборе параметров установки необходимо включить установку сервера OpenSSH, а также для совместимости следует  указать следующие значения прочих параметров:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Таблица 3 - Параметры настройки узла MCM-SNIFFER&lt;br /&gt;
!Параметр&lt;br /&gt;
!Значение&lt;br /&gt;
|-&lt;br /&gt;
|Имя компьютера&lt;br /&gt;
|MCM-SNIFFER&lt;br /&gt;
|-&lt;br /&gt;
|Имя пользователя c правами root                       &lt;br /&gt;
|entcor&lt;br /&gt;
|-&lt;br /&gt;
|Пароль&lt;br /&gt;
|ng3-dcc20&lt;br /&gt;
|}&lt;br /&gt;
После установки системы необходимо установить обновления:&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt full-upgrade&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
а также проверить доступ к серверу по SSH с компьютера администратора:&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
ssh entcor@192.168.2.23 (текущий адрес сервера MCM-SNIFFER)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Установка сертификата Entcor ====&lt;br /&gt;
С компьютера администратора следует скопировать файл сертификата &#039;&#039;&#039;entcor.crt&#039;&#039;&#039; на узел &#039;&#039;&#039;MCM-SNIFFER&#039;&#039;&#039; по следующему пути (необходимо использовать фактический IP-адрес сервера MCM-SNIFFER):&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
scp entcor.crt entcor@192.168.2.23:/home/entcor&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Затем на компьютере &#039;&#039;&#039;MCM-SNIFFER&#039;&#039;&#039; следует перенести сертификат в необходимый каталог и выполнить его обновление:&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
sudo mv entcor.crt /usr/local/share/ca-certificates&lt;br /&gt;
sudo update-ca-certificates &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&#039;&#039;&#039;Примечание:&#039;&#039;&#039; после обновления сертификатов необходимо выполнить перезагрузку компьютера &#039;&#039;&#039;MCM-SNIFFER&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==== Установка Docker ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
# Add Docker&#039;s official GPG key:&lt;br /&gt;
&lt;br /&gt;
sudo apt-get update&lt;br /&gt;
sudo apt-get install ca-certificates curl&lt;br /&gt;
sudo install -m 0755 -d /etc/apt/keyrings&lt;br /&gt;
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc&lt;br /&gt;
sudo chmod a+r /etc/apt/keyrings/docker.asc&lt;br /&gt;
&lt;br /&gt;
# Add the repository to Apt sources:&lt;br /&gt;
&lt;br /&gt;
echo \&lt;br /&gt;
&amp;quot;deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \&lt;br /&gt;
$(. /etc/os-release &amp;amp;&amp;amp; echo &amp;quot;$VERSION_CODENAME&amp;quot;) stable&amp;quot; | \&lt;br /&gt;
sudo tee /etc/apt/sources.list.d/docker.list &amp;gt; /dev/null&lt;br /&gt;
&lt;br /&gt;
sudo apt-get update&lt;br /&gt;
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Ссылка на руководство: https://docs.docker.com/engine/install/ubuntu/#install-using-the-repository&lt;br /&gt;
&lt;br /&gt;
==== Подключение интерфейсов к L2 Bridge для Docker ====&lt;br /&gt;
Предварительно следует запустить постоянный пинг (с параметром &#039;&#039;&#039;-t&#039;&#039;&#039;) с &#039;&#039;&#039;MCM-NODE1&#039;&#039;&#039; (10.0.0.1) на &#039;&#039;&#039;MCM-NODE2&#039;&#039;&#039; (10.0.0.2) и наоборот, убедиться в том, что узлы недоступны друг для друга.&lt;br /&gt;
&lt;br /&gt;
Далее необходимо выполнить подключение внутренних интерфейсов обмена данными к мосту &#039;&#039;&#039;docker0&#039;&#039;&#039;:&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
sudo ip link set dev enp6s0 master docker0&lt;br /&gt;
sudo ip link set dev enp7s0 master docker0&lt;br /&gt;
sudo ip link set dev enp8s0 master docker0&lt;br /&gt;
sudo ip link set dev docker0 up&lt;br /&gt;
ip link show&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Ссылка на руководство: https://chrisjhart.com/Bridge-Network-Interfaces-on-Ubuntu-22.04/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Для сохранения настроек моста &#039;&#039;&#039;docker0&#039;&#039;&#039; после перезагрузки сервера необходимо в каталоге &#039;&#039;&#039;/etc/netplan&#039;&#039;&#039; создать файл с расширением .yaml (например, &#039;&#039;&#039;01-network.yaml&#039;&#039;&#039;) со следующим содержимым:&amp;lt;syntaxhighlight lang=&amp;quot;yaml&amp;quot;&amp;gt;&lt;br /&gt;
network:&lt;br /&gt;
    version: 2&lt;br /&gt;
    ethernets:&lt;br /&gt;
        enp5s0:&lt;br /&gt;
            dhcp4: false&lt;br /&gt;
            addresses: &lt;br /&gt;
                - 192.168.2.15/24&lt;br /&gt;
            routes:&lt;br /&gt;
              - to: default&lt;br /&gt;
                via: 192.168.2.254&lt;br /&gt;
            nameservers: &lt;br /&gt;
                addresses: [192.168.2.60, 176.114.16.33]&lt;br /&gt;
        enp6s0:&lt;br /&gt;
            dhcp4: false&lt;br /&gt;
        enp7s0:&lt;br /&gt;
            dhcp4: false&lt;br /&gt;
        enp8s0:&lt;br /&gt;
            dhcp4: false&lt;br /&gt;
    bridges:&lt;br /&gt;
        docker0:&lt;br /&gt;
            interfaces: [enp6s0, enp7s0, enp8s0]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&#039;&#039;&#039;Примечания:&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
# Для интерфейса &#039;&#039;&#039;enp5s0&#039;&#039;&#039; вместо 192.168.2.15/24 следует указать нужный статический адрес сервера, также при необходимости следует указать фактически используемые адреса шлюза и DNS (в &#039;&#039;&#039;via&#039;&#039;&#039; и &#039;&#039;&#039;nameservers&#039;&#039;&#039; соответственно).&lt;br /&gt;
# Для удобства проще скопировать готовый файл с компьютера администратора и положить его в &#039;&#039;&#039;/etc/netplan&#039;&#039;&#039; .&lt;br /&gt;
# Если нет необходимости сразу задействовать интерфейсы &#039;&#039;&#039;enp6s0/enp7s0/enp8s0&#039;&#039;&#039; в мосте &#039;&#039;&#039;docker0&#039;&#039;&#039;, то можно предыдущие команды &#039;&#039;&#039;ip link set dev&#039;&#039;&#039; не выполнять, а вместо этого отредактировать/скопировать файл в &#039;&#039;&#039;/etc/netplan&#039;&#039;&#039;.&lt;br /&gt;
# В существующем в &#039;&#039;&#039;/etc/netplan&#039;&#039;&#039; файле конфигурации по умолчанию &#039;&#039;&#039;50-cloud-init.yaml&#039;&#039;&#039; следует для интерфейса &#039;&#039;&#039;enp5s0&#039;&#039;&#039; установить параметр &#039;&#039;&#039;dchp4: false&#039;&#039;&#039;, иначе у интерфейса будет 2 адреса - статический из настроек в &#039;&#039;&#039;01-network.yaml&#039;&#039;&#039; и динамический, который будет дополнительно прилетать по DHCP и создавать путаницу.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
После выполнения настройки интерфейсов следует проверить, что пинг с MCM-NODE1 (10.0.0.1) на MCM-NODE2 (10.0.0.2) в обе стороны проходит успешно, т.е. узлы общаются между собой напрямую через мост &#039;&#039;&#039;docker0&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==== Установка компонентов системы МКИ ====&lt;br /&gt;
Получение последней версии инсталляционного пакета производится с FTP-сервера &#039;&#039;&#039;Jenkins (192.168.2.49)&#039;&#039;&#039;. Для этого необходимо подключиться к нему с узла &#039;&#039;&#039;MCM-SNIFFER&#039;&#039;&#039; по FTP, используя обычную пару логин-пароль и выкачать оттуда файлы &#039;&#039;&#039;install.sh&#039;&#039;&#039; и &#039;&#039;&#039;latest.tar.gz&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Развертывание контейнеров производится запуском скрипта &#039;&#039;&#039;install.sh&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Примечание:&#039;&#039;&#039; перед запуском необходимо установить для скрипта &#039;&#039;&#039;install.sh&#039;&#039;&#039; права на выполнение командой chmod:&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
chmod +x install.sh&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Запуск компонентов системы МКИ ====&lt;br /&gt;
После установки компонентов МКИ можно выполнить их запуск посредством скрипта &#039;&#039;&#039;enode.sh&#039;&#039;&#039;, расположенного в каталоге    &#039;&#039;&#039;/opt/e-node/deploy&#039;&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Примечание:&#039;&#039;&#039; для нормальной работы стека &#039;&#039;&#039;common&#039;&#039;&#039; необходимо предварительно авторизоваться под нужной учетной записью в docker-репозитории Harbor:&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
docker login registry.entcor&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Конфигурирование выполняется посредством редактирования файла &#039;&#039;&#039;.env&#039;&#039;&#039;, в котором следует установить следующие параметры: &lt;br /&gt;
&lt;br /&gt;
MONITOR_DATA_IF = &amp;lt;имя интерфейса на узле &#039;&#039;&#039;MCM-SNIFFER&#039;&#039;&#039;,  на котором выполняется прослушка, например, eno1&amp;gt; &lt;br /&gt;
&lt;br /&gt;
MODE = enode &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Примечание:&#039;&#039;&#039; вообще-то для работы МКИ параметр MODE должен иметь  значение asutp, но работает пока только вот так. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Непосредственно запуск компонентов системы МКИ осуществляется из каталога &#039;&#039;&#039;/opt/e-node/deploy&#039;&#039;&#039; следующей командой: &amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
enode &amp;lt;имя стека&amp;gt; start&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&#039;&#039;&#039;Примечание:&#039;&#039;&#039; названия нужных стеков можно посмотреть в каталоге stacks (имена стеков соответствуют именам подкаталогов). Как минимум должны быть запущены следующие стеки:&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
enode common start&lt;br /&gt;
enode asutp start&lt;br /&gt;
enode ha-server start&lt;br /&gt;
enode analytic start&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Проверка запуска сервисов производится обычным образом с помощью команды:&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
docker ps&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Проверка информационного обмена по протоколу МЭК-60870-5-104 ====&lt;br /&gt;
Проверка информационного обмена по протоколу МЭК-60870-5-104 производится между узлами стенда &#039;&#039;&#039;MCM-NODE1&#039;&#039;&#039; и &#039;&#039;&#039;MCM-NODE2&#039;&#039;&#039; посредством программного обеспечения  IEC Test, которое эмулирует передачу пакетов протокола МЭК-60870-5-104 поверх соединения Ethernet. &lt;br /&gt;
&lt;br /&gt;
Для проверки работы протокола МЭК-60870-5-104 во внутренней сети обмена на одном из узлов ПО IEC Test запускается в режиме сервера с показанными ниже настройками: &lt;br /&gt;
&lt;br /&gt;
TCP/IP Link Role - Server &lt;br /&gt;
&lt;br /&gt;
IP Address - адрес внутреннего интерфейса для информационного обмена (в данном примере - 10.0.0.2) &lt;br /&gt;
&lt;br /&gt;
Далее устанавливается канал обмена последовательным нажатием кнопок &amp;quot;Build String&amp;quot; и &amp;quot;Open Channel&amp;quot; (индикатор &amp;quot;1 channel&amp;quot; должен стать темно-зеленым). &lt;br /&gt;
[[Файл:IEC Test - 2.png|мини|794x794пкс|Настройки программы IEC Test для организации обмена  между узлами стенда MCM-NODE1 и MCM-NODE2 по протоколу МЭК-60870-5-104 (серверная часть)|центр]]Соответственно, на другом узле ПО IEC Test запускается в режиме клиента с показанными ниже настройками:&lt;br /&gt;
&lt;br /&gt;
TCP/IP Link Role - Client &lt;br /&gt;
&lt;br /&gt;
IP Address - адрес сервера, находящегося во внутренней сети для информационного обмена  (в данном примере - 10.0.0.2). &lt;br /&gt;
&lt;br /&gt;
Далее устанавливается канал обмена последовательным нажатием кнопок &amp;quot;Build String&amp;quot; и &amp;quot;Open Channel&amp;quot; (индикатор &amp;quot;1 channel&amp;quot; должен стать темно-зеленым).&lt;br /&gt;
&lt;br /&gt;
Для начала непосредственно информационного взаимодействия следует послать с клиента на сервер специальную команду посредством нажатия кнопки &amp;quot;Start DT&amp;quot; (индикатор &amp;quot;1 channel&amp;quot; должен стать светло-зеленым как показано на рисунке ниже). С этого момента канал обмена установлен и активирован, а между экземплярами ПО IEC Test могут передаваться пакеты протокола МЭК-60870-5-104.&lt;br /&gt;
[[Файл:IEC Test - 3.png|центр|мини|791x791пкс|Настройки программы IEC Test для организации обмена  между узлами стенда MCM-NODE1 и MCM-NODE2 по протоколу МЭК-60870-5-104 (клиентская часть)]]Для создания трафика по протоколу МЭК-60870-5-104 между узлами &#039;&#039;&#039;MCM-NODE1&#039;&#039;&#039; и &#039;&#039;&#039;MCM-NODE2&#039;&#039;&#039; следует использовать специальный макрос, имитирующий последовательную передачу данных протокола МЭК-60870-5-104 между узлами. Для этого необходимо на любом из узлов в ПО IEC Test перейти во вкладку &amp;quot;870 Commander&amp;quot;, нажатием кнопки &amp;quot;Загрузить&amp;quot; загрузить макрос &amp;quot;ДУ по циклу 5 сек.rtm&amp;quot; и выполнить его нажатием кнопки &amp;quot;Выполнить&amp;quot;:&lt;br /&gt;
[[Файл:IEC Test - 4.png|альт=Выполнение макроса в ПО IEC Test для создания трафика по протоколу МЭК-60870-5-104|центр|мини|797x797пкс|Выполнение макроса в ПО IEC Test для создания трафика по протоколу МЭК-60870-5-104]]В случае правильно настроенных узлов стенда и экземпляров ПО IEC Test на принимающем узле во вкладке &amp;quot;870 Commander&amp;quot; в соответствующем окне можно будет увидеть информацию о принятых сообщениях, отправленных макросом с передающего узла, что свидетельствует о состоявшемся информационном обмене по протоколу МЭК-60870-5-104 между узлами.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Примечание:&#039;&#039;&#039; в случае, если система МКИ выполняет прослушивание на одном из интерфейсов, входящих во внутреннюю сеть информационного обмена, а также при правильном конфигурировании компонента Grafana, при подключении браузером по адресу сервера  &#039;&#039;&#039;MCM-SNIFFER&#039;&#039;&#039; (&#039;&#039;&#039;&amp;lt;nowiki&amp;gt;http://192.168.2.142&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;) в соответствующих дашбордах должна появиться информация о перехваченных пакетах протокола МЭК-60870-5-104, создающих описанный выше трафик.&lt;/div&gt;</summary>
		<author><name>Dima</name></author>
	</entry>
	<entry>
		<id>https://wiki.entcor.ru/index.php?title=%D0%9C%D0%9A%D0%98&amp;diff=383</id>
		<title>МКИ</title>
		<link rel="alternate" type="text/html" href="https://wiki.entcor.ru/index.php?title=%D0%9C%D0%9A%D0%98&amp;diff=383"/>
		<updated>2025-02-10T05:56:19Z</updated>

		<summary type="html">&lt;p&gt;Dima: /* Подключение интерфейсов к L2 Bridge для Docker */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= &#039;&#039;&#039;Система мониторинга качества измерений (МКИ)&#039;&#039;&#039; =&lt;br /&gt;
&lt;br /&gt;
=== Схема тестового стенда ===&lt;br /&gt;
[[Файл:Стенд для МКИ (декабрь 2024).drawio.png|альт=Стенд для МКИ (декабрь 2024)|мини|978x978пкс|Стенд для МКИ (декабрь 2024)]]&lt;br /&gt;
&lt;br /&gt;
=== Подключение и настойка оборудования ===&lt;br /&gt;
Подключение компонентов стенда производится в соответствии со схемой подключения. При этом для корректного выполнения дальнейших инструкций подключение устройств к физическим портам и сетевые настройки интерфейсов должны быть выполнены  согласно табл. 1:&lt;br /&gt;
&lt;br /&gt;
==== Таблица 1 - Параметры сетевых настроек устройств стенда ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Хост&lt;br /&gt;
!Порт&lt;br /&gt;
!Интерфейс&lt;br /&gt;
!IP&lt;br /&gt;
!Подключен к &lt;br /&gt;
устройство/порт&lt;br /&gt;
!Описание&lt;br /&gt;
|-&lt;br /&gt;
|MCM-SNIFFER&lt;br /&gt;
|Eth1&lt;br /&gt;
|enp5s0&lt;br /&gt;
|192.168.2.15/24&lt;br /&gt;
|L2 Switch&lt;br /&gt;
|Интерфейс управления для Sniffer&lt;br /&gt;
|-&lt;br /&gt;
|MCM-SNIFFER&lt;br /&gt;
|Eth2&lt;br /&gt;
|enp6s0&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;-&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|MCM-NODE1 / Eth2&lt;br /&gt;
|Участвует в L2 Bridge&lt;br /&gt;
|-&lt;br /&gt;
|MCM-SNIFFER&lt;br /&gt;
|Eth3&lt;br /&gt;
|enp7s0&lt;br /&gt;
| -&lt;br /&gt;
|MCM-NODE2 / Eth2&lt;br /&gt;
|Участвует в L2 Bridge&lt;br /&gt;
|-&lt;br /&gt;
|MCM-SNIFFER&lt;br /&gt;
|Eth4&lt;br /&gt;
|enp8s0&lt;br /&gt;
| -&lt;br /&gt;
|ZLAN / Eth&lt;br /&gt;
|Участвует в L2 Bridge&lt;br /&gt;
|-&lt;br /&gt;
|MCM-NODE1&lt;br /&gt;
|Eth1&lt;br /&gt;
|EXTERNAL&lt;br /&gt;
|192.168.2.156/24&lt;br /&gt;
|L2 Switch&lt;br /&gt;
|Интерфейс управления для Node1&lt;br /&gt;
|-&lt;br /&gt;
|MCM-NODE1&lt;br /&gt;
|Eth2&lt;br /&gt;
|INTERNAL&lt;br /&gt;
|10.0.0.1/24&lt;br /&gt;
|MCM-SNIFFER / Eth2&lt;br /&gt;
|Интерфейс обмена данными для Node1&lt;br /&gt;
|-&lt;br /&gt;
|MCM-NODE2&lt;br /&gt;
|Eth1&lt;br /&gt;
|EXTERNAL&lt;br /&gt;
|192.168.2.195/24&lt;br /&gt;
|L2 Switch&lt;br /&gt;
|Интерфейс управления для Node2&lt;br /&gt;
|-&lt;br /&gt;
|MCM-NODE2&lt;br /&gt;
|Eth2&lt;br /&gt;
|INTERNAL&lt;br /&gt;
|10.0.0.2/24&lt;br /&gt;
|MCM-SNIFFER / Eth3&lt;br /&gt;
|Интерфейс обмена данными для Node2&lt;br /&gt;
|-&lt;br /&gt;
|ZLAN&lt;br /&gt;
|Eth&lt;br /&gt;
| -&lt;br /&gt;
| -&lt;br /&gt;
|MCM-SNIFFER / Eth4&lt;br /&gt;
|Интерфейс обмена данными для ZLAN&lt;br /&gt;
|-&lt;br /&gt;
|ZLAN&lt;br /&gt;
|RS-485 #1&lt;br /&gt;
|ZLDEV0001&lt;br /&gt;
|10.0.0.241/24&lt;br /&gt;
|&lt;br /&gt;
|Подключение датчика с MODBUS-адресом 5&lt;br /&gt;
|-&lt;br /&gt;
|ZLAN&lt;br /&gt;
|RS-485 #2&lt;br /&gt;
|ZLDEV0002&lt;br /&gt;
|10.0.0.242/24&lt;br /&gt;
|&lt;br /&gt;
|Подключение датчика с MODBUS-адресом 6&lt;br /&gt;
|-&lt;br /&gt;
|ZLAN&lt;br /&gt;
|RS-485 #3&lt;br /&gt;
|ZLDEV0003&lt;br /&gt;
|10.0.0.243/24&lt;br /&gt;
|&lt;br /&gt;
|Подключение датчика с MODBUS-адресом 7&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Развертывание системы ===&lt;br /&gt;
&lt;br /&gt;
==== Установка базовых систем ====&lt;br /&gt;
Установка ОС Windows на компьютерах &#039;&#039;&#039;MCM-NODE1&#039;&#039;&#039; и &#039;&#039;&#039;MCM-NODE2&#039;&#039;&#039; производится обычным образом, при этом  соответствующим сетевым интерфейсам должны быть присвоены адреса согласно данным табл. 1, также для совместимости должны быть указаны следующие параметры настройки системы:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Таблица 2 - Параметры настройки узлов MCM-NODE1 и MCM-NODE2&lt;br /&gt;
!Параметр&lt;br /&gt;
!Значение&lt;br /&gt;
|-&lt;br /&gt;
|Имя компьютера&lt;br /&gt;
|MCM-NODE1/MCM-NODE2&lt;br /&gt;
|-&lt;br /&gt;
|Имя пользователя c правами локального администратора&lt;br /&gt;
|entcor&lt;br /&gt;
|-&lt;br /&gt;
|Пароль&lt;br /&gt;
|1&lt;br /&gt;
|}&lt;br /&gt;
Установка базовой системы Ubuntu 22.0x Server на компьютер &#039;&#039;&#039;MCM-SNIFFER&#039;&#039;&#039; производится обычным образом в режиме инсталляции по умолчанию, при этом при выборе параметров установки необходимо включить установку сервера OpenSSH, а также для совместимости следует  указать следующие значения прочих параметров:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Таблица 3 - Параметры настройки узла MCM-SNIFFER&lt;br /&gt;
!Параметр&lt;br /&gt;
!Значение&lt;br /&gt;
|-&lt;br /&gt;
|Имя компьютера&lt;br /&gt;
|MCM-SNIFFER&lt;br /&gt;
|-&lt;br /&gt;
|Имя пользователя c правами root                       &lt;br /&gt;
|entcor&lt;br /&gt;
|-&lt;br /&gt;
|Пароль&lt;br /&gt;
|ng3-dcc20&lt;br /&gt;
|}&lt;br /&gt;
После установки системы необходимо установить обновления:&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
sudo apt full-upgrade&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
а также проверить доступ к серверу по SSH с компьютера администратора:&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
ssh entcor@192.168.2.23 (текущий адрес сервера MCM-SNIFFER)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Установка сертификата Entcor ====&lt;br /&gt;
С компьютера администратора следует скопировать файл сертификата &#039;&#039;&#039;entcor.crt&#039;&#039;&#039; на узел &#039;&#039;&#039;MCM-SNIFFER&#039;&#039;&#039; по следующему пути (необходимо использовать фактический IP-адрес сервера MCM-SNIFFER):&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
scp entcor.crt entcor@192.168.2.23:/home/entcor&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Затем на компьютере &#039;&#039;&#039;MCM-SNIFFER&#039;&#039;&#039; следует перенести сертификат в необходимый каталог и выполнить его обновление:&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
sudo mv entcor.crt /usr/local/share/ca-certificates&lt;br /&gt;
sudo update-ca-certificates &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&#039;&#039;&#039;Примечание:&#039;&#039;&#039; после обновления сертификатов необходимо выполнить перезагрузку компьютера &#039;&#039;&#039;MCM-SNIFFER&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==== Установка Docker ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
# Add Docker&#039;s official GPG key:&lt;br /&gt;
&lt;br /&gt;
sudo apt-get update&lt;br /&gt;
sudo apt-get install ca-certificates curl&lt;br /&gt;
sudo install -m 0755 -d /etc/apt/keyrings&lt;br /&gt;
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc&lt;br /&gt;
sudo chmod a+r /etc/apt/keyrings/docker.asc&lt;br /&gt;
&lt;br /&gt;
# Add the repository to Apt sources:&lt;br /&gt;
&lt;br /&gt;
echo \&lt;br /&gt;
&amp;quot;deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \&lt;br /&gt;
$(. /etc/os-release &amp;amp;&amp;amp; echo &amp;quot;$VERSION_CODENAME&amp;quot;) stable&amp;quot; | \&lt;br /&gt;
sudo tee /etc/apt/sources.list.d/docker.list &amp;gt; /dev/null&lt;br /&gt;
&lt;br /&gt;
sudo apt-get update&lt;br /&gt;
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Ссылка на руководство: https://docs.docker.com/engine/install/ubuntu/#install-using-the-repository&lt;br /&gt;
&lt;br /&gt;
==== Подключение интерфейсов к L2 Bridge для Docker ====&lt;br /&gt;
Предварительно следует запустить постоянный пинг (с параметром &#039;&#039;&#039;-t&#039;&#039;&#039;) с &#039;&#039;&#039;MCM-NODE1&#039;&#039;&#039; (10.0.0.1) на &#039;&#039;&#039;MCM-NODE2&#039;&#039;&#039; (10.0.0.2) и наоборот, убедиться в том, что узлы недоступны друг для друга.&lt;br /&gt;
&lt;br /&gt;
Далее необходимо выполнить подключение внутренних интерфейсов обмена данными к мосту &#039;&#039;&#039;docker0&#039;&#039;&#039;:&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
sudo ip link set dev enp6s0 master docker0&lt;br /&gt;
sudo ip link set dev enp7s0 master docker0&lt;br /&gt;
sudo ip link set dev enp8s0 master docker0&lt;br /&gt;
sudo ip link set dev docker0 up&lt;br /&gt;
ip link show&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Ссылка на руководство: https://chrisjhart.com/Bridge-Network-Interfaces-on-Ubuntu-22.04/&lt;br /&gt;
&lt;br /&gt;
Для сохранения настроек моста &#039;&#039;&#039;docker0&#039;&#039;&#039; после перезагрузки сервера необходимо в каталоге &#039;&#039;&#039;/etc/netplan&#039;&#039;&#039; создать файл с расширением .yaml (например, &#039;&#039;&#039;01-network.yaml&#039;&#039;&#039;) со следующим содержимым:&amp;lt;syntaxhighlight lang=&amp;quot;yaml&amp;quot;&amp;gt;&lt;br /&gt;
network:&lt;br /&gt;
    version: 2&lt;br /&gt;
    ethernets:&lt;br /&gt;
        enp5s0:&lt;br /&gt;
            dhcp4: false&lt;br /&gt;
            addresses: &lt;br /&gt;
                - 192.168.2.15/24&lt;br /&gt;
            routes:&lt;br /&gt;
              - to: default&lt;br /&gt;
                via: 192.168.2.254&lt;br /&gt;
            nameservers: &lt;br /&gt;
                addresses: [192.168.2.60, 176.114.16.33]&lt;br /&gt;
        enp6s0:&lt;br /&gt;
            dhcp4: false&lt;br /&gt;
        enp7s0:&lt;br /&gt;
            dhcp4: false&lt;br /&gt;
        enp8s0:&lt;br /&gt;
            dhcp4: false&lt;br /&gt;
    bridges:&lt;br /&gt;
        docker0:&lt;br /&gt;
            interfaces: [enp6s0, enp7s0, enp8s0]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&#039;&#039;&#039;Примечания:&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
# Для интерфейса &#039;&#039;&#039;enp5s0&#039;&#039;&#039; вместо 192.168.2.15/24 следует указать нужный статический адрес сервера, также при необходимости следует указать фактически используемые адреса шлюза и DNS (в &#039;&#039;&#039;via&#039;&#039;&#039; и &#039;&#039;&#039;nameservers&#039;&#039;&#039; соответственно).&lt;br /&gt;
# Для удобства проще скопировать готовый файл с компьютера администратора и положить его в &#039;&#039;&#039;/etc/netplan&#039;&#039;&#039; .&lt;br /&gt;
# Если нет необходимости сразу задействовать интерфейсы &#039;&#039;&#039;enp6s0/enp7s0/enp8s0&#039;&#039;&#039; в мосте &#039;&#039;&#039;docker0&#039;&#039;&#039;, то можно предыдущие команды &#039;&#039;&#039;ip link set dev&#039;&#039;&#039; не выполнять, а вместо этого отредактировать/скопировать файл в &#039;&#039;&#039;/etc/netplan&#039;&#039;&#039;.&lt;br /&gt;
# В существующем в &#039;&#039;&#039;/etc/netplan&#039;&#039;&#039; файле конфигурации по умолчанию &#039;&#039;&#039;50-cloud-init.yaml&#039;&#039;&#039; следует для интерфейса &#039;&#039;&#039;enp5s0&#039;&#039;&#039; установить параметр &#039;&#039;&#039;dchp4: false&#039;&#039;&#039;, иначе у интерфейса будет 2 адреса - статический из настроек в &#039;&#039;&#039;01-network.yaml&#039;&#039;&#039; и динамический, который будет дополнительно прилетать по DHCP и создавать путаницу.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
После выполнения настройки интерфейсов следует проверить, что пинг с MCM-NODE1 (10.0.0.1) на MCM-NODE2 (10.0.0.2) в обе стороны проходит успешно, т.е. узлы общаются между собой напрямую через мост &#039;&#039;&#039;docker0&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==== Установка компонентов системы МКИ ====&lt;br /&gt;
Получение последней версии инсталляционного пакета производится с FTP-сервера &#039;&#039;&#039;Jenkins (192.168.2.49)&#039;&#039;&#039;. Для этого необходимо подключиться к нему с узла &#039;&#039;&#039;MCM-SNIFFER&#039;&#039;&#039; по FTP, используя обычную пару логин-пароль и выкачать оттуда файлы &#039;&#039;&#039;install.sh&#039;&#039;&#039; и &#039;&#039;&#039;latest.tar.gz&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Развертывание контейнеров производится запуском скрипта &#039;&#039;&#039;install.sh&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Примечание:&#039;&#039;&#039; перед запуском необходимо установить для скрипта &#039;&#039;&#039;install.sh&#039;&#039;&#039; права на выполнение командой chmod:&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
chmod +x install.sh&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Запуск компонентов системы МКИ ====&lt;br /&gt;
После установки компонентов МКИ можно выполнить их запуск посредством скрипта &#039;&#039;&#039;enode.sh&#039;&#039;&#039;, расположенного в каталоге    &#039;&#039;&#039;/opt/e-node/deploy&#039;&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Примечание:&#039;&#039;&#039; для нормальной работы стека &#039;&#039;&#039;common&#039;&#039;&#039; необходимо предварительно авторизоваться под нужной учетной записью в docker-репозитории Harbor:&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
docker login registry.entcor&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Конфигурирование выполняется посредством редактирования файла &#039;&#039;&#039;.env&#039;&#039;&#039;, в котором следует установить следующие параметры: &lt;br /&gt;
&lt;br /&gt;
MONITOR_DATA_IF = &amp;lt;имя интерфейса на узле &#039;&#039;&#039;MCM-SNIFFER&#039;&#039;&#039;,  на котором выполняется прослушка, например, eno1&amp;gt; &lt;br /&gt;
&lt;br /&gt;
MODE = enode &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Примечание:&#039;&#039;&#039; вообще-то для работы МКИ параметр MODE должен иметь  значение asutp, но работает пока только вот так. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Непосредственно запуск компонентов системы МКИ осуществляется из каталога &#039;&#039;&#039;/opt/e-node/deploy&#039;&#039;&#039; следующей командой: &amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
enode &amp;lt;имя стека&amp;gt; start&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&#039;&#039;&#039;Примечание:&#039;&#039;&#039; названия нужных стеков можно посмотреть в каталоге stacks (имена стеков соответствуют именам подкаталогов). Как минимум должны быть запущены следующие стеки:&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
enode common start&lt;br /&gt;
enode asutp start&lt;br /&gt;
enode ha-server start&lt;br /&gt;
enode analytic start&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Проверка запуска сервисов производится обычным образом с помощью команды:&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
docker ps&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Проверка информационного обмена по протоколу МЭК-60870-5-104 ====&lt;br /&gt;
Проверка информационного обмена по протоколу МЭК-60870-5-104 производится между узлами стенда &#039;&#039;&#039;MCM-NODE1&#039;&#039;&#039; и &#039;&#039;&#039;MCM-NODE2&#039;&#039;&#039; посредством программного обеспечения  IEC Test, которое эмулирует передачу пакетов протокола МЭК-60870-5-104 поверх соединения Ethernet. &lt;br /&gt;
&lt;br /&gt;
Для проверки работы протокола МЭК-60870-5-104 во внутренней сети обмена на одном из узлов ПО IEC Test запускается в режиме сервера с показанными ниже настройками: &lt;br /&gt;
&lt;br /&gt;
TCP/IP Link Role - Server &lt;br /&gt;
&lt;br /&gt;
IP Address - адрес внутреннего интерфейса для информационного обмена (в данном примере - 10.0.0.2) &lt;br /&gt;
&lt;br /&gt;
Далее устанавливается канал обмена последовательным нажатием кнопок &amp;quot;Build String&amp;quot; и &amp;quot;Open Channel&amp;quot; (индикатор &amp;quot;1 channel&amp;quot; должен стать темно-зеленым). &lt;br /&gt;
[[Файл:IEC Test - 2.png|мини|794x794пкс|Настройки программы IEC Test для организации обмена  между узлами стенда MCM-NODE1 и MCM-NODE2 по протоколу МЭК-60870-5-104 (серверная часть)|центр]]Соответственно, на другом узле ПО IEC Test запускается в режиме клиента с показанными ниже настройками:&lt;br /&gt;
&lt;br /&gt;
TCP/IP Link Role - Client &lt;br /&gt;
&lt;br /&gt;
IP Address - адрес сервера, находящегося во внутренней сети для информационного обмена  (в данном примере - 10.0.0.2). &lt;br /&gt;
&lt;br /&gt;
Далее устанавливается канал обмена последовательным нажатием кнопок &amp;quot;Build String&amp;quot; и &amp;quot;Open Channel&amp;quot; (индикатор &amp;quot;1 channel&amp;quot; должен стать темно-зеленым).&lt;br /&gt;
&lt;br /&gt;
Для начала непосредственно информационного взаимодействия следует послать с клиента на сервер специальную команду посредством нажатия кнопки &amp;quot;Start DT&amp;quot; (индикатор &amp;quot;1 channel&amp;quot; должен стать светло-зеленым как показано на рисунке ниже). С этого момента канал обмена установлен и активирован, а между экземплярами ПО IEC Test могут передаваться пакеты протокола МЭК-60870-5-104.&lt;br /&gt;
[[Файл:IEC Test - 3.png|центр|мини|791x791пкс|Настройки программы IEC Test для организации обмена  между узлами стенда MCM-NODE1 и MCM-NODE2 по протоколу МЭК-60870-5-104 (клиентская часть)]]Для создания трафика по протоколу МЭК-60870-5-104 между узлами &#039;&#039;&#039;MCM-NODE1&#039;&#039;&#039; и &#039;&#039;&#039;MCM-NODE2&#039;&#039;&#039; следует использовать специальный макрос, имитирующий последовательную передачу данных протокола МЭК-60870-5-104 между узлами. Для этого необходимо на любом из узлов в ПО IEC Test перейти во вкладку &amp;quot;870 Commander&amp;quot;, нажатием кнопки &amp;quot;Загрузить&amp;quot; загрузить макрос &amp;quot;ДУ по циклу 5 сек.rtm&amp;quot; и выполнить его нажатием кнопки &amp;quot;Выполнить&amp;quot;:&lt;br /&gt;
[[Файл:IEC Test - 4.png|альт=Выполнение макроса в ПО IEC Test для создания трафика по протоколу МЭК-60870-5-104|центр|мини|797x797пкс|Выполнение макроса в ПО IEC Test для создания трафика по протоколу МЭК-60870-5-104]]В случае правильно настроенных узлов стенда и экземпляров ПО IEC Test на принимающем узле во вкладке &amp;quot;870 Commander&amp;quot; в соответствующем окне можно будет увидеть информацию о принятых сообщениях, отправленных макросом с передающего узла, что свидетельствует о состоявшемся информационном обмене по протоколу МЭК-60870-5-104 между узлами.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Примечание:&#039;&#039;&#039; в случае, если система МКИ выполняет прослушивание на одном из интерфейсов, входящих во внутреннюю сеть информационного обмена, а также при правильном конфигурировании компонента Grafana, при подключении браузером по адресу сервера  &#039;&#039;&#039;MCM-SNIFFER&#039;&#039;&#039; (&#039;&#039;&#039;&amp;lt;nowiki&amp;gt;http://192.168.2.142&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039;) в соответствующих дашбордах должна появиться информация о перехваченных пакетах протокола МЭК-60870-5-104, создающих описанный выше трафик.&lt;/div&gt;</summary>
		<author><name>Dima</name></author>
	</entry>
</feed>