- Установка и настройка сервера WireGuard VPN на Linux Ubuntu
- Подготовка системы
- 1. Обновление списка пакетов.
- 2. Настройка брандмауэра
- Установка и настройка сервера
- Подключение клиента
- 1. Ключ на сервере
- 2. Настройка клиента
- Windows
- Linux
- 3. Добавление клиента на сервере
- 4. Проверка работы
- Маршруты через сервер VPN
- На сервере
- На клиенте
- Устанавливаем сервер WireGuard VPN за 5 минут в Linux
- Быстрая установка WireGuard Manager
Установка и настройка сервера WireGuard VPN на Linux Ubuntu
Обновлено: 25.11.2022 Опубликовано: 30.09.2022
WireGuard позиционируется как современное решение по организации быстрого VPN. Рассмотрим процесс его настройки на Linux Ubuntu.
Подготовка системы
1. Обновление списка пакетов.
В дистрибутивах Linux на основе deb важно держать в актуальном состоянии кэш репозиториев. Выполним команду:
2. Настройка брандмауэра
В системах на основе deb, по умолчанию, брандмауэр разрешает все пакеты. Но если в нашей системе настроена защита, то нам нужно открыть UDP-порт для WireGuard. В различных источниках фигурирует разный номер, но на официальном сайте используют 51820:
Установка и настройка сервера
* оба ключа попадут в каталог /etc/wireguard. Выводим на экран содержимое закрытого ключа:
[Interface]
PrivateKey = 2Hl2UlyD/xFrDyzIBEkfPa27yKllp0O+7e9023u8sHk=
Address = 176.16.10.1/24
ListenPort = 51820
SaveConfig = false
- PrivateKey — закрытый ключ, который мы создали и смотрели командой cat.
- Address — адрес в сети VPN. Можно использовать любую подсеть, но стоит ограничиться выбором из зарезервированных диапазонов для локальных сетей. Также данная подсеть не должна пересекаться с используемыми диапазонами.
- ListenPort — порт, на котором будет работать наш сервер.
- SaveConfig — сохранять или нет конфигурацию из текущего состояния при завершении работы. По факту, если выставить в true, то перезапуск сервиса не принимает новые изменения в конфигурационном файле, а возвращает старые настройки. Для внесения изменений нужно будет остановить службу, внести изменения, запустить службу. Мне это показалось не совсем удобным.
Разрешаем автозапуск сервиса:
systemctl enable wg-quick@server —now
* обратите внимание на то, что идет после собаки (server). Это имя конфигурационного файла. При желании, мы можем создать много таких файлов и запустить несколько VPN серверов на разных портах.
Убедимся, что наш сервер начал слушать на заданном порту:
Сервер готов принимать запросы.
Подключение клиента
Для примера мы установим и настроим клиентов для Windows и Linux. Настройка будет выполнена в четыре шага:
- Смотрим ключ на сервере.
- Настраиваем клиента.
- Настраиваем сервер.
- Проверяем подключение.
1. Ключ на сервере
На сервере смотрим публичный ключ, который мы генерировали в начале инструкции:
Фиксируем — его мы будем использовать для настройки клиентов.
2. Настройка клиента
В зависимости от вашей системы, выбираем один из вариантов настройки.
Windows
Заходим на официальный сайт, страницу загрузки. Скачиваем клиента на Windows:
Запускаем скачанный файл и выполняем установку. Она очень простая.
После запустится клиент — в нижней части окна добавляем пустой туннель:
Задаем название для клиента, также фиксируем публичный ключ — он нам будет нужен дальше:
В окне с редактором вносим свои данные:
[Interface]
PrivateKey = qD/VCIDLAWGAIl2G9wUjL+MAobks5PpDmzqQcuqqQWc=
Address = 176.16.10.10/24
[Peer]
PublicKey = Z5E6sWmAX9JqSBpO2frcIZ9vkkm/V+8xgP7ZxWXnOCs=
AllowedIPs = 176.16.10.0/24
Endpoint = 1.1.1.1:51820
PersistentKeepalive = 15
- [Interface] — блок настроек для клиента.
- PrivateKey — приватный ключ клиента. Он автоматически будет сгенерирован
- Address — IP-адрес в сети VPN, который будет назначен клиенту.
- [Peer] — настройки для соединения с сервером.
- PublicKey — публичный ключ сервера. Его мы смотрели в самом начале данного раздела.
- AllowedIPs — маршрут, разрешенный для клиента.
- Endpoint — адрес и порт сервера, к которому мы будем подключаться клиентом.
- PersistentKeepalive — интервал между проверками доступности соединения.
Linux
Установка и настройка, отчасти, похожа на то, что мы делали на сервере. Для начала, устанавливаем wireguard. В зависимости от дистрибутива Linux, команды будут отличаться, например:
б) для Fedora или CentOS 7:
yum install wireguard-tools
* все варианты команд для установки можно посмотреть на официальном сайте.
После установки необходимо сгенерировать ключи и выполнить настройку.
wg genkey | tee /etc/wireguard/private.key | wg pubkey > /etc/wireguard/public.key
* оба ключа попадут в каталог /etc/wireguard.
Смотрим содержимое файлов:
Фиксируем значения. Для настройки клиента нам нужно содержимое приватного ключа, для настройки сервера — публичного.
Создаем конфигурационный файл для сервера:
[Interface]
PrivateKey = qD/VCIDLAWGAIl2G9wUjL+MAobks5PpDmzqQcuqqQWc=
Address = 176.16.10.10/24
[Peer]
PublicKey = Z5E6sWmAX9JqSBpO2frcIZ9vkkm/V+8xgP7ZxWXnOCs=
AllowedIPs = 176.16.10.0/24
Endpoint = 1.1.1.1:51820
PersistentKeepalive = 15
- [Interface] — блок настроек для клиента.
- PrivateKey — приватный ключ клиента. Его мы сгенерировали.
- Address — IP-адрес в сети VPN, который будет назначен клиенту.
- [Peer] — настройки для соединения с сервером.
- PublicKey — публичный ключ сервера. Его мы смотрели в самом начале данного раздела.
- AllowedIPs — маршрут, разрешенный для клиента.
- Endpoint — адрес и порт сервера, к которому мы будем подключаться клиентом.
- PersistentKeepalive — интервал между проверками доступности соединения.
Разрешим автозапуск сервиса:
systemctl enable wg-quick@client
* как в случае с сервером, то, что идет после собаки (client) является именем конфигурационного файла. При желании, мы можем создать много таких файлов и запустить несколько VPN подключений к разным серверам.
3. Добавление клиента на сервере
Откроем конфигурационный файл для нашего сервера:
Добавим пир для нашего нового клиента:
.
[Peer]
PublicKey = 6sDdWDSdYcoBAC7EVKg+z8Gcd+F5OQDkKBELf9MEOTY=
AllowedIPs = 176.16.10.10/32
* где PublicKey — публичный ключ, который мы видели при настройке клиента; AllowedIPs — разрешенный адрес для клиента (который мы ему выдали).
** для каждого клиента, который будет подключаться к серверу мы должны создать свой блок настроек [Peer].
systemctl restart wg-quick@server
4. Проверка работы
Возвращаемся к настройкам клиента. Можно подключаться.
а) На Windows:
Мы должны увидеть измененный статус на Подключен:
б) На Linux запускаем сервис:
systemctl start wg-quick@client
Мы должны подключиться к серверу.
Для проверки соединения можно отправить пинг на сервер (в нашем примере его IP 176.16.10.1):
Базово мы разобрались с настройкой WireGuard.
Маршруты через сервер VPN
Как правило, VPN используется в качестве транзита в другие подсети. Рассмотрим, как теперь настроить наш сервер для работы в качестве маршрутизатора. Настройки выполняются как на сервере, так и клиенте.
Мы предположим, что наш сервер должен пускать клиентов в сеть 192.168.100.0/24.
На сервере
Открываем на редактирование sysctl.conf:
Добавляем в него следующую строчку:
Применяем настройки sysctl:
Добавляем правило в брандмауэр:
iptables -t nat -I POSTROUTING -o ens18 -j MASQUERADE
* в данном примере идет расчет на то, что наша сеть 192.168.100.0/24 доступна для сервера через интерфейс ens18. Вы должны заменить значение на свое.
Наш сервер настроен в качестве маршрутизатора в сеть 192.168.100.0/24. Переходим к клиенту.
На клиенте
В конфигурации клиента редактируем опцию AllowedIPs в блоке [Peer]:
[Peer]
.
AllowedIPs = 176.16.10.0/24, 192.168.100.0/24
.
* обратите внимание, что мы добавили подсеть 192.168.100.0/24 — это приведет к тому, что при подключении клиента к серверу будет прописываться маршрут в данную подсеть через сервер VPN.
А если мы хотим, чтобы весь траффик шел через VPN, задаем значение для AllowedIPs:
Готово. Перезапускаем клиента и пробуем получить доступ к ресурсам в нужной сети.
Устанавливаем сервер WireGuard VPN за 5 минут в Linux
WireGuard – достаточно новый VPN протокол, набирающий популярность. Примечателен высокой производительностью и использованием современной криптографии.
На официальном сайте можно ознакомиться со сравнительной таблицей производительности популярных протоколов VPN.
Как видно из сравнительной таблицы, WireGuard показывает не только самую высокую скорость, но и лучший результат по пингу.
Вы так же можете воспользоваться другим вариантом установки WireGuard, а именно Быстрая установка сервера WireGuard VPN с веб-интерфейсом .
Быстрая установка WireGuard Manager
Кроме установки непосредственно самого сервера WireGuard, будут также установлены инструменты для работы с ним, такие как вызов консольного интерфейса для изменений настроек сервера VPN, легкое добавление новых клиентов (пиров), удаление и обновление.
Устанавливать данный VPN будем из github репозитория complexorganizations / wireguard-manager.
Для установки с помощью данного скрипта поддерживаются следующие операционные системы: CentOS, Debian, Ubuntu, Arch, Fedora, Redhat, Raspbian с ядром Linux 3.1 и выше.
В данном случае будет рассмотрена установка на сервер Ubuntu.
Сначала установим инструмент curl:
Затем скачиваем скрипт установки:
curl https://raw.githubusercontent.com/complexorganizations/wireguard-manager/main/wireguard-manager.sh --create-dirs -o /usr/local/bin/wireguard-manager.sh
Делаем скрипт исполняемым:
chmod +x /usr/local/bin/wireguard-manager.sh
bash /usr/local/bin/wireguard-manager.sh
В случае отсутствия необходимых пакетов скрипт сообщит об этом. Доустанавливаем, если есть в этом необходимость, нужные пакеты и снова запускаем скрипт установки.
Установка разделена на этапы, в которых пользователю предлагается выбрать различные варианты, при этом по умолчанию предлагается оптимальный вариант.
В итоге, после запуска скрипта, нам остается только нажатием Enter подтверждать согласие на установку рекомендуемых настроек.
Скрипт так же предложит установить DNS сервер Unbound, хорошее решение для лучшей приватности. В дальнейшем для клиентов (пиров) можно будет задать альтернативный DNS сервис.
На последнем этапе настройки задаем название клиентскому файлу конфигурации.
Настройка и затем установка WireGuard займет не больше 5 минут.
По окончанию установки будет отображен qr-код для подключения.
Скачать приложение — клиент для нужной операционной системы можно из официального сайта.
Android версия приложения поддерживает установку соединения через qr-код.
Так же Android версия позволяет изменять конфигурационный файл, а также содержит белый и черный список приложений, которые будут работать через VPN-туннель WireGuard.
Для этого нужно нажать на название созданного туннеля, затем на значок карандаша в правом верхнем углу, затем в появившемся окне будет доступна опция All Application.
Там же в настройках конфигурации можно вручную изменить DNS сервер, например на сервер с блокировкой рекламы и фишинга, например на Comss.one DNS.
Важно: для каждого отдельного устройства нужно генерировать отдельный конфигурационный файл.
Конфигурационные файлы доступы в директории /etc/wireguard/clients/ .
Таким образом для Windows клиента нам нужно создать еще один конфигурационный файл. Для этого мы запускаем скрипт WireGuard Manager с помощью команды:
bash /etc/wireguard/wireguard-server.sh
И выбираем вариант Add WireGuard Peer (под номером 5), задаем новое имя. Нам снова предложат qr-код, но для подключения в Windows нам понадобится конфигурационный файл, который можно скачать из директории /etc/wireguard/clients/ .
Для удобной работы с сервером, как с консолью, так и с файлами я работаю через приложение Snowflake.
Устанавливаем приложение – клиент для Windows.
И импортируем в него загруженный из сервера конфигурационный файл.
Аналогично Android приложению, файл можно отредактировать и заменить в нем DNS сервер, при необходимости.
Как видим, с помощью скрипта WireGuard Manager мы можем максимально легко установить WireGuard VPN , но и так же легко создавать новые конфигурационные файлы для подключения.