Pfs group mikrotik что это
Перейти к содержимому

Pfs group mikrotik что это

  • автор:

IPsec Tunnel

IPsec в туннельном режиме используется в основном для подключения с сторонними сетями. Указываем какие сети с нашей и с той стороны во 2 фазе IPsec, трафик начинает бегать (но не сразу).

Аппаратное шифрование IPsec

Таблица тестирования аппаратного IPsec

Если на сайте производителя у оборудования в разделе Test results есть подобная таблица, значит имеется аппаратная поддержка.
Смотрим какие вариации поддерживаются и указываем их в настройках.

Настройка фазы 1

Никогда не используйте дефолтные профили, создавайте под каждую настройку отдельные!

IPsec фаза 1

IP > IPsec > Profiles

Название должно отражать для какого подключения профиль

Хэш алгоритмы, группа Диффи — Хеллмана подбирается исходя из аппаратных возможностей MikroTik и согласуется с противоположной стороной

NAT-T так же согласуется с противоположной стороной
Но если по пути нет NAT, то эта опция не используется.

DPD используется для проверки работы IPsec.
Стандартное значение 120/5

Настройка фазы 2

IPsec фаза 2

IP > IPsec > Proposals

Всё аналогично настройкам 1 фазы по настройкам шифрования

Для параноиков можно уменьшить время жизни 2 фазы и выбрать PFS Group для генерации нового ключа, отличного от сгенерированного DF в 1 фазе.

Настройка пира

IPsec настройка пира

IP > IPsec > Peers

Создаем соединение с другой стороной, с указанием профиля 1 фазы
Если сервер является центральный, то ему незачем стучаться самому до клиентов, можно выставить режим Passive

Настройка идентификации

IPsec настройка секрета

IP > IPsec > Identities

Связываем пира с настройками идентификации, вешаем пароль (Secret) или ключ.

Настройка политики

IPsec настройка туннелирования

IP > IPsec > Policies

Выбираем Peer, ставим опцию Tunnel и указываем какие IP адреса нужно связать 2 фазой IPsec

IPsec настройка ширования

Указываем шифрование, Level — unique, если у вас несколько сетей на 2 фазе, протокол esp, если нужно шифровать, ah если нужно проверять заголовок на «подмену»
И указываем профиль 2 фазы.

Настройка NAT IPsec Policy

Чтобы трафик проходил через NAT и не нужно было делать лишних правил, добавим настройку IPsec Policy: out: none

Исключение IPsec из NAT

IP > Firewall > NAT

Тем самым NAT не будет обрабатывать IPsec траифик

Настройка маршрутизации

Чтобы «обхитрить» схему прохождения трафика, завернем маршрут до другой сети в lo интерфейс. Это даст возможность объявить об этом маршруте в OSPF

Интерфейс lo

Нужно создать Bridge интерфейс lo

Маршрутизация в lo

IP > Routes

IPIP IPsec VPN туннель между Linux машиной и Mikrotik за NAT провайдера

IPsec туннель на Linux машине будем поднимать с помощью racoon. Не буду описывать подробности, есть хорошая статья у vvpoloskin.

Устанавливаем необходимые пакеты:

Настраиваем racoon, он условно будет выступать в роли ipsec сервера. Так как mikrotik в main режиме не может передавать дополнительный идентификатор клиента, а внешний ip адрес через который он коннектится к Linux динамический, использовать preshared key (авторизацию по паролю) не получится, так как пароль должен сопоставляться либо с ip адресом подключающегося хоста, либо с идентификатором.

Будем использовать авторизацию по RSA ключам.

Демон racoon использует ключи в формате RSA, а mikrotik — в формате PEM. Если генерировать ключи утилитой plainrsa-gen идущей вместе с racoon, то конвертировать публичный ключ для Mikrotika в формат PEM с ее помощью не получится — она конвертирует только в одну сторону: PEM в RSA. Сгенерированный plainrsa-gen ключ не смогли прочитать ни openssl, ни ssh-keygen, поэтому с их помощью также не получится выполнить конвертацию.

Мы сгенерируем PEM ключ с помощью openssl, а затем конвертируем его для racoon с помощью plainrsa-gen:

