Wireguard настройка centos 8

Обновлено: 06.07.2024

WireGuard — это новый VPN про­то­кол с откры­тым исход­ным кодом, осно­ван­ный на послед­них кон­цеп­ци­ях крип­то­гра­фии. Его осо­бен­ность – про­сто­та реа­ли­за­ция и высо­кая ско­рость рабо­ты. WireGuard рабо­тать быст­рее и каче­ствен­нее, чем VPN-про­то­ко­лы OpenVPN и IKEv2. WireGuard реа­ли­зу­ет мето­ды вир­ту­аль­ной част­ной сети для созда­ния защи­щен­ных соеди­не­ний в марш­ру­ти­зи­ру­е­мых или мосто­вых кон­фи­гу­ра­ци­ях, Вклю­чен в состав ядра Linux, начи­ная с вер­сии 5.6.

Пре­иму­ще­ства WireGuard:

  • Про­стой в уста­нов­ке, настрой­ке и использовании;
  • Исполь­зу­ет совре­мен­ные крип­то­гра­фи­че­ские алго­рит­мы: Noise protocol framework, Curve25519, ChaCha20, Poly1305 и т.д.
  • Высо­кая про­из­во­ди­тель­ность за счет реа­ли­за­ции его в виде моду­ля ядра (мож­но полу­чить ско­рость до 1Гбит/с, что в 4 раза боль­ше чем про­из­во­ди­тель­ность OpenVPN);
  • Ком­пакт­ный и чита­е­мый код (основ­ная логи­ка WireGuard зани­ма­ет поряд­ка 4 тыс. строк кода, тогда как в OpenVPN дохо­дит до несколь­ких сотен тысяч), про­ще иссле­до­вать на уязвимости..

Из мину­сов мож­но при­ве­сти несколь­ко примеров:

  • WireGuard VPN рабо­та­ет толь­ко по UDP , то есть если у вас закрыт UDP тра­фик, под­клю­че­ния рабо­тать не будут;
  • Раз­ра­бот­чи­ки пока еще назы­ва­ют свой про­дукт экспериментом.

В дан­ной ста­тье, мы рас­смот­рим настрой­ку WireGuard на сер­ве­ре с CentOS 7 и 8, но дан­ный VPN-сер­вер, под­дер­жи­ва­ет­ся прак­ти­че­ски на всех Linux дис­три­бу­ти­вах и не только.

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

Перед уста­нов­кой необ­хо­ди­мо­го ПО на сер­вер, выпол­ни­те обнов­ле­ние паке­тов на сер­ве­ре с помо­щью пакет­но­го менеджера:

Или для CentOS 8:

Для CentOS 8:

В даль­ней­шем настрой­ка WireGuadr не отли­ча­ет­ся на этих дис­три­бу­ти­вах CentOS. Что­бы про­ве­рить, что модуль wireguard был уста­нов­лен и загру­жен, выпол­ни­те команду:


Базовая настройка VPN сервера WireGuard

Создай­те дирек­то­рию для WireGuard:

Теперь мож­но при­сту­пить к гене­ра­ции клю­чей для кли­ен­та и сервера:

В резуль­та­те выпол­не­ния преды­ду­щих команд, появит­ся 4 фай­ла с клю­ча­ми: при­ват­ный и пуб­лич­ный клю­чи для сер­ве­ра, а так­же ана­ло­гич­ные клю­чи для кли­ен­та (мы будем исполь­зо­вать их при настрой­ке кли­ен­та WireGuard).

date

28.04.2020

directory

Android, CentOS, Linux, Windows 10

comments

комментариев 7

WireGuard — это новый VPN протокол с открытым исходным кодом, основанный на последних концепциях криптографии. Его особенность – простота реализация и высокая скорость работы. WireGuard работать быстрее и качественнее, чем VPN-протоколы OpenVPN и IKEv2. WireGuard реализует методы виртуальной частной сети для создания защищенных соединений в маршрутизируемых или мостовых конфигурациях, Включен в состав ядра Linux, начиная с версии 5.6.

