У меня есть шлюз Linux с двумя глобальными сетями, каждый из которых подключен к разному провайдеру, каждый провайдер имеет свой собственный DNS-сервер, а локальные пользователи подключаются к Интернету через этот сервер [он также служит прокси-сервером].
Вопрос в том, можно ли указать, какой DNS сервер [или прокси-сервер, который я использую Squid] будет использовать на основе исходного IP-адреса локального пользователя?
Вы можете использовать их все одинаково не настоящие IP для DNS-сервера и маршрут к право DNS согласно выбранной WAN.
Не знаю, как вы определяете, как будет выходить трафик (какой из двух ваших интернет-провайдеров ...), но я предполагаю, что у вас есть две сетевые карты WAN, назовем их eth0 и eth1.
Предположим, ваш поддельный IP-адрес DNS - 1.2.3.4, «правильный» DNS для eth0 - 2.2.2.2, а «правильный» DNS для eth1 - 3.3.3.3.
Я считаю, что это поможет:
iptables -t nat -I POSTROUTING -o eth0 -d 1.2.3.4 -j DNAT --to-destination 2.2.2.2
iptables -t nat -I POSTROUTING -o eth1 -d 1.2.3.4 -j DNAT --to-destination 3.3.3.3
Да, вы можете сделать это с помощью представлений и пересылки в привязке, на эти два вопроса есть ответ (или что-то близкое к нему):
Я не уверен, как это будет работать на практике, хотя NAT половина ваших клиентов к одному провайдеру и половина к другому?
Один из способов - использовать DHCP. DHCP управляет конфигурацией сети клиента и может включать в себя конфигурацию преобразователя DNS. С помощью DHCP вы можете указать, что определенной сети, определенному диапазону или определенным хостам будет предоставлена определенная конфигурация сети, которая также может включать, какие DNS-серверы они будут использовать.
В этом случае узлы в сети A могут быть настроены в области DHCP для использования DNS-сервера B, а затем узлы в сети Y могут быть настроены в области DHCP для использования DNS-сервера Z.