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

Перманентная настройка сети

Разные варианты (реально много)

systemd-networkd

Отступление: .d-схема хранения конфигурационных файлов.

Настроим IP сервера с выходом в Интернет через стандартную «виртуальную» сеть Virtualboxпо (пример по ссылке выше)

Перечитаем настройки сети и обновим настройки интерфейса

[root@srv ~]# networkctl reload 
[root@srv ~]# networkctl reconfigure eth0
[root@srv ~]# networkctl 
IDX LINK TYPE     OPERATIONAL SETUP     
  1 lo   loopback carrier     unmanaged
  2 eth0 ether    routable    configured
  3 eth1 ether    off         unmanaged
  4 eth2 ether    off         unmanaged
  5 eth3 ether    off         unmanaged

5 links listed.
[root@srv ~]# networkctl 
delete       forcerenew   list         reconfigure  renew        up           
down         label        lldp         reload       status       
[root@srv ~]# networkctl status eth0
* 2: eth0                                                              
             Link File: /lib/systemd/network/99-default.link
          Network File: /etc/systemd/network/50-vbox.network
                  Type: ether
                 State: routable (configured)
          Online state: online                                         
     Alternative Names: enp0s3
                  Path: pci-0000:00:03.0
                Driver: pcnet32
                Vendor: Advanced Micro Devices, Inc. [AMD]
                 Model: 79c970 [PCnet32 LANCE] (PCnet - Fast 79C971)
            HW Address: 08:00:27:89:d2:0f (PCS Systemtechnik GmbH)
                   MTU: 1500 (min: 68, max: 1500)
                 QDisc: fq_codel
  Queue Length (Tx/Rx): 1/1
      Auto negotiation: no
                 Speed: 10Mbps
                Duplex: half
                  Port: tp
               Address: 10.0.2.15
               Gateway: 10.0.2.2
     Activation Policy: up
   Required For Online: yes

Apr 14 18:09:47 srv systemd-networkd[1096]: eth0: Re-configuring with /etc/systemd/network/50-vbox.network
Apr 14 18:09:47 srv systemd-networkd[1096]: eth0: Link UP
Apr 14 18:09:47 srv systemd-networkd[1096]: eth0: Gained carrier
Apr 14 18:09:51 srv systemd-networkd[1096]: eth0: Re-configuring with /etc/systemd/network/50-vbox.network

Эта настройка перманентна — после перезагрузки должна восстановиться.

DNS

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

Решение:

Работа DNS

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

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

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

DNS-серверы:

Настройка DNSMasq как DNS-сервера

Например, Dnsmasq (документация)

Настроим /etc/resolv.conf:

[root@srv ~]# cat /etc/resolv.conf 
search  class.altlinux.org
nameserver 8.8.8.8

Запустим и посмотрим:

[root@srv ~]# systemctl enable --now dnsmasq-simple.service
[root@srv ~]# ss -plut
Netid State  Recv-Q  Send-Q   Local Address:Port     Peer Address:Port Process                            
udp   UNCONN 0       0              0.0.0.0:domain        0.0.0.0:*     users:(("dnsmasq",pid=2087,fd=6)) 
udp   UNCONN 0       0            127.0.0.1:323           0.0.0.0:*     users:(("chronyd",pid=1171,fd=5)) 
tcp   LISTEN 0       32             0.0.0.0:domain        0.0.0.0:*     users:(("dnsmasq",pid=2087,fd=7)) 
tcp   LISTEN 0       128            0.0.0.0:ssh           0.0.0.0:*     users:(("sshd",pid=1224,fd=3))

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

DHCP

TODO /etc/machine-id как идентификатор компьютера

TODO вот такое нашёл в Арче:

[DHCPServer]
PoolOffset=100
PoolSize=20
EmitDNS=yes
DNS=9.9.9.9

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

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

Клиенты:

Настройка DNSMasq как DHCP-сервера

[root@srv ~]# systemctl restart dnsmasq-simple.service 
[root@srv ~]# ss -lup
State   Recv-Q  Send-Q    Local Address:Port       Peer Address:Port  Process                             
UNCONN  0       0               0.0.0.0:domain          0.0.0.0:*      users:(("dnsmasq",pid=2087,fd=6))  
UNCONN  0       0               0.0.0.0:bootps          0.0.0.0:*      users:(("dnsmasq",pid=2087,fd=4))  
UNCONN  0       0             127.0.0.1:323             0.0.0.0:*      users:(("chronyd",pid=1171,fd=5))

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

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

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

[Network]
Address=10.0.2.15/24
Gateway=10.0.2.2
IPForward=ipv4

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

[Network]
Address=10.1.1.1/24
IPMasquerade=ipv4

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

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

Д/З

Новое в образе

Задание 9

  1. Воспроизвести на двух машинах — srv и client — настройки из лекции:

    • «Выход в интернет» с NAT-ом на srv

    • DNS и DHCP сервер на srv

    • Получение настроек по DHCP на client

    • «Работающий интернет» на client

    • Все сетевые настройки делаются перманентными с помощью systemd.networkd

  2. Исправить недостаток: client получает случайный адрес из диапазона

    • Нужно привязать выдачу конкретного адреса к MAC клиента (есть такая настройка у DNSMasq)
  3. Исправить существенный недостаток: в текущей конфигурации в /etc/resolv.conf на srv в качестве сервера прописан 8.8.8.8. DNSMasq работает сервером имён для всех, кроме самого srv ☹.

    • Перенести 8.8.8.8 как адрес сервера для дальнейших рекурсивных запросов в настройку самого DNSMasq (ищем в документации), а в /etc/resolv.conf написать nameserver 127.0.0.1

  4. Остановить и склонировать client (или склонировать чистую машину и настроить всё заново). Назвать клон stranger. Проверить, что stranger:

    • Запускается и получает какой-то IP, route и DNS от srv

    • «Пропихивает» своё имя в DNS, т. е. на любом из трёх хостов (важно, чтобы на srv) команда dig stranger выдаёт его IP

  5. Процесс предварительной настройки в отчёт не входит.

  6. Отчёт:
    1. report 9 srv:

      • grep "" /etc/systemd/network/* — настройки сети

      • cat /etc/resolv.conf — настройки резолвера (должен смотреть на себя)

      • networkctl status | cat — состояние сети

      • grep '^[^#]' /etc/dnsmasq.conf — значимые строки настройки DNSMasq

      • dig stranger — должен показать адрес

    2. report 9 client

      • ping -c1 ya.ru — должен дойти

      • ping -c1 stranger — должен дойти

      • cat /etc/resolv.conf — должен смотреть на srv

      • cat /etc/hosts — этот файл менять не надо

    3. report 9 stranger

      • ping -c1 ya.ru — должен дойти

      • cat /etc/resolv.conf — должен смотреть на srv

      • cat /etc/hosts — этот файл менять не надо

  7. Три отчёта(названия сохранить, должно быть: report.09.srv, report.09.client и report.09.stranger) переслать одним письмом в качестве приложений на uneexlectures@cs.msu.ru

LecturesCMC/LinuxNetwork2022/09_ApplicationSupplemental (последним исправлял пользователь ArsenyMaslennikov 2023-03-28 02:19:16)