Быстрый старт
Categories:
Быстрый старт
Прежде всего, убедитесь, что вы хорошо понимаете концептуальный обзор, а затем установите WireGuard. После этого читайте дальше.
Видео параллельной настройки
Прежде чем подробно объяснять команды, будет чрезвычайно полезно посмотреть видео, где два пира настраиваются одновременно:
Или по отдельности, настройка одного узла выглядит так:

Интерфейс командной строки
Новый интерфейс можно добавить с помощью ip-link(8), который должен автоматически загрузить модуль:
# ip link add dev wg0 type wireguard
wireguard-go wg0 вместо этого.IP-адрес и пир можно назначить с помощью ifconfig(8) или ip-address(8):
# ip address add dev wg0 192.168.2.1/24
Или, если всего два пира, можно использовать такой синтаксис:
# ip address add dev wg0 192.168.2.1 peer 192.168.2.2
Интерфейс можно настроить с ключами и конечными точками пиров с помощью утилиты wg(8):
# wg setconf wg0 myconfig.conf
или
# wg set wg0 listen-port 51820 private-key /path/to/private-key peer ABCDEF... allowed-ips 192.168.88.0/24 endpoint 209.202.254.14:8172
Наконец, интерфейс можно активировать с помощью ifconfig(8) или ip-link(8):
# ip link set up dev wg0
Также доступны команды wg show и wg showconf для просмотра текущей конфигурации. Вызов wg без аргументов показывает все WireGuard-интерфейсы.

Подробнее в man-странице wg(8).
Большую часть рутинных операций по поднятию и опусканию интерфейса можно автоматизировать с помощью инструмента wg-quick(8):

