WireGuard VPN-сервер на Raspberry Pi 5: доступ к домашней сети из любого места

Хочется открыть из отпуска или с работы свой домашний NAS, облако, Home Assistant или принтер, но не «выставлять» их в интернет? Для этого придумали VPN: защищённый туннель между вашим телефоном или ноутбуком и домашней сетью. Вы подключаетесь, и устройства дома становятся доступны так, будто вы сидите на диване. Запросов «vpn на raspberry pi» и «wireguard на raspberry pi» много, и неудивительно: плата работает круглосуточно, мало потребляет, а WireGuard — самый простой и быстрый из современных протоколов VPN.

В статье настроим VPN-сервер WireGuard на Raspberry Pi 5 без готовых «обёрток»: по шагам, с ключами, настройкой сервера и клиентов, QR-кодом для телефона, пробросом порта и проверкой. Для чего это нужно: безопасный доступ к NAS, Nextcloud, Home Assistant и Pi-hole извне и защита соединения в чужих Wi-Fi-сетях.

Про что эта статья. Мы настраиваем доступ к собственной домашней сети. Это не способ изменить маршрут интернет-трафика между странами и не инструмент для обхода ограничений: рассматривается только VPN «дом — устройство».


Как это работает

Схема WireGuard на Raspberry Pi: телефон подключается через интернет и роутер с пробросом порта UDP 51820 к Raspberry Pi 5 и получает доступ к домашней сети 192.168.0.0/24
  1. На Raspberry Pi запущен сервер WireGuard с адресом 10.8.0.1 в особой «сети VPN» (10.8.0.0/24).
  2. Роутер пробрасывает порт UDP 51820 на Raspberry Pi.
  3. Телефон (клиент) получает адрес 10.8.0.2, соединяется с сервером по зашифрованному туннелю и через него обращается к устройствам домашней сети.
  4. У каждого устройства свой ключ: чужой не подключится, а если телефон потерян, достаточно удалить его ключ с сервера.

WireGuard «молчит» на неавторизованные пакеты: порт не отвечает тем, у кого нет ключа, поэтому сканирование его не обнаруживает.


Что нужно заранее

УсловиеЗачем
Raspberry Pi 5 по кабелю EthernetСервер должен быть стабилен
Постоянный адрес платы в домашней сетиКак закрепить
Доступ к настройкам роутераНужно пробросить порт UDP 51820
Публичный IP-адрес у провайдераБез него из интернета до вашей сети не достучаться (см. ниже)
Адрес для подключения: IP или имя (DDNS)Если IP-адрес меняется, нужен динамический DNS

Белый и серый IP

Многие провайдеры выдают домашним клиентам «серый» адрес: за общим NAT провайдера, и входящие подключения невозможны. Проверить просто: сравните адрес, который роутер считает внешним (на странице состояния подключения), с тем, что показывает любой сайт «мой IP». Если они совпадают, у вас публичный адрес. Если разные, адрес «серый». У большинства провайдеров «белый» (публичный) IP включается отдельной услугой, иногда бесплатно. Без неё сервер дома не получится: нужно арендовать виртуальный сервер или использовать решения вроде Tailscale (см. ниже).

Динамический DNS

Публичный адрес у домашнего абонента часто меняется. Чтобы не следить за ним, используют динамический DNS: служба хранит имя (mypi.example.net), которое всегда указывает на ваш текущий адрес. Многие роутеры умеют это сами (у некоторых провайдеров и производителей есть свои сервисы), есть и независимые (DuckDNS, No-IP и другие). Выберите, настройте и дальше используйте имя вместо IP.


Установка

В отличие от старых инструкций, проект PiVPN (скрипт-обёртка для WireGuard и OpenVPN) больше не развивается: его последние версии вышли с пометкой о завершении проекта. WireGuard настраивается и без обёртки быстро, а понимание схемы поможет, когда что-то пойдёт не так. Ядро Raspberry Pi OS уже содержит модуль WireGuard, нужны только утилиты:

sudo apt update
sudo apt install wireguard qrencode iptables

Пакет qrencode нужен для QR-кода (подключение телефона одним сканированием), а iptables — для правил «пропуска» трафика в домашнюю сеть.

Шаг 1. Включаем маршрутизацию

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

echo "net.ipv4.ip_forward=1" | sudo tee /etc/sysctl.d/99-wireguard.conf
sudo sysctl --system

Проверьте: sysctl net.ipv4.ip_forward должно вывести = 1.

Терминал Raspberry Pi: команда echo net.ipv4.ip_forward=1 с tee в /etc/sysctl.d/99-wireguard.conf, затем sudo sysctl --system со списком применяемых файлов и строкой net.ipv4.ip_forward = 1 в конце

Что на снимке. Первая команда записывает строку в файл /etc/sysctl.d/99-wireguard.conf и сама же её повторяет (net.ipv4.ip_forward=1): так работает tee. Вторая команда перечитывает все файлы настроек ядра и печатает каждый из них со строкой * Applying …; наш файл 99-wireguard.conf стоит последним в списке. Длинный список строк net.ipv4.conf.… — настройки по каждому сетевому интерфейсу платы, у вас набор интерфейсов может отличаться. Последняя строка net.ipv4.ip_forward = 1 — пересылка пакетов включена; она сохранится и после перезагрузки.

Шаг 2. Ключи сервера

Ключи — это пары чисел: закрытый ключ остаётся только на своём устройстве, открытый передаётся другой стороне.

sudo -i
cd /etc/wireguard
umask 077
wg genkey | tee server_private.key | wg pubkey > server_public.key
cat server_public.key
exit

Права umask 077 защищают закрытые ключи от чтения другими пользователями.

Терминал Raspberry Pi: sudo -i, cd /etc/wireguard, umask 077, wg genkey с tee server_private.key и wg pubkey в server_public.key, cat server_public.key выводит открытый ключ (закрыт подписью)

Что на снимке. Команда sudo -i открывает оболочку администратора: приглашение меняется с admin@raspberrypi5:~ $ на root@raspberrypi5:…#. Это нужно, потому что запись в папку /etc/wireguard через > выполняется с правами текущей оболочки, и обычный пользователь её не выполнит. Команда с wg genkey ничего не печатает: закрытый ключ ушёл в файл server_private.key, открытый в server_public.key. cat server_public.key показывает открытый ключ: строку из 44 символов, которая заканчивается на =. Команда exit возвращает вас в обычную оболочку (logout).

На снимках этой статьи оба ключа сервера закрыты подписями ОТКРЫТЫЙ_КЛЮЧ_СЕРВЕРА и ЗАКРЫТЫЙ_КЛЮЧ_СЕРВЕРА: у вас на их месте будет набор символов. Закрытый ключ никому не показывайте и не публикуйте, в том числе на снимках экрана.

Шаг 3. Конфигурация сервера

Создайте файл /etc/wireguard/wg0.conf:

sudo nano /etc/wireguard/wg0.conf
[Interface]
Address = 10.8.0.1/24
ListenPort = 51820
PrivateKey = ЗАКРЫТЫЙ_КЛЮЧ_СЕРВЕРА
PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -A FORWARD -o wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE
PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -D FORWARD -o wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE

Вместо ЗАКРЫТЫЙ_КЛЮЧ_СЕРВЕРА подставьте содержимое файла /etc/wireguard/server_private.key (sudo cat /etc/wireguard/server_private.key). Вот как выглядит файл в редакторе nano:

Редактор nano с файлом /etc/wireguard/wg0.conf: раздел Interface, Address 10.8.0.1/24, ListenPort 51820, PrivateKey (закрыт подписью), строки PostUp и PostDown с iptables и MASQUERADE

Звёздочка после имени файла в заголовке nano (/etc/wireguard/wg0.conf *) значит, что изменения ещё не сохранены: нажмите Ctrl+O, Enter, затем Ctrl+X. Строки PostUp и PostDown длинные; каждая должна остаться одной строкой, без переноса. Что здесь настроено:

  • Address — адрес сервера внутри VPN;
  • ListenPort — порт UDP, на котором сервер принимает подключения;
  • PostUp и PostDown — правила, которые разрешают передачу пакетов и подменяют адрес отправителя на адрес платы (MASQUERADE), чтобы устройства дома отвечали клиентам VPN (иначе им пришлось бы знать маршрут к сети 10.8.0.0/24). Имя eth0 — проводной интерфейс платы. Проверьте своё: ip -br a.

Включите сервер и добавьте в автозапуск:

sudo chmod 600 /etc/wireguard/wg0.conf
sudo systemctl enable --now wg-quick@wg0
sudo wg show

Команда wg show выведет интерфейс wg0 и порт 51820.

Терминал Raspberry Pi: sudo cat server_private.key (ключ закрыт подписью), sudo chmod 600 wg0.conf, sudo systemctl enable --now wg-quick@wg0 создаёт ссылку, sudo wg show выводит интерфейс wg0, открытый ключ, скрытый закрытый ключ и порт 51820

Что на снимке. sudo cat /etc/wireguard/server_private.key печатает закрытый ключ, его и нужно вставить в PrivateKey (на снимке он закрыт подписью). Затем файл правится в nano и закрывается правами 600: читать его может только администратор. Команда enable --now одновременно запускает сервер и включает автозапуск: сообщение Created symlink …/wg-quick@wg0.service как раз об этом. В выводе sudo wg show видны интерфейс wg0, открытый ключ сервера (он совпадает с server_public.key), строка private key: (hidden) — закрытый ключ программа не показывает — и порт 51820. Блока peer пока нет: клиентов мы ещё не добавляли.


Роутер: проброс порта

В настройках роутера найдите раздел «Проброс портов» (Port Forwarding, «Виртуальные серверы», «NAT»). Создайте правило:

ПараметрЗначение
ПротоколUDP
Внешний порт51820
Внутренний адресАдрес Raspberry Pi (например, 192.168.0.122)
Внутренний порт51820
Настройки роутера: правило проброса порта User-defined, Enable Port Mapping включено, Mapping Name RPI5 UDP, Internal Host 192.168.0.122 raspberrypi5, протокол UDP, внешний и внутренний порт 51820, кнопка Apply

Так выглядит правило в одном из роутеров: у вас разделы и подписи будут другими, а набор полей тот же. Enable Port Mapping включает правило, Mapping Name — любое имя (здесь RPI5 UDP), Internal Host — адрес платы (192.168.0.122; рядом выбрано имя устройства raspberrypi5), Protocol — UDP, External port number и Internal port number — оба 51820. В поле WAN Name выбирают соединение, через которое роутер выходит в интернет. Поля External Source IP Address и External source port number оставлены пустыми: порт открыт для подключений с любого адреса. Внизу нажмите Apply. Адрес 192.168.0.122 — это плата по кабелю; если она подключена и по Wi-Fi, у неё будет второй адрес, а правило нужно привязывать к проводному.

Порт можно изменить (меняйте оба места: ListenPort и роутер). WireGuard использует только UDP, TCP открывать не надо.


Клиенты: добавляем устройство

Для каждого устройства нужна своя пара ключей и свой адрес в сети VPN. Ниже скрипт, который создаёт клиента и сразу показывает QR-код. Сохраните его как /usr/local/bin/wg-add-client:

sudo nano /usr/local/bin/wg-add-client
#!/bin/bash
# Использование: sudo wg-add-client имя последний-октет
# Пример:        sudo wg-add-client phone 2   (адрес 10.8.0.2)
set -e
NAME="$1"; N="$2"
if [ -z "$NAME" ] || [ -z "$N" ]; then
    echo "Использование: $0 имя последний-октет"; exit 1
fi