Полученные ключи положим в папку: /etc/racoon/certs/server. Не забываем установить владельцем пользователя, от чьего имени запускается демон racoon (обычно root), права 600.

Настройку mikrotik опишу при подключении через WinBox.

Ключ server-name.pub.pem загрузим в mikrotik: Меню «Files» — «Upload».

Открываем раздел «IP» — «IP sec» — вкладка «Keys». Теперь генерируем ключи — кнопка «Generate Key», затем экспортируем публичный ключ mikrotika «Expor Pub. Key», скачать его можно из раздела «Files», правой кнопкой по файлу — «Download».

Импортируем публичный ключ racoon, «Import», в выпадающем списке поля «File name» ищем загруженный ранее нами server-name.pub.pem.

Публичный ключ mikrotik нужно сконвертировать

и положить в папку /etc/racoon/certs не забыв про владельца и права.

Возвращаемся в раздел «IP» — «IPsec»

Вкладка «Profiles»
Параметр
Значение
Name На ваше усмотрение (по умолчанию default)
Hash Algorithm sha512
Encryption Algorithm aes-128
DH-Group modp2048
Proposhal_check claim
Lifetime 1d 00:00:00
NAT Traversal true (ставим галочку)
DPD 120
DPD Maximum failure 5
Вкладка «Peers»
Параметр
Значение
Name На ваше усмотрение (далее MyPeer)
Address 1.1.1.1 (IP linux машины)
Local Address 10.0.0.2 (IP WAN интерфейса mikrotik)
Profile default
Exchange Mode main
Passive false
Send INITIAL_CONTACT true
Вкладка «Proposal»
Параметр
Значение
Name На ваше усмотрение (далее MyPeerProposal)
Auth. Algorithms sha512
Encr. Algorithms aes-128-cbc
Lifetime 08:00:00
PFS Group modp2048
Вкладка «Identities»
Параметр
Значение
Peer MyPeer
Atuh. Method rsa key
Key mikrotik.privet.key
Remote Key server-name.pub.pem
Policy Tamplate Group default
Notrack Chain пусто
My ID Type auto
Remote ID Type auto
Match By remote id
Mode Configuration пусто
Generate Policy no
Вкладка «Policies — General»
Параметр
Значение
Peer MyPeer
Tunnel true
Src. Address 192.168.0.0/30
Dest. Address 192.168.0.0/30
Protocol 255 (all)
Template false
Вкладка «Policies — Action»
Параметр
Значение
Action encrypt
Level requier
IPsec Protocols esp
Proposal MyPeerProposal

Скорее всего у вас, как и у меня, на WAN интерфейсе настроен snat/masquerade, это правило надо скорректировать, чтобы исходящие пакеты ipsec уходили в наш туннель:
Переходим в раздел «IP» — «Firewall».
Вкладка «NAT», открываем наше правило snat/masquerade.

Вкладка «Advanced»
Параметр
Значение
IPsec Policy out: none

Рестартуем демона racoon

Если при рестарте racoon не запускается, значит в конфиге имеется ошибка, в syslog racoon выводит информацию о номере строки, в которой обнаружена ошибка.

Демон racoon при загрузке ОС стартует раньше поднятия сетевых интерфейсов, а мы указали в секции listen опцию strict_address, необходимо добавить в файл systemd юнита racoon
/lib/systemd/system/racoon.service, в секцию [Unit], строку After=network.target.

Сейчас наши ipsec туннели должны подняться, смотрим вывод:

Если туннели не поднялись, смотрите syslog, либо journalctl -u racoon.

Теперь необходимо настроить L3 интерфейсы, чтобы можно было маршрутизировать трафик. Есть разные варианты, мы будем использовать IPIP, так как его mikrotik поддерживает, я бы использовал vti, но, к сожалению, в mikrotik его до сих пор не реализовали. От IPIP он отличается тем, что дополнительно может инкапсулировать multicast и ставить метки (fwmark) на пакеты, по которым можно их фильтровать в iptables и iproute2 (policy-based routing). Если нужна максимальная функциональность — тогда, например, GRE. Но не стоит забывать, что за дополнительную функциональность платим большим оверхедом.

