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 я пока не намерен на него переходить из-за сложности отладки ошибок. А что думаете вы о программе? Напишите в комментариях!
1) А как настраивается клиент на Windows?
2) Если через сервер Wireguard нужно пропускать маршруты на определенные адреса или подсети для определенного Wireguard- клиента, то как это настраивать? Например, для Client1 нужен доступ на подсеть 192.168.1.x, для Client2 нужен доступ на подсеть 192.168.1.x, 192.168.2.x ит.д.
3) И самое главное, если в будущем потом понадобится Client-у1 доступ на подсеть 192.168.2.x или другие, то каким образом это сделать? Достаточно ли прописать этот доступ только на сервере или нужно скидывать Client-у1 обновленный конфиг заново?
Proton VPN использую при необходимости...его 10-15 Мб\с хватает на free тарифе.
Полезная информация, good
В статье ошибка. В файле конфига клиента маска должна быть 32, а не 24. Также как и в конфиге сервера в клиентской части.
Для винды можно установить приложение и подсунуть туда тот же файл конфига клиента, больше ничего настраивать не нужно. Также есть приложение для андроида. Все на офсайте wireguard.
Полезно. Но пару раз пробовал настроить сам, не получилось, но мои конфиги были посложней.
хз, скриптом ovpn засетапить проще, ну и проект не умирает а наоборот развиваеться) много интересных вещей будет в этом году)
А какие "интересные вещи" обещают?
Вот сижу и думаю, а надо мне переезжать на новомодный сабж или продолжать сидеть на openvpn?
Если планируеш использовать на андроиде то однозначно стоит. Openvpn акум жрет как не в себя, запускать можно только перед выходом в инет. Но когда ты не пользуешся инетом то телефон в фоне всеравно постоянно чтото отправляет/получает, выходит большую часть времени трафик будет незащищен. А с сабжем у меня на постоянку включен и его вообще не заметно в плане потребления.
Но если ноут или десктоп то наверно нет смысла, разве что для интереса.
а как windows клиент завести через прокси, никаких нет настроек
"После того, как вы внесли все изменения, скопируйте файл на компьютер клиента под именем /etc/wireguard/wg0.conf"
А если и клиент и сервер на одном компьютере?
Напишите для чайников.
Можно в личку
Нельзя так.
всё очень просто,достаточно ,идём по ссылке https://cf-warp.maple3142.net/
полученный конфиг активируем в Network Manager
$ CONF_FILE="warp.conf"
$ nmcli connection import type wireguard file "$CONF_FILE"
Connection 'warp' (125d4b76-d230-47b0-9c31-bb7b9ebca861) successfully added.
затем разрываем соединение
$ nmcli connection down warp
$ service network-manager restart
ждём секунд 5 ,и
$ nmcli connection up warp
вот и всех делов
Кто может объяснить для чайника откуда берется address в конфиге сервера?
Это ip адрес для сетевого интерфейса wireguard, имя можно определить любое но по умолчанию и в документации используют wg0. Так же важно что при своем определении интерфейса или по умолчанию интерфейс создается в физическом пространстве имен.
Пример:
1. имеется сервер с внешним адресом 77.99.88.11 установлено на eth0.
надо подключится к нему с нескольких машин посредством wireguard.
2. Надо выбрать подсеть для подключаемых по wireguard машин, к примеру 10.10.10.0/24 (net 10.10.10.0 mask 255.255.255.0).
3. Первый адрес в выбранной сети присвоим серверу wireguard 10.10.10.1/24 остальные назначаем машинам клиентам и тогда
на сервере
/etc/wireguard/wg0.conf
[Interface]
PrivateKey =
Address = 10.10.10.1/24
#(первый адрес сервера)
ListenPort = 51820
[Peer]
PublicKey =
AllowedIPs = 10.10.10.2/32
#(последующие адреса, клиентов, здесь только разрешения для клиента сам адрес задается в клиенском конфиге)
[Peer]
PublicKey =
AllowedIPs = 10.10.10.3/32
[Peer]
PublicKey =
AllowedIPs = 10.10.10.4/32
[Peer]
PublicKey =
AllowedIPs = 10.10.10.5/32
PersistentKeepalive = 10
#(поддерживать соединение активным, при отсутствии трафика, каждые 10 сек оправлять пакет в сторону клиента)
конфигаруционный файл коиента
/etc/wireguard/cl-wg0.conf
[Interface]
PrivateKey =
ListenPort = 64820
#(обратный порт подключения от сервера к клиенту, не обязательный парамер, если не указать будет выбираться динамически)
Address = 10.10.10.2/32
#(адрес клиента)
[Peer]
PublicKey =
AllowedIPs = 10.10.10.0/24
Endpoint = 77.99.88.11:51820
#(внешний адрес сервера)
PersistentKeepalive = 10
(поддерживать соединение активным, при отсутствии трафика, каждые 10 сек оправлять пакет в сторону сервера)
Обратите снимание что wireguard не туннельный vpn, происходит параллельный обмен данными (и параллельное подключение) : клиент > сервер, сервер > клиент, аутентификация и шифрование данных осуществляется парами публичного и закрытого ключей.
решил заняться Ubuntu 2 дня назад, просто хотел поставить как клиент и запустить с файла как в винде. Но ничего не понял что тут да как. Поищу еще, более доступно для моего мозга.
Наткнулся на то что все нахваливают wg, даже велики и ужасный Линус восхищается, по крайне мере кодом, но хз пока. Попробую установить, посмотрю разницу с ovpn.
Поправьте конфиг файл клиента - там маска не 24, а 32. Тащемта потестил всё это дело. ovpn работает точно так же как wg. разница 2 мегабита и 1 пинг, но это помехи, чепуха короче, но настройка правда легче. Просто трубили типа ваааах wireguard круто, а ovpn днище адовое
Второй день бьюсь, но не могу решить проблемуна Ubuntu 20.4
Unable to access interface: Protocol not supported
Везде пишуn, что апдейт заголовков по версии ядра решает проблему, но у меня актуальные. Переустанавливал - не помогло.
#modprobe wireguard
modprobe: FATAL: Module wireguard not found in directory /lib/modules/5.4.0-105.119-generic
Куда копать, ума не приложу (Сервер Virtualization Type - OpenVZ).
OpenVZ - это плохо, нужно KVM
Вот результаты моих замеров. Канал 200 МБит/с
openVpn tun
на сервер
[ ID] Interval Transfer Bitrate Retr
[ 5] 0.00-10.00 sec 54.1 MBytes 5.41 MBytes/sec 17 sender
[ 5] 0.00-10.01 sec 53.8 MBytes 5.37 MBytes/sec receiver
с сервера
[ ID] Interval Transfer Bitrate Retr
[ 5] 0.00-10.01 sec 120 MBytes 12.0 MBytes/sec 104 sender
[ 5] 0.00-10.00 sec 119 MBytes 11.9 MBytes/sec receiver
wireguard
на сервер
[ ID] Interval Transfer Bitrate Retr
[ 5] 0.00-10.00 sec 110 MBytes 11.0 MBytes/sec 34 sender
[ 5] 0.00-10.02 sec 107 MBytes 10.6 MBytes/sec receiver
с сервера
[ ID] Interval Transfer Bitrate Retr
[ 5] 0.00-10.02 sec 187 MBytes 18.7 MBytes/sec 16 sender
[ 5] 0.00-10.00 sec 184 MBytes 18.4 MBytes/sec receiver
В этой https://losst.pro/luchshie-vps-servera-dlya-vpn статье говорится:
Технология виртуализации - от технологии виртуализации зависит то, какие VPN серверы вы сможете поставить. OpenVPN и Shadowsocks будут работать на большинстве технологий виртуализации, а WireGuard не будет работать с OpenVZ. По возможности лучше выбирать XEN виртуализацию, если нет - KVM. И только в крайнем случае OpenVZ.
Спасибо за еще одну полезную статью!
Может кому-то пригодиться GUI...
wireguird_amd64.deb (1.8mb)
https://github.com/UnnoTed/wireguird/releases/download/v0.2.0/wireguird_amd64.deb
Материал по статье не подходит для Ubuntu Server 22.04 - не теряйте время зря
Все прекрасно настраивается и работает
/# cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=24.04
DISTRIB_CODENAME=noble
DISTRIB_DESCRIPTION="Ubuntu 24.04 LTS"