TGStat
TGStat
Введите текст для поиска
Расширенный поиск каналов
  • flag Russian
    Язык сайта
    flag Russian flag English flag Uzbek
  • Вход на сайт
  • Каталог
    Каталог каналов и чатов Региональные подборки Тематические подборки Платные каналы Поиск каналов
    Добавить канал/чат
  • Рейтинги
    Рейтинг каналов Рейтинг чатов Рейтинг публикаций
    Рейтинги брендов и персон
  • Аналитика
  • Поиск по публикациям
  • Мониторинг Telegram
  • Продвижение
    Реклама через Яндекс Бизнес Реклама в каналах через TGStat Agency Реклама на сайте TGStat.ru
BashTex | Linux

23 Sep, 12:35

Открыть в Telegram Поделиться Пожаловаться

veth - как Linux соединяет два network namespace

Network namespace изолирует сетевой стек процесса. У каждого namespace могут быть свои интерфейсы, маршруты и таблица соседей.

Но как соединить два таких изолированных сетевых мира?

Для этого в Linux есть veth pair - виртуальный Ethernet-кабель с двумя концами.

▪️Создаём два namespace

ip netns add ns1
ip netns add ns2

Теперь создаём пару:

ip link add veth1 type veth peer name veth2

Получили:

veth1 veth2

То, что отправлено в один конец, появляется на другом.

▪️Разносим концы по namespace

ip link set veth1 netns ns1
ip link set veth2 netns ns2

Теперь:

namespace ns1 namespace ns2

veth1 veth2

В каждом namespace находится только свой конец виртуального кабеля.

▪️Назначаем адреса

ip -n ns1 addr add 10.10.0.1/24 dev veth1
ip -n ns2 addr add 10.10.0.2/24 dev veth2

ip -n ns1 link set veth1 up
ip -n ns2 link set veth2 up

Теперь можно проверить связь:

ip netns exec ns1 ping 10.10.0.2

Пакет проходит примерно так:

process
↓
network stack ns1
↓
veth1
↓
veth2
↓
network stack ns2
↓
process

Никакого физического интерфейса между namespace здесь нет.

▪️Почему это используется в контейнерах

Контейнер получает собственный network namespace.
Один конец veth помещается внутрь контейнера:

container
eth0
│
│ veth
│
host

Второй конец остаётся на host и обычно подключается к Linux bridge.
Например:

container eth0
│
veth
│
bridge
├── veth
├── veth
└── host

Так несколько изолированных namespace получают доступ к одной L2-сети.

▪️Проверяем, где находится интерфейс
На host:

ip link

В namespace:

ip -n ns1 link

Можно увидеть, что veth1 и veth2 физически не существуют как один интерфейс — это два связанных виртуальных endpoint’а.

▪️Важный нюанс
veth сам по себе не маршрутизирует трафик.
Он просто соединяет два сетевых пространства на уровне Ethernet.
Если нужно выйти из namespace в интернет, поверх veth обычно добавляют bridge, routing, NAT или другой сетевой механизм.

То есть veth - это буквально виртуальный кабель:

namespace A
│
veth A
│
└──────── veth B
│
namespace B

А уже дальше Linux решает, куда отправлять пакеты.

BashTex 📱 #bash #systemd

420 0 26 7
Каталог
Каталог каналов и чатов Подборки каналов Поиск каналов Добавить канал/чат
Рейтинги
Рейтинг каналов Telegram Рейтинг чатов Telegram Рейтинг публикаций Рейтинги брендов и персон
API
API статистики API поиска публикаций API Callback
Наши каналы
@TGStat @TGStat_Chat @telepulse @TGStatAPI
Почитать
Академия TGStat Исследование Telegram 2019 Исследование Telegram 2021 Исследование Telegram 2023
Контакты
Справочный центр Поддержка Почта Вакансии
Всякая всячина
Пользовательское соглашение Политика конфиденциальности Публичная оферта
Наши боты
@TGStat_Bot @SearcheeBot @TGAlertsBot @tg_analytics_bot @TGStatChatBot