Перевод неплохого обзора туннельных интерфейсов можно посмотреть тут.

На Linux:

Теперь можно добавить маршруты для сетей за mikrotik

Чтобы наш интерфейс и маршруты поднимались после перезагрузки, нужно описать интерфейс в /etc/network/interfaces и там же в post-up добавлять маршруты, либо прописать все в одном файле, например, /etc/ipip-ipsec0.conf и дергать его через post-up, не забудьте про владельца файла, права и сделать его исполняемым.

На Mikrotik:

Раздел «Interfaces», добавляем новый интерфейс «IP tunnel»:

Вкаладка «IP tunnel» — «General»
Параметр
Значение
Name На ваше усмотрение (далее IPIP-IPsec0)
MTU 1480 (если не указывать, то mikrotik начинает резать mtu до 68)
Local Address 192.168.0.2
Remote Address 192.168.0.1
Ipsec Secret Деактивируем поле (иначе будет создан новый Peer)
Keepalive Деактивируем поле (иначе интерфейс будет постоянно выключаться, так как у mikrotika какой-то свой формат этих пакетов и с linux не работает)
DSCP inherit
Dont Fragment no
Clamp TCP MSS true
Allow Fast Path true

Раздел «IP» — «Addresses», добавляем адрес:

Параметр Значение
Address 192.168.0.2/30
Interface IPIP-IPsec0

Теперь можно добавлять маршруты в сети за linux машиной, при добавлении маршрута, gateway будет наш интерфейс IPIP-IPsec0.

PS

Так как наш сервер linux является транзитным, то на нем имеет смысл задать параметр Clamp TCP MSS для ipip интерфейсов:

создаем файл /etc/iptables.conf со следующим содержимым:

и в /etc/network/interfaces
post-up iptables-restore < /etc/iptables.conf

В сети за mikrotik у меня работает nginx (ip 10.10.10.1), делаем доступным его из интернета, добавим в /etc/iptables.conf:

Не забывайте добавить соответствующие разрешения в iptables, если у вас включены фильтры пакетов.

Настройка VPN средствами IPsec Mikrotik

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

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

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

Чтобы правильно настроить VPN с помощью IPsec, необходимо понимать базовые принципы.

Принципы работы протокола IPsec и базовые термины

IPsec — это набор протоколов, которые можно разделить на следующие основные группы:

  • Internet Key Exchange (IKE) — протоколы, которые генерируют и раздают ключи шифрования для AH и ESP;
  • Authentication Header (AH) — протокол заголовка аутентификации, предназначен для проверки целостности передаваемого пакета данных (защита от изменения содержимого пакета или подмены исходного адреса);
  • Encapsulating Security Payload (ESP) — защищенный протокол инкапсуляции данных, обеспечивает непосредственную защиту данных путем шифрования на общих ключах, а также имеет собственную схему аутентификации подобную AH;

IPsec может работать в двух режимах: транспортном и туннельном:

  • В транспортном режиме, ESP-заголовок вставляется между IP-заголовком и полезными данными оригинального пакета, а в конец добавляется ESP-трейлер и ESP-аутентификация. Шифруются только полезные данные и ESP-трейлер. Транспортный режим может быть использован для защиты туннелей, организованных иным способом (например L2TP).
  • В туннельном режиме, оригинальный ip-пакет инкапсулируется в новый и таким образом шифруется весь исходный пакет. Туннельный режим используется для создания VPN.

При создании туннеля создается связь, которая называется SA (Security Association).
Каждая связь SA создается для однонаправленного соединения. Так как данные необходимо передавать в двух направлениях, то SA создаются парами. Одна пара SA создается для протокола AH, другая для ESP. Созданные SA хранятся в базе данных узлов (роутеров Mikrotik), которые создают туннель.

Если на узле создалась SA — значит VPN туннель успешно установлен.

На каждом узле имеется база данных политики безопасности (Security Policy Database).
Политики содержат следующие настройки:

  • алгоритмы шифрования/дешифрования;
  • способы идентификация узла: pre-shared keys или RSA-сертификат;
  • как часто повторять идентификацию узла и менять ключ шифрования;
  • использовать режим туннеля или транспорта;
  • контрольные суммы целостности данных;
  • использовать AH, ESP или оба;
  • опция PFS и выбор группы Deffie Hellman.