ENDPOINT="mypi.example.net:51820"      # ваш DDNS-адрес или публичный IP и порт
LAN_DNS="192.168.0.122"                # DNS для клиента (Pi-hole или роутер)
LAN_NET="192.168.0.0/24"               # ваша домашняя сеть

cd /etc/wireguard
umask 077
wg genkey | tee "$NAME.key" | wg pubkey > "$NAME.pub"

cat > "$NAME.conf" <<EOF
[Interface]
PrivateKey = $(cat "$NAME.key")
Address = 10.8.0.$N/24
DNS = $LAN_DNS

[Peer]
PublicKey = $(cat server_public.key)
Endpoint = $ENDPOINT
AllowedIPs = $LAN_NET, 10.8.0.0/24
PersistentKeepalive = 25
EOF

# добавляем клиента на сервер: сразу в работающий интерфейс и в файл
wg set wg0 peer "$(cat "$NAME.pub")" allowed-ips "10.8.0.$N/32"
cat >> wg0.conf <<EOF

[Peer]
# $NAME
PublicKey = $(cat "$NAME.pub")
AllowedIPs = 10.8.0.$N/32
EOF

echo "Клиент $NAME создан: /etc/wireguard/$NAME.conf"
qrencode -t ansiutf8 < "$NAME.conf"
sudo chmod +x /usr/local/bin/wg-add-client
sudo wg-add-client phone 2
Терминал Raspberry Pi: sudo nano и chmod +x для /usr/local/bin/wg-add-client, затем sudo wg-add-client phone 2 выводит «Клиент phone создан: /etc/wireguard/phone.conf» и QR-код (закрыт мозаикой)

Что на снимке. Сначала скрипт сохранён в nano и сделан исполняемым (chmod +x; sudo попросил пароль пользователя, вводимые символы на экране не появляются). Затем sudo wg-add-client phone 2 создал клиента phone с адресом 10.8.0.2, ответил Клиент phone создан: /etc/wireguard/phone.conf и нарисовал QR-код. На снимке QR-код закрыт мозаикой. В нём записан весь файл клиента вместе с закрытым ключом, поэтому код нельзя показывать, фотографировать и пересылать: любой, кто его отсканирует, получит доступ к вашей сети. У вас на этом месте будет чёткий чёрно-белый квадрат.

Скрипт нарисует QR-код в терминале. Параметры в файле клиента:

  • Address — адрес клиента в VPN;
  • DNS — сервер имён для клиента. Укажите Pi-hole или роутер, чтобы по имени открывались домашние устройства;
  • Endpoint — адрес сервера из интернета (имя DDNS или публичный IP) и порт;
  • AllowedIPs — какой трафик идёт в туннель. Здесь только домашняя сеть и сеть VPN (так называемый split tunnel). Весь остальной интернет остаётся «напрямую»;
  • PersistentKeepalive = 25 — «пинг» каждые 25 секунд, который держит соединение открытым за NAT.

Если хотите пускать через дом весь трафик. В AllowedIPs клиента вместо подсетей укажите 0.0.0.0/0, ::/0. Тогда весь интернет-трафик устройства идёт через домашний канал (удобно в чужих Wi-Fi-сетях). Скорость будет ограничена исходящей скоростью вашего домашнего интернета.

Телефон (Android, iOS)

  1. Установите приложение WireGuard (оно есть в Google Play и App Store).
  2. Нажмите «+» → Сканировать QR-код и наведите камеру на код в терминале.
  3. Дайте имя туннелю и включите переключатель.
Приложение WireGuard на Android: слева пустой список с подсказкой «Добавьте туннель с помощью кнопки ниже» и кнопкой «+», справа в списке туннель rpi5 с выключенным переключателем

Что на снимках. Слева приложение при первом запуске: список пуст, внизу кнопка «+». Справа в списке появился туннель rpi5 (имя вы задаёте сами при добавлении), его переключатель пока выключен: коснитесь его, чтобы включить туннель.

Компьютер (Windows, macOS, Linux)

