Прикладной уровень: что нужно для полноценной работы?
DNS
Проблема адресации vs. именование:
- человеческая: как запомнить произвольный IP
- топологическая: IP-адрес согласован с топологией/маршрутизацией в сети, а имя должно зависеть от его хозяина
- административная: у большого хозяина много совсем разных адресов, и наоборот, два похожих адреса могут принадлежать разным хозяевам
Вариант решения: /etc/hosts
- Например:
[root@srv ~]# cat /etc/hosts ::1 localhost 2a00:f480:8:4f0::1 srv.class.altlinux.org srv 2a00:f480:8:4f0::2 client.class.altlinux.org client
- Локальный анонс соответствия собственного имени IP-адресу
Масштабируемое решение: DNS
Домены и поддомены. Корневые серверы DNS
- Эскалация до корневого сервера и дескалация до прямого ответственного за домен
- Ограничение на рекурсивные запросы (только своим клиентам, например)
Прямое и обратное преобразование
Использование dig: -t и -x
- DNS как иерархическая БД:
Типы записей (SOA, A, AAAA, NS, MX, PTR, CNAME, SRV, TXT) Типы_ресурсных_записей_DNS
- В TXT можно хранить что угодно (base64 чего угодно как минимум)
Более того, во всей базе можно хранить что угодно: см. со слайда 7
- DNS сервер авторитетен только за содержимое собственного домена:
- Имена → IP-адреса (в рамках домена)
- IP-адреса → имена (в рамках делегированного диапазона адресов)
- Могут не совпадать / не иметь обратного резолвинга
- Топологическая природа поддомена обратного резолвинга:
[root@srv ~]# dig -x 2a00:f480::3 | sed -n '/ANSWER SECTION:/,/^$/p' ;; ANSWER SECTION: 3.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.8.4.f.0.0.a.2.ip6.arpa. 7037 IN PTR cmc.msu.net.
- Адреса DNS-серверов всех прямых поддоменов
- Неавторитетное кеширование и авторитетное дублирование как ускоритель
Кеширующие DNS-резолверы
TODO: явный комментарий про необходимость в локальном списке кеширующих серверов?
Статическая таблица резолвинга: /etc/resolv.conf
API Входит в glibc, т .е. есть почти всегда
проблема динамической перегенерации; resolvconf
Множественные пространства имён и /etc/nsswitch.conf
Динамическая таблица резолвинга и systemd-resolved
resolved может работать мелким кеширующим DNS-ретранслятором (например, он слушает на IPv4-адресе 127.0.0.53:53)
- обновление статической таблицы
[DNS-сервер|DNS-серверы]]:
BIND (эти ребята, Internet Systems Consortium, содержат корневой сервер F), M тоже работает на bind9.
NSD (а эти — три сервера, K, H и L)
KNOT (B, пополам с bind)
Dnsmasq (он же и DHCP), см. лекцию 2022 года)
Настройка systemd-resolved как мелкого DNS-сервера
Вообще-то systemd-resolved предназначен для отслеживания пространств имён. Но его можно заставить работать DNS-сервером!
[root@srv ~]# grep "^[^#]" /etc/systemd/resolved.conf [Resolve] DNSStubListenerExtra=2001:db8:0:b::2 # systemctl enable --now systemd-resolved … # resolvectl …
Умеет ходить в /etc/hosts
Умеет рассказывать нужную информацию systemd-networkd (разберёмся дальше)
enable --now — это одновременно и старт сервиса, и пометка о его постоянном старте при будущих загрузках
Вариант настройки /etc/systemd/resolved.conf (был в лекции), при котором resolved работает почти совсем настоящим DNS-сервером:
… DNSStubListener = False DNSStubListenerExtra = :: …
Поведение по умолчанию — слушать только на 127.0.0.53:53 — надо отключить, иначе на нуль-адрес нельзя забиндиться
Всё, что мы напишем в /etc/hosts, можно опросить у DNS:
Можно попробовать dig srv.class.altlinux.org @::1 — должно заработать.
Автоматическая настройка адресов на клиенте
Настройка маршрутизатора systemd-networkd
В сообщениях RA можно указывать опции RDNSS и DNSSL — соответственно адрес резолвера и search domains.
TODO: проверить
# /etc/systemd/network/55-prefix-downstream.network [Match] Name=eth2 # куда будут уходить RA [Network] IPv6SendRA=yes # It is expected that the host is acting as a router. So, usually it is not # necessary to receive Router Advertisement from other hosts in the downstream network. IPv6AcceptRA=no [IPv6SendRA] DNS=_link_local # указать наш LL-адрес на интерфейсе, по которому уйдёт RA [IPv6Prefix] Prefix=2001:db8:b:cc::/64 # Значения флагов по умолчанию: #OnLink=yes #AddressAutoconfiguration=yes
Настройка клиента systemd-networkd
TODO
Анонсирование служб
Multicast DNS — произвольное преобразование имён
- Порт 5353
DNS Service Discovery — анонс и обнаружение сервисов
DNS rfc2782: _service._proto.name TTL class SRV priority weight port target
dig -t srv _imaps._tcp.gmail.com
resolvectl service _imaps._tcp gmail.com
- mDNS и т. п.
systemd-resolved умеет в DNS-SD
libnss-resolve для nsswitch
- Приложения напрямую идут к systemd-resolved по IPC
- Заменяет сразу кучу классических модулей, в т. ч. mdns
Avahi
- активируем сервис
avahi-browse и avahi-publish
Пример: /etc/avahi/services/ssh.service
- Проблема семантики анонсов
libnss-mdns для nsswitch
Посмотреть tcpdump анонса
Д/З
TODO