У даному керівництві мова піде про розгортання власного VPN-сервера на базі операційної системи Linux. Для тих, хто не знає: VPN — це персональний зашифрований інтернет-канал або мережа (Virtual Private Network), що дає можливість користуватися інтернетом цілком таємно і анонімно, використовуючи при цьому сторонній VPS-сервер. Отже, ми вирішили поділитись своєю документацією тому, що сьогодні ми живемо в час, коли високі технології мають ставати доступними і йти в широкі маси.

Навіщо взагалі потрібен свій VPN-сервер?

Це питання, мабуть, хвилює новачка. Й справді, навіщо? Адже на ринку існує величезна кількість як безкоштовних, так й платних “готових VPNів” від найрізноманітніших виробників. Потрібно лише скачати і встановити. Кожен з них вражає величезною кількістю локацій, опцій, інтеграцій та додатків. Однак, чи дійсно на ділі усе так файно?

Річ у тім, що кожен VPN, а особливо безкоштовний, має “за щось жити”. І цим “хлібом” стають — ваші приватні дані, ваш особистий інтернет-трафік, який може бути розшифрований, прочитаний і проданий будь-яким виробником VPN. Реєструючись на сервісах, провайдер може стверджувати: “Ні-ні, ми не збираємо ваші дані”, але як показує моя особиста практика — все це “фількіна грамота”. Майже кожен VPN збирає якісь метадані — чи вашого пристрою, чи браузера, а деякі мають нахабність зберігати ваш трафік на своїх серверах довгі роки. Бували випадки, коли недобросовісні розробники вбудовували у браузери під виглядом VPN різноманітне шкідливе ПЗ, наприклад майнери або стилери, які перехоплювали чутливі дані користувачів. Усе це породжує численні ризики безпеки у буденному користуванні інтернетом. А відмовитись від VPN — ще гірше! Це те саме, що відмовитись від одягу та взуття, й ходити босоніж.

Отже, маючи власний VPN-сервер ви отримуєте цілий ряд особистих переваг, до прикладу:

  • ви стаєте власником персонального сервера з “білою” IP-адресою, якою ніхто не володіє і не користується крім вас. Жодних лімітів по трафіку та обмеження швидкості (окрім тих, які встановлені тарифним планом на самому сервері, однак, зазвичай, вони майже не відчутні);
  • ви отримуєте швидкий та безпечний (зашифрований) інтернет, який ніхто не “прослуховує” і не “перехоплює”. Сайти будуть грузитися в рази швидше, а системи захисту не будуть банити без поважних причин;
  • створюючи власний VPN-сервер, ви можете обрати одну локацію на вибір, тобто країну, в якій розташований сервер. Хочете більше локацій? Будь ласка – просто створіть декілька VPN-серверів в різних країнах. Це дозволить відвідувати сайти, використовуючи геолокацію сервера, обходити блокування доступу до сервісів і т.д, і т.п.

Висновок: власний VPN-сервер — це таки панацея і найкращий варіант для тих хто цінує якість, швидкість, стабільність, приватність в інтернеті!

IKEv2, WireGuard, OpenVPN — який VPN-протокол обрати?

Розгортаючи власний VPN-сервер постає інше питання — на якому протоколі базуватись, який скрипт розгортання використати і який з них найбезпечніший?

На сьогодні існує декілька VPN-технологій:

  • IKEv2 — розшифровується як Internet key exchange version 2, є різновидом так-званого IPSec протоколу. Вважається досить швидкісним і надійним. Стандартизований згідно RFC 7296. Підтримує різні алгоритми шифрування, наприклад: AES, 3DES, Blowfish, Camellia. В IKEv2 майже відсутні вразливості, хоча один випадок все ж був зафіксований. Активно застосовується в Windows та Mac операційних системах. Загалом, може бути непоганим вибором. Однак, його не так легко налаштувати;
  • WireGuard — новітній Open-Source VPN-протокол, заснований Джейсоном Доненфелдом. Був включений в ядро Linux. Демонструє феноменальну швидкість, стабільність і безпеку. Працює згідно численних стандартів, зокрема: RFC 7539, RFC 7693, RFC 5869, RFC 7296. Підтримує різноманітні алгоритми шифрування/хешування: ChaCha20, Poly1305, Curle25519, BLAKE2s, SipHash24, HKDF та ін. З’єднання відбувається по UDP-портах. WireGuard на диво швидко встановлюється і налаштовується. Як зазначають експерти, він демонструє ідеальні результати в категорії безпека/швидкодія;
  • OpenVPN — популярний VPN-протокол, розповсюджується за GNU-ліцензією. Перевірений часом й має хорошу репутацію безпеки (вразливості не виявлені). Не базується на RFC-стандартах, натомість використовує OpenSSL бібліотеку, яка підтримує різноманітні алгоритми шифрування: 3DES, AES, RC5, Blowfish та інші. OpenVPN доступний на усіх ОС: Linux, Windows, Android, Mac/iOS. Може працювати на TCP/UDP-портах. Єдиний недолік — повільний;
  • L2TP — розшифровується як Layer 2 Tunneling Protocol, подібно до IKEv2, є різновидом батьківського IPSEC-протоколу. Відносно швидкий і відносно безпечний;
  • PPTV — старий VPN-протокол, який має вразливості. У якості шифрування використовується Microsoft’s Point-to-Point Encryption protocol (MPPE) з максимум 128-бітними ключами.