Установка соединения IPsec происходит в два этапа: Phase 1 и Phase 2.

Первоначальная аутентификация сторон и обмен общими секретными ключами происходит с помощью протокола IKE. Процесс работы протокола IKE состоит из двух этапов:

Phase 1
Узлы согласовывают алгоритмы для последующего обмена информацией и аутентифицируются. Происходит обмен общими ключами по алгоритму Deffie Hellman. В результате создается безопасный канал IKE SA.

Phase2
Генерируются ключи шифрования IPsec, согласовываются политики. В результате создается соединение IPsec SA

В новой версии протокола IKEv2 процесс происходит за одну фазу в несколько шагов.

Site-to-Site туннель: создание постоянного VPN IPsec

Site-to-site туннель позволяет создать постоянный защищенный канал VPN между двумя офисами через интернет. Каждый офис имеет свою локальную сеть и нуждается в доступе к локальной сети другого офиса.

Адреса 10.1.100.1 и 10.2.100.1 в реальности не относятся к публичным ip-адресам и не используются в сети интернет.

Нормальной работе IPsec туннеля могут препятствовать правила NAT и Fasttrack. Это необходимо учесть и создать правила обхода перед настройкой VPN или после.

Обход NAT и Fasttrack

Без обхода NAT и Fasttrack туннель IPsec не будет работать!

Правила трансляции в NAT (masquerade) меняют адрес источника и роутер не сможет зашифровать пакет с адресом источника отличающимся от заданного в политике IPsec. Это приведет к тому, что сетевой траффик не будет проходить через туннель и пакеты будут теряться.

Правило обхода NAT помогает решить эту проблему.

Правило должно находиться выше всех остальных правил в таблице NAT.

Если на роутере используется Fasttrack, то это тоже сломает работу IPsec так как пакеты будут обходить политики IPsec. Для решения этой проблемы добавьте разрешающие правила accept перед Fasttrack.

Нужно на обоих роутерах разрешить прохождение транзитного трафика в двух направлениях — из сети офиса 1 в сеть офиса 2 и в обратном направлении:

На картинке ниже пример правила для трафика из сети Офиса 1 в сеть Офиса 2. Правило для обратного направления трафика будет отличаться адресами Src. Address 192.168.2.0/24 и Dst. Address 192.168.1.0/24

Однако создание правил в таблице Filter сможет существенно повысить нагрузку на CPU в случаях, когда используется множество туннелей и передается значительное количество траффика. В такой ситуации лучше не использовать таблицу Filter для правил обхода, а создать их в IP/Firewall/RAW. Это позволит не отслеживать соединения и исключить обработку находящихся выше правил , что приведет к снижение нагрузки на CPU.

После добавление правил на обоих роутерах, в таблице RAW должны присутствовать следующие правила:

Настройка IPsec на роутере офиса №1:

1. Настройте Profile для фазы 1

Профили определяют набор параметров, которые будут использованы для согласования IKE в фазе 1.

dh-groupe — выбор группы Deffie Hellman
enc-algoritn — алгоритм шифрования
name — имя профиля

При выборе алгоритма шифрования следует учитывать влияние на производительность канала. Если скорость канала важна для вас — выбирайте алгоритмы, которые Mikrotik поддерживает аппаратно. На wiki Mikrotik есть таблица.

2. Настройте Proposal для фазы 2

Proposal или предложение — информация, которая будет отправлена сервисами IKE, чтобы установить соединения SA по определенным политикам.

auth-algorithms — алгоритм аутентификации;
enc-algorithms — алгоритм шифрования;
name — имя политики (указывайте такое же как в профиле, чтобы было понятно к какому профилю относится политика);
pfs-group (Perfect Foorward Security) — генерирует дополнительные сессионные ключи на основе ключей сторон и согласует их по алгоритму Деффи Хеллмана (даже если общий ключ будет перехвачен, то трафик им расшифровать не получится).

3. Добавьте Peer

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

address — публичный адрес удаленного роутера
name — любое понятное имя
profile — профиль используемый для соединения

