Разрешение запроса одного интерфейса (wlan0) с использованием DNS в сети другого интерфейса (VPN)

Разрешение запроса одного интерфейса (wlan0) с использованием DNS в сети другого интерфейса (VPN)

Чего я пытаюсь добиться:

У меня установлена ​​обратная VPN-сеть WireGuard, которая не маршрутизирует мой трафик, но позволяет мне подключаться к моему Raspberry Pi из Интернета, используя публичный сервер в качестве «моста».

Я установил pihole на raspberry pi. Теперь я хочу использовать pi как DNS (через WireGuard) при отправке фактического HTTP-запроса с моего фактического устройства.

По сути, я хочу, чтобы это работало следующим образом:

192.168.0.x (wlan0@localhost) запрашивает URL. DNS @192.168.66.z (pihole) разрешает URL и отправляет IP обратно на 192.168.66.y (wg0@localhost). Затем этот ответ используется для отправки HTTP-запроса с 192.168.0.x (wlan0@localhost).

Что я пробовал:

Очевидно, я попытался ввести VPN-IP pi в NetworkManager. Это вызвало у меня головную боль, так как мой Ubuntu ( 5.4.0-42-generic #46~18.04.1-Ubuntu) всегда возвращался к своему DNS по умолчанию (чего я не хотел, даже если VPN DNS работал). Я нашел обходной путь, предоставленный user2427436наТАК что тема здесь.

В чем проблема:

Хотя я могу принудительно использовать DNS (без возврата к маршрутизаторам/DNS по умолчанию), я не могу использовать pihole в качестве DNS. Я могу подключиться к pi через туннель (например, HTTP, SSH,..), и порт 53 (для DNS) открыт в брандмауэре. Я по-прежнему не могу разрешить ни одного доменного имени. Кроме того, проверка journalctl -xeна pi не показывает никаких намеков на то, что устройство пыталось подключиться/разрешить.

Я бы очень хотел понять, почему это не работает и как это должно работать. Мне кажется, что я что-то упускаю из виду в работе DNS.

Какой файл журнала будет правильным для проверки? Есть ли у вас какие-либо предложения, что мне следует попробовать дальше?

РЕДАКТИРОВАТЬ:

DNS настраивается для каждого сетевого устройства. Знает ли мое устройство wlan0 @192.168.0.0\24 об устройстве wg0 и его адресном пространстве @192.168.66.0\24? Может ли это быть причиной проблемы, что я пытаюсь разрешить запрос от wlan0 с помощью DNS через wg0? Если да, то как мне решить эту проблему?

решение1

Существуют различные аспекты устранения этой проблемы.

  1. добавление правил IP для корректной маршрутизации
  2. тестирование разрешения имени
  3. отключение/настройка решена

шаг за шагом:

Первый шаг — проверить, можно ли достичь Pi. Нужно проверить, через какой интерфейс проходит маршрутизация. Можно использовать следующие тесты:

traceroute -i <interface name> -p 53 192.168.66.z

замените на интерфейсы, доступные в системе. Ожидаемый результат: traceroute будет работать через интерфейс wg0, но, предположительно, не через другие.

Тот же тест можно провести, используя исходный IP-адрес:

traceroute -s <sourceIP> -p 53 192.168.66.z

замените на локальный IP на вашем локальном хосте. Ожидаемый результат: traceroute предположительно будет работать с IP-адресом wg0, но не с IP-адресом любого другого интерфейса.

Если два вышеперечисленных действия не работают ни с одним интерфейсом или адресом, то часть маршрутизации на вашем публичном «мосте» неисправна.

Предполагая, что первый шаг сработал как ожидалось, следующим шагом будет указание ОС направлять трафик для DNS-запросов через правильный интерфейс. Замените на имя интерфейса, который обеспечивает рабочий маршрут к вашему pihole на предыдущем шаге.

создайте новую таблицу маршрутизации для DNS-запросов, например, «dns», и сообщите ОС, чтобы она направляла все DNS-запросы (порт назначения 53) через другой интерфейс

echo "10 dns" >>/etc/iproute2/rt_tables
ip rule add pref 10 dport 53 table dns
ip route add default via 192.168.66.z dev <DNSInterface> table dns
ip route flush cache

Сначала проверьте, работает ли разрешение DNS, указав адрес Pihole явно:

nslookup www.serverfault.com 192.168.66.z

Ожидаемый результат: DNS-запрос проходит успешно. Если нет, вам нужно дважды проверить интерфейсы и IP-адреса выше, а также правила маршрутизации на VPS.

Последнее, что нам нужно сделать, это обработать resolve. Я предлагаю отключить resolve и использовать pihole DNS напрямую:

systemctl stop systemd-resolved
systemctl disable systemd-resolved.service
mv /etc/resolv.conf /etc/resolv.conf.securitycopy

добавлять

dns=default

под [main]в/etc/NetworkManager/NetworkManager.conf

systemctl restart NetworkManager

Измените IP-адрес DNS-сервера в свойствах сетевого интерфейса на адрес pihole.

Тестовое разрешение DNS:

nslookup www.serverfault.com

В вашу систему были внесены следующие изменения:

  1. DNS-запросы (порт назначения 53) маршрутизируются через другой интерфейс
  2. Функция «Resolved» отключена, разрешение DNS-имен выполняется напрямую на DNS-сервере.
  3. DNS-сервер настроен на IP-адрес piHole

Дайте мне знать, если это сработает.

Связанный контент