Мережевий інтерфейс Linux
Мережевий інтерфейс - це точка присутності сервера в локальній мережі. У свою чергу, локальна мережа швидше за все буде мати доступ в глобальні мережі.
Налаштування мережевого інтерфейсу це типова задача при установці сервер на colocation і в ній немає нічого складного.
Які файли впливають на роботу мережевого інтерфейсу в Linux CentOS 5:
/etc/modprobe.conf - тут завантажуються модулі ядра для різних пристроїв:
Зручно під час відсутності DNS-сервера або коли немає необхідності повідомляти ці імена на всю мережу.
/etc/resolv.conf - в цьому файлі вказуються DNS сервера. DNS-сервер задається директивою nameserver
/etc/host.conf - файл вказує послідовність використання механізмів вирішення імені. У нашому випадку спочатку використовуємо / etc / hosts а тільки потім DNS-сервер.
/etc/init.d/network - скрипт зупиняє і запускає роботу мережі
/ Proc / sys / net / ipv4 / ip_forward - включення маршрутизації для своїх інтерфейсів, якщо у вас два або більше інтерфейсів її потрібно включити. Включення здійснюється передачею "1" в цей файл.
/ Etc / sysconfig / network - тут ми вказуємо, чи є наш сервер доступним по мережі, якщо так то за якими протоколами і вказуємо наш hostname, тобто ім'я сервера. Default gateway рекомендується вказувати тут.
В / etc / sysconfig / network-scripts / знаходяться різні скрипти впливають на роботу мережевого інтерфейсу:
Для нас найбільше значення мають скрипти ifcfg- *. Саме в них є інформація про настроювання мережевих інтерфейсів присутніх в сервері.
Давайте подивимося що у них всередині.
Даний інтерфейс працює з використанням служби DHCP.
Мій комп'ютер працює по DHCP, що чітко видно по директиві BOOTPROTO = dhcp. Тобто мережеві настройки ми отримуємо у dhcp-сервера при завантаженні нашого сервера. Інші директиви означають наступне:
DEVICE = eth0 - як буде називатися наш інтерфейс, прийнято перший інтерфейс називати як eth0, другий eth1 і так далі
ONBOOT = yes - чи включати цей інтерфейс автоматично при включення сервера. Думаю, що швидше за все це і потрібно.
loopback-інтерфейс необхідний для нормальної роботи ОС.
Вище ми розглянули інтерфейс працює по протолу dhcp. Але як правило доведеться працювати саме з custom-інтерфейсами, тобто вручну задавати параметри і маршрутизацію про яку ми поговоримо трохи пізніше.
Налаштуємо мережевий інтерфейс в Linux. Ми знаємо що lo завжди включений і його не потрібно взагалі чіпати.
Мій конфігураційний файл виглядає так:
Далі потрібно перезавантажити мережевий інтерфейс щоб прочиталися нові настройки
Перевіримо чи піднялося
Жирним виділені особливо цікаві нам ділянки у висновку команди ifconfig. Як бачимо все схоже на правду і інтерфейс «піднято», тобто знаходиться в робочому режимі.
Для більшої ясності розберемо і деякі інші параметри мережевого інтерфейсу:
- MTU: 1500 - це Maximum Transfer Unit. Різні мережі і канали передачі мають різні швидкості обміну. Це визначає максимальну довжину пакета, пересилання якого з високою ймовірністю відбудеться без помилок. Для Ethernet - мереж значення MTU складає 1500 байт.
- Metric: 1 - чим менше це значення тим краще вважається маршрут до цієї мережі. На серверах швидше за все це міняти не доведеться. Цей параметр відіграє велику роль в роботі протоколів маршрутизації.
- Сollisions: 0 - нульове значення говорить про те, що з мережевим інтерфейсом все в порядку на фізичному рівні.
- RX bytes - скільки даних прийнято
- TX bytes - скільки даних відіслано
Так йдемо далі. В наведеному вище прикладі, після настройки мережевого інтерфейсу ми повністю перезавантажували службу network. Коли на сервері тільки один інтерфейс це не страшно, але якщо їх декілька і якісь вже працюють і виконують свої функції переривати їх роботу небажано. Тут нам на допомогу приходить скрипт ifup / ifdown. Він потрібен для перезавантаження якогось одного мережевого інтерфейсу. Короткий приклад.
Крок 1. Вносимо зміни в / etc / sysconfig / network-scripts / ifcfg-eth0
Крок 2. # ifdown eth0
Крок 3. # ifup eth0
маршрутизація
Маршрутизація - це процес пошуку найкращого шляху від джерела до одержувача. Це набір правил за якими буде передаватися трафік. Ми начебто з нею ще чогось не робили, але вона вже у вас працює. Не вірите. Зараз перевіримо.
netstat - команда дозволяє відстежувати мережеві підключення сервера
У висновку ми побачимо список мереж і як до них дістатися. Тобто якийсь шлюз використовувати для досягнення пункту призначення. Пам'ятайте, коли ми налаштовували мережевий інтерфейс eth0 ми вказали директиву GATEWAY в ifcfg-eth0. Цей gateway був позначений як default, тобто шлюз.
Весь трафік в мережі, які явно не описані в таблиці маршрутизації, відправляються через шлюз. У нашому випадку default gateway -192.168.146.2
Висновок команди "netstat -r" нам говорить наступне:
Перший рядок. Щоб потрапити в підмережа 192.168.146.0 нам не потрібен ніякий шлюз (*), оскільки ми і так перебуваємо в цій мережі
Другий рядок - це default, тобто маршрут за замовчуванням. Весь трафік призначений по всі інші мережі буде йти через цей шлюз.
Flags: U - це UP, тобто маршрут піднято і функціонує зараз
Flags: UG - UP, Gateway. Маршрут піднято і використовує gateway в своїй роботі
MSS - Maximum Segment Size, визначає максимальний розмір пакета для цього маршруту.
Window - розмір вікна. Максимальний розмір пакета, який система готова прийняти.
irtt - initial round trip time, задає значення яке використовується під час активного з'єднання. Round trip time - вдає із себе відрізок часу, якщо протягом якого від віддаленого хоста не прийшло підтвердження про отримання пакета, пакет буде висланий знову.
Iface - показує до якого інтерфейсу відноситься маршрут
Якщо на сервері кілька мережевих інтерфейсів то швидше за все знадобиться вручну скласти таблицю маршрутизації.
Наведу приклад. У нас два мережевих інтерфейсу eth0 і eth1. Через eth0 ми отримуємо доступ до зовнішніх мережі і за замовчуванням весь трафік прямує через нього. Через eth1 ми отримуємо доступ до внутрішньої мережі 192.168.147.0/24 але що ще важливіше, в цій мережі є сервер 192.168.147.1 у якого є мережевий інтерфейс в підмережа 192.168.148.0/24 і ми дуже хочемо туди потрапляти. А для того що туди потрапляти необхідно прописати правильні маршрути у себе в ОС.
Так виглядає таблиця маршрутизації в нашому випадку
Тобто в підмережа 192.168.148.0/24 (внутрішня підмережа) ми потрапляємо через eth1 -> 192.168.147.1, сервер виконує роль шлюзу в цю сіть. Все інше йде через default шлюз. Все дуже просто. Ну і власне як привести настройки до цього.
Шлюз за замовчуванням
І найголовніше, файл в якому ми прописуємо статичний маршрут для eth1.
Для того щоб прописати маршрути для будь-якого інтерфейсу, необхідно створити файл route-<название интерфейса> в каталозі / etc / sysconfig / network-scripts / Після того як все готово до роботи, ми перезавантажуємо мережевий сервіс.
Тепер підіб'ємо підсумки, що і як ми зробили.
Є три види маршрутів. Динамічні - які динамічно призначаються мережному інтерфейсу, наприклад сервером DHCP. Статичні - які ви вручну прописуєте і вони залишаються в налаштуваннях після перезавантаження сервера. І маршрути за замовчуванням - коли ніякі інші маршрути не підходять для того, щоб відіслати по ним пакети.
Ми могли додати маршрут в підмережа 192.168.148.0/24 командою route
Але після перезавантаження сервера інформація про маршрут пропала б. Щоб такого не сталося використовується спеціальний механізм. А саме створення файлу виду route-<имя интерфейса> в / etc / sysconfig / network-scripts У нього ми вносимо список мереж і як до них дістатися. Кожна нова запис починається з нового рядка.
Щоб сервер був шлюзом для інших комп'ютерів необхідно задовольнити ряд умов:
- На сервері коректна таблиця маршрутизації завдяки якій він зрозуміє що робити з пакетами далі;
- Включена передача пакетів між інтерфейсами;
- Включений маськарадінг (або встановлений проксі) для потрібної нам мережі, наприклад ось так (перенаправляти пакети для хостів з підмережі 192.168.146.0/24):
Корисні ключі netstat
netstat на практиці
Параметрів вище цілком достатньо, щоб багато чого довідатися з життя мережевих служб.
Слухає чи хто небудь 25-й порт?
Бачимо що 25-й порт слухає процес sendmail з PID 2710
root 2710 0.0 0.7 8992 1836. Ss 11:17 0:00 sendmail: accepting connections
Подивимося поточні ESTABLISHED-з'єднання по tcp, тобто з ким у нас є підключення і за яким порту
Як бачимо це тільки з'єднання по ssh
Також, буде корисно знати які стани бувають у сокетов:
- ESTABLISHED - сокет з встановленим з'єднанням;
- SYN_SENT - сокет в процесі установки з'єднання;
- SYN_RECV - був прийнятий запит установки з'єднання з мережі;
- FIN_WAIT1 - сокет закритий і з'єднання закривається;
- FIN_WAIT2 - сокет закритий і сокет чекає закриття з'єднання з віддаленого хоста;
- TIME_WAIT - сокет після свого закриття, ще якийсь час приймає пакети з мережі;
- CLOSED - сокет не використовується;
- CLOSE_WAIT - віддалений хост відключився, очікуємо закриття сокета;
- LAST_ACK - віддалений хост відключився і сокет закритий. Ожіданіепотдвержденія;
- LISTEN - сокет очікує підключення до вашого комп'ютера;
- CLOSING - обидва сокета відключилися але ще не всі наші дані відіслані;
- UNKNOWN - статус сокета невідомий.
Ми навчилися налаштовувати один і більше мережевих інтерфейсів. Розібралися з маршрутизацією. Дізналися які файли і як впливають на роботу мережі в Linux CentOS 5. Зараз ми познайомимося з двома програмами які відіграють істотну роль в роботі мережі. Це програма nmap - яка сканує порти віддаленого хоста і повідомляється які порти на ньому відкриті. І програма tcpdump, вона переводить вашу мережеву плату в режим promiscuous, що дозволяє перехоплювати весь трафік проходить через карту.
Nmap дозволяє сканувати віддалені комп'ютери на предмет відкритих портів. З більш агресивними опціями можна дізнатися версію ОС і деякі інші речі.
Просканіруем віддалений хост. Як бачимо є дещо цікаве.
Іноді з метою виявлення несправностей нам потрібно з'ясувати, які пакети передаються по мережі. Це не складно зробити за допомогою tcpdump.
Скануємо діапазон портів