Что такое виртуальное соединение

Что такое виртуальные сети и как они работают?

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

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

На видео: VLAN — Виртуальные локальные сети

Как работает виртуальная сеть?

Виртуальная сеть соединяет виртуальные машины и устройства, независимо от их местоположения, с помощью программного обеспечения. В физической сети, функции модели OSI (стек сетевых протоколов OSI/ISO) выполняются в пределах физических коммутаторов и маршрутизаторов. Кроме того, физические сетевые интерфейсные карты (NIC) и сетевые адаптеры используются для подключения компьютеров и серверов к сети. Виртуальная сеть переносит эти и другие действия на программное обеспечение. Программное приложение, называемое виртуальным коммутатором или vSwitch, управляет и направляет связь между существующей физической сетью и виртуальными частями сети, такими как виртуальные машины. А адаптер виртуальной сети позволяет компьютерам и виртуальным машинам подключаться к сети, в том числе позволяя всем машинам в локальной сети (LAN) подключаться к более крупной сети.

В физической сети, локальные сети создаются для подключения нескольких устройств к общим ресурсам, таким как сетевое хранилище, обычно через кабели Ethernet или Wi-Fi. Но виртуальная сеть создает возможность для виртуальных LAN (VLAN), где группировка настраивается с помощью программного обеспечения. Это означает, что компьютеры, подключенные к различным сетевым коммутаторам, могут вести себя так, как если бы все они были подключены к одному и тому же коммутатору, и, наоборот, компьютеры, совместно использующие кабели, могут храниться в отдельных сетях, а не физически подключаться к машинам с использованием кабельного оборудования и аппаратных средств.

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

Примеры виртуальных сетей:

1. Виртуальная сеть VPN

2. Виртуальная сеть VLAN

Еще одним примером виртуальной сети является виртуальная локальная сеть VLAN. VLAN — это подгруппа сети, которая объединяет несколько сетевых устройств в одну группу или домен и отделяет ее от остальных. VLAN повышают скорость и производительность сети за счет более эффективной маршрутизации трафика между этими подгруппами или доменами. Сети VLAN также обеспечивают значительно больший контроль над сетевыми устройствами и трафиком. Изоляция определенных данных в отдельной виртуальной локальной сети обеспечивает дополнительные преимущества в области безопасности, особенно для больших сетей, затрудняя несанкционированный мониторинг или вмешательство в сеть. В VLAN также нет необходимости прокладывать новые кабели или вносить большие изменения в сетевую инфраструктуру.

3. Виртуальная сеть VXLAN

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

На видео: Подход компании Scaleway к фабрикам на основе VXLAN EVPN

Источник

Сетевое программирование для разработчиков игр. Часть 3: виртуальные соединения поверх UDP

Виртуальные соединения поверх UDP

Введение

Привет. Меня зовут Гленн Фидлер и я приветствую вас в третьей статье из цикла “Сетевое программирование для разработчиков игр”.

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

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

Что такое виртуальное соединение. Смотреть фото Что такое виртуальное соединение. Смотреть картинку Что такое виртуальное соединение. Картинка про Что такое виртуальное соединение. Фото Что такое виртуальное соединение
В качестве первого шага к реализации системы соединений, мы рассмотрим наиболее простой случай: создание виртуального соединения между двумя компьютерами.

Но сначала, нам нужно более плотно разобраться, как работает интернет.

Интернет — это не набор труб

В 2006 году сенатор Тед Стивенс вошел в историю интернета со своей знаменитой речью об Акте Сетевого Нейтралитета:

“Интернет — это не штука, в которую можно что-то положить. Не большой грузовик. Это набор труб”.

Когда я только начинал пользоваться интернетом, я думал точно так же, как Тед. Сидя в компьютерном классе Сиднейского Университета в 1995 году, я “серфил в интернете” с помощью новомодной штуки, которая называлась Netscape Navigator, и не имел ни малейшего понятия, что там происходило на самом деле.

Тогда я думал, что каждый раз, когда я подключался к какому-либо сайту, создавалось настоящее подключение, как при телефонном разговоре. И я думал — сколько стоит подключиться к сайту? Тридцать центов? Доллар? Станет ли кто-нибудь из университета требовать с меня деньги за подключения по межгороду? 🙂

