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 вариант сокета.