У даній статті розглянемо, як налаштувати Double VPN за допомогою WireGuard, використовуючи два сервери для створення тунелю. Такий підхід може бути корисним у ситуаціях, коли потрібно додатково захистити з’єднання або розділити функціонал серверів (наприклад, перший сервер для входу в VPN, а другий для виходу в інтернет).
Раніше ми писали, як налаштувати VPN за допомогою WireGuard (оф. сайт: https://www.wireguard.com/) і WireHole для запобігання DNS витоку.
- Задача: Побудувати Double VPN
- Переваги використання ланцюжка серверів
- Недоліки такого підходу
- Кроки по налаштуванню
- Крок 1: Встановлення WireGuard
- Крок 2: Генерація ключів
- Крок 3: Налаштування сервера 2 (Кінцева точка)
- Крок 4: Налаштування сервера 1 (Проміжний)
- Крок 5: Налаштування клієнта
- Крок 6: Увімкнення IP Forwarding
- Крок 7: Налаштування NAT на сервері 2
- Перевірка підключення
- Висновок
Задача: Побудувати Double VPN
Необхідно налаштувати клієнта так, щоб увесь його інтернет-трафік спочатку проходив через сервер 1, а потім через сервер 2, звідки і буде виходити в інтернет.
Переваги використання ланцюжка серверів
- Додаткова безпека: Використання декількох серверів збільшує складність для потенційних атакуючих, оскільки трафік проходитиме через проміжні вузли.
- Розподіл навантаження: Розділення функцій між серверами може підвищити ефективність. Один сервер може використовуватися для авторизації та входу в VPN, а інший — для виходу в інтернет.
- Анонімність: Ускладнюється відстеження трафіку, оскільки кінцевий сервер не знає, хто спочатку підключався до VPN.
- Географічна гнучкість: Можливість підключення через сервери в різних регіонах дозволяє вибирати різні географічні локації для виходу в інтернет.
Недоліки такого підходу
- Складність налаштування: У порівнянні з звичайним налаштуванням WireGuard, налаштування ланцюжка з декількох серверів вимагає більше зусиль та знань з маршрутизації та мережевої конфігурації.
- Підвищена затримка (латентність): Кожен додатковий сервер додає затримку, що може негативно впливати на швидкість з’єднання.
- Складність діагностики: При виникненні проблем з підключенням, їх діагностика стає складнішою, оскільки трафік проходить через декілька вузлів.
- Вимоги до ресурсів: Для роботи потрібно два (або більше) сервери, що збільшує витрати на інфраструктуру.
Кроки по налаштуванню
Крок 1: Встановлення WireGuard
Перш за все встановимо WireGuard на кожному з серверів і на клієнті. Наприклад, на Ubuntu/Debian команда для встановлення виглядає так:
sudo apt update sudo apt install wireguard
Крок 2: Генерація ключів
WireGuard використовує пари ключів для шифрування. На кожному сервері та клієнті згенеруйте пару ключів:
wg genkey | tee privatekey | wg pubkey > publickey
Збережіть приватні та публічні ключі — вони знадобляться при налаштуванні конфігурації.
Крок 3: Налаштування сервера 2 (Кінцева точка)
Сервер 2 буде кінцевою точкою тунелю та надсилатиме трафік в інтернет.
- Створюємо файл конфігурації
/etc/wireguard/wg0.conf
на сервері 2:[Interface] PrivateKey = <Приватний ключ сервера 2> Address = 10.0.2.1/24 # Локальний IP для тунелю ListenPort = 51820 # Порт для WireGuard [Peer] PublicKey = <Публічний ключ сервера 1> AllowedIPs = 10.0.1.0/24 # Мережа між клієнтом і сервером 1
- Вмикаємо WireGuard на сервері 2:
sudo wg-quick up wg0
Крок 4: Налаштування сервера 1 (Проміжний)
Сервер 1 передаватиме трафік від клієнта на сервер 2.
- Створюємо файл конфігурації
/etc/wireguard/wg0.conf
:[Interface] PrivateKey = <Приватний ключ сервера 1> Address = 10.0.1.1/24 # Локальний IP для тунелю ListenPort = 51820 # Порт для WireGuard [Peer] PublicKey = <Публічний ключ клієнта> AllowedIPs = 10.0.1.2/32 # IP клієнта [Peer] PublicKey = <Публічний ключ сервера 2> Endpoint = <IP сервера 2>:51820 # Адреса сервера 2 AllowedIPs = 0.0.0.0/0 # Весь трафік через сервер 2 PersistentKeepalive = 25
- Вмикаємо VPN на сервері 1:
sudo wg-quick up wg0
Крок 5: Налаштування клієнта
На клієнті створюємо файл конфігурації wg0.conf
:
[Interface] PrivateKey = <Приватний ключ клієнта> Address = 10.0.1.2/24 # IP клієнта [Peer] PublicKey = <Публічний ключ сервера 1> Endpoint = <IP сервера 1>:51820 AllowedIPs = 0.0.0.0/0 # Весь трафік через сервер 1 PersistentKeepalive = 25
Запускаємо VPN на клієнті:
sudo wg-quick up wg0
Крок 6: Увімкнення IP Forwarding
Щоб сервери могли пересилати трафік, необхідно увімкнути IP Forwarding:
- На кожному сервері додаємо рядок у файл
/etc/sysctl.conf
:net.ipv4.ip_forward = 1
- Застосовуємо зміни:
sudo sysctl -p
Крок 7: Налаштування NAT на сервері 2
Щоб сервер 2 міг надсилати трафік в інтернет, налаштуємо NAT:
sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
Де eth0
— інтерфейс, з’єднаний з інтернетом. Не забудьте зберегти правила iptables, щоб вони зберігалися після перезавантаження.
Перевірка підключення
Після налаштування конфігурації на клієнтах та серверах, переконайтеся, що тунелі налаштовані правильно. Перевірте, чи проходить трафік через обидва сервери і виходить в інтернет.
Для цього використовуйте команду wg
на кожному сервері, щоб переконатися, що клієнт підключено правильно, а також перевірте маршрутизацію на клієнті:
ip route
Висновок
Використання ланцюжка з декількох серверів (Double VPN) для WireGuard може забезпечити додатковий захист та покращити гнучкість роботи з VPN. Проте, воно вимагає більш складного налаштування, уважного підходу до маршрутизації та налаштування NAT. Такий підхід підійде для тих, хто потребує додаткової безпеки або хоче налаштувати багатошарову інфраструктуру для своїх підключень.