Конечно, сейчас это все звучит просто смешно.

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

Без прямых подключений

Вместо всего этого, ваши данные пересылаются по протоколу IP в пакетах, которые бегут от компьютера к компьютеру.

Пакет может пройти через несколько узлов, пока не достигнет адресата. Вы не можете знать заранее количество этих узлов, так как оно меняется динамически, в зависимости от того, как сеть решает направить пакеты. Даже если отправите два пакета A и B по одному и тому же адресу, они могут пойти разными путями. В этом, кстати говоря, и заключается причина отсутствия гарантии доставки пакетов по порядку в UDP.

В unix-подобных системах можно изучить маршруты пакетов утилитой “traceroute”, передав ей имя хоста или IP адрес.

В windows вместо “traceroute” используется “tracert”.

Попробуйте проанализировать маршруты до нескольких сайтов, например:

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

Как происходит доставка пакетов

В первой статье цикла я привел простую аналогию процесса доставки пакетов — как передача записки от одного человека к другому в комнате, полной народу.

Хотя эта аналогия и отображает общую идею, но она слишком упрощена. Интернет — это не простая одноранговая сеть, а сеть сетей. И, конечно, нам нужно передавать записки не в пределах комнаты, а в любую точку мира!

Очевидно, много лучшей аналогией является… почтовая служба!

Когда вы хотите отправить кому-то письмо, вы кладете его в почтовый ящик, и при этом вы уверены, что оно придет по адресу. Для вас не важно, как именно оно будет доставлено, а важен сам факт доставки. Конечно, кто-то должен физически доставить письмо — но каким образом?

Очевидно, что почтальон не сам будет доставлять ваше письмо — почтовая служба это тоже не набор труб :). Вместо этого, он отнесет ваше письмо в почтовое отделение для последующей обработки.

Если адресат письма живет в том же районе, что и вы, то в почтовом отделении ваше письмо просто отдадут другому почтальону, и он сам отнесет его. Но если нет, то начинается уже более интересный процесс. Ваше местное почтовое отделение не может доставить письмо самостоятельно, и оно передает его “выше” по иерархии — в региональное отделение или почтовый центр в аэропорту, в случае, если адресат находится далеко. В идеальном случае ваше письмо повезут в большом грузовике (отсылка к речи того сенатора — прим. перев.).

Давайте рассмотрим сложный случай — скажем, мы отправляем письмо из Лос-Анджелеса в Сидней в Австралии. Местное почтовое отделение получает письмо, определяет, что оно должно быть доставлено за рубеж, и пересылает его в почтовый центр в аэропорту Лос-Анджелеса. Там снова обрабатывают адрес назначения письма, и отправляют его ближайшим рейсом до Сиднея.

Самолет с письмом садится в Сиднее, где вступает в работу новая почтовая служба, и проделывает все те же операции, но в обратном порядке. Письмо идет “вниз” по иерархии, от общего к частному. Из пункта сортировки почты в аэропорту оно попадает в региональный офис, который, в свою очередь, пересылает его местному почтовому отделению, и, в конце концов, почтальон (с забавным акцентом) отдает письмо в руки адресату. Чудесно! 🙂

Подобно тому, как почтовое отделение определяет, как доставлять письмо, на основе анализа адреса получателя, пакеты в сети доставляются на основе анализа IP адреса. Сам процесс определения маршрута передачи пакета довольно сложен, но основная идея заключается в том, что каждый роутер — это такой же компьютер, у которого имеется таблица маршрутизации, которая определяет, куда отправлять пакеты с определенными адресами назначения, и адресом шлюза по умолчанию, которому надо отправлять пакеты, для которых не нашлось соответствующей записи в таблице маршрутизации. Все это вместе и составляет ту самую “сеть сетей” — интернет.

Настройка таблиц маршрутизации — это задача сетевых администраторов, а не разработчиков (то есть нас). Но если вы хотите больше об этом узнать, то в этой статье из журнала ars technica есть много интересной информации о том, как сети обмениваются пакетами с использованием пиринга и пиринговых соглашений. Также можно еще почитать о таблицах маршрутизации в этом linux faq, и о протоколе граничного шлюза (BGP) в wikipedia, который автоматически определяет, как переправлять пакеты между сетями — что делает интернет по-настоящему распределенной системой с возможностью динамического обхода поврежденных каналов связи.

