Как направить DNS-запрос на другой сервер для отдельного диапазона IP при помощи iptables?
Не могу сделать ping по имени ПК (который находится в сети на 1-2 уровня выше).
Как можно добавить ещё один конкретный DNS сервер только для диапазона IP 192.168.5.x?
Или только для доменов из одного слова (имя пк)?. Вообщем чтобы запросы на сайты так и остались на 8.8.8.8 , а запросы на Vasya-PC - слались на 192.168.0.6 например?
не надо разделять, все DNS-запросы отправляете на 192.168.0.6. То, что он может ответить самостоятельно (Vasya-PC) - отвечает. Что не может - 192.168.0.6 перенаправляет (forward) на 8.8.8.8, получает ответ и отдаёт этот ответ клиенту.
hint000, если бы всё было так банально - я бы не уточнял что нужно указать днс для конкретного диапазона.
Немного обрисую обстановку чтобы было понятно что и зачем.
Работаю в офисе, получаю интернет по кабелю как и другие сотрудники.
Притащил из дома роутер, чтобы раздать себе вайфай. Ну и попутно рекламу порезать через adblock и впн поднять... короче игрушка на OpenWRT.
Но перестал работать сетевой принтер который на ПК другого сотрудника.
На WAN интерфейсе ручками прописан DNS 8.8.8.8 (нужно для ВПН и Adblock)
Поэтому мне и надо как-то выделить запросы из моей мини-сети 192.168.1.х на сеть фирмы 192.168.0.х и направить их на DNS фирмы 192.168.0.6.
Пробовал server=/.domain.local/192.168.0.6 - не помогает почему-то.
По IP - связь есть, но там динамика, поэтому принтер нужно по имени подключить. Вот так как-то
chifth, возможно, что имя ПК с принтером резолвится вообще не через DNS, а через NetBIOS. В таком случае затея бесполезна, и надо решать в другом направлении.
Смотрите, если в пути к принтеру указано просто Vasya-PC без имени домена, то 90% это NetBIOS-имя.
Если же там Vasya-PC.roga-i-kopyta.local, тогда ~100% это резолв через DNS.
chifth,
1) Принцип ДНС клиента. Опрашивает первый ДНС, если не находит запись запрашивает второй ДНС.
2) по поводу hint000,
iptables -A FORWARD -i eth0 -o eth1 -j ACCEPT
iptables -A FORWARD -i eth1 -o eth0 -j ACCEPT
Упрощена - разрешить форвардинг между eth0 и eth1, но как бы сеть не положить )))
и/или
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -d 192.168.0.0/24 -j MASQUERADE
Но это по умолчанию уже должно работать...
FORWARD тоже по-умолчанию, если бы он был запрещён, то маршрутизация вовсе бы не работала (бывает ещё router-on-a-stick, но это не наш случай). Но главная проблема вот в чём. NetBIOS может резолвить через WINS, а может через широковещательный (broadcast) траффик. Вот как раз бродкасты не ходят через маршрутизатор. Это по-определению, маршрутизатор разделяет широковещательные домены. chifth, проверьте (без роутера), не получает ли ваш ПК по DHCP адрес WINS, потому что это могло бы разом решить проблему, достаточно будет прописать этот WINS статически.
hint000, ну да ...
OpenWRT превращать в умный хаб если несколько интерфейсов:
eth0 и eth1 (ПК другого сотрудника) - это Хаб - тогда на них будет сеть 192.168.0.0/24
А на eth3 вешать 192.168.1.0/24 и настраивать MASQUERADE
Александр, тут и ещё одна сложность. Теоретически можно было бы прописать на ПК два адреса из разных подсетей. Чтобы слать broadcast'ы в 192.168.0.0/24, а в интернет ходить через 192.168.1.0/24 и свой роутер. Но мешает то, что в 192.168.0.0/24 адреса раздаёт DHCP. А винда не умеет в пределах одного сетевого адаптера комбинировать DHCP и статический адрес.
Простой вариант: воткнуть в ПК дополнительный сетевой адаптер (можно даже USB), на одном статика 192.168.1.0/24 и шлюз по-умолчанию, на другом родной корпоративный DHCP в сети 192.168.0.0/24.
Вариант посложнее: не добавлять сетевушку, а организовать туннель до своего роутера. Маршрут по-умолчанию задать через туннель, а в сеть 192.168.0.0/24 останется доступ мимо туннеля.
вы в DNS запрашиваете не IP, а FQDN, вот от этого и надо плясать.
если вы хотите мир резолвить через 8.8.8.8 а pc.somedomainname.ru через 192.168.0.6 то без разбора самих запросов dns это не сделать.
Можно конечно сделать правило в iptables которое будет для пакетов на 53 порт искать слово "somedomainname" и делать DNAT в нужное место, но лучше завести свой DNS сервер и настроить forward зоны в соответствии с вашими нуждами.
вполне подойдут dnsmasq или coredns
Но вообще мало входных данных, если это все ваши сети, то почему не сделать DNS сервер с ddns via dhcp или прописать все нужные записи самому.
Все как обычно ...
1. Ну, пожалуйста, поставьте в сети кеширующий ДНС сервер )))
Тогда все компьютеры в сети будут запрашивать его. На нем можно прописать соответствие IP-Name, иначе по имени пинг не работает. Исключение, на компе в hosts прописывать имена.
2. Сложность с подсетями.
ДНС сервер должен быть доступен во всех сетях одновременно. Следовательно:
а) в каждой подсети ставить ДНС сервер, где и прописывать соответствие имен.
б) ставить ДНС сервер на комп с несколькими сетевыми интерфейсами. Каждый интерфейс в свою подсеть.
в) строить подсеть общую с другими подсетями и в ней устанавливать ДНС сервер
3. И добавьте - маршрутизацию пакетов через iptables уже по IP-адресам