ip route показати поле src


12

Я прочитав сторінку людини ipі досі не розумію, що srcтаке, і не зміг знайти багато документації.

Будь ласка, якщо ви можете це пояснити докладно або вказати на якесь посилання, це хороша відповідь.


3
Ви не знаєте, що означає "джерело" в контексті IP-комунікації? Вам не потрібна помилка сервера - вам потрібна книга Стівенса ...
voretaq7

Відповіді:


17

Додаючи маршрут до мультихомодного хоста, можливо, ви захочете мати контроль над вихідною IP-адресою, від якої хост надсилає, коли починає зв’язок за цим маршрутом. Це те , для чого призначено src .

Короткий приклад: у вас хост з двома інтерфейсами та IP-адресами 192.168.1.123/24 та 10.45.22.12/24. Ви додаєте маршрут до 78.22.45.0/24 через 10.45.22.1 і хочете переконатися, що ви не надсилаєте на 78.22.45.0/24, використовуючи адресу 192.168.1.123 (можливо, тому, що в мережі 78.22.45.0/24 немає маршруту назад до 192.168.1.0/24 або тому, що ви не хочете, щоб ваш трафік рухався цим маршрутом з тих чи інших причин):

ip route add 78.22.45.0/24 via 10.45.22.1 src 10.45.22.12

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


9

srcАтрибут є натяк , що використовується алгоритм вибору адреси . Це важливо, коли у хоста є кілька IP-адрес, що зазвичай, але не завжди, коли він має кілька інтерфейсів. Хоча існують інші правила, що впливають на вибір адреси, і мережева програма також може змінювати алгоритм вибору, використовуючи системні виклики, як-от bind(), srcатрибут є способом використовувати пошук таблиці маршрутизації для відповіді на питання: "Якщо я хочу ініціювати підключення до хоста X, яку з моїх адрес я повинен використовувати? "

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

$ ip -4 addr show dev eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    inet 10.1.0.2/24 brd 10.1.0.255 scope global eth0
    inet 10.1.0.16/24 scope global secondary eth0
$ ip route list dev eth0
10.1.0.32/27  scope link  src 10.1.0.16
10.1.0.0/24  proto kernel  scope link  src 10.1.0.2

Цей хост може спілкуватися з будь-яким з інших 252 адрес у цій / 24 підмережі з будь-якої адреси, але за замовчуванням він буде використовувати 10.1.0.16 при ініціюванні з'єднання з 10.1.0.32 по 10.1.0.63 і використовувати 10.1.0.2 для всіх відпочинок.

Якщо хост відповідає, а не ініціює, він відповість з адресою призначення запиту. Наприклад, якщо інший хост в 10.1.0.32 підключається до цього хоста в 10.1.0.2, відповідь надійде від 10.1.0.2, хоча це не відповідає srcатрибуту маршруту повернення.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.