Виртуальные соединения

Теперь вернемся к теме соединений.

Если вы уже работали с TCP сокетами, то вы знаете, что работа с ними похожа на работу с соединениями, однако, так как TCP работает поверх IP, а IP может только пересылать отдельные пакеты, в TCP должен быть реализован механизм виртуальных соединений.

А если в TCP реализован механизм виртуальных соединений, значит, мы можем реализовать его и с помощью UDP.

Также, давайте определим термин “виртуальное соединение” как обмен UDP пакетами между двумя компьютерами с фиксированной частотой — скажем, десять пакетов в секунду. Пока обмен пакетами продолжается, виртуальное соединение считается установленным.

У соединения есть два конца:

ID протокола

Так как UDP сам по себе не поддерживает соединения, UDP сокет может принимать пакеты с любого компьютера.

Нам нужно ограничить это поведение таким образом, чтобы сервер принимал пакеты только от своих клиентом, а клиент — только от сервера. И при этом мы не можем просто фильтровать пакеты по адресу отправителя, так как сервер не может знать адреса клиентов заранее. Поэтому в начало каждого UDP пакета мы добавим небольшой заголовок длиной в 32 бита, в котором будет хранится уникальный идентификатор протокола.

Идентификатор протокола — это просто уникальное число, выбранное для нашего протокола. Как только UDP сокет примет пакет, он сразу должен проанализировать первые четыре байта пакета. Если данные не соответствуют нашему идентификатору, то пакет отбрасывается. Если соответствуют, то эти четыре байта обрезаются, и остальные данные пакета передаются на обработку.

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

Определение наличия соединения

Далее нам необходимо придумать способ определения наличия соединения.

Конечно, мы могли бы придумать какую-нибудь сложную схему с “рукопожатиями” и пересылкой нескольких UDP пакетов туда и обратно. Например, такую: клиент посылает серверу пакет “Запрос соединения”, и сервер отвечаем ему либо пакетом “Соединение установлено”, либо “Занят”, если клиент пытается подключится к серверу, у которого уже есть соединение с другим клиентом.

… или же мы могли бы просто запрограммировать сервер таким образом, чтобы после приема первого пакета с правильным идентификатором протокола он сразу считал, что соединение установлено.

В этом случае клиент может просто начинать пересылать серверу пакеты (считая, что соединение уже установлено), и, когда сервер примет первый пакет, он сохранит IP адрес и порт клиента, и тоже начнет отсылать пакеты.

При этом сам клиент, естественно, заранее знает IP адрес и порт сервера, так как он подключается первым. Поэтому когда клиент получает пакеты в ответ от сервера, он может фильтровать их уже по адресу. Аналогично и сервер после получения первого пакета от клиента может взять адрес и порт клиента из функции “recvfrom”, и фильтровать все остальные пакеты, которые будут приходить не от клиента.

Мы можем воспользоваться такой схемой потому, что у нас имеется только два компьютера для соединения. В будущих статьях мы усовершенствуем нашу реализацию соединений таким образом, чтобы она поддерживала обмен данных между более чем двумя компьютерами (по типу клиент-сервер или peer-to-peer), и усовершенствуем придуманный алгоритм фильтрации соединений.

Но пока не будем усложнять все больше, чем нужно.

Определение отключения

А как нам определить отключение?

Ну, раз уж мы определили подключение как процесс передачи пакетов, то мы можем и определить отключение как отсутствие передачи пакетов.

Чтобы определить, в свою очередь, отсутствие передачи пакетов, мы должны следить за количеством секунд с момента приема последнего пакета от другой стороны, причем на обоих компьютерах.

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

Если счетчик превысит какой-то порог, например, десять секунд, мы считаем это “тайм-аутом” соединения и закрываем его.

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

Заключение

Итак, вот то, что требуется для создания виртуального подключения: алгоритм установки соединения, фильтрация не участвующих в соединении пакетов, и механизм тайм-аутов для определения отключений.

Наше подключение настолько же реально, как и любое TCP подключение, и пакета UDP пакетов, которого оно обеспечивает, вполне достаточно для использования в нашем будущем многопользовательском экшене.