Пример конфигурационного файла
Для использования wg-quick создайте файл конфигурации /etc/wireguard/wg0.conf:
[Interface]
PrivateKey = yAnz5TF+lXXJte14tji3zlMNq+hd2rYUIgJBgB3fBmk=
Address = 10.0.0.1/24
ListenPort = 51820
[Peer]
PublicKey = xTIBA5rboUvnH4htodjb6e697QjLERt1NAB4mZqp8Dg=
AllowedIPs = 10.0.0.2/32
Endpoint = 192.95.5.69:51820
Затем поднимите интерфейс:
# wg-quick up wg0
И остановите его:
# wg-quick down wg0
Генерация ключей
WireGuard использует ключи в формате base64. Их можно сгенерировать с помощью утилиты wg(8):
$ umask 077
$ wg genkey > privatekey
Это создаст файл privatekey с новым приватным ключом.
Затем вы можете получить публичный ключ из приватного:
$ wg pubkey < privatekey > publickey
Это прочитает privatekey из stdin и запишет соответствующий публичный ключ в publickey.
Конечно, вы можете сделать всё за один раз:
$ wg genkey | tee privatekey | wg pubkey > publickey
Постоянство при обходе NAT и файерволов
По умолчанию WireGuard старается быть максимально тихим, когда не используется; это не болтливый протокол. В основном он передаёт данные только тогда, когда пир хочет отправить пакеты. Когда его не просят отправлять пакеты, он перестаёт отправлять их до следующего запроса. В большинстве конфигураций это работает хорошо.
Однако, когда пир находится за NAT или файерволом, он может захотеть получать входящие пакеты, даже если не отправляет их. Поскольку NAT и stateful-файерволы отслеживают “соединения”, если пир за NAT или файерволом хочет получать входящие пакеты, он должен поддерживать актуальность NAT/файервола, периодически отправляя keepalive-пакеты. Это называется постоянные keepalive.
Когда эта опция включена, keepalive-пакет отправляется на конечную точку сервера каждые interval секунд. Разумный интервал, который работает с большим количеством файерволов — 25 секунд. Установка значения 0 отключает функцию (это значение по умолчанию, так как большинству пользователей она не нужна и делает WireGuard немного более болтливым).
Эта функция может быть задана добавлением поля PersistentKeepalive = в конфигурации пира или установкой persistent-keepalive в командной строке:
[Peer]
PublicKey = xTIBA5rboUvnH4htodjb6e697QjLERt1NAB4mZqp8Dg=
AllowedIPs = 10.0.0.2/32
Endpoint = 192.95.5.69:51820
PersistentKeepalive = 25
Демо-сервер
После установки WireGuard, если вы хотите попробовать отправить несколько пакетов через WireGuard, вы можете использовать для тестирования скрипт из contrib/ncat-client-server/client.sh:
$ sudo contrib/examples/ncat-client-server/client.sh
#!/bin/bash
# SPDX-License-Identifier: GPL-2.0
#
# Copyright (C) 2015-2026 Jason A. Donenfeld <Jason@zx2c4.com>. All Rights Reserved.
set -e
[[ $UID == 0 ]] || { echo "You must be root to run this."; exit 1; }
exec 3<>/dev/tcp/demo.wireguard.com/42912
privatekey="$(wg genkey)"
wg pubkey <<<"$privatekey" >&3
IFS=: read -r status server_pubkey server_port internal_ip <&3
[[ $status == OK ]]
ip link del dev wg0 2>/dev/null || true
ip link add dev wg0 type wireguard
wg set wg0 private-key <(echo "$privatekey") peer "$server_pubkey" allowed-ips 0.0.0.0/0 endpoint "demo.wireguard.com:$server_port" persistent-keepalive 25
ip address add "$internal_ip"/24 dev wg0
ip link set up dev wg0
if [ "$1" == "default-route" ]; then
host="$(wg show wg0 endpoints | sed -n 's/.*\t\(.*\):.*/\1/p')"
ip route add $(ip route get $host | sed '/ via [0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}/{s/^\(.* via [0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\).*/\1/}' | head -n 1) 2>/dev/null || true
ip route add 0/1 dev wg0
ip route add 128/1 dev wg0
fi
Это автоматически настроит интерфейс wg0 через очень небезопасный транспорт, который подходит только для демонстрационных целей. Затем вы можете попробовать загрузить скрытый сайт или отправить пинги:
$ chromium http://192.168.4.1
$ ping 192.168.4.1
Если вы хотите перенаправить ваш интернет-трафик, вы можете запустить его так:
$ sudo contrib/examples/ncat-client-server/client.sh default-route
$ curl zx2c4.com/ip
163.172.161.0
demo.wireguard.com
curl/7.49.1
Отладочная информация
Если вы используете модуль ядра Linux и ваше ядро поддерживает динамическую отладку, вы можете получить полезный вывод во время выполнения, включив динамическую отладку для модуля:
# modprobe wireguard && echo module wireguard +p > /sys/kernel/debug/dynamic_debug/control
Если вы используете пользовательскую реализацию, установите переменную окружения:
export LOG_LEVEL=verbose
Пример полной настройки клиент-сервер
Серверная конфигурация (/etc/wireguard/wg0.conf)
[Interface]
PrivateKey = SERVER_PRIVATE_KEY
Address = 10.0.0.1/24
ListenPort = 51820
SaveConfig = true
[Peer]
PublicKey = CLIENT1_PUBLIC_KEY
AllowedIPs = 10.0.0.2/32
[Peer]
PublicKey = CLIENT2_PUBLIC_KEY
AllowedIPs = 10.0.0.3/32
Клиентская конфигурация (/etc/wireguard/wg0.conf)
[Interface]
PrivateKey = CLIENT_PRIVATE_KEY
Address = 10.0.0.2/24
DNS = 8.8.8.8
[Peer]
PublicKey = SERVER_PUBLIC_KEY
AllowedIPs = 0.0.0.0/0
Endpoint = server.example.com:51820
PersistentKeepalive = 25
Запуск
На сервере:
# wg-quick up wg0
# systemctl enable wg-quick@wg0
На клиенте:
# wg-quick up wg0
# systemctl enable wg-quick@wg0
Проверка статуса
Проверьте статус соединения:
# wg show
Вы должны увидеть информацию о рукопожатии и передаче данных:
interface: wg0
public key: SERVER_PUBLIC_KEY
private key: (hidden)
listening port: 51820
peer: CLIENT1_PUBLIC_KEY
endpoint: 192.168.1.100:51820
allowed ips: 10.0.0.2/32
latest handshake: 1 minute, 23 seconds ago
transfer: 1.23 MiB received, 4.56 MiB sent
Дальнейшие шаги
Теперь, когда у вас есть работающий WireGuard, вы можете:
- Настроить маршрутизацию для пропуска всего трафика через VPN
- Настроить несколько пиров для создания полной mesh-сети
- Изучить продвинутые темы
- Настроить автоматическое переподключение и мониторинг
Если у вас возникли проблемы, обратитесь к разделу известных ограничений или посетите IRC-канал #wireguard на Libera.Chat для получения помощи.