Как настроить VPN-сервер WireGuard Point-to-Site на Debian 12

VPN-соединение WireGuard типа «точка-сайт» на Debian 12 (Bookworm) — это практичный способ обеспечить доступ ноутбуков, телефонов или удаленных рабочих станций к серверу или маршрутизацию трафика через него. Важно отметить, что WireGuard не имеет специального «серверного режима». Каждый участник является равноправным партнером. В конфигурации «точка-сайт» один хост Debian просто выступает в качестве стабильного, общедоступного хаба, а каждое удаленное устройство получает свою собственную пару ключей и адрес туннеля.

В этом руководстве используются встроенные в Debian инструменты WireGuard, wg-quickпереадресация IPv4 и nftables. Предполагается, что сервер Debian имеет права root или sudo и что UDP-порт 51820доступен. Если сервер находится за домашним или офисным маршрутизатором, необходимо перенаправить этот UDP-порт на хост Debian. Если интернет-провайдер использует NAT операторского класса (CGNAT), обычной переадресации портов маршрутизатора может быть недостаточно; перед устранением неполадок WireGuard убедитесь, что у вас действительно есть доступный публичный адрес.

Что даст эта конфигурация?

В примере VPN используется 10.8.0.0/24. Сервером является 10.8.0.1, а первым клиентом — 10.8.0.2. Клиент может быть настроен либо как полнотуннельный VPN, где интернет-трафик IPv4 выходит через сервер Debian, либо как разделенный туннель, где WireGuard используется только в выбранных частных сетях.

В документации Debian по WireGuard подтверждается, что WireGuard доступен через пакеты дистрибутива, а в официальном руководстве по быстрому запуску WireGuard описаны генерация ключей wg-quickи необязательное постоянное поведение keepalive. См. документацию Debian по WireGuard , официальное руководство по быстрому запуску WireGuard и страницу руководства wg-quick в Debian .

Шаг 1: Установите WireGuard и nftables.

Обновите метаданные пакета, затем установите WireGuard и nftables:

sudo apt update
sudo apt install wireguard nftables

Распространенное заблуждение заключается в том, что Debian 12 требует наличия модуля WireGuard, не входящего в основную ветку ядра. Это не так. WireGuard уже много лет присутствует в ядре Linux; пакеты Debian предоставляют необходимые инструменты управления пользовательским пространством. Рекомендация: используйте пакеты Debian вместо загрузки непроверенного установочного скрипта.

Установка пакетов wireguard и nftables с помощью pt в терминале Debian
Перед созданием конфигурации туннеля установите WireGuard и nftables из репозиториев пакетов Debian.

Шаг 2: Сгенерируйте пару ключей сервера.

Создайте ключевые файлы с ограниченными правами доступа:

sudo -i
install -d -m 700 /etc/wireguard
umask 077
wg genkey | tee /etc/wireguard/server_private.key | wg pubkey > /etc/wireguard/server_public.key
chmod 600 /etc/wireguard/server_private.key
cat /etc/wireguard/server_public.key

Закрытый ключ должен оставаться закрытым. Открытый ключ — это то, что вы копируете в конфигурации клиента. В идеале, закрытый ключ каждого клиента следует генерировать на самом клиенте, а не на сервере. Таким образом, серверу никогда не потребуется хранить закрытые ключи клиентов.

Терминал Debian, демонстрирующий команды генерации ключей WireGuard и производный открытый ключ.
Сгенерируйте закрытый ключ WireGuard для сервера Debian и получите его открытый ключ, используя ограниченные права доступа к файлам.

Шаг 3: Включите переадресацию IPv4.

VPN-туннель может успешно установиться, даже если маршрутизация трафика по-прежнему завершается с ошибкой. Причина в том, что переадресация IP-пакетов в Linux — это отдельная настройка ядра, не связанная с самим WireGuard. Создайте постоянный файл sysctl:

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

В итоговой команде должно отобразиться значение net.ipv4.ip_forward = 1. В документации ядра Debian оно описывается ip_forwardкак переключатель, который включает пересылку пакетов IPv4. Действие: проверьте это значение явно, а не предполагайте, что интерфейс туннеля автоматически включает маршрутизацию. См. руководство Debian ip(7) и документацию sysctl.conf .

В терминале Debian отображается сообщение о том, что параметр net.ipv4.ip_forward установлен в значение 1 в конфигурационном файле sysctl.
Включите пересылку IPv4, чтобы Debian мог маршрутизировать пакеты между интерфейсом WireGuard и другими сетями.

Шаг 4: Создание конфигурации сервера

Прочитайте закрытый ключ сервера, затем создайте /etc/wireguard/wg0.conf:

[Interface]
Address = 10.8.0.1/24
ListenPort = 51820
PrivateKey = SERVER_PRIVATE_KEY

