Настройка локального DNS на роутере под управлением FreeBSD

Мой домашний роутер (обычный бытовой за $100) меня окончательно утомил. Что я только с ним ни делал, но счастье осталось недостижимым. И DD-WRT я на него ставил, и QoS крутить пытался, да все никак.
То utorrent сеть положит, то youtube еле тащится на 360p, я уж молчу о HD. Так что в конце концов бешенство победило лень и я решил из старого компа сделать себе - по плану, работающий — роутер.
Старый роутер был низведен до роли WiFi точки доступа.

Я несколько раз уже пожалел об этом опрометчивом решении, но отступать некуда. Видите ли, с FreeBSD, linux и прочими юниксами я знаком очень мало, и это сказывается.
Кстати, почему именно FreeBSD? Потому что для нее существует отличный мануал для чайников вроде меня: FreeBSD Handbook. Вот я его читаю, пробую что-то сделать,
по пути наступаю на всевозможные грабли и пытаюсь их разрулить, потирая шишки на мозолистом лбу.

Ну, по крайней мере, с youtube у меня проблем больше нет

Помимо всего прочего, я хотел настроить себе локальный сервер DNS, по двум причинам. Во-первых, пусть кэширует - какое-никакое, а ускорение. А во-вторых, хочу иметь локальные имена для своих компов и девайсов.
Конечно, можно hosts по сети править, но это решение далеко от элегантности, да и не везде hosts доступен к изменению (iOS к примеру). Так что хочу. Но если первый вопрос в handbook описывается, то о втором — ни слова.
Курение мануалов и интернетов привело меня к следующему решению.

Включаю BIND, он же named

# ee /etc/rc.conf

named_enable="YES"

Правлю конфиг

named должен слушать только локальный интерфейс, ну и, разумеется, 127.0.0.1. Наружу имена не отдаю.

#ee /etc/namedb/named.conf

// 192.168.0.1 - адрес роутера на внутренней сетевой карте
listen-on       { 127.0.0.1; 192.168.0.1;};

Форвард на DNS провайдера и на Google — на тот случай, если DNS провайдера ляжет.

forwarders {
        193.17.208.254; 8.8.8.8; 8.8.4.4;
};
 
// оставил закомментаренным
//      forward only;

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

zone "local." IN {
        type master;
        file "/etc/namedb/master/local-forward.db";
};
 
// если внутрисетевые адреса не 192.168.0.XXX, то поменять соответственно
zone "0.168.192.in-addr.arpa" IN {
        type master;
        file "/etc/namedb/master/local-reverse.db";
};

Настраиваю forward
Назначение имен IP адресам.

# ee /etc/namedb/master/local-forward.db

$TTL 3600       ; hour default TTL
local.  IN      SOA myrouter.local. nobody.local. (
                    2013080901  ; serial
                    1080        ; refresh after 3 hours
                    3600        ; retry after 1 hour
                    604800      ; expire after 1 week
                    300 )       ; negative respose TTL
 
; DNS Server
        IN      NS      myrouter.local.
 
; origin (local.) address
                IN      A       192.168.0.1
 
; Machine names
localhost       IN      A       127.0.0.1
myrouter        IN      A       192.168.0.1
fileserver      IN      A       192.168.0.101

Имена добавляются в конец, сколько нужно.
Настраиваю reverse

Обратно — из IP адресов в имена. Реверс желательно настраивать во избежание проблем с некоторыми прикладными протоколами.

$TTL 3600
 
0.168.192.in-addr.arpa. IN      SOA local. nobody.local. (
                                        2013080901
                                        10800
                                        3600
                                        604800
                                        300 )
 
        IN      NS      myrouter.local.
 
1       IN      PTR     myrouter.local.
101     IN      PTR     fileserver.local.

Прописываю resolv.conf

Я на наружный сетевой интерфейс прописываю статический IP. Если вам нужно получать конфигурацию по DHCP от провайдера или вообще через VPN, то resolv.conf просто так менять не получится, т.к. тот же DHCP клиент resolv.conf перезаписывает. Так что курите интернеты на тему resolvconf.

ee /etc/resolv.conf

search local
nameserver 127.0.0.1

Настраиваю DHCP
Установка и настройка DHCP сервера описана в Handbook, не буду повторяться. Приведу только свой конфиг.

#ee /usr/local/etc/dhcpd.conf

# префикс для доменных имен
option domain-name "local";
 
# роутер как DNS сервер
option domain-name-servers 192.168.0.1;
 
# Динамические IP - в первую очередь для гостей
# со своими ноутами/планшетами/телефонами
# мои девайсы у меня все с выделенными IP
subnet 192.168.0.0 netmask 255.255.255.0 {
  range 192.168.0.110 192.168.0.250;
  option routers 192.168.0.1;
}
 
# выделяю фиксированный IP адрес по MAC адресу
host fileserver {
  hardware ethernet AA:BB:CC:DD:EE:FF;
  # вместо IP адреса использую доменное имя, dhcpd резолв сделает
  fixed-address fileserver;
}
 

 

Коментувати

Простий текст

  • Не дозволено жодних HTML теґів.
  • Рядки й абзаци переносяться автоматично.
  • Адреси вебсторінок та адреси електронної пошти автоматично перетворюються у посилання.