Для работы IPsec должны быть доступны порты UDP/4500 (IPsec NAT traversal) и UDP/500 (IKE). Проверьте файрволл, чтобы не было правил, блокирующих трафик на эти порты.

4. Создайте Identity — секретная фраза для идентификации.

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

5. На завершающем этапе создайте Policy (Политику), которая контролирует сети/хосты защищенного канала.

src-address — адрес сети источника (офиса 1)
dst-address — адрес сети назначения (офиса 2)
src-port — порт источника (any — все порты)
dst-port — порт назначения
tunnel — туннельный режим
action — что делать с пакетами (encrypt — шифровать)
proposal — какое применять предложение
peer — с каким узлом устанавливать соединение

Конфигурация IPsec для роутера офиса №2:

Конфигурация второго узла идентична первому, с соответствующими ip-адресами. Последовательность настройки выполняйте в таком же порядке.

Blog of Khlebalin Dmitriy

Cisco-Mikrotik IP-IP. Туннель с Микротиком с белым IP.

Наконец дошли руки посмотреть интеграцию с Cisco. GRE_ipsec за NAT так и не заработал, решили посмотреть схему IP_ipsec (IP-IP).

До сего момента я никогда ранее не пробовал строить такие туннели, наткнулся вот на этот пост и решил попробовать:

Спасибо автору, за понятный, а главное, рабочий вариант.

Набросал вот такую схему в GNS3.

Сначала попробую настроить туннель с Микротиком с белым IP, затем с Микротиком за NAT.

Настроим Cisco.

Cisco_head(config-if)#ip address 77.77.77.226 255.255.255.0

*Mar 1 00:12:08.019: %LINK-3-UPDOWN: Interface FastEthernet0/0, changed state to up

*Mar 1 00:12:09.019: %LINEPROTO-5-UPDOWN: Line protocol on Interface FastEthernet0/0, changed state to up

Enter configuration commands, one per line. End with CNTL/Z.

Cisco_head(config)#interface fastEthernet 0/1

Cisco_head(config-if)#ip address 10.192.0.1 255.255.252.0

*Mar 1 00:16:26.039: %LINK-3-UPDOWN: Interface FastEthernet0/1, changed state to up

*Mar 1 00:16:27.039: %LINEPROTO-5-UPDOWN: Line protocol on Interface FastEthernet0/1, changed state to up

*Mar 1 00:16:32.151: %SYS-5-CONFIG_I: Configured from console by console

Пропишем статический маршрут в нашу сеть филиала:

Cisco_head(config)#ip route 88.88.88.0 255.255.255.0 fastEthernet 0/0

Добавим в конфиг:

! Политика авторизации — хеш мд5 и шифрование 3des по парольному ключу (pre-share)

crypto isakmp policy 20

encr 3des

hash md5

authentication pre-share

! group2 означает, что в микротике надо установить dh-group=modp1024

group 2

crypto isakmp key MyPassWord address 88.88.88.2 no-xauth

crypto isakmp keepalive 30

! Трансформ. Внимание! Используется transport, а не tunnel режим

crypto ipsec transformset transform-2 esp-3des espmd5-hmac

mode transport

crypto dynamic-map dynmap 10

set transform-set transform-2

reverse-route

crypto map vpnmap client configuration address respond

crypto map vpnmap 5 ipsec-isakmp dynamic dynmap

crypto map vpnmap 10 ipsec-isakmp

crypto map vpnmap 93 ipsecisakmp

description Mikrotik_Local

set peer 88.88.88.2

set security-association lifetime seconds 86400

set transform-set transform-2

! pfs group2 означает, что в микротике надо установить dh-group=modp1024

set pfs group2

! access-лист, разрешающий соединение

match address 137

! Сам тоннель (здесь указываем наш внешний интерфейс)

interface Tunnel93

description tunnel_Mikrotik

ip unnumbered FastEthernet0/0

tunnel source 77.77.77.226

tunnel destination 88.88.88.2

! тип тонеля ipip

tunnel mode ipip

interface FastEthernet0/0

description Internet

ip address 77.77.77.226 255.255.255.224

no ip redirects

no ip unreachables

