Рейтинг:0

Как перенаправить DNS-запрос на удаленный systemd-resolved?

флаг ve

Я пытался разрешить систему как удаленный сервер кэширования DNS (я знаю, что он не предназначен для этого). Я добавил измененный net.ipv4.conf.br0.route_localnet на 1 и добавил следующие правила nftable:

IP-адрес таблицы {
    предварительная маршрутизация цепи {
        введите приоритет предварительной маршрутизации nat hook 100; политика принять;
        iif "br0" udp dport 53 счетчик пакетов 6 байт 366 dnat на 127.0.0.53
    }

    посттрассировка цепи {
        type nat hook приоритет постмаршрутизации -100; политика принять;
        ip saddr 127.0.0.53 oif "br0" счетчик пакетов 0 байт 0 snat на 192.168.1.2
    }
}

Правило предварительной маршрутизации работает, так как есть пакеты, соответствующие правилам. Однако нет пакета из хоста, в чем проблема?

Как я могу перенаправить DNS-запрос с 192.168.1.0/24 на systemd-resolved, размещенный на устройстве lo 192.168.1.2 с IP-адресом 127.0.0.53?

Рейтинг:1
флаг cl
A.B

systemd-разрешение привязывается к вот интерфейс:

# ss -aunp src == 127.0.0.53 спорт == 53
Состояние Recv-Q Send-Q Локальный адрес:Порт Адрес равноправного узла:Порт 
UNCONN 0 0 127.0.0.53%lo:53 0.0.0.0:* пользователи:(("systemd-resolve",pid=44157,fd=17))

Это ограничивает доступные маршруты даже один раз net.ipv4.conf.br0.route_localnet=1 применяется к тем, которые установлены на вот интерфейс:

$ ip -4 route show table all dev lo
широковещательная передача 127.0.0.0 таблица локальная прото область ядра ссылка src 127.0.0.1 
локальная таблица 127.0.0.0/8 локальная прото-область ядра host src 127.0.0.1 
локальная таблица 127.0.0.1 локальная прото-область ядра host src 127.0.0.1 
широковещательная рассылка 127.255.255.255 таблица локальная прото область ядра ссылка src 127.0.0.1 

Ни один не будет соответствовать.

Адрес источника должен быть изменен. В то время как редко используется введите nat hook input цепочка позволила бы изменить исходный адрес до того, как приложение его получило, уже слишком поздно: это происходит после того, как маршрутизация была сделана, а пакет уже отброшен. Таким образом, NAT с отслеживанием состояния не может справиться с этим случаем.


Вместо этого для этого можно использовать прокси (после удаления всех конкретных настроек nat). Вот пример использования сокат. сокат не являясь специализированным приложением, есть оговорки, особенно для UDP.

  • Обработка TCP (OP забыл, что DNS тоже использует TCP)

    socat TCP4-LISTEN:53,bind=192.168.1.2,reuseaddr,fork TCP4:127.0.0.53:53
    

    Не могу привязать к IN_ADDR_ANY потому что 127.0.0.53:53 уже привязан, поэтому привяжите к указанному адресу OP (по неправильным причинам): 192.168.1.2. Помимо этого, это довольно просто.

  • UDP-обработка

    socat -T 20 UDP4-LISTEN:53,bind=192.168.1.2,reuseaddr,fork UDP4:127.0.0.53:53
    

    Тайм-аут 20 сек здесь, потому что сокат нельзя сказать, чтобы он остановился сразу после получения ответа на один пакет UDP, и все разветвленные пакеты будут сохранены. сокат команды накапливаются со временем.

    Хотя в этом случае UDP не обязательно привязываться к адресу, привязка к адресу с использованием UDP позволяет избежать предостережения, связанного с множественной адресацией и необходимостью использования IP_PKTINFO вариант сокета.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.