Прикладной уровень: что нужно для полноценной работы?

Повторение: «Настройка выхода в интернет»:

[root@srv ~]# cat /etc/systemd/network/20-default.network
[Match]
Name = eth0

[Network]
DHCP = ipv4
IPForward=yes

Отличие от других DHCP-клиентов — собственное мнение:

[root@srv ~]# tcpdump -nvi eth0 port bootps &
[root@srv ~]# systemctl restart systemd-networkd
          Client-IP 10.0.2.15
          Your-IP 10.0.2.15
          Server-IP 10.0.2.4
          Client-Ethernet-Address 08:00:27:31:20:d4
          file "srv.pxe"
          Vendor-rfc1048 Extensions
            Magic Cookie 0x63825363
            DHCP-Message Option 53, length 1: ACK
            Subnet-Mask Option 1, length 4: 255.255.255.0
            Default-Gateway Option 3, length 4: 10.0.2.2
            Domain-Name-Server Option 6, length 8: 192.168.100.1,192.168.100.1
            Domain-Name Option 15, length 1: "."
            Lease-Time Option 51, length 4: 86400
            Server-ID Option 54, length 4: 10.0.2.2

[root@srv ~]# ip r
default via 10.0.2.2 dev eth0 proto dhcp src 10.0.2.15 metric 1024 
10.0.2.0/24 dev eth0 proto kernel scope link src 10.0.2.15 metric 1024 
10.0.2.2 dev eth0 proto dhcp scope link src 10.0.2.15 metric 1024 
192.168.100.1 via 10.0.2.2 dev eth0 proto dhcp src 10.0.2.15 metric 1024

DNS

Проблема адресации vs. именование:

Решение:

Работа DNS

Статическая таблица резолвинга /etc/resolv.conf

Множественные пространства имён и /etc/nsswitch.conf

Динамическая таблица резолвинга и systemd-resolved

DNS-серверы: Крупные (обслуживают корневые DNS-сервера)

Мелкие:

Настройка systemd-resolved как мелкого DNS-сервера

Вообще-то systemd-resolved предназначен для отслеживания пространств имён. Но его можно заставить работать DNS-сервером!

Всё, что мы напишем в /etc/hosts, можно опросить у DNS:

DHCP

Предварительно: Самонастройка IPv4 (rfc3927) (169.254.*.* AKA Link-local_address)

DHCP (его предшественник — более старый протокол BOOTP) — настройка IP по MAC-адресу

Основные реализации серверов:

Реализации помельче:

Клиенты:

DHCP-сервер systemd-networkd

Предварительно: /etc/machine-id как идентификатор компьютера; systemd-machine-id-setup. Чисто теоретически это «число зверя» не обязательно для работы DHCP, но оно хорошо работает, как уникальный, хотя и не значащий ничего идентификатор.

Достаточные для простой сети функции DHCP-сервера есть в systemd-networkd:

[root@srv ~]# cat /etc/systemd/network/50-intnet.network 
[Match]
Name = eth1

[Network]
Address = 10.1.1.2/24
DHCPServer = yes

[DHCPServer]
PoolOffset = 10
PoolSize = 5
DNS = 10.1.1.2

Настройка DHCP-клиента networkd

Более «взрослые» DHCP и DNS сервера умеют динамически обновлять зону, ответственную, за адреса, раздаваемые по DHCP:

Настройка пересылки пакетов и NAT

[root@srv ~]# systemctl enable --now nftables.service
[root@srv ~]# cat /etc/systemd/network/60-intnet.network 
[Network]
IPMasquerade=ipv4
[root@srv ~]# networkctl reload

И немного ужасов:

[root@srv ~]# nft -a list table ip io.systemd.nat

Анонсирование служб

Avahi

Zeroconf и Avahi

(не успеем) RPC, сетевые файловые системы и т. д.

Проблема: динамическое выделение входных портов (собственно, RPC).

В образе не запущен.

…А также службы уведомлений, журнализации, чёрта в ступе…

Д/З

Образ обновлён:

Задание 9

LecturesCMC/LinuxNetwork2024/09_ApplicationSupplemental (последним исправлял пользователь FrBrGeorge 2024-04-20 11:16:18)