Бывают случаи когда счастливый пользователь публичной виртуальной машины может столкнуться с тем что виртуальная машина не имеет выхода в сеть Интернет. Пользователю предоставляется процессор, память, диск с операционной системой, базовые интерфейсы, порт удаленного доступа и всё.
Хостера в таком случае тоже можно понять, ему проще отключить доступ в Интернет сегодня чтобы не ломать голову завтра по поводу активности пользователя в сети Интернет так как различные обиженые и оскорбленые пользователем первым делом начнут выяснять отношения именно с хостером. Например, в некоторых странах распространена практика досудебной блокировки 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.