Каталог Поиск 0 Сравнить 0 Закладки 0 Корзина Войти
Каталог
105082, Москва, ул. Фридриха Энгельса, 75с21, БЦ Бауманский ИТКОЛ
Пн - Пт: с 09-00 до 18-00 Сб: с 10-00 до 18-00 Вс: выходной
Страницы: 1
RSS
DNS domain forward + wireguard client / interface, UniFi Network
 
У меня есть доступ к сети клиента через WireGuard-клиент. И маршруты на основе политик, которые направляют их IP-диапазон (эх, вот бы просто указать подсеть) на соответствующий VPN-интерфейс. Источник для этих маршрутов пока настроен на все устройства. Я могу пинговать и подключаться ко всем необходимым IP-адресам в удаленной сети, проблема в том, что я не могу настроить перенаправление DNS клиента на их DNS-сервер, чтобы я мог использовать DNS-записи, а не сначала искать их, например, с помощью: nslookup app.local.client.co 10.100.10.15. DNS вроде бы предоставляет то, что мне нужно, но при создании записи с типом "Перенаправление домена" для перенаправления local.client.co на сервер 10.100.10.15 я пробовал настроить статические маршруты, чтобы убедиться, что пакеты маршрутизируются правильно, но это не сработало. Я также пробовал маршрутизировать определенный домен, например app.local.client.co, используя похожий метод, но результат тот же. Кто-нибудь сталкивался с подобной проблемой?
 
Отлично, рад, что ты нашёл решение. Да, я тоже считаю, что установка на перезагрузку — безопасно.
 
Окей, решил проблему. Похоже, что внутри UDM не используются статические маршруты, политики и прочее. В итоге пришлось настроить скрипт для добавления маршрутов на уровне UDM через ssh. Проверю, нужно ли интегрировать это в постоянное хранилище или запускать при включении, а также какие изменения конфигурации могут сломать интеграцию. (Кстати, я выяснил, что мой VPN-туннель, о котором я говорил, назывался wgclt1 (я узнал это, выполнив команду `ip a`), у тебя может быть другой).

#!/usr/bin/env bash
# Пример: добавление маршрута 10.100.0.0/24 через 10.100.20.1 через wgclt1 с отдельной таблицей

DEV="wgclt1"
TABLE_ID=200
TABLE_NAME="wgclt"
PEER="10.100.20.1"
NET="10.100.0.0/24"

# 1) Зарегистрировать пользовательскую таблицу (если она еще не создана)
grep -qE "^${TABLE_ID}\s+${TABLE_NAME}$" /etc/iproute2/rt_tables \
  || echo "${TABLE_ID} ${TABLE_NAME}" | sudo tee -a /etc/iproute2/rt_tables

# 2) Заполнить таблицу
ip route add ${PEER}/32 dev ${DEV} table ${TABLE_NAME}
ip route add ${NET} via ${PEER} dev ${DEV} table ${TABLE_NAME}

# 3) Правила политики, чтобы направлять совпадающий трафик в нее
ip rule add to ${PEER}/32 lookup ${TABLE_NAME} priority 100
ip rule add to ${NET} lookup ${TABLE_NAME} priority 200

# 4) Очистить кеш маршрутов, чтобы изменения вступили в силу немедленно
ip route flush cache

echo "✔ Маршрутизация для ${NET} через ${PEER} на ${DEV} (таблица ${TABLE_NAME}) применена."

Это исправление не выживает перезагрузку, поэтому ты можешь настроить загрузочный скрипт udm (ссылка на github), чтобы правила добавлялись при запуске. Теперь DNS-переадресация работает как ожидалось. Я могу пинговать app.local.client.co из любой точки моей сети, и DNS-переадресация будет обрабатываться UDM. Как приятный бонус, теперь я могу подключаться и использовать удаленную подсеть через VPN без настройки policy-routing, кажется, вышеуказанных шагов достаточно для маршрутизации трафика по мере необходимости.
 
Спасибо, @Alex7021, думаю, путаница в том, что VPN я использую в моём случае для создания одностороннего туннеля от площадки к площадке, с дополнительным бонусом в виде корректной переадресации удалённого DNS. Я не хочу запускать WireGuard локально на своей рабочей станции по нескольким причинам, наиболее важная из которых заключается в том, что у меня есть несколько IoT-устройств, которые сами по себе не поддерживают WireGuard, но им нужно подключаться к сети клиента. Как есть, данные передаются между сетями. Я могу пинговать, подключаться и использовать удалённые устройства в сети клиента, но мне приходится использовать IP-адреса, а не записи DNS. Это в основном проблема, потому что я не хочу поддерживать отдельный набор конфигурационных файлов в зависимости от местоположения устройства (в моём офисе во время разработки/тестирования или в офисе клиента). Я могу пинговать, подключаться и использовать DNS-сервер клиента, пока я передаю его как параметр в `nslookup`. Я предполагаю, что мой UDM может делать то же самое, поскольку трафик, о котором идёт речь, проходит через него, прежде чем будет инкапсулирован в VPN-туннеле. Я по сути хочу добавить NS-запись для `local.client.co` в мой внутренний DNS-сервер (что-то, что UniFi называет переадресацией домена) с указателем на 10.100.10.15 (пример IP). В идеале, когда UDM видит запрос на `app.local.client.co`, он должен обнаружить, что должен переадресовать этот запрос внутренне на 10.100.10.15, связаться с этим сервером через статические/политические маршруты по существующему VPN-соединению и вернуть результаты. Проблема в том, что я не могу заставить переадресацию домена работать и не уверен, какие логи, если вообще какие-то, я могу проверить, чтобы узнать, что идёт не так во время поиска.
 
Так вот, клиентская ОС не использует 10.100.10.15 в качестве DNS, как указано в файле *.conf. У меня тоже похожая настройка, но с некоторыми отличиями. Я использую сертификат Let's Encrypt (так как у меня есть домен), загруженный на мой UCG MAX, который выступает в роли WireGuard-сервера. Мои сервисы работают через Docker на NAS, а на UCG я просто добавил DNS-записи (типа A) в Policy Engine > DNS, указывающие все поддомены на IP-адрес NGINX Proxy Manager, который работает на том же NAS. Я не изменял файл .conf WireGuard вручную. Когда я подключаюсь, например, со смартфона, я ввожу поддомен как subdomain.mydomain.com и могу получить доступ к сервису без проблем. Я не понимаю, чего не хватает в твоей конфигурации, чтобы внутренняя DNS работала так, как тебе хотелось бы. Надеюсь, кто-нибудь сможет прояснить ситуацию для нас.
 
Моя конфигурация выглядит почти идентично вашему примеру, включая записи DNS и все остальное. Единственное отличие – отсутствие параметра PersistentKeepalive. Мои тесты показывают, что DNS-сервер 10.100.10.15 принимает и отвечает VPN-клиентам, так как я могу выполнить nslookup и получить результаты прямо на моей рабочей станции, которая использует VPN-маршрут через policy-based route на UDM.

Проблема в том, что даже с записью DNS для перенаправления поиска домена на 10.100.10.15, я не могу получить те же результаты, что и при выполнении nslookup с указанием DNS-сервера.
 
Если у вас не так много клиентов, которым нужно подключиться, вы можете попробовать изменить файл *.conf следующим образом:

[Interface]
PrivateKey = <private_key>
Address = 10.6.0.2/32
DNS = 10.100.10.15

[Peers]
PublicKey = <server_public_key>
Endpoint = vpn.example.com:51820
AllowedIPs = 10.100.0.0/16
PersistentKeepalive = 25

Убедитесь, что IP-адрес DNS-сервера включен в AllowedIPs в конфигурации пира, как в примере.

Проверьте, что ваш брандмауэр или ACL DNS-сервера позволяют запросы из VPN-подсети (например, 10.6.0.0/24).

Должно сработать. Пробовать не стоит ни копейки.
Страницы: 1
Читают тему (гостей: 1)