WireGuard — это новый, современный VPN сервис с открытым исходным кодом, который позиционирует себя как замену OpenVPN и использует современную криптографию. Он реализован в виде модуля ядра Linux. Изначально он поддерживал только Linux, но потом были разработаны приложения для Windows, MacOS и Android.
В сегодняшней статье мы поговорим о том как установить WireGurad Ubuntu 20.04, а также как настроить подключение между настроенным VPN сервером и клиентом.
Установка WireGuard на Ubuntu
Шаг 1. Установка репозитория
В этой статье будет приведен пример установки программы на Ubuntu 20.04, вы можете получить WireGuard из официальных репозиториев, но в более старых дистрибутивах или для получения самой свежей версии следует использовать PPA. Для добавления PPA в систему выполните:
sudo add-apt-repository ppa:wireguard/wireguard
После этого список пакетов будет автоматически обновлен.
Шаг 2. Установка WireGuard
В установке нет ничего сложного, выполните такие команды:
sudo apt install wireguard
Эти два шага надо выполнить как на сервере, так и на клиентском компьютере, дальше работаем только на сервере.
Шаг 3. Настройка системы
Для того, чтобы пакеты перенаправлялись туда, куда надо, нужно разрешить перенаправление сетевых пакетов на уровне ядра. Для этого откройте файл /etc/sysctl.conf и добавьте в конец такие строки:
sudo vi /etc/sysctl.conf
Затем необходимо выполнить команду sysctl -p чтобы система перечитала конфигурацию:
sysctl -p
Шаг 4. Генерация ключей сервера
Для сервера надо создать приватный и публичный ключ. Эти ключи, потом надо будет записать в конфигурационный файл сервера и клиента, сами файлы ключей вам не нужны, поэтому можете создавать их где хотите, например, в домашней папке:
wg genkey | sudo tee server_private.key | wg pubkey | sudo tee server_public.key
Ключи созданы, можете утилита tee запишет их в файл, а также выведет на экран, что очень удобно.
Шаг 5. Генерация ключей клиента
Аналогичным образом создаём ключи для клиента. Команда та же:
wg genkey | sudo tee client_private.key | wg pubkey | sudo tee client_public.key
Шаг 6. Конфигурационный файл сервера
Наш конфигурационный файл сервера будет находится по пути /etc/wireguard/wg0.conf и будет выглядеть следующим образом:
sudo vi /etc/wireguard/wg0.conf
Файл разделен на две секции:
- Interface — настройка сервера;
- Peer — настройка клиентов, которые могут подключаться к серверу, секций Peer может быть несколько.
В данном случае мы настраиваем сервер WireGuard для работы с IPv4 и IPv6 одновременно, вот, что значат основные параметры:
- Address — адрес сервера в сети VPN;
- ListenPort — порт, на котором будет ожидать подключения WireGuard;
- PrivateKey — приватный ключ сервера, сгенерированный ранее;
- PostUp — команда, которая выполняется после запуска сервера. В данном случае включается поддержка MASQUERADE для интерфейса enp0s8, а также разрешается прием пакетов на интерфейсе wg0. Сетевые интерфейсы вам придется заменить на свои.
- PostDown — выполняется после завершения работы WireGuard, в данном случае удаляет все правила, добавленные в PostUp.
Секции Peer содержат настройки клиентов, которые могут подключится к серверу:
- PublicKey — публичный ключ клиента, сгенерированный ранее;
- AllowedIPs — IP адрес, который может взять клиент. Обратите внимание, маска для IPv4 должна быть 32.
Теперь можно переходить к созданию конфигурационного файла непосредственно для клиента.
Шаг 7. Конфигурационный файл клиента
Конфигурационный файл клиента будет выглядеть примерно так:
vi client.conf
Обратите внимание, что все ключи мы генерируем на сервере, а затем уже скидываем конфигурационный файл клиента на компьютер, который надо подключить к сети. Рассмотрим подробнее что за что отвечает:
- PrivateKey — приватный ключ клиента, сгенерированный ранее;
- Address — IP адрес интерфейса wg0 клиента;
- DNS — серверы DNS, которые будут использоваться для разрешения доменных имён;
- PublicKey — публичный ключ сервера, к которому надо подключится.
- Endpoint — здесь надо указать IP адрес сервера, на котором установлен WireGuard и порт;
- AllowedIPs — IP адреса, трафик с которых будет перенаправляться в сеть VPN, в данном примере выбраны все адреса.
После того, как вы внесли все изменения, скопируйте файл на компьютер клиента под именем /etc/wireguard/wg0.conf.
Шаг 8. Запуск сервера
Для запуска сервера используйте такую команду:
sudo wg-quick up wg0
Аналогично можно использовать systemd:
sudo systemctl start wg-quick@wg0
С помощью systemd можно настроить автозагрузку интерфейса:
sudo systemctl enable wg-quick@wg0
Шаг 9. Настройка брандмауэера
В этой инструкции мы использовали порт 63665 для WireGuard. Программа использует UDP, нужно разрешить подключение к этому порту. Для этого выполните:
sudo ufw allow 63665/udp
Или убедитесь, что ufw отключён и порты никто не блокирует:
sudo ufw status
Настройка WireGuard Ubuntu завершена.
Шаг 10. Подключение клиента
Пришло время переходить к клиенту. Я предполагаю, что WireGuard уже установлен, а конфигурационный файл клиента находится по пути /etc/wireguard/wg0.conf. Подключение выполняется аналогично запуску сервера:
sudo wg-quick up wg0
После этого вы можете посмотреть статистику по подключению с помощью команды:
sudo wg show
Шаг 11. Проверка
Чтобы убедиться что всё работает можно выполнить ping для сервера WireGuard. Он должен быть доступен:
ping 10.66.66.1
Если пакеты идут, значит всё хорошо. Если же нет, надо внимательно проверять инструкцию и смотреть что сделано не так. У WireGuard здесь есть проблемы. У программы нет подробных логов, где можно было бы посмотреть какая ошибка произошла, а причин проблем может быть очень много. Чаще всего — это несоответствующие ключи, закрытый порт или неверный адрес сервера. Доступность порта на сервере можно проверить с помощью утилиты nc. Надо запускать на клиентской машине:
nc -z -v -u 192.168.56.101 63665
Также можно убедится, что пакеты WireGuard доходят к серверу, для этого используйте tcpdump на сервере:
tcpdump -n -i enp0s8 port 63665
Вместо enp0s0 вам надо прописать имя своего сетевого интерфейса.
Выводы
В этой статье мы рассмотрели как выполняется установка WireGuard на Ubuntu 20.04. В процессе установки ничего сложного нет, но мне удалось развернуть программу только в Ubuntu. Если у вас не получается установить WireGuard самому, вы можете попробовать скрипт автоматической установки. Скрипт скачает и установит все необходимые зависимости, а также настроит систему и создаст конфигурационные файлы для клиентов. Несмотря на все преимущества WireGuard я пока не намерен на него переходить из-за сложности отладки ошибок. А что думаете вы о программе? Напишите в комментариях!