В статье мы также немного разобрали, как работает маршрутизация пакетов в интернете. К примеру, мы узнали причину, по которой UDP пакеты иногда приходят не в правильном порядке — потому что они могут пойти разными маршрутами на уровне IP. Посмотрите на карту интернета — не чудо ли, что пакеты вообще куда-либо доходят? Если вы хотите получше разобраться во всем этом, хорошей отправной точкой может стать эта статья на wikipedia.

Теперь, когда у нас есть механизм виртуальных подключений по UDP, мы можем легко реализовать обмен данными между клиентом и сервером для нашей многопользовательской игры — и без использования TCP.

Пример реализации вы можете посмотреть в исходном коде для этой статьи.

Это простое клиент-серверное приложение, которое производит обмен пакетами с частотой в 30 пакетов в секунду. Вы можете запустить сервер на любой машине, но с публичным IP адресом, так как “проброс” пакетов через NAT пока еще не поддерживается.

Запустить клиент можно следующим образом:

В этом случае он будет пытаться подключиться к серверу по адресу, который вы укажете в командной строке. По умолчанию, если вы не укажете ничего, он будет пытаться подключиться к 127.0.0.1.

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

Также вы можете попробовать остановить клиент или сервер, когда между ними установлено подключение, и тогда вы заметите, что через десять секунд приложение на другой стороне отключится по тайм-ауту. Когда отключается клиент, управление возвращается командной оболочке, а когда отключается сервер — он возвращается в состояние ожидания подключений от других клиентов.

Источник

Настройка сети: что такое VPN

Если вы хотите разобраться, что такое VPN — читайте нашу статью. В ней мы простыми словами рассказали, что значит Virtual Private Network, зачем подключаться по VPN и какой тип подключения лучше выбрать.

VPN — что это такое

VPN (англ. Virtual Private Network) — это технология, которая позволяет устанавливать зашифрованное безопасное соединение в интернете через подключение к виртуальной частной сети.

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

Зачем нужен VPN

Основная цель подключения по VPN — повышение безопасности в интернете. Это важно и необходимо по нескольким причинам.

Во-первых, все наши действия в интернете отслеживают и анализируют разные службы. Данные о местоположении, интересах и поведении пользователей собираются для различных целей (например, маркетинговых). Поисковики узнают и запоминают о нас всю доступную информацию. Простой пример — каждый сайт, на который вы заходите, в автоматическом режиме получает информацию о вашем географическом местоположении. Как такое возможно?

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

Во-вторых, любая информация, которую мы оставляем при взаимодействии с сайтами и другими пользователями в интернете (пароли, номера банковских карт, паспортные данные) представляет интерес для злоумышленников. Мошенники регулярно перехватывают нужную им информацию и постоянно совершенствуют способы воровства данных.

Эти риски невозможно свести к нулю, однако их можно существенно снизить. При VPN-подключении фактически вы подключаетесь к интернету со своего устройства, но с технической точки зрения соединение устанавливается в выделенной частной среде. Пользователю присваивается рандомный IP-адрес из списка всех адресов этой среды. Таким образом VPN шифрует ваши действия в интернете — вы как будто подключаетесь с другого устройства.

Таким образом, VPN выполняет две основные функции:

Что такое виртуальное соединение. Смотреть фото Что такое виртуальное соединение. Смотреть картинку Что такое виртуальное соединение. Картинка про Что такое виртуальное соединение. Фото Что такое виртуальное соединение

Как пользоваться VPN на практике, мы описали в примерах ниже:

Давайте подробнее рассмотрим, как происходит защищённое соединение по VPN на техническом уровне.

Как работает VPN

Если при подключении к интернету пользователь использует VPN, он не сразу попадает на нужный ресурс или сайт, а получает доступ к информации как бы через посредника. Как это работает:

Что такое виртуальное соединение. Смотреть фото Что такое виртуальное соединение. Смотреть картинку Что такое виртуальное соединение. Картинка про Что такое виртуальное соединение. Фото Что такое виртуальное соединение

С внешней стороны для пользователя весь этот путь незаметен, так как качество и скорость работы интернета практически не меняется. При этом с внутренней стороны различия в подключении по и без VPN принципиальны — если кто-то попытается отследить цепочку ваших действий в интернете, то просто не сможет установить их подлинность и источник подключения.

