Клиентский Интернет в изолированной виртуальной машине QEMU с помощью туннелирования портов через SPICE-канал

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


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


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


    Подключение виртуальной машины к Интенет-каналу клиента позволит:


    • Сократить вычислительную нагрузку на эмуляцию сети и сетевого интерфейса.
    • Исключить вероятность хакерской атаки на виртуальную машину из Интернет и виртуальной сети.
    • Снять ответственность с администратора хоста за действия пользователя виртуальной машины в следующих случаях:
      • Спам-рассылки,
      • Загрузка/публикация нелегального/запрещенного контента,
      • Взлом или хакерская атака на Интернет-ресурсы администратора хостинга, третьих лиц,
      • Майнинг,
      • и так далее...
    • Сократить время на проверку и настройку выхода в сеть Интернет виртуальной машины

    Самый простой способ завести Интернет со стороны клиента является проброс сетевого USB-адаптера или модема. Но данный способ очень требователен к качеству сети. Если виртуальная машина находится за рубежом велика вероятность того что будут возникать лаги и подвисания.


    Альтернативой проброса USB-устройств может стать туннелирование портов между клиентом и виртуальной машиной через SPICE-канал по аналогии с туннелированием портов в SSH.


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


    Теоретически можно пробросить локальные порты клиента (IP-адрес 127.0.0.1) в виртуальную машину и оформить их как локальные.


    Примерный алгоритм подключения к Интенет-каналу клиента через туннелирование портов:


    • На стороне клиента можно поднять Proxy-сервер либо VPN-сервер который будет обеспечивать выход в сеть.
    • В SPICE-клиенте настраивается туннелирование портов так что порты Proxy-сервера либо VPN-сервера в виртуальной машине выглядят как локальные.
    • В операционной истеме и в браузере настраивается локальная Proxy-подсистема для подключения к Proxy-серверу через локальный порт либо настраивается VPN-клиент который подключается к VPN-серверу на локальном хосте и эмулирует виртуальное сетевое устройство (tun либо tap в случае с OpenVPN).

    Реализация


    Все что осталось сделать, чтобы туннелирование портов стало реальностью — это подправить исходный код SPICE-клиента и гостевых дополнений SPICE, сформировать патчи и отправить разработчикам. Всё это возможно потому-что исходный код SPICE открыт.


    Более того в ходе переговоров с разработчиками SPICE выяснилось что подобный функционал реализован в форке SPICE компании FlexVDI. Исходный код форка частично опубликован в репозитории [https://github.com/flexvdi] в нем, говорят, есть фрагмент отвечающий за тунелирование.


    Запись переговоров доступна на канале рассылки "Spice-devel" тема "Feature suggestion: Port tunneling between VM & client over spice-channel".


    Область применения


    Данная технология может получить широкое распространение в демонстрационных и публичных виртуальных машинах и в обычном VDI-хостинге.


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

    Поделиться публикацией
    Комментарии 3
      0
      Советую поработать над стилистикой. Выглядит как служебка, а не статья для хабра.
        0
        Хотел идею предложить в надежде получить отклик от специалистов в данной отрасли. Перед публикацией пост порезал, чтобы не был рекламой. В результате модерации пост отправили в хаб «я пиарюсь», можно сказать забанили. Получилось что получилось: и пиар — не пиар и статья — не статья. Вывод: Хабр — не место для предложения и обсуждения идей.
          0
          Я как то не вижу взаимосвязи с тем, что на зубах картон хрустел при прочтении. Если хочешь привлечь внимание, то необходимо идею подать ярко, ибо хабр любит вещи написанные живым языком. А ваша статья привлекает внимание только тем, что фоне других статей смотрится докладной запиской на советском мясокомбинате.

      Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

      Самое читаемое