Мне надоело, что в своей домашней сети я к ресурсам обращаюсь по IP адресу, почему я до сих пор не поднял локальный DNS — лень или что? Это дело надо поправить тем более что на моем микросервере есть ресурсы. Думаю, 512Mb оперативной памяти будет более чем достаточно, тем более что я все это дело разверну и введу в эксплуатацию на Ubuntu 18.04 Server. В роли сервиса ответственного за DNS у меня будет dnsmasq. С ним я работал, он прост и не требователен.

Поднял VM с осью Ubuntu 18.04 Server на боевом микросервере (HP MicroServer Gen8 (4CPUs x 2,494Ghz, Intel Xeon CPU E3-1265L V2 2.50GHz, RAM 12Gb)) под ESXi 6.0

  • RAM: 512Mb
  • HDD: 50Gb
  • CPU: 1
  • IP: 172.35.35.5 (VLAN 5)

Шаг №1: Активирую для себя что все команды через sudo без запроса повышения прав доступа:

ekzorchik@srv-dns:~$ sudo visudo
ekzorchik ALL=(ALL) NOPASSWD:ALL
ekzorchik@srv-dns:~$ sudo nano /etc/hosts
127.0.0.1       localhost
127.0.1.1       srv-dns
ekzorchik@srv-dns:~$ sudo nano /etc/hostname
srv-dns.polygon.lan

Шаг №2: Отключаю сервис systemd-resolved:

ekzorchik@srv-dns:~$ sudo systemctl disable systemd-resolved
Removed /etc/systemd/system/dbus-org.freedesktop.resolve1.service.
Removed /etc/systemd/system/multi-user.target.wants/systemd-resolved.service.
ekzorchik@srv-dns:~$
ekzorchik@srv-dns:~$ sudo systemctl stop systemd-resolved

Шаг №3: Запрещаю изменение файла /etc/resolv.conf:

ekzorchik@srv-dns:~$ ls -lh /etc/resolv.conf
lrwxrwxrwx 1 root root 39 Apr 29 15:35 /etc/resolv.conf -> ../run/systemd/resolve/stub-resolv.conf
ekzorchik@srv-dns:~$ sudo rm /etc/resolv.conf
ekzorchik@srv-dns:~$ sudo bash -c "echo 'nameserver 127.0.0.1'" | sudo -s tee /etc/resolv.conf
ekzorchik@srv-dns:~$ sudo bash -c "echo 'nameserver 8.8.8.8'" | sudo tee -a /etc/resolv.conf
ekzorchik@srv-dns:~$ cat /etc/resolv.conf
nameserver 127.0.0.1
nameserver 8.8.8.8
ekzorchik@srv-dns:~$
ekzorchik@srv-dns:~$ sudo chattr +i /etc/resolv.conf
ekzorchik@srv-dns:~$ sudo lsattr /etc/resolv.conf
----i---------e--- /etc/resolv.conf
ekzorchik@srv-dns:~$

Шаг №4: Устанавливаю сервис dnsmasq:

ekzorchik@srv-dns:~$ sudo apt-get install -y dnsmasq
ekzorchik@srv-dns:~$ sudo cp /etc/dnsmasq.conf /etc/dnsmasq.conf.backup
ekzorchik@srv-dns:~$ sudo rm /etc/dnsmasq.conf
ekzorchik@srv-dns:~$ sudo nano /etc/dnsmasq.conf
ekzorchik@srv-dns:~$ cat /etc/dnsmasq.conf | grep -v "#\|^$"
strict-order
address=/polygon.lan/172.35.35.5
address=/polygon.lan/127.0.0.1
interface=ens18
listen-address=127.0.0.1,172.35.35.5
#нижеследующий параметр дает возможность редактировать/добавлять в файл /etc/hosts на srv-dns
expand-hosts
domain=polygon.lan
dhcp-option=3,172.33.3.100
#на время отладки можно добавить логирование или на постоянку, но активировать logrotate
#log-queries
#log-facility=/var/log/dnsmasq.log

Шаг №5: Проверяю конфигурацию на ошибки:

ekzorchik@srv-dns:~$ dnsmasq --test
dnsmasq: syntax check OK.
ekzorchik@srv-dns:~$

Шаг №6: Перезапускаю сервис:

ekzorchik@srv-dns:~$ sudo systemctl restart dnsmasq.service

Шаг №7: Проверяю что возвращается при использовании dig,nslookup:

ekzorchik@srv-dns:~$ dig polygon.lan
; <<>> DiG 9.11.3-1ubuntu1.13-Ubuntu <<>> polygon.lan
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 32272
;; flags: qr aa rd ra ad; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0
;; QUESTION SECTION:
;polygon.lan.                         IN      A
;; ANSWER SECTION:
polygon.lan.                 0       IN      A       172.35.35.5
;; Query time: 0 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Fri Sep 18 23:54:44 MSK 2020
;; MSG SIZE  rcvd: 45
ekzorchik@srv-dns:~$ nslookup polygon.lan
Server:                127.0.0.1
Address:   127.0.0.1#53
Name:       polygon.lan
Address: 172.35.35.5

Шаг №8: Создаю записи сопоставления хостов:

ekzorchik@srv-dns:~$ sudo nano /etc/hosts

172.35.35.4     srv-nas

172.35.35.8     srv-wiki

172.35.35.7     srv-fog

172.35.35.6     srv-cloud

На заметку: Если вы добавили записи в /etc/hosts чтобы они применились и стали обслуживаться сервисом dnsmasq, сервис dnsmasq нужно перезапустить:

ekzorchik@srv-dns:~$ sudo systemctl restart dnsmasq