Преимущества WireGuard:

  • Простой в установке, настройке и использовании;
  • Использует современные криптографические алгоритмы: Noise protocol framework, Curve25519, ChaCha20, Poly1305 и т.д.
  • Высокая производительность за счет реализации его в виде модуля ядра (можно получить скорость до 1Гбит/с, что в 4 раза больше чем производительность OpenVPN);
  • Компактный и читаемый код (основная логика WireGuard занимает порядка 4 тыс. строк кода, тогда как в OpenVPN доходит до нескольких сотен тысяч), проще исследовать на уязвимости..

Из минусов можно привести несколько примеров:

  • WireGuard VPN работает только по UDP, то есть если у вас закрыт UDP трафик, подключения работать не будут;
  • Разработчики пока еще называют свой продукт экспериментом.

В данной статье, мы рассмотрим настройку WireGuard на сервере с CentOS 7 и 8, но данный VPN-сервер, поддерживается практически на всех Linux дистрибутивах и не только.

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

Перед установкой необходимого ПО на сервер, выполните обновление пакетов на сервере с помощью пакетного менеджера:

Для CentOS 8:

В дальнейшем настройка WireGuadr не отличается на этих дистрибутивах CentOS. Чтобы проверить, что модуль wireguard был установлен и загружен, выполните команду:

установка wireguard в linux centos

Базовая настройка VPN сервера WireGuard

Создайте директорию для WireGuard:

Теперь можно приступить к генерации ключей для клиента и сервера:

В результате выполнения предыдущих команд, появится 4 файла с ключами: приватный и публичный ключи для сервера, а также аналогичные ключи для клиента (мы будем использовать их при настройке клиента WireGuard).

генерация ключей для wireguard

Далее нужно создать конфигурационный файл для сервера:

И добавить в него следующее содержимое:

  • В поле PrivateKey нужно добавить содержимое файла server-private.key
  • В поле PublicKey вы добавляете содержимое с файла client-public.key
  • Address — IP адрес сервера wireguard
  • ListenPort — порт на котором будет работать wireguard
  • AllowedIPs — IP адреса, которые назначаются VPN клиенту

PostUp и PostDown правила iptables при подключении wireguard.

В блоке [Peer] указываются данные для VPN клиентов. Если их будет несколько, то нужно добавить блоки для новых клиентов, с новым IP адресом и новым ключом.

Если у вас на сервере используется не iptables, а firewalld, замените строки в конфигурационном файле, которые относятся к настройкам межсетевого экрана:

Вы заменяете на:

Чтобы добавить нового клиента на сервер, вам нужно сгенерировать для него ключи, выполняется это так же, как и для первого клиента:

Теперь добаьте блок для нового клиента в конфигурационный файл /etc/wireguard/wg0-server.conf:

Включите форвардинг пакетов:

Добавьте сервис WireGuard в автозагрузку и запустите его:

Проверьте, что появился отдельный сетевой интерфейс:

Теперь вы можете подключиться к вашему VPN серверу с различных клиентов. Рассмотрим, как их настроить.

Подключение к WireGuard с мобильного устройства Android

Для подключения с мобильного устройства Android, лучше всего использовать приложение WireGuard, которое доступно в Play Маркет (Google Play):

WireGuard клиент для android в Google Play

Установите приложение, откройте и нажмите кнопку для добавления нового подключения:

WireGuard добавление нового подключения в клиенте

Чтобы максимально просто создать новое VPN подключение, нужно на WireGuard сервере и создать файл для генерации qr-кода:

И добавим в него следующее содержимое:

  • В поле PrivateKey нужно указать содержимое файла client-private.key
  • В поле PublicKey – данные из файла server-public.key
  • Значение SERVER_IP замените белым (реальным) IP-адресом вашего сервера
  • DNS можете заполнить на ваш выбор.

Выполните команду для генерации QR кода:

