Маршрути, які необхідні для постачання пакетів до кінцевого призначення, налаштовуються в інтерфейсі або маршрутизаторі. Якщо перед комп'ютером стоїть завдання відправити пакет у мережу, він дивиться таблицю маршрутизації, у якій перелічено IP-адреси пунктів призначення та адреси інтерфейсів і роутерів у домашній мережі, які можуть відправити пакет за потрібною адресою. Якщо для мети маршрут не вказано, то насамперед задіюється так званий шлюз за замовчуванням або маршрут за замовчуванням. Точно така ж картина спостерігається на роутері. Пристрій дивиться на IP-адресу призначення і звіряє її зі своєю таблицею маршрутизації, а потім відправляє далі. Далі на прикладі розглянемо, як налаштувати певні маршрути і створити нові.
Перш ніж почати щось змінювати, необхідно зрозуміти, які правила вже використовуються. Для цього в операційній системі Linux передбачено кілька команд. Для цього використовуємо спеціальну команду route
:
$ route
Саме так виглядає таблиця маршрутизації linux. У ній передбачена проста інформація, якої не завжди достатньо, щоб зрозуміти суть справи. Для отримання більш детальної інформації необхідно користуватися командою routel
:
$ routel
Тут ви зможете побачити IP адресу (target), IP адресу шлюзу (gateway), IP відправника (source), протокол і навіть мережевий інтерфейс. Але є більш зручний спосіб подивитися таблицю маршрутизації linux за допомогою команди IP:
$ ip route
Ми бачимо результат, який схожий із висновком попередньої команди. Оскільки результат надано в не найзручнішому вигляді, можна використовувати як аргумент для ip route add
або ip route del
. Повірте, це дуже зручно. Так ви побачите, що як шлюз за замовчуванням скрізь використовується 192.168.1.1
. Далі поговоримо, що означає виведення цієї команди:
default
- варіант за замовчуванням. Тут має бути ip адреса цілі або маска підмережі;via 192.168.1.1
- вказує через який шлюз ми можемо дістатися до цієї мети, у нас це 192.168.1.1
;dev enp2s0
- мережевий інтерфейс, за допомогою якого буде доступний цей шлюз;proto static
- означає, що маршрут був встановлений адміністратором, значення kernel означає, що він був встановлений ядром;metric
- це пріоритет маршруту, що менше значення - то вищий пріоритет.Далі розглянемо, як відбувається налаштування маршрутів Linux.
У користувача залишається можливість налаштовувати таблицю маршрутизації за допомогою команди ip
. Наприклад, щоб змінити маршрут за замовчуванням, достатньо виконати:
$ ip route add default via 192.168.1.1
Так ви можете додати маршрут для будь-якої IP адреси, наприклад, для 243.143.5.25
:
$ sudo ip route add 243.143.5.25 via 192.168.1.1
Отже, ми вказуємо IP адресу цілі, а потім шлюз у локальній мережі, через який можна досягти цієї адреси. Проблема лише в тому, що такі маршрути активні до першого перезавантаження комп'ютера. Після перезавантаження вони автоматично видаляються. Щоб виправити цей недолік, маршрути потрібно додати у файл конфігурації.
Наприклад, у системах сімейства Red Hat є конфігураційні файли /etc/sysconfig/network-scripts/route-ethX
. Кожен файл може описувати кілька маршрутів, наприклад:
GATEWAY=10
.10.0.1NETMASK=255
.0.0.0.0IPADDR=10
.10.0.0.22
У цьому файлі конфігурації використовується gateway, це шлюз для інтерфейсу, netmask
- маска мережі, а ipaddr
- ip адреса інтерфейсу. У Debian і заснованих на ньому дистрибутивах можна налаштувати маршрути у файлі /etc/network/interfaces
. Тут команда route додається в секцію iface
. Наприклад:
up route add -net 10.10.0.0 netmask 255.0.0.0 gw 10.10.0.1
За допомогою опії -net
ми вказуємо цільову мережу, netmask
- це маска мережі, а gw
- шлюз. Нічого складного в цьому немає. Тепер додані маршрути залишаться навіть після перезавантаження.
Так ми розглянули як працює маршрутизація в Linux, як виконується налаштування маршрутизації в Linux, а також навіщо це потрібно.