Телефон подключается по QR-коду, а на компьютере сканировать нечего: туда переносят готовый файл настроек клиента. Порядок такой: создать на плате отдельного клиента, забрать его файл .conf, импортировать в программу WireGuard, включить туннель и проверить. Файл содержит закрытый ключ клиента, поэтому переносите его только по домашней сети (командой scp), а не почтой и не через мессенджер.

1) Создайте клиента для компьютера. У каждого устройства свой клиент: свои ключи и свой адрес в VPN. Один и тот же файл на двух устройствах использовать нельзя: с одинаковым ключом и адресом они будут вытеснять друг друга. Телефон получил 10.8.0.2, для компьютера возьмите следующий свободный номер:

sudo wg-add-client laptop 3

Скрипт создаст файл /etc/wireguard/laptop.conf (адрес клиента 10.8.0.3) и нарисует QR-код. Для компьютера код не нужен, его можно проигнорировать.

2) Скопируйте файл на компьютер. Папку /etc/wireguard читает только администратор, и обычный пользователь не сможет забрать оттуда файл по scp. Поэтому сначала сделайте временную копию в своей домашней папке на плате:

sudo cp /etc/wireguard/laptop.conf ~/laptop.conf && sudo chown $USER ~/laptop.conf

Затем на компьютере откройте PowerShell (Windows) или Терминал (macOS, Linux) и скачайте файл. Компьютер должен быть в той же домашней сети, что и плата: туннель ещё не работает, поэтому по VPN файл не передать.

scp admin@192.168.0.122:laptop.conf .
Окно Windows PowerShell: команда scp admin@192.168.0.122:laptop.conf . скопировала файл laptop.conf с Raspberry Pi в текущую папку D:\

На снимке PowerShell, диск D:: после команды scp выводится имя скопированного файла laptop.conf и приглашение возвращается без ошибок, значит, файл лежит в текущей папке (D:\). Если SSH-ключ уже настроен, команда не спросит пароль, как на снимке; иначе введите пароль пользователя платы.

Вместо admin подставьте имя пользователя на плате, вместо 192.168.0.122 — адрес вашей платы. Команда спросит пароль этого пользователя (при первом подключении ещё и подтверждение отпечатка: напишите yes) и положит laptop.conf в текущую папку компьютера. Если команды scp нет, в современных Windows её даёт компонент «Клиент OpenSSH». Запасной вариант без scp: выполните на плате sudo cat /etc/wireguard/laptop.conf и скопируйте текст в буфер обмена; потом вставите его в программе WireGuard (Add Tunnel → Add empty tunnel, старый текст в окне заменяется вставленным). После вставки очистите буфер обмена и закройте окно терминала с ключом.

После переноса удалите временную копию на плате:

rm ~/laptop.conf

3) Импортируйте файл и включите туннель.

СистемаЧто установитьКак включить
WindowsПрограмма WireGuard с официального сайтаНажмите Add Tunnel (или стрелку рядом с ней, пункт Import tunnel(s) from file), выберите laptop.conf, затем кнопка Activate
macOSПриложение WireGuard из Mac App StoreЗначок «+» внизу списка → Import tunnel(s) from file…, выберите laptop.conf; система попросит разрешить добавление VPN-конфигурации; затем Activate
LinuxПакет wireguard (в Fedora и Arch он называется wireguard-tools)Команды ниже

В Linux файл кладут в /etc/wireguard, имя интерфейса берётся из имени файла:

sudo apt install wireguard resolvconf
sudo cp laptop.conf /etc/wireguard/
sudo chmod 600 /etc/wireguard/laptop.conf
sudo wg-quick up laptop

Если wg-quick пишет, что не находит resolvconf, поставьте пакет resolvconf (или openresolv): он нужен для строки DNS в файле клиента. Остановить туннель: sudo wg-quick down laptop. Чтобы туннель включался при загрузке, выполните sudo systemctl enable --now wg-quick@laptop; на ноутбуке, который бывает дома, автозапуск лучше не включать (см. ниже).

4) Проверьте подключение.

  1. Подключите компьютер к другой сети: раздайте интернет с телефона (точка доступа) или возьмите чужой Wi-Fi. Дома туннель включать не нужно: устройства домашней сети и так доступны напрямую, а маршрут 192.168.0.0/24 через туннель только запутает систему.
  2. Включите туннель. В окне программы (Windows, macOS) у туннеля появятся строки Latest handshake («последнее рукопожатие») и Transfer (принято и отправлено); в Linux то же покажет sudo wg show. Если рукопожатия нет, смотрите таблицу «Если что-то не работает» ниже.
  3. Проверьте связь: ping 10.8.0.1 (сама плата внутри VPN), затем ping 192.168.0.122 и адрес роутера ping 192.168.0.1. Откройте в браузере страницу домашнего сервиса, например http://192.168.0.122:1880.
Окно WireGuard для Windows: туннель laptop со статусом Active, адрес 10.8.0.3/24, DNS 192.168.0.1, разрешённые IP-адреса 192.168.0.0/24 и 10.8.0.0/24, Persistent keepalive 25, последнее рукопожатие 14 секунд назад, принято 3,93 KiB, отправлено 3,77 KiB

Что на снимке. Окно WireGuard для Windows с включённым туннелем laptop: слева список туннелей, внизу кнопка Add Tunnel, рядом вкладка Log с журналом. В блоке Interface статус Active (зелёный щит), Public key — открытый ключ компьютера (программа вычисляет его из закрытого сама), Listen port — порт, который Windows выбрала для клиента (у вас он будет другим), Addresses 10.8.0.3/24 — адрес компьютера в VPN, DNS servers — 192.168.0.1. Кнопка Deactivate выключает туннель. В блоке Peer описан сервер на плате: его открытый ключ, Allowed IPs (домашняя сеть и сеть VPN), Endpoint — адрес и порт, Persistent keepalive 25, Latest handshake 14 seconds ago («14 секунд назад») и Transfer: принято 3,93 KiB, отправлено 3,77 KiB. Раз рукопожатие свежее и счётчики растут, туннель работает. Открытые ключи на снимке заменены подписями, а адрес сервера — примером mypi.example.net:51820.

Имена вида raspberrypi5.local через VPN, скорее всего, не заработают: такие имена находятся широковещательными запросами внутри одной сети, а в туннель они не попадают. Открывайте домашние устройства по IP-адресам, или заведите имена в Pi-hole или роутере (DNS в файле клиента как раз ведёт туда).

5) Уберите лишнее. Когда убедитесь, что туннель на компьютере работает, удалите скачанный laptop.conf из папки загрузок: программа WireGuard уже сохранила настройки у себя. На плате удалите файлы клиента, сервер хранит только его открытый ключ в wg0.conf:

sudo rm /etc/wireguard/laptop.key /etc/wireguard/laptop.conf

Если потеряете компьютер, удалите его блок [Peer] (см. раздел «Управление клиентами»): доступ по этому ключу прекратится, даже если файл попадёт к чужому.

Закрытые ключи. Файлы *.conf и *.key содержат закрытые ключи. Передавайте их безопасно и удаляйте с платы, когда они больше не нужны: сервер хранит только открытые ключи клиентов. После установки на устройство файлы в /etc/wireguard лучше убрать из мест, где к ним могут получить доступ.


Проверка

  1. Отключите Wi-Fi телефона и включите мобильный интернет: нужно проверять не из домашней сети.
  2. Включите туннель в приложении.
  3. На плате выполните sudo wg show: у клиента должна появиться строка latest handshake («последнее рукопожатие») с недавним временем и счётчики transfer.
  4. На телефоне откройте адрес устройства дома: например, http://192.168.0.1 (роутер) или http://192.168.0.122:8080 (Nextcloud). Или выполните ping.
