Мережеві шлюзи і маршрути

Текст надав Coranth Gryphon.

Для ілюстрації різних аспектів маршрутизації ми будемо використовувати наступний приклад використання команди netstat:

У перших двох рядках задаються маршрут за замовчуванням (який буде описаний в наступному розділі) і маршрут на localhost.

В обох цих групах (хости і підмережі локальної мережі) маршрути конфігуруються автоматично даемоном, який називається routed. Якщо він не запущений, то будуть існувати тільки статично задані (тобто введені явно) маршрути.

І нарешті, різні атрибути кожного маршруту перераховуються в колонці Flags. Нижче наводиться коротка таблиця деяких з цих прапорів і їх значень:

Коли локальній системі потрібно встановити з'єднання з віддаленим хостом, вона звертається до таблиці маршрутів для того, щоб визначити, чи існує такий маршрут. Якщо віддалений хост потрапляє в підмережа, для якої відомий спосіб її досягнення (маршрути типу Cloned), то система визначає можливість підключитися до неї по цьому інтерфейсу.

Якщо всі відомі маршрути не підходять, у системи є остання можливість: маршрут '' default ''. Це маршрут з особливим типом мережевого шлюзу (зазвичай єдиним, присутнім в системі), і в поле прапорів він завжди позначений як c. Для хостів в локальній мережі цей мережевий шлюз вказує на машину, що має пряме підключення до зовнішнього світу (неважливо, чи використовується зв'язок по протоколу PPP, канал DSL, кабельний модем, T1 або якийсь інший мережевий інтерфейс).

Якщо ви налаштовуєте маршрут за замовчуванням на машині, яка сама є мережевим шлюзом до зовнішнього світу, то маршрутом за замовчуванням буде мережевий шлюз у Вашого провайдера Інтернет (ISP).

Давайте поглянемо на приклади маршрутів за замовчуванням. Ось типова конфігурація:

Хости Local1 і Local2 знаходяться в нашій мережі. Local1 підключений до ISP через комутоване з'єднання по протоколу PPP. Цей комп'ютер з сервером PPP підключений за допомогою локальної мережі до іншого шлюзового комп'ютера через зовнішній інтерфейс самого ISP до Інтернет.

Маршрути за замовчуванням для кожної з ваших машин будуть наступними:

Ви можете легко поставити яка буде використовуватися під маршрутизатор за допомогою файлу /etc/rc.conf. У нашому прикладі на машині Local2 ми додали такий рядок в файл /etc/rc.conf:

Це також можливо зробити і безпосередньо з командного рядка за допомогою команди route (8):

Для отримання додаткової інформації про управління таблицями маршрутизації зверніться до довідкової сторінці по команді route (8).

Є ще один тип підключення, який ми повинні розглянути, і це випадок, коли хост знаходиться в двох різних мережах. Технічно, будь-яка машина, яка працює як мережевий шлюз (в прикладі вище використовувалося PPP-з'єднання), вважається хостом з подвійним підключенням. Однак цей термін реально використовується для опису машини, що знаходиться в двох локальних мережах.

У будь-якому випадку таблиці маршрутизації налаштовуються так, що для кожної підмережі ця машина визначена як шлюз (вхідний маршрут) в іншу підмережа. Така конфігурація, при якій машина виступає в ролі маршрутизатора між двома підмережами, часто використовується, якщо потрібно реалізувати систему безпеки на основі фільтрації пакетів або функцій брандмауера в одному або обох напрямках.

Якщо ви хочете, щоб ця машина дійсно носила пакети між двома інтерфейсами, то вам потрібно вказати FreeBSD на включення цієї функції. Зверніться до наступної глави, щоб дізнатися, як це зробити.

Маршрутизатор мережі є звичайною системою, яка пересилає пакети з одного інтерфейсу на інший. Стандарти Інтернет і хороша інженерна практика не дозволяють Проекту FreeBSD включати цю функцію за замовчуванням у FreeBSD. Ви можете включити цю можливість, змінивши значення наступної змінної в YES в файлі rc.conf (5):

Цей параметр змінить значення sysctl (8) -змінного net.inet.ip.forwarding в 1. Якщо вам тимчасово потрібно вимкнути маршрутизацію, ви можете на час скинути це значення в 0.

Вашій новому маршрутизатора потрібна інформація про маршрути для того, щоб знати, куди пересилати трафік. Якщо ваша мережа досить проста, то ви можете використовувати статичні маршрути. З FreeBSD також поставляється стандартний даемон BSD для маршрутизації routed (8). який вміє працювати з RIP (як версії 1, так і версії 2) і IRDP. Підтримка BGP v4, OSPF v2 і інших складних протоколів маршрутизації є в пакеті net / zebra. Також існують і комерційні продукти, що застосовуються як більш комплексне вирішення проблеми маршрутизації в мережі, такі як GateD ®.

Надав Al Hoang.

Припустимо, що у нас є наступна мережа:

Мережеві шлюзи і маршрути

У цьому сценарії, RouterA це наш комп'ютер з FreeBSD, який виступає в якості маршрутизатора в мережу Інтернет. Його маршрут за замовчуванням налаштований на 10.0.0.1. що дозволяє йому з'єднуватися із зовнішнім світом. Ми будемо припускати, що RouterB вже правильно налаштований і знає всі необхідні маршрути (на цьому малюнку все просто; додайте на RouterB маршрут за замовчуванням, використовуючи 192.168.1.1 в якості шлюзу).

Якщо ми подивимося на таблицю маршрутизації RouterA. то побачимо приблизно наступне:

З поточної таблицею маршрутизації RouterA не зможе досягти внутрішньої мережі 2 (Internal Net 2). Один із способів вирішення цієї проблеми - додавання маршруту вручну. Наступна команда додає внутрішню мережу 2 до таблиці маршрутизації RouterA з 192.168.1.2 в якості наступного вузла:

Тепер RouterA зможе досягти будь-якого хоста в мережі 192.168.2.0/24.

Попередній приклад прекрасно підходить для налаштування статичного маршруту в працюючій системі. Однак, проблема полягає в тому, що маршрутна інформація не збережеться після перезавантаження FreeBSD. Спосіб збереження доданого маршруту полягає в додаванні його в файл /etc/rc.conf:

В змінної static_routes знаходяться рядки, розділені пробілами. Кожен рядок означає ім'я маршруту. В наведеному вище прикладі в static_routes є тільки один рядок, це internalnet2. Потім ми додали змінну route_internalnet2. куди вміщено всі параметри, які необхідно передати команді route (8). В наведеному вище прикладі була використана команда:

тому нам буде потрібно "-net 192.168.2.0/24 192.168.1.2".

Як було сказано вище, ми можемо додати в static_routes більш ніж один рядок. Це дозволить створити кілька статичних маршрутів. У наступному прикладі показано додавання маршрутів для мереж 192.168.0.0/24 і 192.168.1.0/24 (цей маршрутизатор не показаний на малюнку вище:

Ми вже говорили про те, як ми задаємо наші маршрути до зовнішнього світу, але не згадували про те, як зовнішній світ знаходить нас.

Завданням вашого провайдера є оголосити на магістралі про те, що він відповідає за підключення (і тому на нього вказує маршрут) вашої мережі. Цей процес називається поширенням маршруту.

Іноді з поширенням маршруту виникають проблеми, і деякі сайти не можуть до вас підключитися. Напевно, найкориснішою командою для визначення точки невірної роботи маршрутизації є traceroute (8). Вона також корисна і коли ви самі не можете підключитися до віддаленої машині (тобто команда ping (8) не спрацьовує).

За додатковою інформацією зверніться до сторінки Довідника по traceroute (8).

Схожі статті