После выполнения команды, вы должны получить qr-код который нужно отсканировать в приложении на Android:

qrencode - сгенерировать qr код для подключения в wireguard

Осталось указать имя подключения и оно будет автоматически создано на вашем мобильном (со свеми ключами и настройками). После подключения к VPN серверу вы выйти в интернет с адресом WireGuard (как при подключении к любому VPN сервису):

vpn подключение wireguard в android

Для устройств с IOS так же есть клиент WireGuard. Настройка выполняется аналогично Android. Все ваши шаги для подключения будут идентичными.

Настройка клиента WireGuard в Windows

Установите клиент WireGuard и запустите его.

wireguard клиент для windows

Создайте файл client.conf ( генерируется по способу, описанному выше при генерации qr-кода), нажмите кнопку Import и укажите данный файл:

настройка vpn подключения wireguard в windows

отключиться от wireguard

Чтобы отключиться от WireGuard, нажмите кнопку Deactivate.

Таким образом, мы настроили VPN-сервер WireGuard, который не уступает OpenVPN или IpSec, а настраивается гораздо быстрее и проще.

WireGuard или OpenVPN?

Содержание

WireGuard или OpenVPN

Существуют различные VPN-протоколы, в числе которых наиболее популярный это OpenVPN. Однако, не смотря на неоспоримый факт надёжности, он разрабатывался более 20 лет назад, а применяемые методы шифрования и того больше. Визитной карточкой WireGuard является его код: всего 4000 строк, в отличии от OpenVPN, у которого их насчитывается более 600 000, в результате чего он имеет значительно большую поверхность атаки (чем больше кода, тем больше потенциальных уязвимостей).

Протоколы шифрования Wireguard

WireGuard использует набор современных криптографических протоколов для шифрования данных, в числе которых:

  • ChaCha20 для симметричного шифрования также используется в AEAD структуре RFC7539;
  • Poly1305 для аутентификации, также используется в AEAD структуре RFC7539;
  • Curve25519 — эллиптическая кривая для протокола безопасного обмена ключей Diffie-Hellman;
  • Blake2 — в RFC7693 для соответствующей хеш-функции;
  • SipHash2-4 — псевдослучайная функция для поиска расшифрованных открытых ключей инициатора сессии.

Общая длина ключа безопасности в WireGuard составляет 256 бит и не может изменять, при этом длина ключа в OpenVPN может достигать 4096 бит, так как OpenVPN поддерживает множество криптографических алгоритмов, благодаря использованию библиотеки OpenSSL, а сами методы шифрования задаются пользователем, что делает его более гибким в сравнении с WireGuard. Однако, для большинства случаев 256 бит является более чем достаточным размером ключа.

Главным недостатком WireGuard является конфиденциальность, а именно хранение IP адресов клиентов до перезагрузки сервера в лог-файлах в открытом виде. Таким образом, получив доступ к серверу, можно узнать IP-адреса клиентов.

Скорость передачи данных

Главным преимуществом WireGuard в отличии от других протоколов, в частности OpenVPN, является скорость. В качестве протокола передачи данных используется UDP. Кроме того, WireGuard потребляет намного меньше системных ресурсов сервера, нежели OpenVPN. Это достигается за счет:

  • Более короткого и оптимизированного кода, нежели у OpenVPN;
  • За счет более современных криптографических протоколов;

WireGuard против OpenVPN

Как видно в сравнении производительности различных VPN-протоколов, и, в частности, WireGuard против OpenVPN, первый обладает не только более высокой скоростью загрузки, но и более низким ping, что является немаловажным фактором.

Установка WireGuard на CentOS 8

Выполняем обновление пакетов yum и подключаем репозитарий EPEL:

Производим установку самого WireGuard:

Собственно всё, WireGuard установлен. Теперь перейдём к следующему шагу.

Настройка WireGuard

Данная утилита выполнит не только настройку WireGuard вместо Вас, но и создаст первого пользователя!

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

