Резервное использование реле в Wireguard при отсутствии прямого соединения

Вопрос или проблема

У меня есть три соединенные машины: настольный компьютер, ноутбук и небольшой публичный сервер. Настольный компьютер и ноутбук обычно находятся в NAT-сетях, в то время как сервер имеет статический IP с общедоступными портами. Указав только сервер (10.0.14.0/24) на обеих машинах, они могут подключаться и пинговать друг друга (10.0.14.100/32 и 10.0.14.101/32 соответственно) через него. Однако я хочу, чтобы ноутбук и настольный компьютер подключались непосредственно через LAN, если они оба в одной и той же локальной сети, по очевидным причинам производительности.

Я уже попробовал добавить дополнительную запись Peer на ноутбуке и настольном компьютере, информируя их друг о друге, используя их фиксированные частные IP-адреса при нахождении в LAN. Однако это предотвращает действие общего правила 10.0.14.0/24.

Как я могу сделать так, чтобы ноутбук и настольный компьютер подключались с использованием прямого подключения, указанного через Endpoint, когда это возможно, но в противном случае использовали более общий сервер?

Небольшой публичный сервер будет функционировать в качестве “Bounce Server

Согласно разделу “Как Wireguard маршрутизирует пакеты” из “Некоторой неофициальной документации WireGuard“, настройка конкретного маршрута непосредственно к хосту (например, 10.0.14.100/32) и более общего маршрута (например, 10.0.14.0/24) должна позволять хостам подключаться друг к другу напрямую и в случае необходимости возвращаться к маршрутизации через bounce-сервер:

Более конкретные (также обычно более прямые) маршруты, предоставляемые другими пирами, будут иметь приоритет, когда они доступны, в противном случае трафик будет возвращаться к наименее специфичному маршруту

Ответ или решение

Конфигурация соединения через WireGuard может быть изменчива, особенно если вы хотите, чтобы устройства подключались напрямую друг к другу в случае, когда они находятся в одной сети локальной, и при этом имели fallback через публичный сервер, когда это необходимо. Давайте разберемся, как можно решить эту задачу с учетом предоставленного контекста и желательной конфигурации сети.

Контекст и проблема

У вас есть три устройства: настольный компьютер, ноутбук и маленький публичный сервер. Рабочая станция и ноутбук чаще всего находятся за NAT, тогда как сервер имеет статический IP-адрес, предоставляя доступность через порты. Вы хотите, чтобы рабочая станция и ноутбук напрямую соединялись, когда они находятся в одной сети локальной, и использовали сервер как промежуточное звено в других случаях.

Решение

WireGuard изначально направлен на использование простых конфигураций одноранговых узлов, где более специфичные маршруты имеют приоритет перед менее специфичными. Вот как можно настроить вашу конфигурацию:

  1. Настройка локальных соединений:

    • Для ноутбука: добавьте конфигурацию однорангового узла для рабочего стола, используя его локальный IP-адрес (например, 192.168.1.10/32).
    • Для рабочего стола: добавьте конфигурацию однорангового узла для ноутбука, используя его локальный IP-адрес (например, 192.168.1.11/32).
  2. Конфигурация через публичный сервер (Bounce Server):

    • Для ноутбука и рабочего стола добавьте менее специфичный маршрут через сервер, используя адреса в формате 10.0.14.0/24.
  3. Приоритет маршрутизации:

    • Конфигурация маршрутизации WireGuard автоматически заключает, что более специфичные маршруты имеют приоритет. Поэтому, если локальные адреса доступны, трафик будет направляться напрямую. В противном случае, он будет направлен через публичный сервер.

Пример конфигурации

Для рабочего стола:

[Peer]
PublicKey = <Публичный ключ ноутбука>
AllowedIPs = 192.168.1.11/32
Endpoint = <Локальный IP ноутбука>:<порт>

[Peer]
PublicKey = <Публичный ключ сервера>
AllowedIPs = 10.0.14.0/24
Endpoint = <публичный IP сервера>:<порт>

Для ноутбука:

[Peer]
PublicKey = <Публичный ключ рабочего стола>
AllowedIPs = 192.168.1.10/32
Endpoint = <Локальный IP рабочего стола>:<порт>

[Peer]
PublicKey = <Публичный ключ сервера>
AllowedIPs = 10.0.14.0/24
Endpoint = <публичный IP сервера>:<порт>

Заключение

Эта настройка предусматривает автоматическое переключение между прямым соединением и fallback через публичный сервер в зависимости от доступности маршрута. Такой подход позволяет эффективно управлять ресурсами и улучшать производительность коммуникаций, сохраняя простоту архитектуры сети.

Эта информация поможет создать надежное и гибкое решение для ваших сетевых потребностей с использованием WireGuard.

Оцените материал
Добавить комментарий

Капча загружается...