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;
- За счет более современных криптографических протоколов;
Как видно в сравнении производительности различных 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 вместо Вас, но и создаст первого пользователя!
Если Вы собираетесь подключиться с мобильного устройства (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.