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

Коротко: установите пакет wireguard на сервере и клиенте, сгенерируйте ключи (wg genkey / wg pubkey), задайте приватные адреса IPv4/IPv6 в конфигурации /etc/wireguard/wg0.conf, включите переадресацию в /etc/sysctl.conf, добавьте правила UFW/IPTables для маскарадинга и порт 51820/UDP, затем включите сервис [email protected] и запустите wg-quick на клиенте. В статье приведён пошаговый SOP, чеклисты для разных ролей, рекомендации по безопасности, отладке и миграции.
Введение
WireGuard — современная кроссплатформенная реализация VPN с открытым исходным кодом. Использует асимметричную криптографию (пары приватных/публичных ключей) для установки зашифрованных туннелей. Поддерживает IPv4 и IPv6, проще и быстрее, чем классические IPSec/OpenVPN, и работает на Linux, Windows, macOS, iOS, Android и встраиваемых устройствах.
Эта подробная инструкция показывает, как установить WireGuard на сервер Ubuntu 22.04 и подключить к нему клиент Ubuntu 22.04. Помимо базовых шагов, включены контрольные списки (SOP), сценарии отката, отладка и рекомендации по безопасности.
Важное
- По умолчанию WireGuard использует UDP-порт 51820. Можно изменить, но не забудьте открыть порт в фаерволе.
- Приватные ключи должны храниться в root-only файлах с правами 600 (chmod go=).
- Для IPv6 используйте уникальные префиксы ULA (fd00::/8) или глобальные префиксы, если у провайдера есть /64+/48.
Содержание
- Предварительные требования
- Быстрая инструкция (Quickstart)
- Пошаговая настройка (с сохранёнными командами)
- Выбор диапазонов IPv4 и IPv6
- Конфигурация сервера и файрвола
- Настройка клиента и маршрутизации всего трафика
- Добавление пира на сервере
- Запуск, проверка и отключение
- Рекомендации по безопасности
- Отладка и типичные ошибки с устранением
- SOP: как добавить нового клиента (шаблон)
- Риски и меры смягчения
- Советы по миграции и совместимости
- Роль‑ориентированные чеклисты
- Краткий глоссарий
- Список полезных команд
- Заключение
Предварительные требования
- Сервер с Ubuntu 22.04 с доступом по sudo (поддерживает IPv4/IPv6 по возможности).
- Клиент с Ubuntu 22.04 (локальный десктоп или удалённый хост).
- Непользователь root с привилегиями sudo.
- UFW (Uncomplicated Firewall) установлен и включён.
- Система обновлена:
$ sudo apt update && sudo apt upgradeВажно: эти шаги рассчитаны на стандартный сетевой стек Linux. Если вы используете облачные сети (AWS, GCP, Azure), проверьте сетевые ACL и security groups.
Быстрая инструкция (Quickstart)
- На сервере: sudo apt install wireguard
- Сгенерировать ключи: wg genkey | sudo tee /etc/wireguard/private.key; sudo cat /etc/wireguard/private.key | wg pubkey | sudo tee /etc/wireguard/public.key
- Создать /etc/wireguard/wg0.conf с PrivateKey, Address и ListenPort
- Включить ip_forward в /etc/sysctl.conf и применить sudo sysctl -p
- Добавить PostUp/PreDown для NAT и ufw в wg0.conf, открыть порт: sudo ufw allow 51820/udp
- systemctl enable –now [email protected]
- На клиенте сгенерировать ключи, создать конфиг клиента с Peer PublicKey сервера, запустить wg-quick up wg0
Шаг 1 — Установка WireGuard и генерация пары ключей (сервер)
Ubuntu 22.04 содержит WireGuard в репозиториях, установите пакет:
$ sudo apt install wireguardСгенерируйте приватный ключ и сохраните в безопасный файл:
$ wg genkey | sudo tee /etc/wireguard/private.key
$ sudo chmod go= /etc/wireguard/private.keyСоздайте публичный ключ на основе приватного:
$ sudo cat /etc/wireguard/private.key | wg pubkey | sudo tee /etc/wireguard/public.keyЗапишите обе строки (приватная — храните локально и не публикуйте; публичная — понадобится клиентам).
Шаг 2 — Выбор адресных диапазонов IPv4 и IPv6
Выделите приватный пул адресов для туннеля.
IPv4: используйте один из приватных блоков:
- 10.0.0.0/8
- 172.16.0.0/12
- 192.168.0.0/16
Пример: 10.8.0.0/24 (сервер 10.8.0.1, клиенты 10.8.0.2/32 …)
IPv6: для ULA используйте fd00::/8 и получите уникальный /64. RFC рекомендует генерировать уникальный префикс; в примере ниже — процедура хеширования timestamp+machine-id для получения 5 байтов суффикса и формирования префикса fdXX:XXXX:XXXX::/64 (описано в исходном тексте). Пример результата:
fd4d:9c8e:c4bc::/64Сервер: fd4d:9c8e:c4bc::1/64, пира: fd4d:9c8e:c4bc::2/64 и т.д.
Примечание: если у вас есть глобальный IPv6-префикс от провайдера — используйте его вместо ULA, но учитывайте рекламу маршрутов и безопасность.
Шаг 3 — Создание конфигурации WireGuard на сервере
Откройте конфиг для редактирования:
$ sudo nano /etc/wireguard/wg0.confВставьте базовый блок (замените server_private_key на ваш приватный ключ):
[Interface]
PrivateKey = server_private_key
Address = 10.8.0.1/24, fd4d:9c8e:c4bc::/64
ListenPort = 51820
SaveConfig = trueСохраните (Ctrl + X, Y).
Совет: храните конфиги только для root и с правами 600, особенно если в них есть приватные ключи.
Шаг 4 — Включение IP‑форвардинга
Откройте /etc/sysctl.conf и раскомментируйте строки для IPv4 и IPv6:
net.ipv4.ip_forward=1
net.ipv6.conf.all.forwarding=1Затем примените:
$ sudo sysctl -pВы должны увидеть net.ipv4.ip_forward = 1 и net.ipv6.conf.all.forwarding = 1.
Это позволяет серверу маршрутизировать пакеты от пиров в публичный интернет.
Шаг 5 — Настройка фаервола и маскарадинга
Найдите внешний интерфейс сервера:
$ ip route list defaultПример вывода: default via 209.23.8.1 dev eth0 — значит внешний интерфейс eth0.
Добавьте правила в /etc/wireguard/wg0.conf (после SaveConfig):
PostUp = ufw route allow in on wg0 out on eth0
PostUp = iptables -t nat -I POSTROUTING -o eth0 -j MASQUERADE
PostUp = ip6tables -t nat -I POSTROUTING -o eth0 -j MASQUERADE
PreDown = ufw route delete allow in on wg0 out on eth0
PreDown = iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE
PreDown = ip6tables -t nat -D POSTROUTING -o eth0 -j MASQUERADEОткройте порт WireGuard в UFW (51820/udp по умолчанию):
$ sudo ufw allow 51820/udp
$ sudo ufw disable && sudo ufw enableПроверьте статус:
$ sudo ufw statusВы должны увидеть правило для 51820/udp (IPv4 и IPv6).
Замечание: если ваша инфраструктура использует nftables вместо iptables, настройте соответствующие правила.
Шаг 6 — Запуск сервиса WireGuard
Включите и запустите systemd-сервис wg-quick:
$ sudo systemctl enable [email protected]
$ sudo systemctl start [email protected]
$ sudo systemctl status [email protected]Вывод systemctl и wg-quick покажет добавленные адреса и применённые PostUp-правила.
Шаг 7 — Установка и настройка клиента (peer)
На клиенте установите wireguard:
$ sudo apt update
$ sudo apt install wireguardГенерируем пару ключей аналогично серверу:
$ wg genkey | sudo tee /etc/wireguard/private.key
$ sudo chmod go= /etc/wireguard/private.key
$ sudo cat /etc/wireguard/private.key | wg pubkey | sudo tee /etc/wireguard/public.keyСоздайте /etc/wireguard/wg0.conf на клиенте. Пример конфигурации:
[Interface]
PrivateKey = peer_private_key
Address = 10.8.0.2/24
Address = fd4d:9c8e:c4bc::2/64
[Peer]
PublicKey =
AllowedIPs = 10.8.0.0/24, fd4d:9c8e:c4bc::/64
Endpoint = 209.23.10.202:51820
PersistentKeepalive = 15 Если вы хотите направить через туннель весь трафик клиента, настройте маршрут и правила на клиенте (пример в исходном тексте использует таблицу 200 и правила PostUp/PreDown).
DNS: добавьте DNS в секцию Interface, например:
DNS = 209.208.127.65 2001:4860:4860::8888Если вы используете systemd-resolved/resolvconf, установите и настройте resolvconf при необходимости:
$ sudo apt install resolvconfЗапустите туннель:
$ sudo wg-quick up wg0Проверьте статус:
$ sudo wgШаг 8 — Добавление пира на сервере
Скопируйте публичный ключ пира (peer public key) и выполните на сервере:
$ sudo wg set wg0 peer allowed-ips 10.8.0.2,fd4d:9c8e:c4bc::2 Или добавьте секцию [Peer] в /etc/wireguard/wg0.conf и сохраните; если SaveConfig = true, wg-quick обновит состояние.
Проверьте текущие пира:
$ sudo wgШаг 9 — Подключение и проверка
Поднимите интерфейс на клиенте:
$ sudo wg-quick up wg0Проверьте маршруты и связь:
$ ip route get 10.0.8.1
$ ip -6 route get fd4d:9c8e:c4bc::1
$ sudo wgОтключение:
$ sudo wg-quick down wg0Удаление пира с сервера:
$ sudo wg set wg0 peer remove Рекомендации по безопасности
- Храните приватные ключи только в файлах с правами 600 и доступом root.
- Обновляйте kernel и пакеты WireGuard — баги в сетевом стеке потенциально критичны.
- Минимизируйте список AllowedIPs для пиров: используйте /32 (IPv4) и /128 (IPv6) для отдельных клиентов, если хотите запретить доступ к другим внутренним сетям.
- persistent-keepalive 15 полезен для клиентов за NAT.
- Отключайте или ограничивайте доступ админских интерфейсов по IP — например, разрешайте SSH только с определённых IP.
- При использовании облачных провайдеров проверьте правила NAT/ACL на уровне облака.
Отладка: типичные ошибки и их устранение
- Туннель поднят, но пакеты не проходят
- Проверьте ip_forward. sudo sysctl net.ipv4.ip_forward
- Убедитесь в маскарадинге: iptables -t nat -L -n
- Проверьте правила UFW: sudo ufw status verbose
- Клиент не может дойти до сервера (Endpoint unreachable)
- Проверьте, открыт ли UDP-порт 51820/udp на сервере и облачных security groups.
- Проблемы с NAT: клиент за двойным NAT может не принимать ответ, persistent-keepalive помогает.
- DNS не работает у клиента
- Проверьте секцию DNS в конфиге клиента и резолверы на сервере.
- IPv6 не работает
- Проверьте, поддерживает ли хост/провайдер IPv6 и разрешена ли пересылка для IPv6.
- Разные версии пакета/ядра
- На некоторых старых ядрах может потребоваться установка backport или обновление до ядра с поддержкой WireGuard.
Команды для диагностики:
sudo wg
ip a show wg0
ip route show table 200
sudo journalctl -u [email protected]
sudo iptables -t nat -L -n
sudo ip6tables -t nat -L -n
sudo ufw status verboseSOP: добавление нового клиента (короткая пошаговая инструкция для администратора)
- На клиенте/генераторе: сгенерировать пару ключей.
- На сервере: добавить [Peer] секцию в /etc/wireguard/wg0.conf или выполнить wg set wg0 peer
allowed-ips , - На сервере сохранить конфиг и перезапустить сервис (если редактировали файл) или применить через wg set.
- На клиенте создать /etc/wireguard/wg0.conf с PublicKey сервера, Endpoint и AllowedIPs, затем wg-quick up wg0.
- Проверить доступность и маршруты.
- При необходимости добавить persistent-keepalive=15 для клиентов за NAT.
Шаблон [Peer] для wg0.conf на сервере (пример):
[Peer]
PublicKey =
AllowedIPs = 10.8.0.2/32, fd4d:9c8e:c4bc::2/128 Критерии приёмки
- Сервер имеет активный интерфейс wg0 с назначенными адресами.
- Клиент успешно подключается и присутствует в выводе sudo wg.
- Пакеты из клиента до внешних адресов идут через сервер (проверка public ip).
Инцидентный план и откат
Если после внесения изменений сеть перестала работать:
- Удалите недавно добавленные PostUp правила или верните конфигурацию wg0.conf из резервной копии.
- Отключите WireGuard сервис: sudo systemctl stop [email protected]
- Временно отключите UFW (если подозреваете, что правила блокируют доступ): sudo ufw disable
- Верните sysctl-флаги (net.ipv4.ip_forward=0) если нужно быстро отрубить маршрутизацию.
- Восстановите конфигурации из бэкапов и прокомментируйте проблемные строки.
Меры безопасности и жёсткая настройка
- Используйте отдельные ключи на каждое устройство и минимальные AllowedIPs.
- Сегментируйте доступ: не давайте клиентам доступ к управляемым внутренним ресурсам, если это не нужно.
- Ведите журнал изменений конфигураций и храните резервные копии /etc/wireguard/*.conf.
- Ограничивайте доступ к публичному порту WireGuard с помощью geoIP/ACL, если возможно.
Дополнительно: можно настроить дополнительные правила iptables для логирования и блокировки подозрительного трафика через туннель.
Когда WireGuard не подходит (контрпримеры)
- Вам нужна сложная политика маршрутизации и большой набор динамических прав для туннелей — тогда IPSec c централизованным менеджментом может быть удобнее.
- Требуется deep packet inspection / контроль на уровне приложений внутри VPN — WireGuard сам по себе не предоставляет DPI-функций.
- Если у вас устаревшие устройства без поддержки современного ядра, возможно потребуется OpenVPN/legacy.
Альтернативы и сравнение (кратко)
- OpenVPN: больше опций, TLS-аутентификация, но медленнее и сложнее в настройке.
- IPSec (strongSwan): стандартизованный, хорошо подходит для филиалов, но сложнее конфигурировать.
- Tailscale/Netmaker: облачные/peer-to-peer решения на базе WireGuard с удобным управлением и каталогом устройств.
Совместимость и миграция
- Имеющиеся настройки OpenVPN/IPSecurе нельзя «конвертировать» автоматически — потребуется заново спроектировать адресацию и правила.
- Если мигрируете пользователей: подготовьте инструкции и скрипты для генерации ключей и установки клиентских конфигов.
Роль‑ориентированные чеклисты
Администратор сервера:
- Установить wireguard
- Сгенерировать server private/public key
- Настроить wg0.conf, PostUp/PreDown
- Включить sysctl forwarding
- Открыть порт в UFW
- Проверить сервис systemctl
Администратор клиента:
- Сгенерировать ключи клиента
- Подготовить client wg0.conf с PublicKey сервера
- Настроить DNS и маршруты
- Протестировать подключение и доступ к ресурсам
Пользователь (конечный):
- Получить .conf файл или QR-код для мобильного клиента
- Подключиться через wg-quick или приложение
- Проверить доступ к корпоративным ресурсам
Короткий чек-лист тестов и критериев приёмки
- wg0 поднят на сервере с адресом 10.8.0.1
- Клиент получает IP 10.8.0.2 и успешный handshake в sudo wg
- На клиенте внешний IP соответствует IP сервера (при полном туннелировании)
- DNS-резолвинг работает через туннель
- IPv6, если настроен, маршрут проходит по wg0
Фактбокс — важные значения и команды
- Стандартный порт: 51820/UDP
- MTU в примерах: 1420 (может потребоваться корректировка для PPPoE)
- Keepalive: 15 сек (для NAT-клиентов)
- Основные команды: wg, wg-quick, ip, iptables/ip6tables, ufw, systemctl
Краткий глоссарий (1‑строчная дефиниция)
- Peer — удалённый участник туннеля WireGuard с публичным ключом.
- AllowedIPs — список адресов, которые направляются через туннель.
- PersistentKeepalive — периодический пакет для поддержания состояния NAT.
- PostUp/PreDown — команды, выполняемые при поднятии и опускании интерфейса.
Полезные команды (cheat sheet)
wg show # показать состояние
sudo wg-quick up wg0 # поднять интерфейс
sudo wg-quick down wg0 # опустить интерфейс
sudo systemctl start [email protected]
sudo systemctl enable [email protected]
sudo iptables -t nat -L -n
sudo ip -brief address showЗаключение
WireGuard — надёжный и лёгкий в использовании VPN-стек. Эта инструкция покрывает установку на Ubuntu 22.04, генерацию ключей, назначение IPv4/IPv6, настройку фаервола и маршрутизации, а также рекомендации по безопасности, операционные SOP и сценарии отладки. Следуйте контрольным спискам для воспроизводимости и поддерживайте резервные копии конфигураций. Если остались вопросы — опишите окружение и шаг, на котором возникла проблема, чтобы получить точную помощь.
Важно
Не забывайте делать бэкапы /etc/wireguard/*.conf и хранить приватные ключи безопасно.
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента