Главная страница » Raspberry Pi » Raspberry Pi в роли VPN-сервера: настраиваем WireGuard для всей домашней сети
Raspberry Pi в роли VPN-сервера: настраиваем WireGuard для всей домашней сети
Raspberry Pi

Raspberry Pi в роли VPN-сервера: настраиваем WireGuard для всей домашней сети

31.03.2026 136
Raspberry Pi в роли VPN-сервера: настраиваем WireGuard для всей домашней сети

Настраиваем WireGuard на Raspberry Pi для безопасного удалённого доступа к домашней сети с компьютера и смартфона.

⚠️ Дисклеймер: Материал носит исключительно информационный и образовательный характер. Все описанные действия, программное обеспечение, команды и примеры предназначены для изучения технологий, тестирования собственных систем и решения законных технических задач. Автор не призывает использовать приведённую информацию для нарушения законодательства, получения несанкционированного доступа, обхода установленных ограничений или причинения вреда третьим лицам. Перед применением информации убедитесь, что ваши действия соответствуют законодательству Российской Федерации и правилам используемых сервисов.

Приветствую, коллеги-энтузиасты! Сегодня мы займёмся одним из самых полезных апгрейдов для вашей домашней сети — превратим скромный Raspberry Pi в полноценный VPN-сервер на WireGuard. Зачем? Представьте: вы в командировке, а нужно заглянуть на домашний NAS, проверить камеры или получить доступ к умным устройствам. Или вы в кафе с открытым Wi-Fi, а хочется безопасного соединения. WireGuard решает эти задачи элегантно и с минимальными накладными расходами.

Я сам пользуюсь такой схемой больше года, и сегодня подробно разберу каждый шаг — от установки WireGuard до настройки маршрутизации для всех домашних устройств. WireGuard — это современный, быстрый и простой в настройке VPN-протокол, который отлично чувствует себя даже на слабом «Малине».

Почему именно WireGuard и Raspberry Pi?

WireGuard — это не просто ещё один VPN. Его кодовая база составляет около 4000 строк (для сравнения: OpenVPN — около 100 000). Меньше кода — меньше потенциальных уязвимостей, выше скорость и стабильность. Он идеально подходит для постоянного фонового соединения.

Raspberry Pi — идеальная платформа для такого сервера: * Потребляет мало энергии (5-10 Вт) * Работает бесшумно и круглосуточно * Имеет стабильную производительность для сетевых задач * Поддерживается всеми популярными дистрибутивами

В моём случае работает Raspberry Pi 4 с 2 ГБ ОЗУ, и этого хватает с запасом для 5-7 одновременных подключений.

Что нам понадобится

  1. Raspberry Pi (подойдёт любая модель, начиная с 3B+, для лучшей скорости на проводном гигабитном интерфейсе).
  2. Установленная ОС. Я использую Raspberry Pi OS Lite (64-bit) без графического интерфейса — так экономнее ресурсы. Если вы только начинаете, рекомендую статью Orange Pi 5: Установка Ubuntu и первые шаги для вашего DIY-проекта — принципы схожи.
  3. Статический IP-адрес для Raspberry Pi в вашей локальной сети (настраивается в роутере или на самом Pi).
  4. Проброшенный порт на вашем роутере (по умолчанию UDP 51820). Как это сделать — зависит от модели роутера, ищите в настройках «Port Forwarding» или «Виртуальные серверы».
  5. Динамический DNS (опционально, но очень рекомендуется), если у вас нет белого статического IP-адреса от провайдера. Сервисы вроде DuckDNS или No-IP бесплатны для одного домена.

Подготовка системы и установка WireGuard

Первым делом обновляем список пакетов и саму систему. Подключаемся к Raspberry Pi по SSH.

sudo apt update && sudo apt upgrade -y

Команда update обновляет информацию о доступных пакетах, а upgrade устанавливает их последние версии. Флаг -y автоматически соглашается на установку.

Теперь устанавливаем сам WireGuard и вспомогательные утилиты.

sudo apt install wireguard wireguard-tools -y

Пакет wireguard-tools содержит утилиты wg и wg-quick, которые нам понадобятся для управления.

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

Генерация ключей и создание конфигурации сервера

WireGuard использует пары криптографических ключей (публичный и приватный) для каждого участника сети. Сначала сгенерируем ключи для самого сервера.

cd /etc/wireguard
sudo umask 077
sudo wg genkey | sudo tee privatekey | sudo wg pubkey > publickey

Разберём команды: * cd /etc/wireguard — переходим в директорию, где обычно хранятся конфиги WireGuard. * sudo umask 077 — устанавливаем маску прав так, чтобы создаваемые файлы были доступны только владельцу (root). Это критически важно для безопасности приватных ключей! * wg genkey — генерирует приватный ключ. * tee privatekey — сохраняет приватный ключ в файл privatekey и одновременно передаёт его дальше по конвейеру. * wg pubkey — на основе переданного приватного ключа вычисляет и выводит публичный ключ. * > publickey — сохраняет публичный ключ в файл publickey.

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

sudo nano /etc/wireguard/wg0.conf

Вставляем следующую конфигурацию. Внимательно замените ВАШ_ПРИВАТНЫЙ_КЛЮЧ на содержимое файла /etc/wireguard/privatekey.

[Interface]
Address = 10.0.0.1/24
ListenPort = 51820
PrivateKey = ВАШ_ПРИВАТНЫЙ_КЛЮЧ
PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE

# Разрешаем пересылку пакетов (IP forwarding)
PostUp = sysctl -w net.ipv4.ip_forward=1
PostDown = sysctl -w net.ipv4.ip_forward=0

Пояснение конфига: * [Interface] — секция настроек интерфейса сервера. * Address = 10.0.0.1/24 — назначаем VPN-интерфейсу сервера IP-адрес 10.0.0.1. Сеть 10.0.0.0/24 будет нашей внутренней VPN-сетью. * ListenPort = 51820 — порт, на котором сервер будет ожидать подключений. * PrivateKey — приватный ключ сервера. * Самый важный блок — PostUp и PostDown: эти команды выполняются при поднятии (PostUp) и остановке (PostDown) интерфейса. 1. iptables -A FORWARD -i wg0 -j ACCEPT — разрешаем пересылку пакетов с интерфейса wg0. 2. iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE — включаем NAT (маскарадинг) для трафика из VPN, выходящего в основную сеть через eth0 (ваш основной сетевой интерфейс, может называться enp1s0 или подобно). Это позволяет клиентам из VPN выходить в интернет и видеть вашу домашнюю сеть. 3. sysctl -w net.ipv4.ip_forward=1 — включаем IP-форвардинг (маршрутизацию) на уровне ядра. Без этого пакеты между сетями пересылаться не будут.

Типичная ошибка: Неправильное указание интерфейса в PostUp/PostDown. Если ваш Pi подключён по Wi-Fi, замените eth0 на wlan0. Узнать свой активный интерфейс можно командой ip route | grep default.

Сохраняем файл (Ctrl+O, затем Enter) и выходим (Ctrl+X).

Создание конфигурации для первого клиента (например, ваш смартфон)

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

mkdir -p ~/wireguard-keys
cd ~/wireguard-keys
wg genkey | tee client-privatekey | wg pubkey > client-publickey

Теперь нужно добавить конфигурацию клиента в конфиг сервера. Открываем его снова:

sudo nano /etc/wireguard/wg0.conf

И в конец файла добавляем новую секцию [Peer]:

[Peer]
# Имя клиента, например, smartphone
PublicKey = ПУБЛИЧНЫЙ_КЛЮЧ_КЛИЕНТА
AllowedIPs = 10.0.0.2/32
  • PublicKey — публичный ключ клиента (содержимое файла client-publickey).
  • AllowedIPs = 10.0.0.2/32 — назначаем клиенту конкретный IP-адрес в VPN-сети (/32 означает один адрес). Также здесь можно указать диапазоны сетей, к которым клиенту разрешён доступ через туннель. Пока оставим один IP.

Теперь создадим конфигурационный файл для самого клиента. Создадим файл smartphone.conf прямо в домашней директории:

nano ~/smartphone.conf

Вставляем следующий конфиг, подставив свои значения в три места: 1. ВАШ_ПРИВАТНЫЙ_КЛЮЧ_КЛИЕНТА (из client-privatekey) 2. ПУБЛИЧНЫЙ_КЛЮЧ_СЕРВЕРА (из /etc/wireguard/publickey) 3. ВАШ_ВНЕШНИЙ_IP_ИЛИ_ДОМЕННОЕ_ИМЯ (ваш белый IP-адрес или адрес DDNS-сервиса, например, myhome.duckdns.org).

[Interface]
PrivateKey = ВАШ_ПРИВАТНЫЙ_КЛЮЧ_КЛИЕНТА
Address = 10.0.0.2/24
DNS = 10.0.0.1, 8.8.8.8 # Первый DNS — наш сервер, второй — Google на случай, если Pi недоступен

[Peer]
PublicKey = ПУБЛИЧНЫЙ_КЛЮЧ_СЕРВЕРА
Endpoint = ВАШ_ВНЕШНИЙ_IP_ИЛИ_ДОМЕННОЕ_ИМЯ:51820
AllowedIPs = 0.0.0.0/0, ::/0
PersistentKeepalive = 25

Пояснение клиентского конфига: * [Interface] — настройки клиентской стороны. * Address — IP-адрес, который мы выделили клиенту в секции [Peer] на сервере. * DNS — очень важный параметр! Указываем 10.0.0.1 (адрес нашего VPN-сервера). Позже мы поднимем на Pi DNS-сервер (например, Pi-hole), чтобы использовать его удалённо. 8.8.8.8 — фолбэк. * [Peer] — описываем сервер, к которому подключаемся. * Endpoint — публичный адрес и порт нашего сервера. * AllowedIPs = 0.0.0.0/0 — ключевой параметр для режима «весь трафик». Он говорит клиенту: «Маршрутизируй через VPN ВЕСЬ твой интернет-трафик». Если хотите только доступ к домашней сети, укажите её диапазон (например, 192.168.1.0/24). * PersistentKeepalive = 25 — отправлять keepalive-пакет каждые 25 секунд. Это помогает поддерживать соединение из-за NAT/файрвола.

Сохраняем и выходим.

Запуск сервера и настройка автозапуска

Всё готово для первого запуска!

sudo wg-quick up wg0

Команда wg-quick — это удобный скрипт для управления интерфейсами WireGuard. Он прочитает конфиг /etc/wireguard/wg0.conf, применит все PostUp правила и поднимет интерфейс.

Проверим статус:

sudo wg show

Вы должны увидеть интерфейс wg0, его публичный ключ, слушающий порт и список пиров (Peers), где будет наш клиент с его публичным ключом и последним handshake (пока none, так как мы ещё не подключались).

Чтобы сервер запускался автоматически при загрузке системы, включаем службу:

sudo systemctl enable wg-quick@wg0

Важно: При такой настройке интерфейс wg0 будет подниматься на раннем этапе загрузки. Если у вас нет статического IP в локальной сети или Pi получает адрес по DHCP, может возникнуть проблема с порядком загрузки. В этом случае лучше использовать @reboot в cron или прописать WantedBy=network-online.target в юните systemd (более сложный путь).

Подключение клиента и тестирование базовой работы

Теперь нужно передать файл smartphone.conf на ваше устройство. Самый простой способ — отобразить его содержимое в терминале и скопировать:

cat ~/smartphone.conf

Скопируйте весь вывод. На вашем смартфоне: 1. Установите официальное приложение WireGuard из App Store или Google Play. 2. Нажмите «+» → «Create from file or archive» или «Создать из QR-кода». 3. Вставьте скопированный текст конфигурации. 4. Сохраните конфиг (можно назвать «Дом»). 5. Активируйте переключатель.

Статус должен смениться на «Active», а в приложении появятся счётчики отправленных/полученных данных.

Первый тест: Зайдите в настройки подключения на смартфоне и отключите Wi-Fi, оставив только мобильный интернет. Активируйте туннель WireGuard. Теперь откройте браузер и попробуйте зайти в веб-интерфейс вашего домашнего роутера, используя его внутренний IP-адрес (например, 192.168.1.1). Если настройки верны и проброс порта работает, вы должны увидеть страницу входа в роутер!

Настройка доступа ко всей домашней сети и интернету

Сейчас наш клиент может «видеть» только сам сервер (Pi). Чтобы он получил доступ ко всей домашней сети, нужно убедиться в двух вещах:

  1. Правильная работа NAT (маскарадинга). Мы уже настроили это правилами iptables в PostUp. Проверить, что трафик клиента уходит во внешний мир, можно командой на сервере:

    bash sudo iptables -t nat -L POSTROUTING -v Вы должны увидеть правило с MASQUERADE и ненулевым счётчиком пакетов в столбце packets.

  2. Маршрутизация к домашней подсети. Иногда домашние устройства не знают, как вернуть пакет клиенту в сеть 10.0.0.0/24. Самый надёжный способ — добавить статический маршрут на вашем основном домашнем роутере. Нужно указать, что сеть 10.0.0.0/24 доступна через IP-адрес вашего Raspberry Pi в локальной сети (например, 192.168.1.100).

    • Зайдите в веб-интерфейс роутера.
    • Найдите раздел «Маршрутизация» (Routing) или «Статические маршруты» (Static Routes).
    • Добавьте новый маршрут:
      • Сеть назначения: 10.0.0.0
      • Маска: 255.255.255.0
      • Шлюз: 192.168.1.100 (IP вашего Pi)
    • Сохраните.

    Если ваш роутер не поддерживает статические маршруты, можно попробовать альтернативу — включить ip forwarding на Pi и для обратного трафика, но это менее надёжно.

