Что такое пространства имен Linux и как они используются?

Будет ли роза от любого другого пространства имен все еще пахнуть такой же сладкой?

Шекспир теперь стучит по своей шкатулке, умоляя, что я удаляю эту скрученную цитату, но, как я говорю, «нет, нет».

Пространства имен были функцией ядра Linux с 2002 года. С тех пор они превратились в очень важный аспект безопасности Linux. Но только после появления контейнеров важность пространств имен стала очевидной.

По сути, пространства имен ограничивают ресурсы, которые может увидеть контейнерный процесс, так что один процесс не может видеть ресурсы, используемые другим. Эта функция имеет решающее значение для таких, как контейнеры и инструменты оркестровки, такие как Kubernetes, потому что, в противном случае, один развернутый контейнер сможет получить доступ или просматривать ресурсы, используемые другим.

Это, друзья мои, проблема безопасности. Если один контейнер был способен взаимодействовать с другим на уровне ресурсов, злонамеренный кусочек кода может нанести ущерб вашей системе, сети и данным.

Выделение пространств имен происходит на уровне ядра, чтобы изолировать процессы друг от друга.

Существуют разные типы пространств имен Linux, которые:

Пространства имен пользователей — добавляет уникальные идентификаторы пользователей и идентификаторы групп, которые будут назначены процессам, что означает, что некоторые процессы могут иметь привилегии администратора, а другие — нет. Пространство имен идентификаторов процесса — это присваивает набор PIDS процессам в одном пространстве имен, в то же время может назначать разные PID на одни и те же процессы в другом пространстве имен. Пространство сетевых имен — это независимый сетевой стек (таблица маршрутизации, IP -адреса, листинг сокетов, таблица отслеживания подключений, брандмауэр и т. Д.), Который может быть назначен конкретным пространствам имен. Пространство имен Mount — независимый список точек монтирования, которые видны для процессов в пространстве имен. Пространство имен межпроцессов (IPC) — может быть назначено собственными ресурсами IPC. Пространство имен имен обмена времени Unix-позволяет назначать разные имена хост и доменных имен различным процессам. Как создать пространство имен на Linux

Допустим, вы хотите создать две сетевые пространства имен, а затем позволить им подключаться друг к другу.

Первым шагом является создание пространств имен. Мы будем называть эти имен -пространства Net1 и Net2 и создадим их со следующими командами:

sudo ip netns добавить net1 sudo ip netns добавить net2 12 sudo ip netns Добавить net1sudo ip netns Добавить net2

Затем мы должны создать трубу (виртуальную пару Ethernet) для двух интерфейсов, что выполняется со следующей командой:

Sudo ip link добавить veth0 type vethe pear name veth1 1 sudo ip link add veth0 type veth peer veth1

Теперь мы должны связать наши пространства имен с трубкой так:

Sudo IP Link Set Veth0 Netns Net1 Sudo IP Link Set Set Veth1 Netns Net2 12 Sudo IP -ссылка SET VETH0 Netns Net1Sudo IP -ссылка SET SET VETH1 Netns Net2

Следующим шагом является предоставление IP -адреса для каждого виртуального интерфейса. Убедитесь, что вы не устанавливаете IP -адрес, который уже используется в вашей сети; В противном случае вы окажетесь с конфликтами. Мы назначим 192.168.1.100 Veth0 и 192.168.1.101 Veth1 с командами:

Sudo ip -n S1 Addr Addr 192.168.1.100/24 ​​dev veth0 sudo ip -n s1 addr addr 192.168.1.101/24 dev veth1 12 sudo ip -n s1 addr addr addr 192.168 .1.101/24 Dev Veth1

Выдающийся.

Теперь вы можете убедиться, что IP -адреса были назначены, и просмотреть таблицу ARP. Чтобы просмотреть IP -адрес Net1, команда будет:

sudo ip netns exec net1 ip addr 1 sudo ip netns exec net1 ip addr

Вывод должен выглядеть примерно так:

Как видите, правильный IP -адрес был назначен Net1. То же самое можно сделать для Net2 с командой:

sudo ip netns exec net2 ip addr 1 sudo ip netns exec net2 ip addr

Теперь мы можем поднять эти интерфейсы с командами:

sudo ip -n net1 select set veth0 up sudo ip -n net2 select set veth1 up 12 sudo ip -n net1 select veth0 upsudo ip -n net2 set selt veth1 up up

Давайте теперь проверим, чтобы увидеть, смогут ли они пинговать друг друга. Мы пинг Net2 из Net1 с командой:

Sudo ip netns exec net1 ping 192.168.1.101 1 Sudo ip netns exec net1 ping 192.168.1.101

Ping net1 от Net2 с:

Sudo ip netns exec net2 ping 192.168.1.100 1 Sudo ip netns exec net2 ping 192.168.1.100

В обоих случаях вы должны увидеть успешные результаты Ping.

Теперь давайте попытаемся прописать IP -адрес 192.168.1.100 с хост -машины. Пока в вашей сети нет устройства с этим адресом, оно должно быть недоступно:

Ping 192.168.1.100 1 Ping 192.168.1.100

Вы не должны быть в состоянии достичь этого адреса.

По сути, вы создали два сетевых пространства имен, которые могут получить доступ к друг другу, но не могут получить доступ к каким -либо другим ресурсам. Вот что такое пространства имен.

Trending Stories youtube.com/thenewstack Tech движется быстро, не пропустите эпизод. Подпишитесь на наш канал YouTube, чтобы транслировать все наши подкасты, интервью, демонстрации и многое другое. Группа подпишитесь с эскизом. Джек Уоллен-это то, что происходит, когда генеральный разум с умом с современным Snark. Джек — искатель истины и писатель слов с квантовым механическим карандашом и разрозненным ударом звука и души. Хотя он проживает … читайте больше от Джека Валлена

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *