WireGuard: команды CLI, которые должен знать каждый
Практический разбор команд wg и wg-quick: генерация ключей, настройка интерфейса, диагностика и автоматизация. Научитесь управлять WireGuard из терминала без паники.
Содержание
WireGuard — это современный VPN, который управляется простыми командами из терминала. В отличие от OpenVPN здесь нет громоздких скриптов и GUI: всё построено на паре утилит — wg и wg-quick. В этой статье разберём команды, которые нужны каждый день: от создания ключей до отладки туннеля. Вы научитесь настраивать WireGuard без страха и ошибок.
Основные команды wg: генерация ключей и просмотр конфигурации
Прежде чем создавать туннель, нужно сгенерировать пару ключей. WireGuard использует криптографию Curve25519, и все ключи создаются локально.
# Создать приватный ключ (файл с правами 600)
umask 077
wg genkey > privatekey
# Создать публичный ключ из приватного
wg pubkey < privatekey > publickeyЕсли вы хотите посмотреть текущую конфигурацию интерфейса, используйте wg show. Без аргументов эта команда покажет все активные интерфейсы WireGuard: их адреса, список пиров, ключи и время последнего handshake.
# Просмотр всех интерфейсов
wg show
# Просмотр конкретного интерфейса в компактном виде
wg show wg0 | lessКоманда wg showconf выводит полный конфигурационный файл в формате, который можно использовать для восстановления. Это удобно для бэкапов.
Настройка интерфейса с помощью wg-quick
Утилита wg-quick — это надстройка над wg, которая автоматически создаёт интерфейс, назначает IP-адреса, добавляет маршруты и правила. Она читает конфигурационный файл из каталога /etc/wireguard/.
Минимальный конфиг для клиента выглядит так:
[Interface]
PrivateKey = <приватный ключ>
Address = 10.0.0.2/24
DNS = 1.1.1.1
[Peer]
PublicKey = <публичный ключ сервера>
Endpoint = vpn.example.com:51820
AllowedIPs = 0.0.0.0/0Команды для управления:
# Поднять интерфейс (запустить туннель)
wg-quick up wg0
# Остановить туннель
wg-quick down wg0
# Перезапустить туннель
down wg0 && up wg0Важно: имя интерфейса должно совпадать с именем файла конфига. Для wg0 нужен файл /etc/wireguard/wg0.conf.
Если нужно изменить параметры на лету без перезапуска, используйте wg set:
# Добавить пира
wg set wg0 peer <pubkey> allowed-ips 10.0.0.3/32
# Удалить пира
wg set wg0 peer <pubkey> remove
# Изменить endpoint пира
wg set wg0 peer <pubkey> endpoint <новый endpoint>Диагностика и проверка состояния туннеля
Когда туннель не работает, сначала проверьте интерфейс. Используйте ip и wg вместе.
# Проверить, что интерфейс существует и имеет IP-адрес
ip addr show wg0
# Проверить состояние WireGuard: есть ли handshake, какие пиры активны
wg show wg0В выводе wg show обращайте внимание на поле latest handshake. Если оно пустое или очень давнее, значит, туннель не устанавливается. Проверьте endpoint, UDP-порт на сервере (по умолчанию 51820) и файрвол.
Полезная команда для постоянного мониторинга:
watch -n 1 wg showОна обновляет статистику каждую секунду и видит, когда появляется handshake.
Для проверки маршрутов:
ip route | grep wg0Если правило маршрутизации отсутствует, проблема в настройках AllowedIPs или в конфигурации адресов.
Примеры типовых сценариев
Сценарий 1: создать сервер WireGuard
# Генерация ключей
umask 077
wg genkey > server_private
wg pubkey < server_private > server_public
# Конфигурация /etc/wireguard/wg0.conf
[Interface]
Address = 10.0.0.1/24
ListenPort = 51820
PrivateKey = <server_private>
[Peer]
PublicKey = <client_public>
AllowedIPs = 10.0.0.2/32Затем запускаем: wg-quick up wg0. Не забудьте включить IP-forwarding и настроить NAT, иначе клиенты не получат доступ в интернет. Для этого измените /etc/sysctl.conf и выполните sysctl -p.
Сценарий 2: добавить нового клиента
Сгенерируйте ключи для клиента, добавьте его публичный ключ на сервер:
wg set wg0 peer <client_pub> allowed-ips 10.0.0.3/32или просто допишите блок [Peer] в конфиг и перезапустите. На клиенте создайте конфиг с ключами и endpoint сервера.
Сценарий 3: отладка после сбоя
- Проверьте, что интерфейс вообще существует:
ip a - Проверьте статус
wg show wg0. Если нет handshake, смотрите журналы:journalctl -u wg-quick@wg0 - Проверьте доступность сервера через UDP:
nc -vzu <server ip> 51820
Советы по автоматизации и безопасному использованию
Команды WireGuard прекрасно встраиваются в скрипты. Используйте wg-quick strip для извлечения чистой конфигурации из файла — это полезно, если вы хотите передать её на другое устройство.
Храните ключи с правами доступа 600. В скриптах вызывайте umask 077 перед созданием файла, чтобы никто другой не смог его прочитать.
Не забывайте, что команды wg-quick могут отличаться в зависимости от версии и дистрибутива. На macOS вместо этого часто используется официальное приложение, но базовые команды wg работают одинаково. Проверяйте документацию для вашей версии.
Мини-чеклист
- Убедитесь, что пакет wireguard-tools установлен: wg --version
- При генерации ключей задавайте umask 077, чтобы не осталось читаемых файлов
- Для запуска интерфейса используйте wg-quick up wg0, где имя соответствует .conf файлу
- После настройки проверьте handshake командой wg show и дату последней активности
Частые ошибки
- Игнорирование прав доступа к приватным ключам — они должны быть 600 или 400
- Забыли включить IP forwarding на сервере, из-за чего клиенты не получают интернет
- Использование AllowedIPs = 0.0.0.0/0 на клиенте без явного указания DNS и маршрутов
- Запуск wg-quick up без прав root — команда требует привилегий superuser
Источники и документация
FAQ
Чем отличается wg от wg-quick?
wg — это низкоуровневая утилита для управления ключами и пирами. wg-quick — это обёртка, которая настраивает сетевой интерфейс, IP-адреса и маршруты, читая конфигурацию из файла. Для повседневного использования достаточно wg-quick.
Как перезапустить WireGuard после изменения конфига?
Выполните wg-quick down wg0 && wg-quick up wg0. Либо используйте команду wg setconf wg0 /etc/wireguard/wg0.conf, чтобы применить изменения без отключения интерфейса.
Что такое AllowedIPs и зачем он нужен?
AllowedIPs указывает, какие подсети направлять через туннель. Для «полного» туннеля используется 0.0.0.0/0. На сервере обычно указывают адреса клиентов (например, 10.0.0.2/32), а на клиенте — адрес серверной сети или 0.0.0.0/0, если нужно гнать весь трафик через VPN.
Как проверить, что туннель работает?
Запустите wg show wg0. Если в выводе для пира есть строка latest handshake с близкой датой, туннель установлен. Также можно выполнить ping до внутреннего IP-адреса пира.
Хотите перейти сразу к рабочему доступу?
Если сценарий уже ясен и не хочется проходить все шаги вручную, оформите доступ и проверьте подключение на своем устройстве.
Получить доступ