В данной статье рассмотрим, как настроить VPN с помощью WireGuard, используя два сервера для создания туннеля. Такой подход может быть полезен в ситуациях, когда необходимо дополнительно защитить соединение или разделить функционал серверов (например, первый сервер для входа в VPN, а второй для выхода в интернет).
Ранее мы писали как настроить VPN с помощью WireGuard (оф. сайт: https://www.wireguard.com/) и WireHole для предотвращения утечки DNS leak.
- Задача: Построить Двойной VPN
- Преимущества использования цепочки серверов
- Недостатки такого подхода
- Шаги по настройке
- Шаг 1: Установка WireGuard
- Шаг 2: Генерация ключей
- Шаг 3: Настройка сервера 2 (Конечная точка)
- Шаг 4: Настройка сервера 1 (Промежуточный)
- Шаг 5: Настройка клиента
- Шаг 6: Включение IP Forwarding
- Шаг 7: Настройка NAT на сервере 2
- Проверка подключения
- Заключение
Задача: Построить Двойной 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
Заключение
Использование цепочки из нескольких серверов (Двойной VPN) для WireGuard может обеспечить дополнительную защиту и улучшить гибкость работы с VPN. Однако оно требует более сложной настройки, внимательного подхода к маршрутизации и настройки NAT. Такой подход подойдет для тех, кто нуждается в дополнительной безопасности или хочет настроить многослойную инфраструктуру для своих подключений.