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).
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 был установлен и загружен, выполните команду:
Базовая настройка VPN сервера WireGuard
Создайте директорию для WireGuard:
Теперь можно приступить к генерации ключей для клиента и сервера:
В результате выполнения предыдущих команд, появится 4 файла с ключами: приватный и публичный ключи для сервера, а также аналогичные ключи для клиента (мы будем использовать их при настройке клиента 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):
Установите приложение, откройте и нажмите кнопку для добавления нового подключения:
Чтобы максимально просто создать новое VPN подключение, нужно на WireGuard сервере и создать файл для генерации qr-кода:
И добавим в него следующее содержимое:
- В поле PrivateKey нужно указать содержимое файла client-private.key
- В поле PublicKey – данные из файла server-public.key
- Значение SERVER_IP замените белым (реальным) IP-адресом вашего сервера
- DNS можете заполнить на ваш выбор.
Выполните команду для генерации QR кода:
После выполнения команды, вы должны получить qr-код который нужно отсканировать в приложении на Android:
Осталось указать имя подключения и оно будет автоматически создано на вашем мобильном (со свеми ключами и настройками). После подключения к VPN серверу вы выйти в интернет с адресом WireGuard (как при подключении к любому VPN сервису):
Для устройств с IOS так же есть клиент WireGuard. Настройка выполняется аналогично Android. Все ваши шаги для подключения будут идентичными.
Настройка клиента WireGuard в Windows
Установите клиент WireGuard и запустите его.
Создайте файл client.conf ( генерируется по способу, описанному выше при генерации qr-кода), нажмите кнопку Import и укажите данный файл:
Чтобы отключиться от WireGuard, нажмите кнопку Deactivate.
Таким образом, мы настроили VPN-сервер WireGuard, который не уступает OpenVPN или IpSec, а настраивается гораздо быстрее и проще.
Содержание
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, что является немаловажным фактором.
Установка WireGuard на CentOS 8
Выполняем обновление пакетов yum и подключаем репозитарий EPEL:
Производим установку самого WireGuard:
Собственно всё, WireGuard установлен. Теперь перейдём к следующему шагу.
Настройка WireGuard
Данная утилита выполнит не только настройку WireGuard вместо Вас, но и создаст первого пользователя!
В 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.
Подготовка и установка.
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 уведомление перестало выплывать! Отметьте у себя в качестве достоинства приложения!
Читайте также: