Хорошо, моя ситуация в основном такова ... У меня есть коробка, которая действует как маршрутизатор, с двумя интерфейсами, eth0
и eth1
. eth1
это мой исходящий канал, то есть это интерфейс, через который устройство получает подключение к Интернету. eth0
- это нисходящий канал, то есть интерфейс, через который будет подключено другое устройство / коммутатор / беспроводная точка доступа / то, что у вас есть.
Я хочу каким-то образом с помощью iptables сделать так, чтобы все запросы на порт 53 с любого адреса, исходящие из eth0
вместо этого следует отправить на DNS-сервер, работающий на 127.0.0.1
, и когда этот DNS-сервер отправляет ответ, машина, отправившая запрос, должна иметь вид, будто ответ пришел с адреса, на который они фактически отправили пакет.
Например, скажем, есть машина, подключенная к eth0
настроен на использование 8.8.8.8
в качестве DNS-сервера. DNS-сервер машины маршрутизации имеет запись для example.com
указывая на 192.0.2.1
. Кто-то на машине подключен к eth0
бежит dig example.com @8.8.8.8
. Они получают ответ, который, по-видимому, исходит от 8.8.8.8
, но ДЕЙСТВИТЕЛЬНО пришло из окна маршрутизации, и в этом ответе говорится, что запись A для example.com 192.0.2.1
.
Как я могу это сделать?
Обратите внимание, что это должно работать для ЛЮБОГО адреса DNS-сервера, а не только для 8.8.8.8
.
Для этого вам нужно специальное программное обеспечение, и это считается Злом. Взлом Интернета путем проведения атаки типа «злоумышленник в середине» на трафик DNS - это именно то, почему развертываются такие вещи, как DNSSec.
Если вы намерены поискать, вы можете проверить результаты для «Перехват DNS» и «Прозрачный DNS-прокси». На ум приходят брандмауэры Barracuda, dnschef
, и, возможно, множество наборов веб-фильтрации предлагают эту функцию.