В Windows процесс создания подключения будет выглядеть следующим образом:


В открывшемся окне, введите Название подключения и вставьте содержимое файла wgclient_10.conf в диалоговое окно:


Теперь добавляем WireGuard в автозагрузку при старте CentOS и запускаем приложение:

На этом установка и настройка WireGuard завершены. Забегая вперёд, добавление новых клиентов производится командой:

Для подключения можно использовать QR-код или же данные, указанные в сгенерированном файле настроек. Если для первого пользователя файл конфигурации назывался wgclient_10.conf, то для второго wgclient_11.conf и т.д.

После добавления новых пользователей, выполняем команду:

Настройка firewalld для работы VPN

Включаем поддержку роутинга трафика между сетевыми интерфейсами. Для этого открываем в редакторе файл:

И добавляем в него следующее содержимое:

Применяем настройки, выполнив команду:

Теперь открываем файл конфигурации WireGuard:

Нас интересует значение параметра ListenPort. В нашем случае это 47441. Мы должны открыть данный порт для UDP подключений. Для этого создаём файл:

Со следующим содержимым:

Затем включаем службу WireGuard в firewalld с помощью команды firewall-cmd следующим образом:

Настраиваем маскировку, чтобы весь трафик, входящий и исходящий из локального интерфейса, правильно маршрутизировался через наш общедоступный IP-адрес:

Готово! На этом установка WireGuard на CentOS 8 завершена.

Заключение

WireGuard действительно интересный и современный VPN-протокол. Возможно, из-за внутренних соображений безопасности, пока он не может выступать полноценной заменой OpenVPN для построения корпоративных сетей, однако для частного использования является оптимальным решением, так как процесс установки и добавления новых пользователей значительно проще и быстрее, чем в OpenVPN.

WireGuard — инструмент для построения виртуальных сетей. Многие называют его этаким «VPN нового поколения». Он включен в состав ядра, начиная с версии 5.6.

Заметка обновлена 27.02.2020.

В рамках этой заметки, мы запустим в работу простой WireGuard VPN сервер и настроим подключение из Linux клиента к нему. Работать мы будем в CentOS 8, но инструкция вполне подойдёт и для других дистрибутивов, разве что пакетные менеджеры и репозитории будут отличаться.

wireguard

Сервер wireguard.

Подготовка и установка.

1. Для начала, подключаем репозитории EPEL и RPMFusion Free. Cтавим доступные обновления и запускаем систему с новым ядром.

2. Далее, ставим на сервер всё необходимое и собираем модуль для Wireguard. После, убеждаемся, что модуль запущен в работу:

Вывод последней команды будет примерно таким:

Настройка сервера.

3. Генерируем ключи для клиента и сервера:

4. Создаём конфигурационный файл для сервера /etc/wireguard/wg0.conf со следующим содержимым:

Разумеется, вместо SERVER_PRIVATE_KEY и CLIENT_PUBLIC_KEY мы прописываем ключи, из созданных ранее файлов. Далее, комментарии по конфигу:

Address — адрес виртуального интерфейса wg0 на сервере.
ListenPort — порт, на котором будет работать VPN.
AllowedIPs — виртуальные IP клиентов, которые будут подключаться к нашему серверу.

При необходимости, мы можем так же указать параметры PostUp и PostDown — команды, которые будут выполнены при включении и отключении интерфейса.

5. Включаем форвардинг пакетов:

6. Настраиваем фаервол:

7. Запускаем сервис в работу:

Клиент wireguard.

Пишем конфиг.

8. На основе сделанной настройки, пишем простой конфиг для клиента. Этот конфиг подойдёт и для десктопа, и для, например, android приложения:

В данном случае, вместо CLIENT_PRIVATE_KEY и SERVER_PUBLIC_KEY мы опять же, подставляем ключи, сгенерированные ранее, а вместо SERVER_REAL_IP прописываем IP адрес нашего сервера, на котором установлен VPN.

Wireguard и десктоп клиент.

