Главная
» Как сделать
»
Как настроить VPN-соединение WireGuard «точка-сайт» в Debian 12
Как настроить VPN-соединение WireGuard «точка-сайт» в Debian 12
Показательный сценарий: Майя использует VPS на Debian 12 в качестве персональной VPN-точки доступа, когда работает из кафе. Ее ноутбук должен подключаться к VPS через зашифрованный туннель WireGuard и передавать свой интернет-трафик IPv4 через этот сервер. Этот пример не является отчетом о реальном тестировании; приведенные ниже публичные IP-адреса, ключи и вывод терминала являются лишь примерами или иллюстративными макетами.
Данная конфигурация представляет собой VPN типа «точка-сайт»: один клиент подключается к одному серверу. Она использует встроенные инструменты WireGuard из Debian, один пир, переадресацию IPv4 и NAT для IPv4. Предполагается, что VPS имеет публичный или переадресованный IPv4-адрес, его можно администрировать с помощью sudo, и к нему можно получить доступ через UDP-порт 51820. В пошаговом руководстве не рассматривается настройка маршрутизируемого IPv6 или частной сети за VPS.
Сначала спланируйте адреса и подъездные пути.
В примере 10.8.0.0/24для VPN используется сеть 10.8.0.1на сервере и 10.8.0.2на первом клиенте Maya. Используйте подсеть, которая не пересекается с сетями Wi-Fi, офисными или облачными сетями клиента. Коллизия может направить трафик по неправильному маршруту, даже если рукопожатие прошло успешно.
WireGuard использует аутентификацию по открытому ключу. Серверу необходим открытый ключ клиента, а клиенту — открытый ключ сервера; каждый закрытый ключ хранится на устройстве, которому он принадлежит. Документация WireGuard в Debian описывает настройку пакетов и узлов, а краткое руководство WireGuard описывает генерацию ключей и работу функции поддержания соединения. См. документацию WireGuard в Debian и краткое руководство WireGuard .
Настройка сервера Debian 12
1. Установите инструменты.
Обновите индекс пакетов и установите WireGuard и nftables, которые предоставят пример правила маскировки IPv4. Запустите эти команды на VPS:
В Debian WireGuard входит в состав wireguardметапакета и его инструментов. Если сервер уже использует менеджер брандмауэра, такой как UFW, firewalld или правила, управляемые провайдером, определите его активный набор правил, прежде чем что-либо добавлять. Не заменяйте существующую конфигурацию брандмауэра этим примером.
В терминале отображается этап установки пакета; вывод пакета может отличаться в зависимости от состояния зеркала и системы.
2. Найдите общедоступный интерфейс и включите переадресацию.
Уточните в таблице маршрутизации, какой интерфейс использует Debian для доступа к внешнему IPv4-адресу:
ip route get 1.1.1.1
В примере маршрут использует eth0. На вашем VPS может отображаться другое имя, например ens3или enp1s0; используйте имя из вашего собственного вывода в правиле NAT позже. Также обратите внимание на публичный IPv4-адрес сервера или DNS-имя. Если сервер находится за маршрутизатором, перенаправьте UDP-трафик 51820 с этого маршрутизатора на хост Debian.
Для полноценного туннелирования необходима переадресация IPv4. Включите её сейчас, и она сохранится после перезагрузки:
Последняя команда должна вывести сообщение об ошибке net.ipv4.ip_forward = 1. Этот параметр разрешает пересылку пакетов; сам по себе он не открывает брандмауэр и не обеспечивает NAT.
Поиск маршрута определяет интерфейс, используемый для исходящего трафика IPv4, а команда sysctl подтверждает, что пересылка включена.
3. Создайте пару серверного ключа и клиентского ключа.
Создайте ключ сервера на хосте Debian с ограниченными правами доступа к файлам:
sudo install -d -m 700 /etc/wireguard
sudo sh -c 'umask 077; wg genkey > /etc/wireguard/server.key; wg pubkey < /etc/wireguard/server.key > /etc/wireguard/server.pub'
По возможности сгенерируйте пару ключей клиента на клиентском устройстве. На клиентском компьютере под управлением Linux с wireguard-toolsустановленными следующими программами:
umask 077
wg genkey | tee client.key | wg pubkey > client.pub
Для телефона создайте новый туннель в официальном приложении WireGuard и позвольте ему сгенерировать ключи профиля. Скопируйте на сервер только открытый ключ клиента. Держите его client.keyв секрете; никогда не вставляйте его в конфигурацию сервера и не отправляйте в чат. В руководстве Debian Bookwormwg(8) описаны команды клавиш и поля интерфейса.
4. Создайте интерфейс сервера и добавьте удаленный узел.
Создайте /etc/wireguard/wg0.confструктуру, содержащую следующие данные. Замените каждый заглавный символ-заполнитель соответствующим реальным ключом. Прочитайте закрытый ключ сервера локально с помощью команды sudo cat /etc/wireguard/server.key`catch`; поместите открытый ключ клиента в раздел `peer`.
AllowedIPs = 10.8.0.2/32Назначает этому участнику один VPN-адрес и предотвращает его присвоение другим участником. Каждому дополнительному устройству присваивайте свою собственную пару ключей и отдельный адрес, например 10.8.0.3/32, . Не используйте один и тот же профиль клиента на нескольких устройствах, если вам требуется отдельная авторизация или идентификация.
В интерфейсе сервера отображается информация об одном узле с его выделенным туннельным адресом; отображаемая ключевая информация носит исключительно иллюстративный характер.
5. Добавьте NAT для IPv4 и разрешите доступ к порту WireGuard.
Для примера полного туннеля IPv4 исходящие пакеты 10.8.0.0/24должны проходить через общедоступный интерфейс с NAT источника. Добавьте эквивалентное правило в существующую конфигурацию nftables сервера или менеджера брандмауэра. Эта автономная таблица nftables иллюстрирует правило; замените eth0на интерфейс, обнаруженный на шаге 2:
table ip wg_nat {
chain postrouting {
type nat hook postrouting priority srcnat; policy accept;
ip saddr 10.8.0.0/24 oifname "eth0" masquerade
}
}
Если вы используете конфигурацию из Debian nftables.service, объедините таблицу с конфигурацией, которую служба загружает при загрузке, и проверьте весь файл sudo nft -c -f /etc/nftables.confперед его перезагрузкой. Перед применением проверьте, не удаляет ли ваша текущая конфигурация или не заменяет ли существующие правила. NAT сам по себе не отменяет политику пересылки, которая отбрасывает трафик: разрешите пересылку с wg0на WAN-интерфейс и обратный трафик в вашем активном брандмауэре. В nft(8)руководстве Debian описана загрузка правил nftables и операторы NAT.
Как в брандмауэре провайдера VPS, так и в любом брандмауэре хоста разрешите входящий UDP-трафик 51820. Не открывайте TCP-трафик 51820 для этого туннеля WireGuard. Сохраняйте правило доступа SSH при изменении политики брандмауэра и используйте консоль провайдера или другой способ восстановления, если перезагрузка брандмауэра может привести к разрыву соединения.
Правило сопоставляет трафик VPN IPv4, исходящий через выбранный WAN-интерфейс, и применяет маскировку.
Настройте и подключите клиентское устройство.
6. Создайте профиль клиента.
Создайте новый туннель в клиентском приложении WireGuard или сохраните конфигурацию, подобную этой, на клиенте Linux. Замените закрытый ключ, открытый ключ сервера и конечную точку реальными значениями. Приведенный ниже адрес TEST-NET является лишь примером и не позволит установить соединение с реальным сервером.
AllowedIPs = 0.0.0.0/0Маршрутизаторы IPv4 направляют трафик через туннель, поэтому это вариант полного туннеля IPv4. Для узкого разделенного туннеля, достигающего только адреса сервера WireGuard, используйте 10.8.0.0/24вместо этого. Чтобы достичь локальной сети за сервером, укажите фактическую подсеть этой локальной сети в конфигурации клиента AllowedIPs, добавьте обратный маршрут или подходящий NAT и разрешите трафик через брандмауэр сервера; эти шаги зависят от маршрутизатора локальной сети и выходят за рамки данного примера.
PersistentKeepalive = 25Это помогает клиенту за NAT оставаться доступным после периодов бездействия. Это необязательно; в документации WireGuard говорится, что большинству пользователей это не нужно, но указывается, что 25 секунд — это широко полезный интервал, когда сопоставление NAT должно оставаться открытым. Это DNSполе поддерживается некоторыми клиентами и клиентами на основе wg-quick; если ваше приложение игнорирует его, настройте DNS через собственные элементы управления этого приложения.
Профиль клиента направляет трафик IPv4 через сервер; конечная точка TEST-NET является временным, а не рабочим адресом.
7. Запустите туннель и проверьте рукопожатие.
В Debian активация сетевого интерфейса при загрузке выполняется с помощью команды:
sudo systemctl enable --now wg-quick@wg0
sudo wg show
Импортируйте или активируйте профиль клиента после того, как станет доступен UDP-порт 51820. wg showУбедитесь, что ожидаемый пир отображается и latest handshakeобновляется после отправки клиентом трафика. В wg-quick(8)руководстве для Debian Bookworm описан вспомогательный инструмент настройки интерфейса, используемый модулем systemd.
Отсутствие рукопожатия указывает, прежде всего, на недоступность или несоответствие ключей: подтвердите адрес и порт конечной точки, правила брандмауэра UDP, открытый ключ сервера в профиле клиента, открытый ключ клиента wg0.confи правильное системное время. Рукопожатие без работающего трафика обычно указывает на переадресацию, NAT, перекрытие маршрутов или правило цепочки переадресации брандмауэра.
Сервис активирован, и на экране отображается информация о соединении и передаче; значения приведены для наглядности.
8. Проверьте трафик и разберитесь с ограничениями IPv6.
После подключения клиента сначала проверьте адрес туннеля сервера, затем проверьте публичный IPv4-адрес, видимый внешней службой проверки IPv4-адресов:
ping -c 3 10.8.0.1
curl -4 https://ifconfig.me
Если ICMP разрешен, пинг должен достигать сервера. Проверка внешнего IPv4 должна показать публичный исходящий адрес VPS для данной конфигурации полного туннелирования. Если публичный адрес не меняется, проверьте настройки AllowedIPsпереадресации, имя интерфейса NAT и политику переадресации брандмауэра.
Этот пример относится только к IPv4. AllowedIPs = 0.0.0.0/0Он не маршрутизирует IPv6, поэтому клиент с подключением по IPv6 может по-прежнему отправлять трафик IPv6 за пределы туннеля. Не следует описывать эту конфигурацию как полноценный туннель с двойной поддержкой конфиденциальности. Для передачи IPv6 через WireGuard необходимо выделить и маршрутизировать IPv6-адреса для туннеля, включить пересылку IPv6, настроить соответствующие правила брандмауэра и маршрутизации, а также добавить ::/0клиента только после того, как этот путь будет работать от начала до конца. Поддержка провайдеров может различаться. В противном случае, осознанно выбирайте политику разделения туннелей и проверяйте поведение клиента в отношении IPv6.
Активен стандартный профиль VPN-клиента, в котором указаны конечная точка сервера и IP-адрес туннеля; параметры управления различаются в зависимости от приложения.Терминал проверяет исходящий IPv4-адрес и отправляет пинг на WireGuard-адрес сервера; вывод является иллюстративным.
Типичные проблемы и быстрая заключительная проверка.
Без подтверждения соединения: необходимо подтвердить входящий UDP-пакет 51820 на межсетевых экранах провайдера и хоста, публичный IP-адрес или DNS конечной точки, а также открытый ключ каждого из партнеров.
Установление соединения работает, но веб-сайты не загружаются: подтвердите net.ipv4.ip_forward=1, что правило NAT использует фактический исходящий интерфейс, и брандмауэр разрешает переадресованный трафик.
Сбои происходят только в некоторых сетях: проверьте, 10.8.0.0/24не пересекается ли локальная или удаленная сеть. При необходимости перенумеруйте туннель, обновив одновременно и узлы, и правило брандмауэра.
Это работает до тех пор, пока не будет включена опция «Подтвердить перезагрузку wg-quick@wg0» и пока настройки брандмауэра и sysctl не сохранятся в рамках обычной конфигурации системы.
В IPv6 по-прежнему используется локальное соединение: это ожидаемо в данном примере, работающем только с IPv4. Перед тем как полагаться на утверждение о полной конфиденциальности туннеля, настройте и протестируйте маршрут туннеля IPv6.
Перед завершением настройки убедитесь, что служба сервера активна, wg showсообщает о недавнем рукопожатии и увеличении счетчиков передачи, клиент может связаться с сервером 10.8.0.1, а проверка исходящего трафика IPv4 сообщает публичный адрес сервера. Перезагрузите систему только после того, как будут установлены постоянные настройки брандмауэра и переадресации, затем повторите эти проверки. Для дополнительных узлов выдайте отдельные пары ключей и уникальные IP-адреса туннелей, затем удалите устройство, удалив запись о узле и перезагрузив интерфейс.