Блог / Статьи

Полезная информация для вашего хостинга

Настройка WireGuard на собственном сервере: пошаговое руководство

Настройка WireGuard на собственном сервере

Виртуальные частные сети (VPN) — это технология, которая позволяет подключаться к сети с шифрованием данных. Такое подключение осуществляется поверх обычного интернет-соединения. Среди ключевых преимуществ VPN — безопасное использование публичных Wi-Fi-сетей, а также повышенный уровень защиты данных при работе с облачными сервисами.

WireGuard — это современный протокол, созданный для обеспечения безопасной и эффективной передачи данных в интернете. По словам разработчиков, он отличается простотой, высокой скоростью и инновационностью. Изначально протокол был доступен только для Linux, но позже стал поддерживаться на различных платформах. Основные достоинства WireGuard:

- Бесплатный и простой в использовании;
- Оптимизирован для максимальной скорости передачи данных;
- Обеспечивает высокий уровень безопасности благодаря современным алгоритмам шифрования и механизмам аутентификации.

В данной инструкции для настройки сервера WireGuard выбрана операционная система Ubuntu 22.04. В качестве клиента будет использоваться Windows 10.

Установка WireGuard и настройка сервера

Шаг 1. Подключение к серверу
Для начала необходимо подключиться к вашему облачному серверу через SSH. Используйте следующую команду: 

ssh user_name@Server_IP-address<br< a=""> />```</br<>

 Шаг 2. Обновление пакетов
После успешного подключения обновите установленные пакеты с помощью команды: 

sudo apt update

 Процесс обновления будет отображен в терминале.

Шаг 3. Установка WireGuard
Как только пакеты будут обновлены, приступайте к установке WireGuard. Введите в терминал следующую команду: 

sudo apt install wireguard

 Во время установки отвечайте утвердительно на все запросы системы.

Шаг 4. Переход в каталог WireGuard
После завершения установки перейдите в основной каталог программы, используя команду: 

cd /etc/wireguard/

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

Шаг 5. Генерация ключей для сервера
На этом этапе необходимо создать пару ключей (закрытый и открытый), которые будут использоваться для настройки безопасного соединения. Это можно сделать с помощью следующей команды: 

wg genkey | tee /etc/wireguard/server_privatekey | wg pubkey | tee /etc/wireguard/server_publickey

 Разберем ключевые элементы команды:

- wg genkey — генерирует закрытый ключ;
- wg pubkey — создает открытый ключ на основе закрытого;
- | — используется для передачи данных между командами. В первом и третьем случае передает ключи команде `tee`, а во втором — передает закрытый ключ для генерации открытого;
- tee — записывает ключи в указанные файлы.

В результате выполнения команды будут созданы два файла: `server_privatekey` (закрытый ключ) и `server_publickey` (открытый ключ). Эти ключи понадобятся для дальнейшей настройки сервера.

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

cat server_privatekey
cat server_publickey

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

Шаг 6. Настройка конфигурационного файла сервера
Правильная настройка основного конфигурационного файла сервера (`wg0.conf`) является ключевым этапом для успешной работы WireGuard. В файле необходимо указать следующие параметры:

- Закрытый ключ сервера;
- IP-адрес сервера;
- Порт для прослушивания;
- Команды для включения и отключения сервера.

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

ip a

 В результате будет выведен список интерфейсов. Найдите тот, который соответствует текущему подключению (имеет IP-адрес вашего сервера).

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

sudo nano wg0.conf

 Пример содержимого файла `wg0.conf`: 

```ini
[Interface]
PrivateKey = <закрытый_ключ>
Address = <IP-адрес_сервера>
ListenPort = <Порт>
PostUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -t nat -A POSTROUTING -o <Интерфейс> -j MASQUERADE
PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -t nat -D POSTROUTING -o <Интерфейс> -j MASQUERADE
```

 Разберем параметры:

- PrivateKey — закрытый ключ сервера. Его можно взять из файла `server_privatekey`, который мы создали на предыдущем шаге.
- Address — внутренний IP-адрес для интерфейса WireGuard. Например, `10.0.0.1/24`. Убедитесь, что этот адрес уникален и не конфликтует с другими IP-адресами в вашей сети.
- ListenPort — порт, на котором сервер будет принимать входящие соединения. Обычно используются порты в диапазоне от 51820 до 51830, но можно выбрать любой свободный порт. Убедитесь, что выбранный порт открыт в настройках брандмауэра.
- PostUp — команды, выполняемые при запуске интерфейса. Они настраивают правила `iptables` для маршрутизации трафика через WireGuard.
- PostDown — команды, выполняемые при остановке интерфейса. Они удаляют правила `iptables`, добавленные в `PostUp`.

После завершения редактирования сохраните файл и выйдите из редактора.

Шаг 7. Настройка IP forwarding
Для того чтобы сервер мог перенаправлять трафик между интерфейсами, необходимо включить IP forwarding. Это делается с помощью следующей команды: 

echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf

 После внесения изменений проверьте их применение: 

sysctl -p

Изменения успешно применены.

Шаг 8. Настройка автозапуска и запуск сервера
Чтобы сервер WireGuard запускался автоматически при загрузке системы, выполните команду: 

systemctl enable Адрес электронной почты защищен от спам-ботов. Для просмотра адреса в браузере должен быть включен Javascript.

 Для запуска сервера введите: 

systemctl start Адрес электронной почты защищен от спам-ботов. Для просмотра адреса в браузере должен быть включен Javascript.

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

systemctl status Адрес электронной почты защищен от спам-ботов. Для просмотра адреса в браузере должен быть включен Javascript.

Сервер успешно запущен и функционирует. На этом настройка сервера WireGuard завершена.

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

Шаг 1. Создание ключей для клиента
Чтобы пользователь мог подключиться к вашему серверу WireGuard, необходимо создать для него пару ключей. Это можно сделать на сервере с помощью уже знакомой команды: 

wg genkey | tee /etc/wireguard/user1_privatekey | wg pubkey | tee /etc/wireguard/user1_publickey

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

Скопируйте открытый ключ клиента, так как он понадобится на следующем этапе.

Теперь в папке `/etc/wireguard/` должно находиться четыре ключа (два для сервера и два для клиента) и конфигурационный файл, как показано на изображении ниже.

Шаг 2. Добавление клиента в конфигурацию сервера
Теперь необходимо дополнить конфигурационный файл сервера (`wg0.conf`) настройками для клиента. Откройте файл для редактирования: 

nano /etc/wireguard/wg0.conf

 Добавьте следующие строки в конец файла: 

```ini
[Peer]
PublicKey = <Открытый_ключ_клиента>
AllowedIPs = <Разрешенный_IP_адрес_для_клиента>
```

 - PublicKey — открытый ключ клиента, который вы скопировали ранее.
- AllowedIPs — IP-адрес, который будет назначен клиенту. Он должен быть из того же диапазона, что и IP-адрес сервера. Например, если сервер использует `10.0.0.1/24`, то клиенту можно назначить `10.0.0.2/32`.

Пример итогового файла конфигурации сервера показан на изображении ниже. После внесения изменений сохраните файл и перезапустите сервер WireGuard: 

systemctl restart Адрес электронной почты защищен от спам-ботов. Для просмотра адреса в браузере должен быть включен Javascript.

 Теперь сервер готов к подключению клиента.

wireg2

Шаг 3. Перезагрузка сервера WireGuard после изменений

После внесения изменений в конфигурацию сервера необходимо выполнить его перезагрузку. Делается это следующей командой: 

systemctl restart wg-quick@wg0<br< a=""> />```</br<>

 Эту операцию нужно повторять при каждом изменении конфигурации. 

Проверка работы сервера

После перезагрузки проверьте, корректно ли работает сервер. Для этого используйте команду: 

systemctl status wg-quick@wg0<br< a=""> />```</br<>

 Установка клиента и создание конфигурации

Следующий шаг — установка клиента на устройство. Скачать программу можно с официального сайта разработчика.

 Создание пользовательской конфигурации

Для подключения к серверу потребуется создать файл конфигурации с расширением `.conf`. Название файла может быть любым, например, `wg.conf`.

Пример содержания файла: 

```
[Interface]
PrivateKey = <Закрытый_ключ_клиента>
Address = <IP-адрес_клиента>
DNS = 8.8.8.8

[Peer]
PublicKey = <Публичный_ключ_сервера>
Endpoint = <IP-адрес_сервера>:<Порт>
AllowedIPs = 0.0.0.0/0
PersistentKeepalive = 20
```

 Разберем параметры:

- PrivateKey — закрытый ключ клиента, полученный из файла `user1_privatekey`.
- Address — внутренний IP-адрес клиента в сети WireGuard, например, `10.0.0.2/24`. Каждый клиент должен иметь уникальный адрес.
- DNS — DNS-сервер, который будет использовать клиент. В примере указан сервер Google.
- PublicKey — публичный ключ сервера, полученный из файла `server_publickey`.
- Endpoint — внешний IP-адрес сервера и порт для подключения.
- AllowedIPs — IP-адреса, маршрутизируемые через сервер. Значение `0.0.0.0/0` означает, что весь трафик идет через WireGuard. Для такой настройки важно указать DNS-сервер.
- PersistentKeepalive — интервал отправки пакетов для поддержания соединения (в секундах).

Конфигурация может отличаться в зависимости от ваших задач.

wireg3

 Импорт конфигурации на клиенте

1. Загрузите созданный файл конфигурации в приложение WireGuard.
- Для этого выберите опцию «Импорт туннелей из файла».

wireg4
2. После добавления конфигурации нажмите кнопку «Подключить».
3. Убедитесь, что в поле «Статус» отобразилась надпись «Подключен». Это подтверждает успешное соединение.

 Интересные особенности WireGuard

- Компактный код: WireGuard включает всего около 4000 строк кода, что упрощает аудит, снижает вероятность ошибок и ускоряет обновления.
- Интеграция с Linux: Начиная с версии ядра 5.6, WireGuard встроен в Linux, что обеспечивает высокую совместимость.
- Поддержка IPv6: Протокол полностью соответствует современным стандартам и работает в IPv6-сетях.
- Кросс-платформенность: WireGuard доступен на Windows, macOS, Android и других системах.
- Ограничения: WireGuard не поддерживает работу через HTTP-прокси, так как использует UDP-протокол.

 Итоги

Мы рассмотрели процесс установки и настройки WireGuard: от установки программного обеспечения до настройки сервера и клиента. Следуя этой инструкции, вы сможете быстро настроить VPN для своих нужд.