Отже, який VPN-протокол обрати? Ми обираємо WireGuard. Але IKEv2 не гірший, проте його складніше налаштувати і, як на мене, він більше Windows-орієнтований (інтегрований в ОС Windows). Тим часом як WireGuard вдалося самотужки розгорнути за 10 хвилин. Плюс існують додаткові скрипти, які поєднюють роботу WireGuard з іншими додатками, наприклад Pihole (WireHole), що дає на виході не лише VPN, а й фільтр трафіку.

Розгортання VPN WireGuard на VPS Ubuntu 20.04

Перейдемо до практичної частини. Аби розгорнути бажаний VPN, необхідно мати власний віртуальний сервер. Придбати VPS можна на різних сервісах: DigitalOcean, Amazon Web Services, Linode, Oracle, Google Cloud Platform, OVH Cloiud, Oracle Cloud, HETZNER, Azure, IBM Cloud, Alibaba Cloud та інші. Майже кожен з них дає вам безкоштовно створити сервер, скориставшись послугою Free Tier або наданими бонусними кредитами.

Отже, обираємо платформу і переходимо до створення VPS. В якості операційної системи обираємо Ubuntu. Технічні характеристики — мінімальні. Генеруємо SSH-доступ і з’єднюємося з сервером.

Першим ділом необхідно оновити операційну систему, для цього вводимо:

apt update -y
apt upgrade -y

Тепер треба перейти у налаштування файєрволу (зробити це бажано не тільки у командному рядку на сервері, а й через веб-інтерфейс в панелі керування сервером) й відкрити наступні вхідні (inbound) порти для всіх або тільки визначених IP:

SSH TCP 22 0.0.0.0/24 (задати бажану IP-адресу чи діапазон)
SSH UDP 51820 0.0.0.0/24 (задати бажану IP-адресу чи діапазон)

Тепер підключаємося по SSH до сервера й створюємо файл конфігурації WireGuard VPN:

/etc/sysctl.d/10-wireguard.conf

Додаємо рядок і зберігаємо:

net.ipv4.ip_forward=1

Це була прокидка IP-портів.

Аби налаштування вступило в силу виконуємо команду:

sudo sysctl -p /etc/sysctl.d/10-wireguard.conf

Встановлюємо компонент WireGuard на сервері:

sudo apt update && sudo apt install wireguard -y

Генеруємо серверні і клієнтські ключі доступу:

sudo -i
cd /etc/wireguard/
wg genkey | tee server.key | wg pubkey > server.pub
wg genkey | tee client.key | wg pubkey > client.pub

У висновку отримаємо наступні файли:

/etc/wireguard# ls -l
-rw------- 1 root root 45 Sep 29 10:32 client.key
-rw------- 1 root root 45 Sep 29 10:32 client.pub
-rw------- 1 root root 45 Sep 29 10:32 server.key
-rw------- 1 root root 45 Sep 29 10:32 server.pub

Тепер створюємо WireGuard профіль для запуску VPN-сервера:

nano wg0.conf

Додаємо наступний код:

[Interface]
Address = 10.1.1.1/24
ListenPort = 51820
PrivateKey = вставити_вміст_server.key
PostUp = iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE

[Peer]
PublicKey = вставити_вміст_client.pub
AllowedIPs = 10.1.1.2/32

Зберігаємо CTRL + O. Вмикаємо і стартуємо WireGuard сервіс:

sudo systemctl enable wg-quick@wg0
sudo systemctl start wg-quick@wg0

Вітаю! Ваш VPN-сервер готовий.

Налаштування VPN-клієнта для підключення до WireGuard в Linux

Тепер, коли VPN-сервер вже працює, необхідно до нього підключитися зі свого комп’ютера. Це можна зробити з допомогою спеціального VPN-клієнта. Встановити його нескладно:

sudo apt-get install wireguard

Далі створюємо файл підключення до Wireguard-сервера:

nano /etc/wireguard/wg0.conf

Прописуємо конфігурацію підключення до VPN:

[Interface]
PrivateKey = вставити_вміст_client.key
Address = 10.1.1.2/24
DNS = 1.1.1.1

[Peer]
PublicKey = вставити_вміст_server.pub
AllowedIPs = 0.0.0.0/0
Endpoint = публічна_IP_адреса_VPN_сервера:51820
PersistentKeepalive = 15

Зберігаємо і запускаємо мережеву службу Linux – WireGuard:

sudo wg-quick up wg0

Якщо все зроблено правильно — має бути ініційоване VPN-з’єднання без помилок (error).

Дізнатись статус WireGuard, контролювати витрати переданих даних можна командою:

sudo wg

Перевірити свою нову IP-адресу, яку вам надало VPN-з’єднання можна з допомогою curl:

curl ip.me

Зупинити з’єднання, відключитись від VPN Wireguard:

sudo wg-quick down wg0

Ось і все. Додамо, що у якості домашньої операційної системи ми використовували Kali Linux. Робочу конфігурацію VPN-клієнта, яку ви використали, можна застосувати на будь-яких інших пристроях чи платформах, наприклад Android:

Для налаштування WireGuard на Android необхідно завантажити програму та створити новий профіль, де вписати ті ж налаштування, що й для Linux-профіля (див. вище)
Схема мережевих підключень різних пристроїв до WireGuard VPN

Схема використання WireGuard VPN різними пристроями одночасно

Порада: сам VPN-сервер можна або тримати завжди включеним, або вимикати (power off), якщо не користуєтесь, аби не “накапували” кошти за працюючий сервер.