Проверяем подключение, и если всё сделано верно, то весь наш трафик теперь будет проходить через VPN сервер.

Для отключения от VPN просто выполняем команду wg-quick down wg0-client:

При необходимости, мы можем управлять сервисом через systemd:

Wireguard на android.

Для использоания wireguard на android, достаточно скачать клиента из Play Market или из F-Droid репозитория, а для подключения просто выполнить импорт подготовленного wg конфига для клиента.

И, собственно, всё. Вот так, очень просто (куда проще чем тот же OpenVPN) мы можем настроить защищённый VPN туннель и использовать его в повседневной работе.

Дополнительно.

Быстрая установка.
Использование iptables.

Для случаев, когда в системе не оказывается firewalld (либо его не хочется ставить по какой-то причине), можно настроить обработку подключений с помощью iptables, для этого, конфиг на сервере нужно модифицировать так:

Несколько клиентов.

Для работы с несколькими клиентами, каждому из них нужно сгенерировать свои открытый и закрытый ключи. Затем, в конфиге сервера указать каждого из них. Пример такого конфига:

Просто, для истории.

21 thoughts on “ WireGuard ”

Так и не дошли руки?

Сам нашел косяк, у клиента в конфиге обязательно должна быть маска /32

Более производительный. На роутере где tinc загибался под 10 мегабитами, wireguard 80-90 давал.

Проблема в том, что он только UDP.

А почему это проблема?

Потому что в офисной сетке нашей например UDP вообще зарезан. А вот OpenVPN по TCP на 443-й порт прекрасно работает.

Возможно ли с помощью WireGuard создать VPN между
точкой с реальным IP адресом и точкой без реального IP адреса ( роутер+OpenWRT+3G/4G internet)? При этом требуется доступ к компьютерам, находящимся за роутером с OpenWRT.

как отключить логи?

Возможно неправильно указываю -> Endpoint = SERVER_REAL_IP:51820

Пробывал разные внешние сервисы, но не получилось.
Что не так? Где смотреть?

Вы пробовали делать настройки, чтобы default gateway поднимался только после установления соединения?

Чтобы этого не произошло, достаточно настроить Kill Switch.
В конфиг клиента добавляем пару строк. Покажу на примере iptables в линукс:

[Peer]
PublicKey = SERVER_PUBLIC_KEY
Endpoint = SERVER_REAL_IP:51820
AllowedIPs = 0.0.0.0/0
PersistentKeepalive = 21

А как написать конфиг если у меня на серваке серый адре, на роутере белый с пробросом протов на серый и клиентом является плашет с симкой?

Здравствуйте, есть VPS установил WG (192.168.2.1) так же есть debian 10 клиент 192.128.2.2 он же шлюз в локальной сети для обхода блокировок, соединение через WG с сервером установлено, как сделать так что бы был доступ в локальную сеть 192.168.1.0/24 с сервера? Не могу разобраться с маршрутом

Здравствуйте, есть VPS установил WG (192.168.2.1) так же есть debian 10 клиент 192.128.2.2 он же шлюз (192.168.1.2) в локальной сети для обхода блокировок, соединение через WG с сервером установлено, как сделать так что бы был доступ в локальную сеть 192.168.1.0/24 с сервера? Не могу разобраться с маршрутом

Столкнулся с не критичной проблемой:
Несмотря на то, что мой хостинг провайдер находится в Англии, а по тестам DNS leaks мне выделили сервер во Франции, поисковики считают что я в Украине..
Вот и думаю, где пошаманить, чтобы играться с определением геолокации

Ребят, подскажите, пожалуйста, как сконфигурировать route, чтобы клиент не маршрутизировал трафик до одного конкретного айпишника? То есть чтобы трафик до этого шел напрямую на клиенте.

в конфиге опенвпн на клиенте я просто добавлял
route 255.255.255.255 net_gateway

У меня ANR уведомление перестало выплывать! Отметьте у себя в качестве достоинства приложения!

Читайте также: