Ключова перевага локального VPN на VirtualBox – це ізоляція і гнучкість. А також додатковий шар безпеки у вигляді подвійного шифрування SOCKS5 SSH + VPN. Ви зможете одночасно використовувати різні протоколи, провайдери і конфігурації VPN. Наприклад, на хост-системі запустити OpenVPN з’єднання від провайдера “А”, а на віртуальній – WireGuard VPN від провайдера “B”, або власний сервер. Також ви зможете маршрутизувати трафік через проксі в різних браузерах та додатках на своїй хост-системі. Вся ця архітектура дозволяє тримати «чисту» локальну машину і при цьому мати безпечний, зашифрований канал виходу в інтернет через локальний сервер з VPN. А крім цього, ви отримуєте ще й підручний локальний “VPS”-сервер, який можна використовувати для інших задач.
1. Для початку необхідно визначитись з операційною системою, яка працюватиме в якості “локального VPN-сервера”. Насамперед, це має бути легка і бездесктопна Linux. Наприклад, Debian CLI. Така система займатимиме всього лиш 300-500 Мб оперативної пам’яті і не вплине на швидкодію хост-системи.
Отже, вантажимо ISO-образ з офіційного сайту: https://cdimage.debian.org/debian-cd/current/amd64/iso-cd/
Перевіряємо обов’язково контрольну суму файлу й зберігаємо на локальному диску у папці з образами віртуальних машин.
2. Переходимо до створення та конфігурації нової машини VirtualBox. Щоб було швидше та простіше, скористаємося командним рядком:
VBoxManage createvm --name "DebianHeadlessVPN" --register VBoxManage modifyvm "DebianHeadlessVPN" --memory 768 --vram 16 --acpi on --boot1 dvd --nic1 nat VBoxManage createhd --filename "/home/user/VirtualBox_VMs/DebianHeadlessVPN/DebianHeadlessVPN.vdi" --size 8000 VBoxManage storagectl "DebianHeadlessVPN" --name "SATA Controller" --add sata --controller IntelAHCI VBoxManage storageattach "DebianHeadlessVPN" --storagectl "SATA Controller" --port 0 --device 0 --type hdd --medium "/home/user/VirtualBox_VMs/DebianHeadlessVPN/DebianHeadlessVPN.vdi" VBoxManage storageattach "DebianHeadlessVPN" --storagectl "SATA Controller" --port 1 --device 0 --type dvddrive --medium /home/user/'VirtualBox VMs'/debian-12.11.0-amd64-netinst.iso
3. Запускаємо новостворену віртуальну машину командою: VBoxManage startvm "Debian"
З’явиться стандартне вікно встановлення ОС Linux. Обираємо режим Install. Виконуємо вказівки, проходимо увесь стандартний процес розгортання, поки система не запропонує обрати компоненти:
- Знімаємо галочки біля Desktop-компонентів, наприклад: XFCE, KDE, GNOME. Графічне середовище нам не потрібне.
- Залишаємо галочки тільки біля опцій: “SSH Server” і “Стандартні утиліти”.
Після того як система встановилася – вимикаємо віртуальну машину.
4. У командному рядку на хост-машині виконуємо: VBoxManage modifyvm "DebianHeadlessVPN" --natpf1 "ssh,tcp,,2222,,22" – ця команда додає налаштування SSH Port Forwarding з віртуалки на хост-систему.
Тепер запускаємо нашу віртуальну машину в прихованому режимі (без відображення вікна-терміналу VirtualBox): VBoxManage startvm "DebianHeadlessVPN" --type headless
Пробуємо підключитися до віртуалки через SSH: ssh -p 2222 debianvpn@127.0.0.1
Перед нами повинна з’явитися консоль Debian Linux.
5. Переходимо тепер до розгортання VPN-сервера на віртуальній машині:
apt update -y && apt install sudo usermod -aG sudo debianvpn visudo # додати debianvpn ALL=(ALL:ALL) ALL exit sudo apt install openvpn sudo apt install wireguard sudo apt install curl
Встановлюємо движок VPN. Це може бути як просто Wireguard / OpenVPN, так і спеціальний додаток-клієнт VPN. У нашому випадку – Mullvad CLI:
sudo curl -fsSLo /usr/share/keyrings/mullvad-keyring.asc https://repository.mullvad.net/deb/mullvad-keyring.asc echo "deb [signed-by=/usr/share/keyrings/mullvad-keyring.asc arch=$( dpkg --print-architecture )] https://repository.mullvad.net/deb/stable stable main" | sudo tee /etc/apt/sources.list.d/mullvad.list sudo apt update sudo apt install mullvad-vpn mullvad account login 9968468966042552 mullvad relay list mullvad relay set location ua-iev-wg-001 mullvad lan set allow mullvad auto-connect set on mullvad lockdown-mode set on mullvad tunnel set ipv6 on mullvad connect mullvad status -v
Більше команд Mullvad CLI>>
Перевіряємо інтернет-з’єднання на віртуалці: curl ip.me
Отже, VPN-сервер працює. До речі, замість VPN можна використати і TOR (по типу Whonix VirtualBox).
7. Генеруємо ключі SSH на хост-машині: ssh-keygen -t ed25519 -f ~/.ssh/debianvpn_key
І додаємо public key на віртуалку:
mkdir -p ~/.ssh chmod 700 ~/.ssh nano ~/.ssh/authorized_keys # вставляємо вміст публічного ключа chmod 600 ~/.ssh/authorized_keys
Примітка: Іноді додатково потрібно зайти в файл конфігурації SSH
/etc/ssh/sshd_configй перевірити AllowTcpForwarding та інші параметри.
Відключаємося від віртуальної машини, виконавши sudo shutdown now у консолі Debian. Або VBoxManage controlvm "DebianHeadlessVPN" acpipowerbutton на хост-машині.
Знову запускаємо віртуалку в стелз-режиміі: VBoxManage startvm "DebianHeadlessVPN" --type headless
І тепер тестуємо підключення по SSH-ключу:
ssh -i ~/.ssh/debianvpn_key -p 2222 debianvpn@127.0.0.1
Якщо все працює, просто виходимо з машини, натиснувши exit і тепер вже запускаємо SOCKS5 через SSH:
ssh -i ~/.ssh/debianvpn_key -N -D 127.0.0.1:9001 -p 2222 debianvpn@127.0.0.1
8. Все готово. Тепер можна пропускати трафік на домашній машині через цей тунель, таким чином використовуючи VPN-сервер на VirtualBox. Причому ви можете бути підключені до ще одного VPN хост-машині, ваші конфігурації незалежні одна від одної.
Ось приклади як можна використати SOCKS5 VPN через SSH в різних браузерах:
google-chrome-stable --proxy-server="socks5://127.0.0.1:9001" --user-data-dir=/tmp/chrome-test-profilebrave --proxy-server="socks5://127.0.0.1:9001"vivaldi-stable --proxy-server="socks5://127.0.0.1:9001"vivaldi-stable --profile-directory="Profile 1" --proxy-server="socks5://127.0.0.1:9001"proxychains firefox
Для зручності можна застосувати такі додатки до браузера як:
Конфігурація для швидкого підключення по SSH
Для швидкого підключення до різних віртуальних машин по ключу SSH необхідно створити файл ~/.ssh/config і додати у нього конфігурацію, наприклад:
Host proxy1 HostName 127.0.0.1 Port 2222 User debianvpn IdentityFile ~/.ssh/id_debianvpn_1 StrictHostKeyChecking no UserKnownHostsFile /dev/null Host proxy2 HostName 127.0.0.1 Port 2223 User debianvpn IdentityFile ~/.ssh/id_debianvpn_2 StrictHostKeyChecking no UserKnownHostsFile /dev/null
Тоді просто підключатися:
ssh proxy1– підключитися по SSH.ssh proxy1 -D 9001– відкрити з’єднання SSH Port Forwarding.
Автор: © Konrad Ravenstone, KR. Laboratories Research

