Предыстория
В определенный момент мне понадобился pfSense, установленный на VPS хостинге. pfSense не требователен к ресурсам, поэтому я остановил свой выбор на хостингах, работающих с KVM.
Проблема оказалась в том, что все хостинги предоставляют установку операционных систем только из доступных у них шаблонов, а это, как правило, Ubuntu, CentOS и иные подобные системы. В редких случаях это FreeBSD, но, опять же, чистый.
Что делать?
В итоге я решил развернуть у себя виртуальную машину на KVM c параметрами как у VPS-хостинга, а затем просто перенести образ жесткого диска на VPS.
Конфигурация KVM в моем случае была такая: 256 RAM, 1 процессорное ядро, 5ГБ жесткий диск. HDD и Network — через VirtIO.
При создании виртуалки очень важно, чтобы тип хранилища был Raw. QCOW2, VDI и иже с ними не подойдут. Создал виртуалку, поставил pfSense, теперь самое главное перенести ее образ на VPS.
Делаем…
Выбранный нами VPS хостинг должен поддерживать доступ к консоли виртуальной машины напрямую, а не только по SSH. На VPS устанавливаем шаблонную Ubuntu 16.04. Как правило это чистая система с родным загрузчиком GRUB. Скачиваем туда образ любой Ubuntu/Debian netinstall CD, извлекаем ядро и initrd, например в папку boot, а дальше подсовываем GRUB это ядро и initrd. Обязательно ядру при загрузке указываем параметр rescue/enable=true. Попадаем в Ubuntu/Debian recovery mode, запускаем консоль без подключения к восстанавливаемой системе, а дальше
wget [АДРЕС НАШЕГО ОБРАЗА, ВЫЛОЖЕННОГО НА ЛЮБОЙ WEB-ХОСТИНГ] -q -O - | dd of=/dev/vda bs=10M
Ждем. (можно ждать долго, у кого то и 2-3 часов не хватит). По окончании работы команды перезагружаем нашу VPS виртуалку, и видим успешную загрузку pfSense.