109.2 Урок 1
Сертифікат: |
LPIC-1 |
---|---|
Версія: |
5.0 |
Розділ: |
109 Основи мережних технологій |
Тема: |
109.2 Постійна конфігурація мережі |
Урок: |
1 з 2 |
Вступ
У будь-якій мережі TCP/IP кожен вузол повинен налаштувати свій мережний адаптер відповідно до вимог мережі, інакше вони не зможуть спілкуватися один з одним. Тому системний адміністратор повинен надати базову конфігурацію, щоб операційна система могла налаштувати відповідний мережний інтерфейс, а також ідентифікувати себе та основні функції мережі під час кожного завантаження.
Мережні налаштування не залежать від операційних систем, але в останніх є власні методи зберігання та застосування цих налаштувань. Системи Linux покладаються на конфігурації, що зберігаються у звичайних текстових файлах у каталозі /etc
, для підключення до мережі під час завантаження. Варто знати, як ці файли використовуються, щоб уникнути втрати з’єднання через локальну неправильну конфігурацію.
Мережний інтерфейс
Мережний інтерфейс — це термін, за яким операційна система позначає канал зв’язку, налаштований для роботи з мережним обладнанням, під’єднаним до системи, наприклад пристроєм Ethernet або Wi-Fi. Винятком є інтерфейс loopback, який операційна система використовує, коли їй потрібно встановити з’єднання з собою, але головна мета мережевого інтерфейсу — забезпечити маршрут, через який можна надсилати локальні дані та отримувати віддалені дані. Якщо мережний інтерфейс не налаштовано належним чином, операційна система не зможе спілкуватися з іншими машинами в мережі.
У більшості випадків правильні параметри інтерфейсу визначаються за замовчуванням або налаштовуються під час встановлення операційної системи. Тим не менш, ці параметри часто потрібно перевірити або навіть змінити, коли зв’язок не працює належним чином або коли поведінка інтерфейсу вимагає налаштування.
Є багато команд Linux для переліку мережних інтерфейсів, присутніх у системі, але не всі вони доступні у всіх дистрибутивах. Однак команда ip
є частиною базового набору мережних інструментів, що входить до складу всіх дистрибутивів Linux, і може використовуватися для переліку мережних інтерфейсів. Повна команда для відображення інтерфейсів – ip link show
:
$ ip link show 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 2: enp3s5: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP mode DEFAULT group default qlen 1000 link/ether 00:16:3e:8d:2b:5b brd ff:ff:ff:ff:ff:ff
Якщо доступно, також можна використати команду nmcli device
:
$ nmcli device DEVICE TYPE STATE CONNECTION enp3s5 ethernet connected Gigabit Powerline Adapter lo loopback unmanaged --
Команди, наведені в прикладах, не змінюють жодних налаштувань системи, тому їх може виконувати непривілейований користувач. Обидві команди містять два мережні інтерфейси: lo
(інтерфейс петлі) і enp3s5
(інтерфейс Ethernet).
Настільні комп’ютери та ноутбуки під керуванням Linux зазвичай мають два або три попередньо визначених мережні інтерфейси, один для віртуального інтерфейсу зворотного зв’язку, а інші призначені мережному обладнанню, знайденому системою. З іншого боку, сервери та мережні пристрої під керуванням Linux можуть мати десятки мережних інтерфейсів, але до всіх них застосовуються однакові принципи. Абстракція, яку забезпечує операційна система, дозволяє налаштовувати мережні інтерфейси за допомогою тих самих методів, незалежно від апаратного забезпечення, що лежить в основі.
Однак знання деталей базового апаратного забезпечення інтерфейсу може бути корисним для кращого розуміння того, що відбувається, коли зв’язок не працює належним чином. У системі, де доступно багато мережних інтерфейсів, не може бути очевидним, який із них відповідає, наприклад, Wi-Fi, а який — Ethernet. З цієї причини Linux використовує угоду про найменування інтерфейсу, яка допомагає визначити, який мережний інтерфейс відповідає якому пристрою та порту.
Назви інтерфейсів
Старі дистрибутиви Linux називали мережні інтерфейси Ethernet як eth0
, eth1
тощо, пронумеровані відповідно до порядку, в якому ядро ідентифікує пристрої. Бездротові інтерфейси отримали назви wlan0
, wlan1
тощо. Ця угода про найменування, однак, не пояснює, який конкретно порт Ethernet відповідає, наприклад, інтерфейсу eth0
. Залежно від того, як апаратне забезпечення було виявлено, можна було навіть поміняти імена двох мережних інтерфейсів після перезавантаження.
Щоб подолати цю неоднозначність, нові системи Linux використовують попередню угоду про іменування мережних інтерфейсів, створюючи більш тісний зв’язок між іменем інтерфейсу та підключенням базового апаратного забезпечення.
У дистрибутивах Linux, які використовують схему іменування systemd, усі назви інтерфейсів починаються з двозначного префікса, який позначає тип інтерфейсу:
en
-
Ethernet
ib
-
InfiniBand
sl
-
IP-адреса послідовної лінії (slip)
wl
-
Бездротова локальна мережа (WLAN)
ww
-
Бездротова глобальна мережа (WWAN)
Від вищого до нижчого пріоритету операційна система використовує такі правила для іменування та нумерації мережних інтерфейсів:
-
Називає інтерфейс за індексом, наданим BIOS або мікропрограмою вбудованих пристроїв, наприклад,
eno1
. -
Називає інтерфейс за індексом слота PCI Express, як надано BIOS або мікропрограмою, наприклад,
ens1
. -
Називає інтерфейс за його адресою на відповідній шині, наприклад,
enp3s5
. -
Називає інтерфейс за MAC-адресою інтерфейсу, наприклад,
enx78e7d1ea46da
. -
Називає інтерфейс, використовуючи встановлену угоду, наприклад,
eth0
.
Правильно припустити, наприклад, що мережний інтерфейс enp3s5
був названий так, оскільки він не відповідав першим двом методам іменування, тому замість нього використовувалася його адреса у відповідній шині та слоті. Адреса пристрою 03:05.0
, знайдена у виведенні команди lspci
, показує асоційований пристрій:
$ lspci | fgrep Ethernet 03:05.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL-8110SC/8169SC Gigabit Ethernet (rev 10)
Мережні інтерфейси створюються самим ядром Linux, але є багато команд, які можна використовувати для взаємодії з ними. Зазвичай конфігурація встановлюється автоматично, і немає необхідності змінювати налаштування вручну. Тим не менш, за допомогою назви інтерфейсу можна вказати ядру, як продовжувати його налаштування, якщо це необхідно.
Управління інтерфейсом
Протягом багатьох років було розроблено декілька програм для взаємодії з мережними функціями, які надає ядро Linux. Хоча стару команду ifconfig все ще можна використовувати для виконання простих конфігурацій інтерфейсу та запитів, тепер вона застаріла через обмежену підтримку інтерфейсів, відмінних від Ethernet. Команду ifconfig було замінено командою ip, яка здатна керувати багатьма іншими аспектами інтерфейсів TCP/IP, такими як маршрути та тунелі.
Численні можливості команди ip
можуть бути надмірними для більшості звичайних завдань, тому існують допоміжні команди для полегшення активації та налаштування мережних інтерфейсів. Команди ifup
і ifdown
можна використовувати для налаштування мережних інтерфейсів на основі визначень інтерфейсів, зазначених у файлі /etc/network/interfaces
. Хоча їх можна викликати вручну, зазвичай ці команди виконуються автоматично під час завантаження системи.
Усі мережні інтерфейси, якими керують ifup
і ifdown
, мають бути зазначені у файлі /etc/network/interfaces
. Формат, який використовується у файлі, є простим: рядки, що починаються зі слова auto
, використовуються для визначення фізичних інтерфейсів, які мають бути викликані, коли ifup
виконується з опцією -a
. Назва інтерфейсу має слідувати за словом auto
у тому самому рядку. Усі інтерфейси, позначені як auto
, відкриваються під час завантаження в тому порядку, у якому вони вказані.
Warning
|
Методи конфігурації мережі, які використовуються |
Фактична конфігурація інтерфейсу записується в іншому рядку, починаючи зі слова iface
, за яким іде назва інтерфейсу, назва сімейства адрес, яку використовує інтерфейс, і назва методу, що використовується для налаштування інтерфейсу. У наступному прикладі показано базовий файл конфігурації для інтерфейсів lo
(loopback) і enp3s5
:
auto lo iface lo inet loopback auto enp3s5 iface enp3s5 inet dhcp
Сімейство адрес має бути inet
для мереж TCP/IP, але є також підтримка мереж IPX (ipx
) і мереж IPv6 (inet6
). Інтерфейси петлі використовують метод конфігурації loopback
. За допомогою методу dhcp
інтерфейс використовуватиме параметри IP, надані сервером DHCP мережі. Параметри з прикладу конфігурації дозволяють виконувати команду ifup
, використовуючи назву інтерфейсу enp3s5
як аргумент:
# ifup enp3s5 Internet Systems Consortium DHCP Client 4.4.1 Copyright 2004-2018 Internet Systems Consortium. All rights reserved. For info, please visit https://www.isc.org/software/dhcp/ Listening on LPF/enp3s5/00:16:3e:8d:2b:5b Sending on LPF/enp3s5/00:16:3e:8d:2b:5b Sending on Socket/fallback DHCPDISCOVER on enp3s5 to 255.255.255.255 port 67 interval 4 DHCPOFFER of 10.90.170.158 from 10.90.170.1 DHCPREQUEST for 10.90.170.158 on enp3s5 to 255.255.255.255 port 67 DHCPACK of 10.90.170.158 from 10.90.170.1 bound to 10.90.170.158 -- renewal in 1616 seconds.
У цьому прикладі для інтерфейсу enp3s5
обрано метод dhcp
, тому команда ifup
викликала клієнтську програму DHCP для отримання налаштувань IP від сервера DHCP. Так само команду ifdown enp3s5
можна використати для вимкнення інтерфейсу.
У мережах без DHCP-сервера замість цього можна використовувати метод static
, а параметри IP-адреси можна вказати вручну в /etc/network/interfaces
. Наприклад:
iface enp3s5 inet static address 192.168.1.2/24 gateway 192.168.1.1
Інтерфейси, які використовують метод static
, не потребують відповідної директиви auto
, оскільки вони викликаються кожного разу, коли виявляється мережне обладнання.
Якщо той самий інтерфейс має більше одного запису iface
, тоді всі налаштовані адреси та параметри будуть застосовані під час виклику цього інтерфейсу. Це корисно для налаштування адрес IPv4 і IPv6 на одному інтерфейсі, а також для налаштування кількох адрес одного типу на одному інтерфейсі.
Локальні та віддалені імена
Працююче налаштування TCP/IP – це лише перший крок до повної зручності використання мережі. На додаток до можливості ідентифікувати вузли в мережі за їхніми IP-номерами, система повинна мати можливість ідентифікувати їх за іменами, легшими для розуміння людиною.
Ім’я, за яким система ідентифікує себе, можна настроїти, і це гарна практика визначати його, навіть якщо машина не призначена для приєднання до мережі. Локальна назва часто збігається з мережевою назвою машини, але це не завжди так. Якщо файл /etc/hostname
існує, операційна система використовуватиме вміст першого рядка як своє локальне ім’я, яке згодом називатиметься просто hostname. Рядки, що починаються з #
всередині /etc/hostname
, ігноруються.
Файл /etc/hostname
можна редагувати безпосередньо, але ім’я хоста машини також можна визначити за допомогою команди hostnamectl
. Якщо надати підкоманду set-hostname
, команда hostnamectl
візьме надану назву як аргумент і запише її в /etc/hostname
:
# hostnamectl set-hostname storage # cat /etc/hostname storage
Ім’я хоста, визначене в /etc/hostname
, є статичним ім’ям хоста, тобто ім’ям, яке використовується для ініціалізації імені хоста системи під час завантаження. Статичне ім’я хоста може бути рядком довільної форми довжиною до 64 символів. Проте рекомендується, щоб він складався лише з символів нижнього регістру ASCII і без пробілів чи крапок. Він також має обмежуватися форматом, дозволеним для міток доменних імен DNS, навіть якщо це не сувора вимога.
Команда hostnamectl
може встановити ще два типи імен хостів на додаток до статичного імені хоста:
- Правильне ім’я хоста
-
На відміну від статичного імені хоста, правильне ім’я хоста може включати всі види спеціальних символів. Його можна використовувати для встановлення більш описової назви для машини, наприклад, “LAN Shared Storage”:
# hostnamectl --pretty set-hostname "LAN Shared Storage"
- Тимчасове ім’я хоста
-
Використовується, коли статичне ім’я хоста не встановлено або якщо це ім’я локального хоста за умовчанням. Тимчасове ім’я хоста – це зазвичай ім’я, встановлене разом з іншими автоматичними конфігураціями, але його також можна змінити за допомогою команди
hostnamectl
, наприклад.# hostnamectl --transient set-hostname generic-host
Якщо параметри --pretty
і --transient
не використовуються, тоді для всіх трьох типів імен хостів буде встановлено вказане ім’я. Щоб установити статичне ім’я хоста, але не правильні та тимчасові імена, натомість слід використовувати опцію --static
. У всіх випадках лише статичне ім’я хоста зберігається у файлі /etc/hostname
. Команда hostnamectl
також може бути використана для відображення різних описових та ідентифікаційних бітів інформації про запущену систему:
$ hostnamectl status Static hostname: storage Pretty hostname: LAN Shared Storage Transient hostname: generic-host Icon name: computer-server Chassis: server Machine ID: d91962a957f749bbaf16da3c9c86e093 Boot ID: 8c11dcab9c3d4f5aa53f4f4e8fdc6318 Operating System: Debian GNU/Linux 10 (buster) Kernel: Linux 4.19.0-8-amd64 Architecture: x86-64
Це типова дія команди hostnamectl
, тому підкоманду status
можна опустити.
Що стосується імен віддалених мережних вузлів, існує два основних способи, які операційна система може застосувати для відповідності імен і IP-номерів: використовувати локальне джерело або використовувати віддалений сервер для перекладу імен в IP-номера і навпаки. Методи можуть доповнювати один одного, а їхній порядок пріоритетів визначається у файлі конфігурації Name Service Switch: /etc/nsswitch.conf
. Цей файл використовується системою та програмами для визначення не лише джерел збігів IP-імен, але й джерел, з яких можна отримати інформацію про службу імен у ряді категорій, які називаються базами даних.
База даних hosts відстежує відображення між іменами хостів і їх номерами. Рядок усередині /etc/nsswitch.conf
, що починається з hosts
, визначає служби, відповідальні за надання асоціацій для нього:
hosts: files dns
У цьому прикладі запису files
і dns
— це імена служб, які визначають, як працюватиме процес пошуку імен хостів. Спочатку система шукатиме збіги в локальних файлах, а потім запитуватиме збіги у служби DNS.
Локальний файл для бази даних хостів – це /etc/hosts
, простий текстовий файл, який пов’язує IP-адреси з іменами хостів, по одному рядку на IP-адресу, наприклад:
127.0.0.1 localhost
IP-номер 127.0.0.1 є адресою за замовчуванням для інтерфейсу зворотного зв’язку, отже, він асоціюється з іменем localhost.
Також можна прив’язати додаткові псевдоніми до однієї IP-адреси. Псевдоніми можуть забезпечувати альтернативне написання, коротші імена хостів і їх слід додавати в кінці рядка, наприклад:
192.168.1.10 foo.mydomain.org foo
Правила форматування файлу /etc/hosts
:
-
Поля запису розділені будь-якою кількістю пробілів і/або символів табуляції.
-
Текст від символу
#
до кінця рядка є коментарем і ігнорується. -
Імена хостів можуть містити лише буквено-цифрові символи, знаки мінус і крапки.
-
Імена хостів повинні починатися з букви і закінчуватися буквено-цифровим символом.
IPv6-адреси також можна додати до /etc/hosts
. Наступний запис стосується loopback IPv6-адреси:
::1 localhost ip6-localhost ip6-loopback
Після специфікації служби files
специфікація dns
повідомляє системі запитати службу DNS про потрібну асоціацію імені/IP. Набір процедур, відповідальних за цей метод, називається резолвер, а його конфігураційний файл – /etc/resolv.conf
. У наступному прикладі показано загальний файл /etc/resolv.conf
, який містить записи для загальнодоступних DNS-серверів Google:
nameserver 8.8.4.4 nameserver 8.8.8.8
Як показано в прикладі, ключове слово nameserver
вказує на IP-адресу DNS-сервера. Потрібен лише один сервер імен, але можна надати до трьох серверів імен. Додаткові будуть використані як запасні. Якщо немає записів сервера імен, використовується сервер імен за замовчуванням на локальній машині.
Резолвер можна налаштувати на автоматичне додавання домену до імен перед зверненням до них на сервері імен. Наприклад:
nameserver 8.8.4.4 nameserver 8.8.8.8 domain mydomain.org search mydomain.net mydomain.com
Запис domain
встановлює mydomain.org
як локальне доменне ім’я, тому для запитів імен у межах цього домену буде дозволено використовувати короткі назви відносно локального домену. Запис search
має подібну мету, але він приймає список доменів, які слід спробувати, коли надається коротке ім’я. За замовчуванням він містить лише ім’я локального домену.
Вправи до посібника
-
За допомогою яких команд можна вивести список наявних у системі мережних адаптерів?
-
Який тип мережного адаптера з назвою інтерфейсу
wlo1
? -
Яку роль відіграє файл
/etc/network/interfaces
під час завантаження? -
Який запис у
/etc/network/interfaces
налаштовує інтерфейсeno1
для отримання його параметрів IP за допомогою DHCP?
Дослідницькі вправи
-
Як за допомогою команди
hostnamectl
змінити лише статичне ім’я хоста локальної машини наfirewall
? -
Які деталі, крім імен хостів, можна змінити командою
hostnamectl
? -
Який запис у
/etc/hosts
пов’язує іменаfirewall
іrouter
з IP-адресою10.8.0.1
? -
Як можна змінити файл
/etc/resolv.conf
, щоб надсилати всі запити DNS до1.1.1.1
?
Підсумки
Цей урок розповідає про те, як вносити постійні зміни в конфігурацію локальної мережі за допомогою стандартних файлів і команд Linux. Linux очікує, що налаштування TCP/IP будуть у певних місцях, і може знадобитися змінити їх, якщо параметри за замовчуванням не підходять. На уроці розглядаються такі теми:
-
Як Linux ідентифікує мережні інтерфейси.
-
Активація інтерфейсу під час завантаження та базова IP-конфігурація.
-
Як операційна система пов’язує імена з хостами.
Розглянуті концепції, команди та процедури:
-
Правила іменування інтерфейсу.
-
Перелік мережних інтерфейсів за допомогою
ip
іnmcli
. -
Активація інтерфейсу за допомогою
ifup
іifdown
. -
Команда
hostnamectl
і файл/etc/hostname
. -
Файли
/etc/nsswitch.conf
,/etc/hosts
і/etc/resolv.conf
.
Відповіді до вправ посібника
-
За допомогою яких команд можна вивести список наявних у системі мережних адаптерів?
Команди
ip link show
,nmcli device
і застарілаifconfig
. -
Який тип мережного адаптера з назвою інтерфейсу
wlo1
?Назва починається з
wl
, отже, це адаптер бездротової локальної мережі. -
Яку роль відіграє файл
/etc/network/interfaces
під час завантаження?Він має конфігурації, які використовуються командою
ifup
для активації відповідних інтерфейсів під час завантаження. -
Який запис у
/etc/network/interfaces
налаштовує інтерфейсeno1
для отримання його параметрів IP за допомогою DHCP?Рядок
iface eno1 inet dhcp
.
Відповіді до дослідницьких вправ
-
Як за допомогою команди
hostnamectl
змінити лише статичне ім’я хоста локальної машини наfirewall
?З параметром
--static
:hostnamectl --static set-hostname firewall
. -
Які деталі, крім імен хостів, можна змінити командою
hostnamectl
?hostnamectl
також може встановити піктограму за замовчуванням для локальної машини, тип її шасі, розташування та середовище розгортання. -
Який запис у
/etc/hosts
пов’язує іменаfirewall
іrouter
з IP-адресою10.8.0.1
?Рядок
10.8.0.1 firewall router
. -
Як можна змінити файл
/etc/resolv.conf
, щоб надсилати всі запити DNS до1.1.1.1
?Використання
nameserver 1.1.1.1
як єдиного запису сервера імен.