Network Namespace
Основна інформація
Простір імен мережі - це функція ядра Linux, яка забезпечує ізоляцію мережевого стеку, дозволяючи кожному простору імен мережі мати власну незалежну мережеву конфігурацію, інтерфейси, IP-адреси, таблиці маршрутизації та правила брандмауера. Ця ізоляція корисна в різних сценаріях, таких як контейнеризація, де кожен контейнер повинен мати свою власну мережеву конфігурацію, незалежну від інших контейнерів та системи хоста.
Як це працює:
При створенні нового простору імен мережі він починається з повністю ізольованого мережевого стеку, з жодними мережевими інтерфейсами, крім інтерфейсу зворотного зв'язку (lo). Це означає, що процеси, які працюють в новому просторі імен мережі, за замовчуванням не можуть спілкуватися з процесами в інших просторах імен або системі хоста.
Віртуальні мережеві інтерфейси, такі як пари veth, можуть бути створені та переміщені між просторами імен мережі. Це дозволяє встановлювати мережеве з'єднання між просторами імен або між простором імен та системою хоста. Наприклад, один кінець пари veth може бути розміщений в просторі імен мережі контейнера, а інший кінець може бути підключений до моста або іншого мережевого інтерфейсу в просторі імен хоста, забезпечуючи мережеве з'єднання з контейнером.
Мережеві інтерфейси в межах простору імен можуть мати свої власні IP-адреси, таблиці маршрутизації та правила брандмауера, незалежні від інших просторів імен. Це дозволяє процесам в різних просторах імен мати різні мережеві конфігурації та працювати так, ніби вони працюють на окремих мережевих системах.
Процеси можуть переміщатися між просторами імен за допомогою системного виклику
setns()
, або створювати нові простори імен за допомогою системних викликівunshare()
абоclone()
з прапорцемCLONE_NEWNET
. Коли процес переходить до нового простору імен або створює його, він почне використовувати мережеву конфігурацію та інтерфейси, пов'язані з цим простором імен.
Лабораторія:
Створення різних просторів імен
CLI
Монтувавши новий екземпляр файлової системи /proc
, якщо ви використовуєте параметр --mount-proc
, ви забезпечуєте, що новий простір імен має точний та ізольований перегляд інформації про процес, специфічний для цього простору імен.
Docker
Перевірте, в якому просторі імені знаходиться ваш процес
Знайдіть всі мережові простори імен
```bash sudo find /proc -maxdepth 3 -type l -name net -exec readlink {} \; 2>/dev/null | sort -u | grep "net:" # Find the processes with an specific namespace sudo find /proc -maxdepth 3 -type l -name net -exec ls -l {} \; 2>/dev/null | grep ``` ### Увійдіть всередину простору імені мережі ```bash nsenter -n TARGET_PID --pid /bin/bash ``` Також, ви можете **увійти в інший простір процесу лише як root**. І ви **не можете** **увійти** в інший простір без дескриптора, що вказує на нього (наприклад, `/proc/self/ns/net`).
Посилання
Last updated