Слева экран туннеля rpi5 в WireGuard: адрес 10.8.0.2/24, DNS 192.168.0.1, разрешённые IP-адреса 192.168.0.0/24 и 10.8.0.0/24, последнее рукопожатие 11 секунд назад; справа браузер телефона на мобильном интернете открывает страницу входа Node-RED по адресу 192.168.0.122:1880

Что на снимках. Слева экран включённого туннеля rpi5. Адреса 10.8.0.2/24 — адрес телефона внутри VPN, DNS-серверы — адрес, который скрипт записал в DNS, Разрешённые IP-адреса — домашняя сеть и сеть VPN (только этот трафик идёт в туннель), Конечная точка — адрес сервера и порт (на снимке заменён примером mypi.example.net:51820), Постоянное соединение — тот самый PersistentKeepalive = 25. Блок Статистика показывает принятые и переданные данные, а строка Последнее рукопожатие — 11 секунд назад: сервер и телефон обменялись ключами, туннель работает. Открытые ключи на снимке закрыты подписями. Справа тот же телефон на мобильном интернете (значок 4G+ и значок ключа, VPN, в строке состояния) открыл страницу входа в Node-RED на плате по домашнему адресу 192.168.0.122:1880: из чужой сети этот адрес без VPN недоступен.

Если рукопожатия нет, смотрите таблицу ниже.


Управление клиентами

ЗадачаКоманда
Показать подключенияsudo wg show
Остановить серверsudo systemctl stop wg-quick@wg0
Перезапуститьsudo systemctl restart wg-quick@wg0
Удалить клиентаУдалите блок [Peer] из /etc/wireguard/wg0.conf и выполните sudo wg set wg0 peer ОТКРЫТЫЙ_КЛЮЧ remove
Журналjournalctl -u wg-quick@wg0

Альтернатива: Tailscale

Если у провайдера «серый» адрес, а проброс порта невозможен, можно использовать сервисы на основе WireGuard, которые сами соединяют устройства (например, Tailscale). Установка на Raspberry Pi занимает пару команд, не требует проброса портов, но зависит от стороннего сервера координации и его доступности из вашей сети. Для полностью собственного решения остаётся белый IP или аренда VPS.


Если что-то не работает

ПроблемаЧто проверить
Нет рукопожатия (latest handshake отсутствует)Порт UDP 51820 не проброшен или не тот адрес платы; у провайдера серый IP; в Endpoint неверный адрес/имя; перепутаны ключи (открытый и закрытый). Проверьте, что клиент не в домашнем Wi-Fi
Рукопожатие есть, но нет доступа к домашним устройствамНе включена пересылка пакетов (sysctl net.ipv4.ip_forward), нет правил PostUp (проверьте sudo iptables -t nat -S), указан не тот интерфейс (eth0), в AllowedIPs клиента нет домашней сети
Домашние устройства открываются по IP, но не по имениВ клиенте не указан DNS, или DNS-сервер не знает локальных имён
Соединение рвётсяНужен PersistentKeepalive = 25 в клиенте. Проверьте, не перегружен ли канал
Подключение работает, но страницы грузятся медленно или частичноПроблема размера пакетов. Добавьте в раздел [Interface] клиента MTU = 1280
Сервер не запускаетсяsystemctl status wg-quick@wg0 и journalctl -u wg-quick@wg0. Проверьте ошибки в wg0.conf, права на файл (600)
После смены адреса провайдером перестало работатьИспользуйте динамический DNS и имя вместо IP
Правила iptables не применяютсяУстановлен ли пакет iptables; на системах с nftables проверьте, что команды iptables существуют

Безопасность. В интернет наружу открыт только один порт UDP 51820. Не открывайте дополнительные порты домашних служб (SMB, SSH, Nextcloud): через VPN они доступны без этого. Храните ключи в секрете, а для каждого устройства создавайте отдельный ключ.


Что дальше


Материалы

Оставьте комментарий

Отправляя комментарий, вы соглашаетесь с обработкой ваших данных (имя, адрес электронной почты, текст комментария) в соответствии с политикой конфиденциальности.