Статична IP-маршрутизація
Дмитро Карпов , МИСиС
Мережа Internet з її протоколами з самого початку замислювалася як протяжна (WAN - Wide Area Network), що складається з великої кількості машин, з'єднаних за допомогою різних середовищ обміну даними (як локальних мереж, так і глобальних з'єднань). Теоретично в Internet можуть безпосередньо працювати один з одним близько чотирьох мільярдів машин (2 ^ 32 за вирахуванням деяких спеціальних номерів), а через proxy і того більше.
В силу цих причин Internet - сегментована мережу. Сегментом є або прозорий ділянку широкомовної (Ethernet) або маркерной (TokenRing) мережі, або з'єднання точка-точка (модемне).
Тепер - позначення. IP-номер - четирехбайтное число, що записується або в шістнадцятковому вигляді типу 0xC0A80E05, або в десятковому вигляді, де байти розділені крапками типу 192.168.14.5 (як приклад в обох випадках використовувався один і той же номер).
Маска - теж четирехбайтное число, але всі старші біти, починаючи з деякого, завжди встановлені в одиницю, а всі молодші - в нуль. Приклади: 255.255.255.0 - маска мережі класу C на 256 номерів; 255.255.255.192 - маска маленької мережі на 64 номери (192 = 256-64). Якщо мені треба вказати поєднання номери та маски, я буду використовувати запис номер / чісло_установленних_бітов_в_маске - так поєднання номера 192.168.14.5 і маски 255.255.255.0 буде записано у вигляді 192.168.14.5/24.
Номером мережі називають число, що отримується з номера інтерфейсу застосуванням побітової операції AND з маскою, тобто в номері інтерфейсу обнуляються біти на тих місцях, на яких стоять нульові біти в масці.
Слід пам'ятати, що IP-номер присвоюється не комп'ютера, а інтерфейсу (мережному виходу або послідовному порту). В принципі можна дати кільком інтерфейсів один номер, але це може викликати складності. Можна також присвоїти декілька адрес одному інтерфейсу.
У сегменті мережі всі машини мають IP-номери з однаковим номером мережі і однаковою маскою. В одній локальній мережі можна поєднати дві і більше різних IP-мереж, вони навіть можуть знати один про одного і нормально спілкуватися, але це все-таки будуть дві різні мережі.
Прийнято наступний розподіл в залежності від значення старшого байта IP-адреси:
- 0..127 - мережі класу A за 2 ^ 24 адрес з маскою 0xFF000000;
- 128..191 - мережі класу B по 2 ^ 16 адрес з маскою 0xFFFF0000;
- 192..223 - мережі класу C по 2 ^ 8 адрес з маскою 0xFFFFFF00;
- 224..239 - мережі класу D для multicast (груповий) розсилання;
інші поки зарезервовані.
Багато програм за адресою автоматично визначають клас мережі, хоча це можна поправити вручну. В принципі ніхто не заважає розбити мережу на дві або більше підмереж з будь-якими масками, але організаціям як правило виділяють адреси блоками, відповідними класів A, B і C - це пов'язано з системою DNS , Що дозволяє дізнатися доменне ім'я машини за її IP-адресою.
Мережа класу A з номером 127 - loopback, тобто призначена для спілкування комп'ютера з собою. У будь-якій мережі номер (IP-номер AND маска) є номером всієї мережі і не може бути присвоєно нікому конкретно. Номер (IP-номер OR NOT маска), який є останнім номером в мережі, призначений для broadcasting (широкомовних) повідомлень, які доставляються всім машинам сегмента мережі. Відповідно, при виділенні групи адрес в мережу дві адреси стають недоступні.
Розглянемо маршрутизацію в термінах FreeBSD (буде також даний переклад в нотацію System V (Linux, SCO) і Windows3.11 ). В Unix команди настройки мережі, як правило, заюпускаются з файлу / etc / rc або запускаються з нього файли, а в MS Windows - завантажувачем операційної системи у відповідність з system.ini або registry.
Головному шлюзу я завжди привласнюю перший (найменший) номер в мережі (нульовий, як я вже говорив, недоступний). Якщо в мережі присутній другий шлюз, через який приєднаний інший сегмент, то цього шлюзу (проміжного маршрутизатора) буде присвоюватися останній (найбільший) номер в мережі. Для цього немає ніяких розумних причин - так мені хочеться.
Побудуємо перший сегмент мережі:
Сконфігуріруем робочу станцію: ifconfig ep0 inet 192.168.1.5 netmask 255.255.255.0 ifconfig lo0 inet 127.0.0.1 netmask 255.0.0.0 route add default 192.168.1.1 Насправді в сучасних (починаючи з 2.1. *) Версіях FreeBSD це оформляється трохи зовсім по іншому. :-) Розглянемо уважніше, що роблять ці команди: ifconfig ep0 inet 192.168.1.5 netmask 255.255.255.0 привласнила інтерфейсу ep0 номер 192.168.1.5, а також створила в таблиці маршрутизації запис про те, що всі пакети з номером мережі 192.168.1.0/24 спрямовуватимуться прямо через цей інтерфейс з використанням протоколу ARP . ifconfig lo0 localhost конфигурирует інтерфейс loopback, тобто "Петлю". Цей інтерфейс повинен мати адресу 127.0.0.1 і маску 255.0.0.0 на будь-якій машині, що має IP, тому деякі системи (наприклад, MS Windows) роблять це автоматично, не вимагаючи від адміністратора (або користувача, якщо він сам налаштовує систему) задавати параметри loopback . Так як цей інтерфейс налаштовується на кожній машині однаково, я не буду писати цей рядок кожного разу. localhost визначається по файлу / etc / hosts, в якому міститься 127.0.0.1 localhost.домен localhost а маска береться за замовчуванням - 255.0.0.0. route add default 192.168.1.1
зауважу, що маршрутизація "default" насправді є "inet 0x0 netmask 0x0" і це треба прописувати, якщо стара версія команди route не розуміє слова "default". створила запис, відповідно до якої всі пакети (все, тому що будь-який пакет підходить під 0.0.0.0/0) будуть відправлятися на машину, що має інтерфейс 192.168.1.1. Інформація про те, як можна дістатися до інтерфейсу 192.168.1.1 міститься в попередній команді, яка визначила спосіб доступу до всіх машин 192.168.1. * Через інтерфейс ep0.
Таким чином, у нас склалася приблизно така ситуація:
Взагалі система маршрутизації (за винятком гранично примітивних випадків) деревоподібна, тобто одні записи включають в себе інші. Часткове перетин неможливо, бо кордону адресного простору, на яке діє кожна запис, вирівняти на розмір цього простору. Порядок зберігання і перегляду таблиці може бути різний, але повинен забезпечувати пріоритет записів з маленьким простором перед записами з великим простором. В даному випадку звернення до машини 192.168.1.9 потрапляє під юрисдикцію обох записів, але звертатися до неї наша робоча станція буде у відповідності з 192.168.1.0/24->ep0.
Інтерфейс шлюзу треба настроїти так:
ifconfig ed1 inet 192.168.1.1 netmask 255.255.255.0 Насправді у нашого шлюзу багато інтерфейсів і вони будуть конфигурироваться у міру потреби. Ще раз звертаю увагу на те, що номер і маска мережі збігаються для всіх машин цього сегмента. Другий сегмент містить в собі машину, до якої по послідовній лінії за допомогою протоколу SLIP під'єднаний ще один комп'ютер. Сконфігуріруем ws.2.1: slattach -S 0 [...] ifconfig sl0 192.168.1.81 192.168.1.82 up ifconfig ep0 inet 192.168.2.7 netmask 255.255.255.0 route add default 192.168.2.1 Сконфігуріруем ws.2.2: slattach -S 0 [. ..] ifconfig sl0 192.168.1.82 192.168.1.81 up route add default 192.168.1.81 Сконфігуріруем шлюз: ifconfig ed2 inet 192.168.2.1 netmask 255.255.255.0 route add host 192.168.2.81 192.168.2.7 route add host 192.168.2.82 192.168.2.7 Третій сегмент буде поєднувати в собі дві мережі - мережа класу C 192.168.2. * / 24 і мережа класу B 172.16. *. * / 16. Почнемо з шлюзу. Йому дамо два адреси, по одному з кожної мережі: ifconfig ed3 inet 192.168.3.1 netmask 255.255.255.0 ifconfig ed3 inet 172.16.0.1 netmask 255.255.0.0 alias ... Тепер ws.3.1 - їй дамо адресу тільки з першої мережі: ifconfig ep0 inet 192.168.3.7 netmask 255.255.255.0 route add default 192.168.3.1 У такій конфігурації ws.3.1 відмінно зможе спілкуватися з машинами з мережі 192.168.3.0/24 і з машинами поза сегмента локальної мережі. При спробі ж звернутися до машини того ж сегменту, але іншої IP-мережі, пакет буде посланий на шлюз. Шлюз знає, що пакети з цією адресою треба послати в ту локальну мережу; але деякі операційні системи працюють за алгоритмом маршрутизації, в якому заборонено посилати пакет туди, звідки він прийшов - це робиться для того, щоб уникнути зациклення пакетів. Щоб уникнути цього ws.3.2 ми налаштуємо з урахуванням того, що в локальній мережі працюють машини з адресами з іншої IP-мережі: ifconfig ep0 inet 172.16.8.14 netmask 255.255.0.0 route add -net 192.168.3.0 -netmask 255.255.255.0 172.16. 8.14 route add default 172.16.0.1 Тут ми присвоїли інтерфейсу номер з мережі 172.16. *. *, а потім оголосили, що пакети для мережі 192.168.3. * треба відправляти в ту ж локальну мережу. Маршрутизація за замовчуванням могла бути спрямована і на адресу 192.168.3.1, але наведена конструкція простіше в тому сенсі, що обидві маршрутизації спираються на інтерфейс і не залежать один від одного. Я не знаю, чи розрізняються ці варіанти по ефективності, а якщо розрізняються, то наскільки; але чим менше залежностей в конфігурації, тим простіше її налаштовувати і діагностувати при збої. І нарешті, будь-якій машині можна привласнити дві адреси - по одному з кожної IP-мережі. Як правило, це робиться в разі, коли частина машин має IP-адреси, виділені провайдером, а решта працюють з Intranet'овскімі номерами - їх завжди в надлишку.
Наступну мережа класу C сегментуємо маршрутизатором, що відокремить підмережа на 16 IP-номерів (14 машин, включаючи маршрутизатор).
Шлюз: ifconfig ed3 inet 192.168.4.1 netmask 255.255.255.0 route add -net 192.168.4.128 -netmask 255.255.255.240 192.168.4.254 Робоча станція ws.4.1: ifconfig ep0 inet 192.168.4.7 netmask 255.255.255.0 route add default 192.168.4.1
Я не вказав маршрутизацію
route add -net 192.168.4.128 -netmask 255.255.255.240 192.168.4.254
Її можна не вказувати і для маршрутизатора. Але! Якщо котрась із машин сегмента 192.168.4.128/28, наприклад, 192.168.4.137, звернеться до машини з основного (примикає до шлюзу) сегмента (в тому числі до шлюзу), то протокол ARP зафіксує прихід пакету з мережевої карти, маршрутизатора, виходить в основний сегмент (IP-номер 192.168.4.127) і далі буде посилати пакети на цю мережеву карту, і це буде правильно.
Окрему проблему представляє звернення машини з основного сегмента в 192.168.4.128/28. За відсутності у ARP відомостей про цьому номері буде розісланий циркулярний запит і тут все залежить від кмітливості проміжного маршрутизатора router.4 - якщо він здогадається, що пакет призначений в підмережа і транслюватиме його туди, то відповідь призведе до появи запису в таблицях ARP, не здогадається - доведеться прописувати маршрутизацію.
Маршрутизатор router.4: ifconfig ep0 inet 192.168.4.127 netmask 255.255.255.0 ifconfig ep1 inet 192.168.4.129 netmask 255.255.255.240 route add default 192.168.4.1 Робоча станція ws.4.2: ifconfig ep0 inet 192.168.4.137 netmask 255.255.255.240 route add default 192.168.4.129
А цю мережу (теж класу C) сегментуємо маршрутизатором, який розіб'є мережу на дві рівні частини.
Шлюз: ifconfig ed3 inet 192.168.5.1 netmask 255.255.255.128 route add -net 192.168.5.128 -netmask 255.255.255.128 192.168.5.127 Робоча станція ws.5.1: ifconfig ep0 inet 192.168.5.7 netmask 255.255.255.128 route add -net 192.168.5.128 -netmask 255.255.255.128 192.168.5.127 route add default 192.168.5.1 Маршрутизатор router.5: ifconfig ep0 inet 192.168.5.127 netmask 255.255.255.128 ifconfig ep1 inet 192.168.5.129 netmask 255.255.255.128 route add default 192.168.5.1 Робоча станція ws.5.2 : ifconfig ep0 inet 192.168.5.137 netmask 255.255.255.128 route add default 192.168.5.129
Різниця з попереднім випадком в тому, що мережа розділена на сегменти, що містять тільки "кугл" число IP-номерів (два в цілій степені). Це особливий випадок, коли логічніше оформити кожну мережа окремо.
Тепер зробимо дві мережі, з'єднані через послідовну лінію по протоколу PPP.
Шлюз: ifconfig ed3 inet 192.168.6.1 netmask 255.255.255.0 route add -net 172.17.14.192 -netmask 255.255.255.252 192.168.6.127 route add -net 192.168.6.128 -netmask 255.255.255.240 192.168.6.127 Маршрутизатор rt.6.1: ifconfig ep0 inet 192.168.6.127 netmask 255.255.255.128 pppd 172.17.14.193:172.17.14.194 netmask 255.255.255.252 [...] route add -net 192.168.6.128 -netmask 255.255.255.240 172.17.14.194 route add default 192.168.6.1 pppd вимагає при запуску вказати інтерфейс, через який відбувається з'єднання, і його параметри, але це не відноситься до теми і позначено [...]. Маршрутизатор rt.6.2: ifconfig ep0 inet 192.168.6.129 netmask 255.255.255.240 pppd 172.17.14.194:172.17.14.193 netmask 255.255.255.252 [...] route add default 172.17.14.193 Робоча станція ws.6.2: ifconfig ep0 inet 192.168.6.137 netmask 255.255.255.240 route add default 192.168.6.129 Підмережа на 16 машин виділена аналогічно прикладу 4. Я сподіваюся, розбивка мережі на підмережі "круглого" розміру, з'єднані по ppp, після засвоєння прочитаного виявиться під силу будь-кому.
Як бачите, найпростіша конфігурація - у машин в сегменті з єдиною IP-мережею і з єдиним шлюзом (він же шлюз за замовчуванням). Чим більше шлюзів в сегменті мережі і чим складніше їх конфігурація, тим складніше коректно налаштувати робочі станції, а налаштовувати треба кожну. трохи виручає протокол DHCP , Але:
- сервер DHCP повинен знаходитися в тому ж сегменті локальної мережі, що і його клієнти;
- сервер DHCP повинен коректно конфігурувати клієнтів, що знову ж таки непросто в складній сегментованої мережі.
Таким чином, я рекомендую виводити всі сегменти на один маршрутизатор (якщо він справляється з навантаженням) або користуватися можливостями, наданими динамічної маршрутизацією.
Примітки:
прозорий - Сегмент Internet сам може бути сегментований на рівні MAC, наприклад, комутатором. Прозорість проявляється в тому, що маршрутизатор, що працює на рівні IP, не повинен дбати про це; зокрема, IP-маршрутизатор ніколи не пропускає broadcast повідомлення (на відміну від multicast), але broadcast повідомлення мають вільно поширюватися по всій локальній мережі мережі - це потрібно, зокрема, для протоколу ARP .
послідовним портом в даному випадку називається будь-який порт, видає дані побайтно (асинхронний COM, синхронний RS-232, принтерний LPT) на відміну від мережевого інтерфейсу, що видає дані пакетами. Відрізняється від мережевого тим, що з поиощью послідовних інтерфейсів можна пов'язувати безпосередньо рівно два комп'ютери, а значить, такий спосіб не потребує адресації пакетів на MAC-рівні.
DNS - Domain Name Service, що дозволяє дізнатися IP-номер і деяку іншу інформацію про машину за доменним ім'ям, а також доменне ім'я по IP-номеру. Зокрема, зона визначення імені по номеру може бути делегована тільки на мережу класу A, B або C і ніяк інакше. :-(
System V: BSD: ifconfig ep0 inet адреса netmask маска Linux: ifconfig eth0 inet адреса netmask маска BSD: ifconfig інтерфейс inet адреса netmask маска alias Linux: ifconfig eth0: 1 inet адреса netmask маска BSD: route add -net номер -netmask маска шлюз Linux: route add -net номер netmask маска шлюз Відповідність між інтерфейсом eth0 і парою Port / IRQ записано в /etc/lilo.conf;після зміни треба запустити ще щось.Windows 3.11ifconfig інтерфейс inet адреса netmask маска прописується в "Властивостях TCP / IP" даного інтерфейсу.ifconfig інтерфейс inet адреса netmask маска alias прописується в "Додаткових властивості".route add default шлюз задається як "Default Gateway".route add -net номер -netmask маска шлюз вводиться з командного рядка route add номер MASK маска шлюз
Ці команди реально виконуються, проте, як правило, вони задаються інакше. У файлі / etc / sysconfig пишеться
network_interfaces = "ep0 lo0" ifconfig_ep0 = "inet 192.168.1.5 netmask 255.255.255.0" ifconfig_lo0 = "inet localhost" Ці рядки обробляються файлом / etc / netstart # Set up all the network interfaces, calling startup scripts if needed for ifn in $ { network_interfaces}; do eval ifconfig_args = \ $ ifconfig _ $ {ifn} ifconfig $ {ifn} $ {ifconfig_args} ifconfig $ {ifn} done if [-n "$ defaultrouter" -a "x $ defaultrouter"! = "xNO"]; then static_routes = "default $ {static_routes}" route_default = "default $ {defaultrouter}" fi # Set up any static routes. This should be done before router discovery. if [ "x $ {static_routes}"! = "x"]; then for i in $ {static_routes}; do eval route_args = \ $ route _ $ {i} route add $ {route_args} done fi а localhost визначається по файлу / etc / hosts, в якому міститься 127.0.0.1 localhost.домен localhost
і деякі інші адреси / імена, які машина повинна знати навіть у разі недоступності DNS-сервера ; як мінімум, там крім loopback містяться адреси решти інтерфейсів даної машини, асоційовані з її доменним ім'ям в повної і короткої формк.
протокол ARP використовується в мережах, що мають свою власну нумерацію (Ethernet, TokenRing, X.25) і потрібен для того, щоб не прописувати вручну відповідність IP-адрес номерами мережевих адаптерів. Після старту системи таблиці ARP порожні; якщо приходить IP-пакет від будь-якої станції, фіксується відповідність її IP-номера номером її мережевої карти. Якщо треба послати пакет по IP-номеру, для якого невідомий номер мережевої карти, надсилається широковещательное (в розумінні локальної мережі) повідомлення.
зациклення пакету в деяких алгоритмах розглядається як результат неправильної маршрутизації. Кожен пакет має кінцевий час життя, що задається відправником і не перевищує 255 секунд, причому кожен маршрутизатор, через який проходив пакет, зменшує це число як мінімум на одиницю, а значить пакет не може нескінченно битися між маршрутизаторами - він помре і про його смерть сповістять відправника окремим пакетом (на цьому заснована робота traceroute). Проте деякі маршрутизатори щоб уникнути засмічення смуги пропускання самі вбивають пакети, які, судячи з їх таблиць маршрутизації, слід відправляти через той інтерфейс, через який вони прийшли.
протокол DHCP (Dynamic Host Configure Protocol) за запитом машини видає їй IP-адреса, маску, номер DNS-сервера і т.д. аж до завантажується через мережу операційної системи. Як правило, застосовується у варіанті, коли запитуюча машина не знає ні своєї адреси, ні адреси DHCP-сервера; в цьому випадку вона знаходить сервер, посилаючи широкомовна запит, а значить, вони повинні бути в одному сегменті локальної мережі.
Спонсори:
Хостинг: