%20%D1%81%20%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5%D0%BC%20DNS%20%D0%B2%20%D1%81%D0%B5%D1%82%D0%B8%20%D0%B4%D1%80%D1%83%D0%B3%D0%BE%D0%B3%D0%BE%20%D0%B8%D0%BD%D1%82%D0%B5%D1%80%D1%84%D0%B5%D0%B9%D1%81%D0%B0%20(VPN).png)
Чего я пытаюсь добиться:
У меня установлена обратная 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
Существуют различные аспекты устранения этой проблемы.
- добавление правил IP для корректной маршрутизации
- тестирование разрешения имени
- отключение/настройка решена
шаг за шагом:
Первый шаг — проверить, можно ли достичь 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
В вашу систему были внесены следующие изменения:
- DNS-запросы (порт назначения 53) маршрутизируются через другой интерфейс
- Функция «Resolved» отключена, разрешение DNS-имен выполняется напрямую на DNS-сервере.
- DNS-сервер настроен на IP-адрес piHole
Дайте мне знать, если это сработает.