Основные типы соединений

В основе работы любого защищённого соединения лежит работа одного из протоколов безопасности. В зависимости от протокола, который применяется для реализации VPN-технологии, можно выделить несколько типов соединений. Каждый из них обеспечивает разный уровень защиты и подходит для разных целей.

PPTP (Point-to-Point Internet Protocol) — это первый VPN-протокол, который разработали в 90-е годы. Он работает по принципу образования туннелей, через которые происходит обмен данными. Эти туннели прокладываются строго из точки в точку через незащищенную сеть. PPTP имеет принципиальную уязвимость — он не шифрует данные. Очевидно, что такое VPN-подключение подойдёт только для низкоуровневых задач. Например, его используют при передаче потокового аудио или видео в приложениях.

L2TP (Layer 2 Tunneling Protocol) — разработан компанией Microsoft совместно с Cisco. Как и PPTP, он функционирует по принципу образования туннелей и не шифрует информацию. Однако L2TP может работать в связке с другими протоколами — например, IPsec. В такой связке L2TP отвечает за целостность передаваемой информации, а второй протокол отвечает за шифрование данных. Вместе они образуют целостное и защищённое соединение.

IPsec (Internet Protocol Security) — это протокол, с помощью которого можно проложить туннель до удалённого узла. IPsec обеспечивает высокий уровень безопасности соединения — все пакеты данных шифруются, проверяется каждая сессия. Существует два режима, в которых работает IPsec: транспортный и туннельный. Оба служат для защиты передачи данных между разными сетями. При этом в транспортном режиме любое сообщение шифруется в пакете данных, а в туннельном режиме шифруется весь пакет данных. IPsec нередко применяют в дополнение к другим протоколам, чтобы повысить защиту сети. Главный минус IPsec — он долго устанавливает и подключает клиентские приложения.

Site-To-Site VPN — предназначен для объединения сетей организаций. Он соединяет две части частной сети или две частные сети. Это самый распространённый тип соединения при настройке надёжной корпоративной сети. Site-To-Site позволяет организации маршрутизировать соединения с отдельными офисами или с другими организациями. Маршрутизируемое VPN-соединение логически работает как выделенная глобальная сеть (WAN).

MPLS (Multiprotocol Label Switching) — это технология многопротокольной коммутации (соединения абонентов сети через транзитные узлы). В сети, основанной на MPLS, пакетам данных присваиваются метки. Решение о передаче пакета данных другому узлу сети принимается исходя из значения метки — сам пакет данных не изучается. За счёт этого, независимого от среды передачи, можно создавать сквозной виртуальный канал. MPLS — очень гибкий и адаптивный вариант VPN, что делает его идеальным для подключений типа сайт-к-сайту.

Как выбрать VPN

Что такое виртуальное соединение. Смотреть фото Что такое виртуальное соединение. Смотреть картинку Что такое виртуальное соединение. Картинка про Что такое виртуальное соединение. Фото Что такое виртуальное соединение

В самом начале развития технология VPN была полностью платной. Сейчас можно настроить как оплачиваемую защищённую сеть, так и использовать бесплатные VPN-сервисы. Чтобы определиться, платный или бесплатный сервис вам нужен, в первую очередь нужно решить, какой уровень безопасности вы хотите получить от VPN. Будь вы владелец малого бизнеса, крупной компании или студент — ваши требования будут отличаться.

Если с главным вы уже определились, обратите внимание на три дополнительных критерия.

Скорость работы — это, пожалуй, самая важный критерий после надёжности. Если использование VPN влияет на скорость загрузки страниц при подключении к сети — это дурной знак. Качественные сервисы позволяют просматривать сайты на обычной скорости провайдера. Конечно, скорость загрузки может меняться, но только иногда и незначительно.

Удобство в подключении. Если вы планируете регулярно использовать VPN, стоит убедиться, что сервис удобен в эксплуатации. Если каждый раз для подключения нужно выполнять много шагов — это повод рассмотреть другие варианты.

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

Итак, мы рассказали о виртуальных частных сетях — для чего их придумали, как они работают и как правильно выбрать VPN-сервис. Теперь вы понимаете, что такое VPN-технология и сможете выбрать подходящий сервис для защиты конфиденциальности.

Источник

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

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