Проверка результата и диагностика проблем

Давайте проведём комплексный тест.

На клиенте (с включённым VPN):

  1. Пинг домашних устройств: bash # Замените 192.168.1.10 на реальный IP вашего NAS, ПК или другого устройства ping 192.168.1.10 Успешный пинг означает, что доступ к домашней сети работает.

  2. Проверка маршрута и DNS: bash traceroute 8.8.8.8 nslookup google.com Первый хоп в traceroute должен быть 10.0.0.1 (ваш VPN-сервер). Успешное разрешение имени в nslookup показывает, что DNS работает.

  3. Проверка внешнего IP: Зайдите на сайт типа 2ip.ru или icanhazip.com. Он должен показать ваш домашний IP-адрес, а не адрес мобильного оператора или кафе. Это подтверждает, что весь ваш трафик идёт через домашний канал.

На сервере (Raspberry Pi):

  1. Проверка состояния WireGuard: bash sudo wg show Обратите внимание на столбец latest handshake. Там должно быть недавнее время (секунды назад). Если там минуты или часы — соединение не установлено. Проверьте Endpoint в клиентском конфиге и проброс порта на роутере.

  2. Просмотр логов: ```bash

Понравилась статья?

Поставьте лайк и сохраните полезный материал в закладки.

Комментарии (0)
Добавить комментарий
Прокомментировать
Кликните на изображение чтобы обновить код, если он неразборчив
Raspberry Pi как домашний сервер: что на нём можно запустить в 2024
Raspberry Pi
31.03.2026
Raspberry Pi как домашний сервер: что на нём можно запустить в 2024
Подробное руководство по настройке Raspberry Pi как домашнего сервера в 2024. Установите Pi-hole, Home Assistant, Nextcloud, VPN и другие сервисы через Docker.
Headless Raspberry Pi: Настройка без монитора через SSH — Полное руководство
Raspberry Pi
31.03.2026
Headless Raspberry Pi: Настройка без монитора через SSH — Полное руководство
Пошаговое руководство по настройке Raspberry Pi без монитора и клавиатуры. Узнайте, как включить SSH, подключиться к сети и управлять Pi удалённо для DIY-проектов и
Pi-hole на Raspberry Pi: Как я избавил всю домашнюю сеть от рекламы раз и навсегда
Raspberry Pi
31.03.2026
Pi-hole на Raspberry Pi: Как я избавил всю домашнюю сеть от рекламы раз и навсегда
Пошаговая инструкция по установке Pi-hole на Raspberry Pi. Настройте сетевой фильтр рекламы и трекеров для всего умного дома. Проверка, типичные ошибки, личный опыт.
Nextcloud на Raspberry Pi: строим личное облако вместо Google Drive
Raspberry Pi
31.03.2026
Nextcloud на Raspberry Pi: строим личное облако вместо Google Drive
Пошаговая инструкция: как установить и настроить Nextcloud на Raspberry Pi вместо Google Drive. Создайте своё безопасное облако для файлов, календаря и контактов.
Raspberry Pi Print Server: Делаем общий принтер для всей домашней сети
Raspberry Pi
31.03.2026
Raspberry Pi Print Server: Делаем общий принтер для всей домашней сети
Пошаговая инструкция: как сделать сервер печати на Raspberry Pi для общего доступа к USB-принтеру со всех устройств дома. Установка CUPS, настройка, подключение
Raspberry Pi OS vs Ubuntu vs DietPi: Выбор ОС для домашнего сервера
Raspberry Pi
31.03.2026
Raspberry Pi OS vs Ubuntu vs DietPi: Выбор ОС для домашнего сервера
Подробное сравнение Raspberry Pi OS, Ubuntu Server и DietPi для вашего DIY-сервера. Плюсы, минусы, тесты и личный опыт. Узнайте, что выбрать!

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