Шаг №9: Теперь нужно обозначить на моем DHCPсервисе, что в роли DNS выступает созданная система srv-dns. У меня DHCP-сервис на Mikrotik RB2011UiAS-2HnD

ekzorchik@navy:~$ winbox - ip&dns:port - user&pass - IP - DHCP Server — вкладка Networks и для сети 172.33.33.0/24 указываю

В настройках DHCP указываю кто в сети является DNS сервисом

  • Address: 172.33.33.0/24 - сеть пользовательских компьютеров
  • Gateway: 172.33.33.100 - адрес Mikrotik'a
  • DNS Server: 172.35.35.5 - адрес системы с поднятым сервисом dnsmasq
  • Domain: polygon.lan  DNS-суффикс
  • Next Server: 172.35.35.7 - это мой FOG Project для автоматизированного развертывания ОС (Windows, Ubuntu систем)
  • Boot File Name: undionly.kpxe -> загрузчик для FOG Project который располагается на FOG Project системе.

После нажимаю Apply - OK, и отключаюсь от своего микротика.

На заметку: По аналогии выше прописываю и для диапозона 172.35.35.0/24

Шаг №10: Проверяю работу DNS в локальной сети, к примеру, с Windows системы: W10X64

Win + R -> cmd.exe

C:\Users\ekzorchik>ipconfig /all

Windows 10 в моей ЛВС получила адрес и вижу настройки DNS

Далее инициирую обращение по короткому имени к файловому серверу srv-nas:

Инициирую обращение к узлу srv-nas по DNS-имени

и через проводник:

И через проводник

Работает.

Также работаю сервисы при обращении через браузер, как по DNS, так и по IP:

  • http://srv-wiki/hg -> Mercurial Web Service
  • http://srv-fog -> FOG Project
  • https://srv-cloud -> OwnCloud 10

Шаг №11: Проверяю работу DNS в локальной сети, к примеру, с Ubuntu 18.04 Server которую я запустил на своем тестовом полигоне под управлением Debian 10 + Proxmox 6:

ekzorchik@navy:~$ ssh -l ekzorchik 172.33.33.103
ekzorchik@srv-bionic:~$ ping srv-wiki
PING srv-wiki.polygon.lan (172.35.35.8) 56(84) bytes of data.
64 bytes from srv-wiki.polygon.lan (172.35.35.8): icmp_seq=1 ttl=63 time=0.553 ms
64 bytes from srv-wiki.polygon.lan (172.35.35.8): icmp_seq=2 ttl=63 time=1.33 ms
^C
--- srv-wiki.polygon.lan ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1001ms
rtt min/avg/max/mdev = 0.553/0.941/1.330/0.389 ms
ekzorchik@srv-bionic:~$ ping srv-fog
PING srv-fog.polygon.lan (172.35.35.7) 56(84) bytes of data.
64 bytes from srv-fog.polygon.lan (172.35.35.7): icmp_seq=1 ttl=63 time=0.540 ms
^C
--- srv-fog.polygon.lan ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.540/0.540/0.540/0.000 ms
ekzorchik@srv-bionic:~$

Работает, сервисы откликаются по DNS-имени

Шаг №12: Если у кого-либо как у меня своей собственный сервис OwnCloud, то чтобы подключаться к нему по DNS имени и FQDN имени в локальной сети нужно поправить конфигурационный файл:

ekzorchik@srv-cloud:~$ sudo nano /var/www/owncloud/config/config.php
'trusted_domains' =>
array (
0 => 'localhost',
1 => '172.35.35.6',
2 => 'srv-cloud.polygon.lan',
3 => 'srv-cloud',
),
ekzorchik@srv-cloud:~$ sudo systemctl restart apache2

и после из локальной сети к нему можно будет обращаться через браузер не только по IP, а и по DNS. То что нужно.

Шаг №13: Теперь также я могу на своей рабочей системе Ubuntu 18.04 Desktop ноутбука Lenovo E555 настроить алиасы на подключение по SSH не по IP, а по DNSимени:

ekzorchik@navy:~$ nano ~/.bashrc
alias srv-wiki='sshpass -p <password> ssh -o "StrictHostKeyChecking no" ekzorchik@srv-wiki -p 22'
alias srv-nas='sshpass -p <password> ssh -o "StrictHostKeyChecking no" ekzorchik@srv-nas -p 22'
alias srv-cloud='sshpass -p <password> ssh -o "StrictHostKeyChecking no" ekzorchik@srv-cloud -p 22'
alias srv-mon='sshpass -p <password> ssh -o "StrictHostKeyChecking no" ekzorchik@srv-mon -p 22'
alias srv-proxmox='sshpass -p <password> ssh -o "StrictHostKeyChecking no" ekzorchik@srv-proxmox -p 22'
alias srv-fog='sshpass -p <password> ssh -o "StrictHostKeyChecking no" ekzorchik@srv-fog -p 22'

Шаг №14: Если dnsmasq сервис будет не запущен, ресурсы по DNSимени не откроются, а только по IP. Это очень важный момент:

ekzorchik@srv-dns:~$ sudo systemctl stop dnsmasq
ekzorchik@srv-wiki:~$ ping mail.ru
ping: mail.ru: Temporary failure in name resolution
ekzorchik@srv-wiki:~$ ping 8.8.8.8
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_seq=1 ttl=109 time=20.6 ms

Итого вот так я провожу свободное время, оптимизирую с учетом своих задумок свою локальную сеть и набираюсь навыков. Исходя из всего проработанного и задокумментированного я получил наработку как в локальной сети поднять DNS-сервис и на Ubuntu 18.04 Server. На этом у меня пока все, если что-то в процессе эксплуатации будет, то это обязательно найдет свое отражение в заметках моих блогов. Только реальный практический материал. С уважением, автор блога Олло Александр aka ekzorchik.