Локальний VPN-сервер на VirtualBox

Як розгорнути локальний VPN-сервер на віртуальній машині VirtualBox?

Ключова перевага локального 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 на хост-машині.

ЧИТАЙТЕ ТАКОЖ:  Кращі розширення Firefox і Chrome для хакерів

Знову запускаємо віртуалку в стелз-режиміі: 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-profile
  • brave --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

Konrad Ravenstone// про автора

Кібермольфар, хакер, лінуксоїд, дослідник безпеки в KR. Labs Research

Сподобалася стаття? Поділитися в соцмережах:
KR. Labs Research
Рекомендоване:
Цей гайд стане корисним для всіх, хто прагне створити якісне…