Бывают случаи когда счастливый пользователь публичной виртуальной машины может столкнуться с тем что виртуальная машина не имеет выхода в сеть Интернет. Пользователю предоставляется процессор, память, диск с операционной системой, базовые интерфейсы, порт удаленного доступа и всё.
Хостера в таком случае тоже можно понять, ему проще отключить доступ в Интернет сегодня чтобы не ломать голову завтра по поводу активности пользователя в сети Интернет так как различные обиженые и оскорбленые пользователем первым делом начнут выяснять отношения именно с хостером. Например, в некоторых странах распространена практика досудебной блокировки 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.
В виртуальной машине:
- проверяем проброс порта командой:
ss -atnl
- проверяем отсутствие сети командой:
ip addr
В настройках браузера прописываем аналогичные параметры Proxy-сервера.
Проверяем выход в сеть
Проверяем IP-адрес, например на странице http://umvirt.com/agentinfo
Проверяем возможность открытия сайтов, например откроем сайт онлайн майнинга "Coinhive".
Как видим виртуальная машина не просто вышла в сеть Интернет с адреса клиента, но также позволила запустить процесс майнинга.
Видео процесса подключения доступно на Youtube.
Комментарии (8)
slonopotamus
30.11.2018 21:39Для этого необходимо чтобы все три стороны клиент, хост и виртуальная машина были собраны на основе кода FlexVDI
ЯННП. Хост — это машина хостера же? И зачем он будет это делать? Вы же сказали абзацем выше что хостер не хочет чтобы виртуалка имела связь с интернетом.
b0r1s Автор
01.12.2018 06:18Интернет-канал хостера и Интернет-канал клиента в большинстве случаев имеют различные IP-адреса. В статье описан подход когда удаленный пользователь виртуальной машины выходит в сеть и оставляет в логах IP-адрес своего клиентского оборудования и сам несет ответственность за все свои действия.
Почему бы и не предоставить возможность выхода в Интернет через клиента если хостер ничем не рискует в плане сетевой безопасности, предоставляя в аренду виртуальную машину не только практически и даже теоретически изолированную от сети хостера и его Интернет-канала.
На выходе получается чистая аренда вычислительных ресурсов и дискового пространства.
Вот вариант использования: майнер-хостер с белым IP-адресом может сдать свою GPU-ферму в аренду майнерам-клиентам по частям и при этом не нести ответственность за их действия. Ходят слухи что современные топовые PCI-видеокарты успешно пробрасываются в виртуальные машины QEMU и не только.
rPman
30.11.2018 21:56не понимаю, зачем что то перекомпилировать, если в qemu/kvm есть штатная фича, опции -net user guestfwd=tcp:server:port-tcp:server:port
b0r1s Автор
01.12.2018 12:01Указанный вариант форвардинга отличается от описанного в статье:
- Требует наличие сетевого интерфейса для своей работы.
- Порты на виртуальном устройстве localhost (127.0.0.1) не создаются.
- Имеет дело с сетью хоста, а не клиента.
gnomeby
Что за тенденция такая? Это про хостинг для сайтов или про что-то другое?
b0r1s Автор
От части. Это статья про новую модель оказания услуги хостинга виртуальных рабочих мест он же VDI-хостинг (Virtual Desktop Infrastructure) или DaaS (Desktop-as-a-Service, Рабочее место как услуга). При желании внутри VDI можно web-сервер развернуть — будет хостинг сайтов.
alexk24
Судя по «VDI» в названии — это виртуальные десктопы и вполне вероятно им не положено в инет по политике безопасности.
b0r1s Автор
Все зависит от конкретного случая. Если Вы администратор сервера и у Вас есть широкий диапазон свободных IP-адресов и личные данные пользователя, которые Вы можете передать по запросу третьей стороне, ограничивать доступ в Интернет не имеет смысла. Достаточно ограничений, налагаемых провайдером и зеркалирования трафика в соответствии с законом.
Другое дело когда количество свободных IP-адресов ограничено или отсутствует и к виртуальной машине может подключится абсолютно любой желающий из любой точки земного шара и ближнего космоса.