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


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


Новый метод выхода в Интернет


Раньше, чтобы вывести виртуальную машину без сети в Интернет, клиент мог только пробросить физическое USB-устройство, раздающее Интернет c его адреса: модем, сетевой адаптер.


Сегодня пользователь может пробросить порты к VPN или Proxy-серверу по аналогии c SSH. Для этого необходимо чтобы все три стороны клиент, хост и виртуальная машина были собраны на основе кода FlexVDI т.е необходимо пересобрать и установить пакеты программ которые используются для осуществления удаленного доступа по протоколу Spice.


FlexVDI — это улучшенная версия открытого протокола удаленного доступа SPICE и дополнительный слой абстракции от одноименной компании. Весь необходимый код доступен в репозиториях на гитхабе.


Подключение


Для того чтобы получить spice-клиента от FlexVDI, Linux-пользователь может скомпилировать клиента вручную либо выполнить несколько действий над appImage-образом клиента:


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


./flexvdi-linux-client-2.2.15-x86_64.AppImage --appimage-extract 

После выполнения команды в каталоге squashfs-root в директории с файлом будут находится файлы образа. Нас интересует клиент spicy, однако прямое исполнение файла завершается с ошибкой так как приложение пробует использовать библиотеки расположенные в системе, а не в образе. Чтобы запустить spicy создаем копию файла AppRun. В файле копии в конце комментируем или удадаляем строку:


 ./python2.7 ./flexvdi_launcher.pyc "$@"

и вместо неё добавляем строку вида:


./spicy --uri=spice://vpla.umvirt.com?port=6060 -R 3128:127.0.0.1:3128 --spice-debug

Здесь настраивается подключение к порту удаленного доступа по spice-протоколу к публичной виртуальной машине RetroGamer на сервере vpla.umvirt.com и пробрасываем в виртуальную машину порт 3128 от squid с выводом отладочной информации.


Сохраняем файл, устанавливаем Proxy-сервер Squid и проверяем его работоспособность с помощью браузера.


Ниже приведен скриншот окна настроек Proxy-сервера для Firefox:



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


./myApp > spicy.log

В файле лога должны появится сообщения:


(spicy:10702): GSpice-DEBUG: port-forward.c:183 Created new port forwarder

и


(spicy:10702): GSpice-DEBUG: port-forward.c:231 Associate guest (null), port 3128 -> 127.0.0.1 port 3128

Если сообщение не появилось значит либо на хосте либо в виртуальной машине код оригинальных spice пакетов не заменен на код Flexvdi.


В виртуальной машине:


  1. проверяем проброс порта командой:
    ss -atnl 
  2. проверяем отсутствие сети командой:
    ip addr

В настройках браузера прописываем аналогичные параметры Proxy-сервера.



Проверяем выход в сеть


Проверяем IP-адрес, например на странице http://umvirt.com/agentinfo



Проверяем возможность открытия сайтов, например откроем сайт онлайн майнинга "Coinhive".



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


Видео процесса подключения доступно на Youtube.

Комментарии (8)


  1. gnomeby
    30.11.2018 12:42

    Что за тенденция такая? Это про хостинг для сайтов или про что-то другое?


    1. b0r1s Автор
      30.11.2018 13:19

      От части. Это статья про новую модель оказания услуги хостинга виртуальных рабочих мест он же VDI-хостинг (Virtual Desktop Infrastructure) или DaaS (Desktop-as-a-Service, Рабочее место как услуга). При желании внутри VDI можно web-сервер развернуть — будет хостинг сайтов.


    1. alexk24
      30.11.2018 13:30

      Судя по «VDI» в названии — это виртуальные десктопы и вполне вероятно им не положено в инет по политике безопасности.


      1. b0r1s Автор
        30.11.2018 14:23

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

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


  1. slonopotamus
    30.11.2018 21:39

    Для этого необходимо чтобы все три стороны клиент, хост и виртуальная машина были собраны на основе кода FlexVDI

    ЯННП. Хост — это машина хостера же? И зачем он будет это делать? Вы же сказали абзацем выше что хостер не хочет чтобы виртуалка имела связь с интернетом.


    1. b0r1s Автор
      01.12.2018 06:18

      Интернет-канал хостера и Интернет-канал клиента в большинстве случаев имеют различные IP-адреса. В статье описан подход когда удаленный пользователь виртуальной машины выходит в сеть и оставляет в логах IP-адрес своего клиентского оборудования и сам несет ответственность за все свои действия.

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

      На выходе получается чистая аренда вычислительных ресурсов и дискового пространства.

      Вот вариант использования: майнер-хостер с белым IP-адресом может сдать свою GPU-ферму в аренду майнерам-клиентам по частям и при этом не нести ответственность за их действия. Ходят слухи что современные топовые PCI-видеокарты успешно пробрасываются в виртуальные машины QEMU и не только.


  1. rPman
    30.11.2018 21:56

    не понимаю, зачем что то перекомпилировать, если в qemu/kvm есть штатная фича, опции -net user guestfwd=tcp:server:port-tcp:server:port


    1. b0r1s Автор
      01.12.2018 12:01

      Указанный вариант форвардинга отличается от описанного в статье:


      • Требует наличие сетевого интерфейса для своей работы.
      • Порты на виртуальном устройстве localhost (127.0.0.1) не создаются.
      • Имеет дело с сетью хоста, а не клиента.