Переименовываем интерфейсы в Ubuntu 18.04|20.04|22.04

В данной статье расcкажу как можно легко переименовать сетевые интерфейсы в Ubuntu18.04|20.04|22.04.




Ещё в Ubuntu 16.04 для настройки сети мы использовали файл /etc/network/interfaces и при помощи команды service networking restart запускали сделанные изменения, в указанном выше файле, в работу. Но уже начиная с Ubuntu 18.04 разработчики внедрили новый тип настройки сети – NetPlan, а также пересмотрели названия сетевых интерфейсов. Это вызвало некоторые неудобства с настройкой сети. Представьте что вы используете USB-modem, который в свою очередь поднимает сетевой интерфейс, и вместо названия eth0 выдает вам что-то вроде этого: nse45trg6504. Как вы думаете в конфигурационном файле утилиты netplan будет удобно вбивать данное название? Думаю что НЕТ!




Но как изменить название интерфейса на более привычное? Да очень просто.




Переименовываем сетевой интерфейс в Ubuntu 18.04|20.04|22.04




Запускаем терминал на нашей системе. Сделать это можно нажав ctrl+T, ну или при помощи ssh подключения.




Далее смотрим какие интерфейсы присутствуют в нашей системе, для этого вводим следующую команду:




ip addr




1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: ens0f1: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast state DOWN group default qlen 1000
    link/ether 4c:ed:fb:da:8c:c9 brd ff:ff:ff:ff:ff:ff




Альтернатива данной команде может быть старая команда ifconfig -a, но разработчики в сборках удалили её. Если хотите можете установить и её, для меня же она более наглядно выводит результат.




Для установки вводим:




sudo apt install net-tool




ну а далее




sudo ifconfig -a




lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 35  bytes 4950 (4.8 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 35  bytes 4950 (4.8 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

ens0f1: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
        ether 4c:ed:fb:da:8c:c9  txqueuelen 1000  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0




Как видно из вывода у меня в системе присутствует всего два интерфейса – это локальная петля lo и сетевой интерфейс ens0f1. Вот как раз второй интерфейс мы и будем переименовывать.




Для этого запоминаем или скопируйте у данного интерфейса его MAC-адрес (информация в выводе выше). У меня он следующий:4c:ed:fb:da:8c:c9




Далее открываем файл настроек утилиты netplan:




sudo nano /etc/netplan/00-installer-config.yaml




  • у вас может быть другое название файла, но суть от этого не меняется.




Вот теперь внесем изменения в данный файл.




Помните что в данном файле нужно четко соблюдать количество пробелов для блоков и ни в коем случае не использовать табуляцию.




Было




# This is the network config written by 'subiquity'
network:
  version: 2
  ethernets:
    ens0f1:
      dhcp4: true




Стало




# This is the network config written by 'subiquity'
network:
  version: 2
  ethernets:
    eth0:
      dhcp4: true
      match:
        macaddress: 4c:ed:fb:da:8c:c9
      set-name: eth0




После изменений вводим команду для проверки и применении настроек




sudo netplan try




если ошибок в файле не было, то должно появится вот такое окно с отчетом в 120 секунд:




 Warning: Stopping systemd-networkd.service, but it can still be activated by:
  systemd-networkd.socket
Do you want to keep these settings?


Press ENTER before the timeout to accept the new configuration


Changes will revert in 120 seconds




Configuration accepted.




Если же появились ошибки, то их необходимо исправить. В выводе будет указанна строка и порядковый номер в котором допустили ошибку. Еще раз повторюсь – не забываем о yaml синтаксисе при редактировании конфигурационного файла.



[endtxt]




. . . .




2022-03-22T17:40:05
Network

Проброс PPPoE соединение в Linux

Сегодня поговорим о том, как можно пробросить PPPoE соединение на Linux к другим машинам находящимся в локальной сети.






Предыстория




Завел я у себя дома небольшой сервер для всяких мирских нужд (торрент качалка, NAS-сервер, MiniDLNA-сервер, Web-сервер, Cloud-сервер ну и так далее.) Вот все это великолепие решил настроить в виртуальной среде. Для достижения поставленной цели выбрал проект Proxmox. На данный момент это версия Proxmox 7.1-4. В качестве провайдера выступает не без известный RT, у которого в качестве идентификации клиента используется протокол PPPoE. Вот тут-то и начинаются танцы с бубном:




В Proxmox v7 используется пакет – ifupdown2, для управления сетевыми настройками. Мне же чтобы поднять PPPoE соединение нужен был пакет pppoeconf у которого в зависимостях еще используется пакет – ifupdown. Ну как вы понимаете данные пакеты мешают работе друг друга. Встал выбор:




  • либо сносить с родительской машины, а это сам Proxmox, пакет ifupdown2 и устанавливать pppoeconf.
  • либо же поднимать виртуальную машину, а у же в ней использовать PPPoE соединение.




Я решил идти по второму пути, а для этого необходимо было пробросить PPPoE в локальную сеть. В этом мне помогла утилита pppoe-relay идущая в зависимостях пакета pppoe.




Синтаксис команды pppoe-relay




pppoe-relay [опции]




Опции pppoe-relay




  • S interface – Добавляет выбранный интерфейс в список интерфейсов, управляемых pppoe-relay. К этому интерфейсу могут быть подключены только PPPoE-серверы.
  • -С interface – Добавляет выбранный интерфейс в список интерфейсов, управляемых pppoe-relay. К этому интерфейсу могут быть подключены только PPPoE-клиенты.
  • -B interface – Добавляет интерфейс в список интерфейсов, управляемых pppoe-relay. К этому интерфейсу могут быть подключены как PPPoE-клиенты, так и серверы.
  • -n num – Позволяет не более num одновременных сеансов PPPoE. Если не указано, то значение по умолчанию равно 5000. num может варьироваться от 1 до 65534.
  • -i timeout – Задает тайм-аут простоя сеанса. Если оба одноранговых узла в сеансе простаивают более 30 секунд, сеанс завершается. Если тайм-аут указан равным нулю, сеансы никогда не будут прекращены из-за простоя.




Обратите внимание, что процедура истечения срока действия сеанса ожидания никогда не выполняется чаще, чем каждые 30 секунд, поэтому тайм-аут является приблизительным. Значение тайм-аута по умолчанию составляет 600 секунд (10 минут).




  • -F – Опция приводит к тому, что pppoe-relay не разветвляется на задний план; вместо этого он остается на переднем плане.
  • -h – Опция печатает краткое сообщение об использовании и завершает работу.




Примеры pppoe-relay




pppoe-relay -S eth0 -C eth1




Приведенный выше пример ретранслирует кадры между PPPoE-клиентами в сети eth1 и PPPoE-сервером в сети eth0.




pppoe-relay -B eth0 -B eth1




В данном пример применяется прозрачная ретрансляция. Кадры ретранслируются между любым набором клиентов и серверов в сетях eth0 и eth1.




pppoe-relay -S eth0 -C eth1 -C eth2 -C eth3




Этот пример ретранслирует кадры между сервером в сети eth0 и клиентами в сетях eth1, eth2 и eth3.




Как узнать имена интерфейсов.




Для того чтобы узнать какие у вас присутствуют интерфейсы необходимо набрать следующую команду:




ip addr




1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: enp3s0f0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 3c:d9:2b:f9:f4:21 brd ff:ff:ff:ff:ff:ff
    inet6 fe80::3ed9:2bff:fef9:f44c/64 scope link 
       valid_lft forever preferred_lft forever
3: enp3s0f1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq master vmbr0 state UP group default qlen 1000
    link/ether 3c:d9:2b:f9:f4:22 brd ff:ff:ff:ff:ff:ff
4: enp4s0f0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc mq master vmbr0 state DOWN group default qlen 1000
    link/ether 3c:d9:2b:f9:f4:23 brd ff:ff:ff:ff:ff:ff
5: enp4s0f1: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc mq master vmbr1 state DOWN group default qlen 1000
    link/ether 3c:d9:2b:f9:f4:24 brd ff:ff:ff:ff:ff:ff
.....




или же если у вас установлен пакет net-tool, то команда может быть вот такой:




ifconfig




lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 3730211  bytes 709093223 (676.2 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 3730211  bytes 709093223 (676.2 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

enp3s0f0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet6 fe80::3ed9:2bff:fef9:f44c  prefixlen 64  scopeid 0x20<link>
        ether 3c:d9:2b:f9:f4:21  txqueuelen 1000  (Ethernet)
        RX packets 117905888  bytes 153216511837 (142.6 GiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 47840145  bytes 17578056257 (16.3 GiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

enp3s0f1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        ether 3c:d9:2b:f9:f4:22  txqueuelen 1000  (Ethernet)
        RX packets 36628262  bytes 16051408741 (14.9 GiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 99954928  bytes 127959590855 (119.1 GiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

enp4s0f0: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
        ether 3c:d9:2b:f9:f4:23  txqueuelen 1000  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

enp4s0f1: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
        ether 3c:d9:2b:f9:f4:24  txqueuelen 1000  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0




Заключение




После использования утилиты pppoe-relay я перекинул кадры PPPoE в локальную сеть. На Виртуальной машине установил пакет pppoeconf и с помощью него установил соединение с интернетом. Далее уже настроил данную виртуальную машину на раздачу интернета в локальную сеть, т.е. поднял на ней DHCP-сервер, DNS-сервер и NAT. Теперь все это великолепие работает без перебоев. В будущем планирую установить USB-modem для бесперебойного канала связи. Ведь как говорится может случится всякое, а особенно с провайдером RT.



[endtxt]




. . . .




2022-03-22T10:34:32
Network

192.168.1.254 Вход в роутер. Настройка WI-FI роутера

Во многих современных Wi-Fi роутерах используется IP адрес http://192.168.1.254/ для входа в личный кабинет для управления настройками и совершения других действий, например усиления мощности интернет-сигнала.

Чаще всего вход в 192.168.1.254 подразумевает использование оборудования компании NETIS, роутеров компании MGTS (МГТС) работающих по технологии GPON.

192-168-1-254 Читать

Как хранить диаграммы Helm в реестре контейнеров Azure

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

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

Не так давно Helm объявил, что будет поддерживать артефакты OCI, которые представляют собой не что иное, как открытую спецификацию OCI для распространения образов контейнеров и других типов данных, называемых артефактами.

Эта спецификация, как и все другие спецификации OCI, не зависит от облака, что делает ее фантастическим инструментом для работы.

 

Контейнерные записи

Запись контейнера (CR) или реестр — это то, что приходилось использовать всем, кто когда-либо имел дело с контейнерами. CR — это место, где мы храним наши образы контейнеров, поэтому мы можем получать их из любого места и в любое время.

По сути, изображение — это набор файлов, которые имеют примерно такую ​​структуру:

 ├── blobs

       │   └── sha256

       │       ├── 1b251d38cfe948dfc0a5745b7af5ca574ecb61e52aed10b19039db3...

       │       ├── 31fb454efb3c69fafe53672598006790122269a1b3b458607dbe106...

       │       └── 8ec7c0f2f6860037c19b54c3cfbab48d9b4b21b485a93d87b64690f...

       ├── index.json

       └── oci-layout


 

Файл index.json представляет собой список всех доступных манифестов, то есть это список всех изображений, доступных в определенном месте. В нашем случае это список всех карт руля.

Каждый файл внутри blobs/sha256 представляет собой JSON, который идентифицирует артефакт, будь то изображение или диаграмма. Этот JSON соответствует спецификации OCI для файлов SHA.

Если коротко, то это список настроек, описывающих характеристики BLOB, его настройки, свойства, слои файловой системы, а также начальные команды.

В случае Helm Chart у нас есть следующий файл:

{

  "schemaVersion": 2,

  "config": {

    "mediaType": "application/vnd.cncf.helm.config.v1+json",

    "digest": "sha256:8ec7c0f2f6860037c19b54c3cfbab48d9b4b21b485a93d87b64690fdb68c2111",

    "size": 117

  },

  "layers": [

    {

      "mediaType": "application/tar+gzip",

      "digest": "sha256:1b251d38cfe948dfc0a5745b7af5ca574ecb61e52aed10b19039db39af6e1617",

      "size": 2487

    }

  ]

}


 

Обратите внимание, что у нас есть дифференциация mediaType, в то время как обычный образ Docker имеет тип application/vnd.oci.image.config.v1+json.

Здесь у нас тип   application/vnd.cncf.helm.config, то же самое и со слоями, каждый слой изображения OCI имеет тип application/vnd.oci.image.layer.v1.tar+gzip, а здесь у нас есть только формат .tar.gz.

 

Размещение диаграмм в Реестре контейнеров Azure

Размещение диаграмм Helm в Azure CR очень похоже на их локальное хранение. Вам необходимо иметь доступ к Azure через Azure CLI. Мы предполагаем, что у вас уже есть Azure CLI, поэтому давайте создадим наш ACR.

Сначала мы должны создать нашу группу ресурсов, а затем ACR с помощью команд:

az group create -n helm-reg -l eastus

az acr create -n chartregistry$RANDOM -g helm-reg --sku Basic -o tsv --query loginServer

 

Совет — сохранить имя репозитория в переменной:

export ACR=$(az acr create -n chartregistry$RANDOM -g helm-reg --sku Basic -o tsv --query loginServer)


 

Теперь мы собираемся войти в наш реестр, используя управляемые ключи Azure, но нам нужно включить административный контроль с помощью az acr update -n $ACR —admin-enabled true.

Затем выполните следующие две команды, чтобы получить учетные данные для входа и сохранить их в оболочке:

export ACRUSER=$(az acr credential show -n $ACR --query username -o tsv)

export ACRPASS=$(az acr credential show -n $ACR --query 'passwords[0].value' -o tsv)


 

Теперь мы можем войти в наш реестр с помощью Helm helm registry login $ACR —username $ACRUSER —password $ACRPASS, и отсюда у нас уже настроен наш реестр.

Давайте создадим еще один артефакт с помощью helm chart save hrepo $ACR/hrepo:2.1.3(в качестве примера я буду использовать диаграмму из пустого репозитория с именем hrepo). Затем мы подтолкнем его с помощью helm chart push $ACR/hrepo:3.8.0.

Как только он будет там, мы сможем перечислить все в репозитории с помощью команды Azure CLI:

az acr repository show -n $ACR --repository hrepo


 

Обратите внимание, что у нас будет именно то, что мы отправили:

{

  "changeableAttributes": {

    "deleteEnabled": true,

    "listEnabled": true,

    "readEnabled": true,

    "writeEnabled": true

  },

  "createdTime": "2022-03-05T20:56:49.6118202Z",

  "imageName": "hrepo",

  "lastUpdateTime": "2022-03-05T20:56:49.7812323Z",

  "manifestCount": 1,

  "registry": "chartregistry23657.azurecr.io",

  "tagCount": 1

}


 

Мы также можем получить более подробную информацию с помощью команды show-manifests, добавив —detail:

az acr repository show-manifests -n $ACR --repository hrepo --detail


 

Это даст нам точное определение артефактов OCI:

[

  {

    "changeableAttributes": {

      "deleteEnabled": true,

      "listEnabled": true,

      "quarantineState": "Passed",

      "readEnabled": true,

      "writeEnabled": true

    },

    "configMediaType": "application/vnd.cncf.helm.config.v1+json",

    "createdTime": "2022-03-05T20:56:49.7213057Z",

    "digest": "sha256:4780713fa23d7144d356c353795b5b84e66ad2b8bbd47c7118b4b85435d50bbc",

    "imageSize": 1378,

    "lastUpdateTime": "2022-03-05T20:56:49.7213057Z",

    "mediaType": "application/vnd.oci.image.manifest.v1+json",

    "tags": [

      "2.1.3"

    ]

  }

]


 

Чтобы сохранить его, мы должны просто:

helm chart pull $ACR/hrepo:3.8.0

helm chart export $ACR/hrepo:3.8.0 -d ./destination

helm install hrepo-acr ./destination

 

Заключение

Хотя использовать Helm легко, все же не существует «простого» способа разместить диаграмму Helm как своего рода частную запись.

Хотя в Helm есть отличные инструменты, такие как Chart Museum, они все же не являются полностью стандартными, и для легкой распределенной разработки важно, чтобы у нас были открытые стандарты, которым может следовать каждый в целом.

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



2022-03-21T17:26:42
Microsoft

Windows 10 не требует ключа продукта для установки и использования

В отличие от более старых версий Windows, таких как Windows 7, Microsoft позволяет загружать и устанавливать Windows 10 без обязательного предоставления лицензионного ключа. Мало того, вы также можете использовать Windows 10 без ее активации навсегда. Тем не менее, есть некоторые ограничения, которые компания установила, что может немного раздражать. Хотите узнать больше о том, что значит использовать Windows 10 без ключа продукта? Читайте дальше, чтобы узнать, как установить Windows 10 без серийного ключа и что произойдет, если вы используете его без активации:

Нужен ли ключ продукта для загрузки Windows 10?

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

Чтобы получить Windows 10, вы можете использовать любой веб-браузер для загрузки Media Creation Tool с веб-сайта Microsoft, здесь: Загрузите Windows 10. Когда вы попадете на страницу, нажмите или коснитесь кнопки «Загрузить инструмент сейчас» в разделе «Создать установочный носитель Windows 10». Затем сохраните и запустите исполняемый файл Media Creation Tool и используйте его для создания загрузочного USB-накопителя или DVD-диска с Windows 10.

Вам не нужен ключ продукта для загрузки Windows 10

Если вам нужно подробное руководство по загрузке и созданию установочного носителя с помощью Media Creation Tool, в этом руководстве показаны все шаги: Windows 10 Media Creation Tool — создание установочного USB-накопителя или ISO-образа.

Как установить Windows 10 без ключа продукта

После создания установочного носителя Windows 10 используйте его для загрузки компьютера, устройства или виртуальной машины. Затем запустите процесс установки Windows 10, как обычно.

Начните установку Windows 10, как обычно.

Когда вы дойдете до шага, на котором мастер установки Windows 10 попросит вас активировать Windows, нажмите или коснитесь «У меня нет ключа продукта».

Выберите У меня нет ключа продукта

Затем продолжите процесс установки Windows 10 в обычном режиме: мастер установки больше не будет запрашивать ключ продукта.

Что произойдет, если я установлю Windows 10 без ключа продукта?

При установке Windows 10 без предоставления серийного ключа могут возникнуть два сценария:

  • Это не первый раз, когда вы устанавливаете Windows 10 на свой компьютер или устройство, и предыдущая установка Windows 10 была активирована либо путем покупки нового лицензионного ключа Windows 10, либо с помощью предложения бесплатного обновления с Windows 7 или Windows 8.1, сделанная Microsoft в прошлом. В этом случае ваша новая Windows 10 будет автоматически бесплатно активирована, даже если на этот раз вы не ввели ключ продукта.
  • Это первый раз, когда вы устанавливаете Windows 10 на свой компьютер или устройство, и в этом случае на нем никогда не работала активированная операционная система Windows 10. В этом случае Microsoft не активирует Windows 10, пока вы не предоставите ключ продукта. Пока вы этого не сделаете, операционная система будет работать, но с рядом ограничений, которые мы перечислим в следующем разделе этой статьи.

Каковы ограничения нелицензионной копии Windows 10?

Если вы устанавливаете Windows 10 без ключа продукта и Microsoft не активирует его, вы сможете использовать его неограниченное время, но с парой ограничений. Наиболее важные из них следующие:

  • Windows 10 покажет водяной знак «Активировать Windows» в правом нижнем углу экрана.
  • Вы не сможете персонализировать свою Windows 10 из приложения «Настройки». К сожалению, это означает, что вы не можете изменить такие вещи, как фоновое изображение, цвета и темы, или настроить внешний вид меню «Пуск» или панели задач.
  • Приложение «Настройки» покажет уведомления о том, что ваша Windows 10 не активирована, и порекомендует вам приобрести ключ продукта Windows 10.

Вы можете использовать Windows 10 без ключа продукта навсегда, с некоторыми ограничениями.

Это основные недостатки использования Windows 10 без ключа продукта. В остальном нелицензионная копия Windows 10 работает так же, как и активированная. Вы можете использовать его так долго, как хотите.

Вы используете Windows 10 без ключа продукта?

Таким образом, Microsoft позволяет загружать и устанавливать Windows 10 без лицензионного ключа. Он даже позволяет вам использовать его столько, сколько вы хотите, даже не активируя его. Тем не менее, есть некоторые ограничения, если вы это сделаете. Достаточно ли их, чтобы заставить вас купить ключ продукта Windows 10? Или вы собираетесь использовать Windows 10 без ее активации? Дайте нам знать в комментариях ниже.



2022-03-21T16:08:38
Вопросы читателей