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

Системное администрирование

WireGuard – это современный VPN-протокол, являющийся бесплатным open-source продуктом. В отличии от популярных и привычных для многих OpenVPN и IPSec, WireGuard обеспечивает не только надёжную защиту подключения за счет использования современной криптографии, но и обладает высокой производительностью, молниеносной скоростью подключения к VPN-серверу, а так же значительно превосходит другие VPN-протоколы по скорости передачи данных.

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, что является немаловажным фактором.

В результате этого, в качестве VPN сервера для WireGuard можно использовать VPS с минимальной конфигурацией – это никак не повлияет на скорость работы.

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

Ранее мы уже рассматривали установку и настройку OpenVPN на CentOS 7. Установка WireGuard на CentOS 8 является достаточно простой в сравнении с OpenVPN. Для этого нам понадобится “чистый” VPS сервер с предустановленной операционной системой. Авторизируемся по SSH. В целях безопасности, сразу же настраиваем подключение к серверу по ключу безопасности и приступаем непосредственно к установке WireGuard.

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

sudo yum update -y
sudo yum install epel-release -y

Перезагружаем сервер командой reboot, после чего устанавливаем сам WireGuard:

sudo yum config-manager --set-enabled powertools -y
sudo yum copr enable jdoss/wireguard -y
sudo yum install wireguard-dkms wireguard-tools mawk grep net-tools qrencode -y

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

Настройка WireGuard

Я думаю, многие сталкивались с настройкой OpenVPN и, в частности, созданием новых клиентов? Генерация ключей, файлы конфигураций, перенос их с сервера на устройства – процесс еще тот, но в WireGuard всё намного проще и быстрее. Для этого воспользуемся утилитой easy-wg-quick:

wget https://raw.githubusercontent.com/burghardt/easy-wg-quick/master/easy-wg-quick
chmod +x easy-wg-quick
./easy-wg-quick

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

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

Если Вы собираетесь подключиться с мобильного устройства (Androis/iOS), то установите приложение WireGuard и отсканируйте QR-код – он содержит все настройки. Для подключения с компьютера, скопируйте содержимое файла wgclient_10.conf:

sudo cat wgclient_10.conf

Установите клиент WireGuard с официального сайта: https://www.wireguard.com/install/

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

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

Вернёмся к настройке WireGuard. При выполнении скрипта easy-wg-quick, был сгенерирован файл конфигурации WireGuard сервера – wghub.conf. Мы должны перенести его в директорию приложения:

sudo cp wghub.conf /etc/wireguard/wghub.conf

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

sudo systemctl enable wg-quick@wghub
sudo systemctl start wg-quick@wghub

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

./easy-wg-quick имя_клиента

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

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

cp wghub.conf /etc/wireguard/wghub.conf 
systemctl restart wg-quick@wghub

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

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

vi /etc/sysctl.conf

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

## Turn on bbr ##
net.core.default_qdisc = fq
net.ipv4.tcp_congestion_control = bbr
 
## for IPv4 ##
net.ipv4.ip_forward = 1
 
## Turn on basic protection/security ##
net.ipv4.conf.default.rp_filter = 1
net.ipv4.conf.all.rp_filter = 1
net.ipv4.tcp_syncookies = 1

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

sysctl -p

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

sudo cat /etc/wireguard/wghub.conf

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

sudo vi /etc/firewalld/services/wireguard.xml

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

<?xml version="1.0" encoding="utf-8"?>
<service>
<short>wireguard</short>
<description>WireGuard open UDP port 47441 for client connections</description>
<port protocol="udp" port="47441"/>
</service>

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

sudo firewall-cmd --permanent --add-service=wireguard --zone=public

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

sudo firewall-cmd --permanent --zone=public --add-masquerade

Перезагружаем firewalld:

sudo firewall-cmd --reload

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

Заключение

После начала использования WireGuard, сразу же ощущается прирост скорости соединения в сравнении с другими VPN-протоколами, особенно, если речь идёт о многопоточных задачах, а так же загрузке “тяжелого” контента. Кроме того, стоит отметить простоту настройки клиента как на PC, так и на мобильных устройствах.

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

Оцените статью