[Peer]
PublicKey = CLIENT_PUBLIC_KEY
AllowedIPs = 10.8.0.2/32

Затем защитите файл:

sudo chmod 600 /etc/wireguard/wg0.conf

AllowedIPsЧасто ошибочно считают просто списком разрешенных адресов в стиле брандмауэра. Он также управляет маршрутизацией. На сервере назначение адреса 10.8.0.2/32этому узлу сообщает WireGuard, что пакеты для этого конкретного адреса туннеля принадлежат этому клиенту. Каждому клиенту следует присвоить уникальный адрес и отдельный [Peer]блок.

Ещё один полезный вариант — опустить этот параметр, SaveConfig = trueесли вы планируете управлять этим файлом вручную. В этом случае SaveConfigможно wg-quickзаписывать текущее состояние обратно в конфигурацию при завершении работы, что может перезаписать изменения, внесённые вручную. Действие: оставляйте файл декларативным, если только вы специально не хотите сохранять текущее состояние.

В терминале Debian отображается конфигурация сервера wg0.conf с интерфейсом WireGuard и одним удаленным узлом.
Создайте на стороне сервера файл wg0.conf, указав адрес туннеля, порт прослушивания UDP, закрытый ключ сервера и одного клиента.

Шаг 5: Настройка маскировки nftables

Если клиентам, использующим полнотуннельный доступ, необходимо получить доступ к Интернету через сервер Debian, проще всего использовать маскировку IPv4. Сначала определите исходящий интерфейс сервера:

ip route get 1.1.1.1

Ищите интерфейс после dev, например eth0, ens3, или enp1s0. Не следует предполагать, что это всегда eth0.

Если вы уже используете этот /etc/nftables.confфайл, вместо замены файла объедините следующую таблицу NAT с существующим набором правил:

table ip wireguard-nat {
    chain postrouting {
        type nat hook postrouting priority 100; policy accept;
        oifname "eth0" ip saddr 10.8.0.0/24 masquerade
    }
}

Замените eth0на фактический исходящий интерфейс. Перед загрузкой выполните проверку:

sudo nft -c -f /etc/nftables.conf
sudo systemctl enable --now nftables
sudo nft list ruleset

NAT не является обязательным требованием для WireGuard. Если в целевой локальной сети уже есть обратный маршрут 10.8.0.0/24, маршрутизация доступа может работать без маскировки. NAT удобен в основном тогда, когда вы хотите, чтобы удаленные клиенты использовали существующий интернет-маршрут сервера, и вы не контролируете обратные маршруты в других местах. Действие: используйте маскировку в простом случае исходящего трафика из интернета; предпочтительнее явная маршрутизация, когда вы контролируете сеть и хотите сохранить исходные адреса.

GNU nano на Debian, демонстрирующий правило маскировки postrouting в nftables для подсети WireGuard.
Добавьте отдельное правило NAT в nftables для сети 10.8.0.0/24 и проверьте набор правил, прежде чем включать его.

Вам также нужны правила брандмауэра?

Это зависит от уже установленного брандмауэра. Если ваша политика входящего трафика nftables является ограничительной, разрешите входящий UDP-трафик 51820. Если ваша цепочка пересылки имеет политику отбрасывания по умолчанию, добавьте туда правила, разрешающие трафик от источника wg0к месту назначения и разрешающие установленный обратный трафик. У облачных VPS-провайдеров также может быть отдельная группа безопасности или брандмауэр провайдера, который должен разрешать UDP-трафик 51820.

Не следует бездумно вставлять совершенно новый набор правил брандмауэра по умолчанию на удаленный SSH-сервер. Это может привести к блокировке доступа. Действие: проверьте sudo nft list rulesetи интегрируйте WireGuard в уже имеющийся у вас брандмауэр.

Шаг 6: Создание профиля клиента

На стороне клиента сгенерируйте собственную пару ключей с помощью приложения WireGuard или wg genkey. Профиль IPv4 для полного туннелирования выглядит следующим образом:

[Interface]
Address = 10.8.0.2/24
PrivateKey = CLIENT_PRIVATE_KEY
DNS = 1.1.1.1

[Peer]
PublicKey = SERVER_PUBLIC_KEY
Endpoint = vpn.example.com:51820
AllowedIPs = 0.0.0.0/0
PersistentKeepalive = 25

Замените vpn.example.comна общедоступное DNS-имя или общедоступный IP-адрес сервера. Эта DNSстрока необязательна, и поддержка реализации на стороне клиента может различаться. Для разделенного туннеля измените значение AllowedIPsтак, чтобы через VPN проходили только те сети, которые должны проходить, например, 10.8.0.0/24плюс частная локальная сеть, такая как 192.168.50.0/24.

PersistentKeepalive = 25Также это необязательно. В официальной документации WireGuard рекомендуется значение 25 секунд в качестве разумного параметра, если узлу за NAT или межсетевым экраном с отслеживанием состояния необходимо сохранять сопоставление в периоды простоя. Это не параметр производительности и не является обязательным для каждого клиента. Действие: используйте его в основном для роуминговых или NAT-подключенных клиентов, которые в противном случае становятся недоступными после простоя.

GNU nano на Debian, демонстрирующий профиль клиента WireGuard с указанием конечной точки сервера, разрешенных IP-адресов и параметра PersistentKeepalive.
Настройте клиент, указав собственный закрытый ключ, открытый ключ сервера, конечную точку, политику маршрутизации и, при необходимости, функцию поддержания соединения (keepalive).

Шаг 7: Запустите WireGuard при загрузке системы.

Сначала запустите nftables, затем включите интерфейс WireGuard:

sudo systemctl enable --now nftables
sudo systemctl enable --now wg-quick@wg0
systemctl is-active nftables
systemctl is-active wg-quick@wg0

wg-quick@wg0В /etc/wireguard/wg0.confруководстве wg-quickподтверждается, что это соглашение об именовании является обычным сокращением для конфигураций, хранящихся в папке /etc/wireguard. Действие: используйте службу, а не пользовательский сценарий загрузки, если у вас нет более сложной архитектуры сетевого менеджера.

В терминале Debian включена служба nftables и wg-quick@wg0, подтверждено, что обе службы активны.
Включите nftables и службу systemd wg-quick@wg0, чтобы VPN автоматически восстанавливался после перезагрузки.

Шаг 8: Проверка подтверждения соединения и обмена данными.

Подключите клиент, затем проверьте сервер:

sudo wg show
ip address show wg0
ping -c 3 10.8.0.2

Как правило, работоспособный узел после прохождения трафика через туннель отображает недавнее рукопожатие и ненулевые счетчики передачи. Если вы настроили полный туннель, проверьте публичный IPv4-адрес клиента с помощью доверенной службы проверки IP-адресов; он должен совпадать с исходящим адресом сервера Debian.

В терминале Debian отображается вывод команды wg show с недавним подтверждением соединения и успешным пингом адреса 10.8.0.2.
Убедитесь, что у партнера произошло недавнее рукопожатие WireGuard, счетчики передач увеличиваются, и адрес клиентского туннеля отвечает.

Распространенные проблемы и что они на самом деле означают.

СимптомВероятная причинаПолезное следующее действие
Без рукопожатияНеверные ключи, конечная точка, UDP-порт, брандмауэр вышестоящего сервера, переадресация портов маршрутизатора или CGNAT.Убедитесь, что UDP-сообщение 51820 достигает хоста Debian, и перепроверьте оба открытых ключа.
Установление соединения работает, но интернета нет.Отсутствует переадресация IPv4, правила переадресации брандмауэра или NAT.Проверьте sysctl net.ipv4.ip_forward, nft list ruleset, и имя исходящего интерфейса.
Можно подключиться к 10.8.0.1, но не к частной локальной сети.У клиента отсутствует маршрут по локальной сети, или у локальной сети отсутствует обратный маршрут.Добавьте подсеть локальной сети к клиентскому приложению AllowedIPsи настройте маршрутизацию или NAT соответствующим образом.
Некоторые сайты зависаютВозможная проблема с path-MTUПеред тем как принудительно устанавливать MTU, протестируйте его с пакетами меньшего размера. wg-quickMTU может быть выбран автоматически, поэтому не устанавливайте значение 1420 только потому, что так указано в другом руководстве.
IPv4 использует VPN, а IPv6 — нет.Маршруты, доступные только для профиля0.0.0.0/0Настройте IPv6 также через WireGuard или намеренно отключите/заблокируйте IPv6 для клиентов, если необходимо избежать утечки IPv6.

Полнопролетный или раздвоенный туннель: что выбрать?

Используйте полный туннель, если цель — защитить трафик в ненадежных сетях Wi-Fi или обеспечить выход интернет-трафика с сервера Debian. Используйте разделенный туннель, если вам нужен только удаленный доступ к серверу, домашней сети, лаборатории или внутреннему приложению, и вы хотите, чтобы обычный интернет-трафик оставался локальным. Выбор в основном зависит от настроек клиента AllowedIPs.

Для небольшого развертывания типа «точка-сайт» приведенной выше конфигурации достаточно для создания поддерживаемой базовой конфигурации: один блок пиров на клиента, уникальные адреса туннелей, управляемые Debian сервисы и nftables для маршрутизации, которая вам действительно необходима. Для более крупных развертываний распределение ключей, жизненный цикл пиров, DNS, ведение журналов и управление конфигурацией становятся операционными проблемами, даже несмотря на то, что сам протокол WireGuard остается простым.

Контрольный список окончательной проверки

  • wg-quick@wg0активен и wg0имеет 10.8.0.1/24.
  • Сервер прослушивает UDP-трафик 51820, и этот порт доступен через любой вышестоящий брандмауэр или маршрутизатор.
  • У каждого клиента своя пара ключей и уникальная /32запись на сервере.
  • net.ipv4.ip_forwardравнозначно, 1когда требуется маршрутизированный доступ.
  • Функция маскировки nftables присутствует для доступа к Интернету через полнотуннельное соединение, если вы намеренно не используете вместо этого маршрутизированные обратные пути.
  • wg showОтображает недавнее рукопожатие после отправки клиентом трафика.
  • Проект клиента AllowedIPsсоответствует предполагаемой конструкции туннеля полного или разделенного типа.

Эти шаги предназначены для Debian 12 и стандартных инструментов WireGuard, доступных в Debian. Топология сети, NAT в вышестоящем узле, облачные брандмауэры, маршрутизация в частной локальной сети и политика IPv6 являются специфичными для каждой среды, поэтому эти параметры нельзя определить только на основе конфигурации WireGuard. Проверяйте каждый параметр отдельно, а не рассматривайте каждую проблему с подключением как сбой WireGuard.

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

Как безопасно восстановить потерянные разделы и данные с жесткого диска

Как безопасно восстановить потерянные разделы и данные с жесткого диска

Узнайте, как восстановить потерянные разделы и файлы с помощью TestDisk и PhotoRec. Защитите исходный диск, проведите безопасное сканирование и сохраните восстановленные данные на другой диск.

Как сканировать QR-коды на настольном компьютере с Linux

Как сканировать QR-коды на настольном компьютере с Linux

Сканируйте QR-коды в Linux с помощью CoBang, используя веб-камеру или файл изображения. См. варианты установки, шаги настройки и решения проблем с доступом к камере Flatpak.

Как изменить настройки веб-камеры в Linux с помощью Cameractrls

Как изменить настройки веб-камеры в Linux с помощью Cameractrls

Изменяйте настройки веб-камеры в Linux с помощью Cameractrls: настраивайте экспозицию, цвет, подавление мерцания и другие поддерживаемые параметры, а затем проверяйте совместимые видеорежимы.

Как установить PhpStorm на Linux: Toolbox, Tar.gz, Snap и AUR

Как установить PhpStorm на Linux: Toolbox, Tar.gz, Snap и AUR

Установите PhpStorm на Linux с помощью JetBrains Toolbox или автономного архива tar.gz, а также через Snap и Arch AUR. Java уже включена в комплект.

Как создать резервную копию CD-ROM в формате ISO в Linux

Как создать резервную копию CD-ROM в формате ISO в Linux

Создайте образ CD-ROM ISO в Linux с помощью GNOME Disks или dd. Определите оптический привод, отслеживайте процесс копирования, проверяйте образ и узнавайте, когда поврежденный диск или аудиодиск требует использования другого инструмента.

Как вырезать изображение в Linux с помощью GIMP

Как вырезать изображение в Linux с помощью GIMP

Удаление фона фотографии в Linux с помощью GIMP: обведите контур объекта, удалите выделенный фон, сохранив прозрачность, и экспортируйте многоразовый PNG-файл.

Как установить Cisco Packet Tracer на Linux

Как установить Cisco Packet Tracer на Linux

Загрузите Cisco Packet Tracer 9.0.1 для Ubuntu 64-бит, установите DEB-пакет с помощью APT, примите лицензионное соглашение в Терминале и войдите в систему, чтобы начать лабораторную работу.

Скачайте FlightGear бесплатно: официальное руководство по установке

Скачайте FlightGear бесплатно: официальное руководство по установке

Скачайте FlightGear бесплатно с официального сайта. Сравните пакеты для Windows, macOS и Linux, установите файлы данных и совершите свой первый полет.

Настольное приложение Google Tasks: как им пользоваться на компьютере

Настольное приложение Google Tasks: как им пользоваться на компьютере

Откройте Google Задачи в браузере, добавьте ярлык Chrome или запустите приложение, и управляйте задачами с указанием даты через Календарь и Gmail.

OKSampler: Бесплатный и простой музыкальный сэмплер для клавишных ритмов.

OKSampler: Бесплатный и простой музыкальный сэмплер для клавишных ритмов.

OKSampler сопоставляет MP3-клипы с клавишами клавиатуры и может зацикливать аудио. Узнайте, что делает эта старая бесплатная программа, на чем заканчиваются ее старые функции и что нужно проверить перед загрузкой.