Главная >> Инструкции >> Установка WireGuard в Ubuntu

Установка WireGuard в Ubuntu

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

net.ipv4.ip_forward = 1
net.ipv6.conf.default.forwarding = 1
net.ipv6.conf.all.forwarding = 1
net.ipv4.conf.all.rp_filter = 1
net.ipv4.conf.default.proxy_arp = 0
net.ipv4.conf.default.send_redirects = 1
net.ipv4.conf.all.send_redirects = 0

Затем необходимо выполнить команду 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]
Address = 10.66.66.1/24,fd42:42:42::1/64
ListenPort = 63665
PrivateKey = OFCMMpdPYUTndTkTuCDCZDg6uYrzGcjcL6Tg4aAp5kU=
PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o enp0s8 -j MASQUERADE; ip6tables -A FORWARD -i wg0 -j ACCEPT; ip6tables -t nat -A POSTROUTING -o enp0s8 -j MASQUERADE
PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o enp0s8 -j MASQUERADE; ip6tables -D FORWARD -i wg0 -j ACCEPT; ip6tables -t nat -D POSTROUTING -o enp0s8 -j MASQUERADE
[Peer]
PublicKey = 2g8MWhxN1QGLAfGwEnxHG38/krdcPbgjo87zSKurP1g=
AllowedIPs = 10.66.66.2/32,fd42:42:42::2/128

Файл разделен на две секции:

  • 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

[Interface]
PrivateKey = GMJXo+phyNS/kodizn353D2MN8bPNOSqJEhQ83caKkY=
Address = 10.66.66.2/24,fd42:42:42::2/64
DNS = 8.8.8.8,8.8.4.4
[Peer]
PublicKey = xxIV2fvMp7J2H1GxVuQcfVi2TJ0lQ/2K8UXSKC/byhM=
Endpoint = 192.168.56.101:63665
AllowedIPs = 0.0.0.0/0,::/0

Обратите внимание, что все ключи мы генерируем на сервере, а затем уже скидываем конфигурационный файл клиента на компьютер, который надо подключить к сети. Рассмотрим подробнее что за что отвечает:

  • 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 я пока не намерен на него переходить из-за сложности отладки ошибок. А что думаете вы о программе? Напишите в комментариях!

Creative Commons License
Статья распространяется под лицензией Creative Commons ShareAlike 4.0 при копировании материала ссылка на источник обязательна .

24 комментария к “Установка WireGuard в Ubuntu”

  1. 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 обновленный конфиг заново?

    Ответить
  2. В статье ошибка. В файле конфига клиента маска должна быть 32, а не 24. Также как и в конфиге сервера в клиентской части.
    Для винды можно установить приложение и подсунуть туда тот же файл конфига клиента, больше ничего настраивать не нужно. Также есть приложение для андроида. Все на офсайте wireguard.

    Ответить
  3. хз, скриптом ovpn засетапить проще, ну и проект не умирает а наоборот развиваеться) много интересных вещей будет в этом году)

    Ответить
    • А какие "интересные вещи" обещают?
      Вот сижу и думаю, а надо мне переезжать на новомодный сабж или продолжать сидеть на openvpn?

      Ответить
      • Если планируеш использовать на андроиде то однозначно стоит. Openvpn акум жрет как не в себя, запускать можно только перед выходом в инет. Но когда ты не пользуешся инетом то телефон в фоне всеравно постоянно чтото отправляет/получает, выходит большую часть времени трафик будет незащищен. А с сабжем у меня на постоянку включен и его вообще не заметно в плане потребления.
        Но если ноут или десктоп то наверно нет смысла, разве что для интереса.

        Ответить
  4. "После того, как вы внесли все изменения, скопируйте файл на компьютер клиента под именем /etc/wireguard/wg0.conf"
    А если и клиент и сервер на одном компьютере?
    Напишите для чайников.
    Можно в личку

    Ответить
  5. всё очень просто,достаточно ,идём по ссылке 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
    вот и всех делов

    Ответить
  6. Это 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, происходит параллельный обмен данными (и параллельное подключение) : клиент > сервер, сервер > клиент, аутентификация и шифрование данных осуществляется парами публичного и закрытого ключей.

    Ответить
  7. решил заняться Ubuntu 2 дня назад, просто хотел поставить как клиент и запустить с файла как в винде. Но ничего не понял что тут да как. Поищу еще, более доступно для моего мозга.

    Ответить
  8. Наткнулся на то что все нахваливают wg, даже велики и ужасный Линус восхищается, по крайне мере кодом, но хз пока. Попробую установить, посмотрю разницу с ovpn.

    Ответить
  9. Поправьте конфиг файл клиента - там маска не 24, а 32. Тащемта потестил всё это дело. ovpn работает точно так же как wg. разница 2 мегабита и 1 пинг, но это помехи, чепуха короче, но настройка правда легче. Просто трубили типа ваааах wireguard круто, а ovpn днище адовое

    Ответить
  10. Второй день бьюсь, но не могу решить проблемуна 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).

    Ответить
  11. Вот результаты моих замеров. Канал 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

    Ответить
  12. В этой https://losst.pro/luchshie-vps-servera-dlya-vpn статье говорится:

    Технология виртуализации - от технологии виртуализации зависит то, какие VPN серверы вы сможете поставить. OpenVPN и Shadowsocks будут работать на большинстве технологий виртуализации, а WireGuard не будет работать с OpenVZ. По возможности лучше выбирать XEN виртуализацию, если нет - KVM. И только в крайнем случае OpenVZ.

    Ответить
    • Все прекрасно настраивается и работает
      /# cat /etc/lsb-release
      DISTRIB_ID=Ubuntu
      DISTRIB_RELEASE=24.04
      DISTRIB_CODENAME=noble
      DISTRIB_DESCRIPTION="Ubuntu 24.04 LTS"

      Ответить

Оставьте комментарий