no ip proxy-arp

ip wccp web-cache redirect out

ip virtual-reassembly

ip route-cache policy

no ip mroute-cache

duplex auto

speed auto

no mop enabled

! ВКЛЮЧАЕМ ШИФРОВАНИЕ НА ИНТЕРФЕЙСЕ

crypto map vpnmap

! Роутинг сети, находящейся за микротиком

ip route 192.168.88.0 255.255.255.0 Tunnel93

! Разрешение на соединение тоннеля

access-list 137 permit ip host 77.77.77.226 host 88.88.88.2

Enter configuration commands, one per line. End with CNTL/Z.

% Interface Tunnel93 does not support adjustable maximum datagram size

*Mar 1 02:12:54.603: %SYS-5-CONFIG_I: Configured from console by console

Зададим IP на туннельном интерфейсе:

Enter configuration commands, one per line. End with CNTL/Z.

Cisco_head(config-if)#ip address 10.33.0.1 255.255.255.0

*Mar 1 02:27:29.947: %SYS-5-CONFIG_I: Configured from console by console

! Роутинг сети, находящейся за микротиком сразу поправим на IP нашего туннельного интерфейса.

no ip route 192.168.88.0 255.255.255.0 Tunnel93

ip route 192.168.88.0 255.255.255.0 10.33.0.1

Со стороны Микрота (бранч).

Здесь же сразу пропишем руками статический маршрут в Головной офис:

Интерфейсы-IP Tunnel. Добавить:

На циске MTU выставили 1460, здесь соответственно выставляем тоже самое.

В разделе IP-IPSec-Proposals в дефолтном правиле ОБЯЗАТЕЛЬНО сменить SHA1 на MD5!

IP-IPSec-Peers. Добавить:

В Profiles правим:

Профиль в предыдущем шаге у нас выбран дефолтный, соответственно здесь правим дефолтный.

Все настройки должны быть согласованы с циской на другой стороне:

Если это так, то должна подняться сессия:

И автоматически сгенерируются политики:

IP-Routes. Добавим:

Для более детального логирования добавим:

После этого можно заглянуть обратно в IP-IPSec, закладка Instaled SAs, и вы должны увидеть, что байты бегут по туннелю в обе стороны:

В итоге, у нас со стороны микрота получились следующие маршруты:

Проверим MTU со стороны Микрота (запингуем внутреннюю сетку головы большими пакетами):

Пакеты пролазят-это радует.

Для верности посмотрим, что у нас от компа до компа:

В целом все так, как должно быть.

На этом настройка закончена, но самое интересное, сделать все тоже самое за NAT.

Но это уже тема следующего повествования…

Всем хорошей работы.

P.S. В продакшине оказалось не все так гладко, как на стенде. В Голове у нас стоят маршрутизаторы Cisco ISR 4331, туннель никак не хотел «подниматься», оказалось все дело в прошивке, пришлось их обновлять до последних прошивок. Все сложилось не так гладко, как хотелось бы, но сложилось. Еще раз благодарю Рому и Стаса за подробные разъяснения по некоторым, непонятным для меня вопросам (а их было не мало), по теме. В настоящий момент в продакшин введено уже два Микрота пока с белыми адресами. Две недели, полет нормальный… Будем посмотреть, как события будут развиваться дальше….

Share this:

Понравилось это:

Sorry, the comment form is closed at this time.

О сайте

foto_middle_blogЗаписки из мира IT…

В этом блоге, я пишу заметки о своей, как повседневной жизни, так и жизни и работе в сфере IT технологий. Собираю интересные ссылки, выражаю свои мысли и прочее… В основном посты посвящены, Управленческим моментам и решениям, различным продуктам Microsoft и VMWare, которые я эксплуатирую многие годы, Nix, MacOS, сетке, и другим интересным вопросам и задачам, с которыми приходится ежедневно сталкиваться и иметь дело. Здесь приведены не только мои посты, но и посты, которые были найдены мною на безграничных просторах интернета. Все написанное здесь, было проделано мною или моими коллегами при моем непосредственном участии на виртуальных машинах или в продакшин среде, о чем свидетельствуют комментарии в текстах. Всем удачи в работе.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *