Как создать виртуальный сетевой адаптер Linux
Обновлено: 21.11.2024
Следуйте этому руководству, чтобы узнать, как создавать виртуальные/вторичные IP-адреса на интерфейсе в Linux. Это позволяет назначить несколько IP-адресов одному интерфейсу.
Создание виртуальных/вторичных IP-адресов на интерфейсе в Linux
Вы можете временно или постоянно создавать виртуальные/вторичные IP-адреса на интерфейсе в Linux.
Создание временных виртуальных/вторичных IP-адресов на интерфейсе в Linux
Чтобы создать временные виртуальные/вторичные IP-адреса на интерфейсе в Linux, вы можете использовать такие команды, как ip , ifconfig .
Чтобы использовать команду ip для создания/добавления дополнительных IP-адресов к интерфейсу, см. примеры ниже.
В нашем примере сервера у нас есть интерфейс enp0s8 .
Проверка текущего IP-адреса интерфейса;
Основной IP-адрес, назначенный интерфейсу: 192.168.56.108 .
Предположим, что мы хотим временно назначить интерфейсу дополнительный IP-адрес 192.168.56.109 с помощью команды ip;
Addr и br — это сокращения для адреса и широковещательной передачи соответственно.
Подтверждение назначения вторичного IP-адреса;
Если вы перезапустите сеть/включите и отключите интерфейс или перезагрузите сервер, вы потеряете назначенный IP-адрес.
Создание постоянных виртуальных/вторичных IP-адресов на интерфейсе в Linux
Создание дополнительных IP-адресов в CentOS и аналогичных производных RHEL.
Создайте вторичные IP-адреса с помощью команды nmcli
В CentOS и подобных производных можно просто использовать инструмент командной строки NetworkManager, nmcli .
Эта команда может быть недоступна по умолчанию в системах Ubuntu/Debian. Если это так и вы хотите его использовать, установите пакет сетевого менеджера ( network-manager ).
Сначала подтвердите имя подключения интерфейса;
con — это аббревиатура для подключения .
В этом случае мы хотим добавить виртуальный/вторичный IP-адрес к интерфейсу enp0s8 , имя соединения enp0s8 .
Это можно сделать с помощью команды nmcli следующим образом. Обратите внимание на плюс(+)ipv4.addresses .
мод — это сокращение от слова «изменить».
Снимите и откройте интерфейс. Я предполагаю, что вы вошли в систему напрямую через консоль, а не через ssh.
Подтвердите назначение вторичного IP-адреса.
Чтобы удалить дополнительный IP-адрес с помощью команды nmcli, просто введите минус(-)ipv4.addresses .
Создание дополнительных IP-адресов с помощью nmtui (графический интерфейс Network Manager)
nmtui доступен, если у вас установлен пакет сетевого менеджера.
Запустите nmtui из терминала (вы можете использовать клавишу Tab для навигации по настройкам);
Выберите «Изменить подключение» и нажмите «ОК».
Выберите интерфейс для редактирования (в данном примере это enp0s8) и нажмите "Изменить";
Прокрутите вниз до конфигурации IPV4, нажмите «Добавить» и введите свой IP-адрес.
Далее нажмите "ОК" внизу > "Назад" > "Активировать соединение" > "ОК".
Выберите и деактивируйте интерфейс.
Выберите интерфейс и снова активируйте его.
Выберите Назад > Выйти.
Подтвердите назначение IP-адреса.
Таким же образом вы можете удалить это с помощью команды nmcli или прямо из инструмента nmtui.
Создание дополнительного IP-адреса в системах Ubuntu 18.04/Ubuntu 20.04
Чтобы создать постоянный IP-адрес в системах Ubuntu 18.04/Ubuntu 20.04, использующих netplan для управления сетевыми интерфейсами, выполните следующие действия:
Проверьте текущий IP-адрес интерфейса;
Текущая конфигурация сетевого плана для моих интерфейсов;
Чтобы добавить дополнительный IP-адрес к интерфейсу, отредактируйте файл конфигурации
и обновить строку;
Таким, как это может выглядеть;
Теперь конфигурация выглядит так:
Применить изменения конфигурации;
Подтвердить назначение IP-адреса
Создать дополнительный IP-адрес в системах Debian
Аналогично обновите интерфейсы следующим образом, чтобы добавить дополнительный IP-адрес.
Примеры конфигураций интерфейса;
Чтобы добавить дополнительный IP-адрес;
обновите конфигурацию следующим образом
посмотреть добавленные конфиги;
Сохраните и выйдите из конфигурации и перезапустите сеть;
Подтвердите IP-адрес;
И это все о том, как создавать виртуальные/вторичные IP-адреса на интерфейсе в Linux.
Linux обладает широкими возможностями виртуальных сетей, которые используются в качестве основы для размещения виртуальных машин и контейнеров, а также облачных сред. В этом посте я кратко расскажу обо всех часто используемых типах виртуальных сетевых интерфейсов. Здесь нет анализа кода, только краткое введение в интерфейсы и их использование в Linux. Этот пост в блоге может заинтересовать любого, кто имеет опыт работы в сети. Список интерфейсов можно получить с помощью команды ip link help.
В этом сообщении рассматриваются следующие часто используемые интерфейсы и некоторые интерфейсы, которые легко спутать друг с другом:
Прочитав эту статью, вы узнаете, что это за интерфейсы, в чем между ними разница, когда их использовать и как их создавать.
Информацию о других интерфейсах, таких как туннель, см. в разделе Введение в виртуальные интерфейсы Linux: туннели
Мост
Мост Linux ведет себя как сетевой коммутатор. Он пересылает пакеты между подключенными к нему интерфейсами. Обычно он используется для пересылки пакетов на маршрутизаторах, шлюзах или между виртуальными машинами и сетевыми пространствами имен на узле. Он также поддерживает STP, фильтр VLAN и отслеживание многоадресной рассылки.
Используйте мост, если вы хотите установить каналы связи между виртуальными машинами, контейнерами и хостами.
Вот как создать мост:
Это создает мостовое устройство с именем br0 и устанавливает два устройства TAP ( tap1 , tap2 ), устройство VETH ( veth1 ) и физическое устройство ( eth0 ) в качестве его подчиненных устройств, как показано на схеме выше.
Связанный интерфейс
Драйвер связывания Linux предоставляет метод объединения нескольких сетевых интерфейсов в один логический "связанный" интерфейс. Поведение связанного интерфейса зависит от режима; вообще говоря, режимы предоставляют услуги горячего резерва или балансировки нагрузки.
Используйте связанный интерфейс, если вы хотите увеличить скорость соединения или выполнить отработку отказа на своем сервере.
Вот как создать связанный интерфейс:
При этом создается связанный интерфейс с именем bond1 в режиме активного резервного копирования. Информацию о других режимах см. в документации ядра.
Командное устройство
Подобно связанному интерфейсу, цель устройства группы — предоставить механизм для группировки нескольких сетевых адаптеров (портов) в один логический (командное устройство) на уровне L2.
Главное, что нужно понимать, это то, что устройство группы не пытается воспроизвести или имитировать связанный интерфейс. Что он делает, так это решает ту же проблему, используя другой подход, используя, например, путь TX/RX без блокировки (RCU) и модульную конструкцию.
Но есть и некоторые функциональные различия между связанным интерфейсом и командой. Например, команда поддерживает балансировку нагрузки LACP, мониторинг линков NS/NA (IPV6), интерфейс D-Bus и т. д., которые отсутствуют в бондинге. Дополнительные сведения о различиях между сплоченностью и командой см. в разделе Особенности сплоченности и работы в команде.
Используйте команду, если вы хотите использовать некоторые функции, которые не предоставляет объединение.
Вот как создать команду:
При этом создается командный интерфейс с именем team0 в режиме active-backup и добавляются eth0 и eth1 в качестве подчиненных интерфейсов team0.
Недавно в Linux был добавлен новый драйвер net_failover. Это еще одно ведущее сетевое устройство аварийного переключения для виртуализации, которое управляет основным (сквозное/VF [Virtual Function] устройство) подчиненным сетевым устройством и резервным (исходный паравиртуальный интерфейс) подчиненным сетевым устройством.
Виртуальная локальная сеть, также известная как виртуальная локальная сеть, разделяет широковещательные домены путем добавления тегов к сетевым пакетам.Сети VLAN позволяют сетевым администраторам группировать хосты под одним коммутатором или между разными коммутаторами.
Заголовок VLAN выглядит следующим образом:
Используйте VLAN, если вы хотите разделить подсеть в виртуальных машинах, пространствах имен или хостах.
Вот как создать VLAN:
Это добавляет VLAN 2 с именем eth0.2 и VLAN 3 с именем eth0.3 . Топология выглядит следующим образом:
Примечание. При настройке VLAN необходимо убедиться, что коммутатор, подключенный к хосту, может обрабатывать теги VLAN, например, установив для порта коммутатора режим транка.
VXLAN
VXLAN (виртуальная расширяемая локальная сеть) — это протокол туннелирования, разработанный для решения проблемы ограниченного количества идентификаторов VLAN (4096) в IEEE 802.1q. Он описан в IETF RFC 7348.
Благодаря 24-битному идентификатору сегмента, также известному как сетевой идентификатор VXLAN (VNI), VXLAN поддерживает до 2^24 (16 777 216) виртуальных локальных сетей, что в 4 096 раз превышает пропускную способность VLAN.
VXLAN инкапсулирует кадры уровня 2 с заголовком VXLAN в пакет UDP-IP, который выглядит следующим образом:
VXLAN обычно развертывается в центрах обработки данных на виртуализированных хостах, которые могут быть распределены по нескольким стойкам.
Вот как использовать VXLAN:
MACVLAN
С помощью VLAN вы можете создавать несколько интерфейсов поверх одного и фильтровать пакеты на основе тега VLAN. С помощью MACVLAN вы можете создать несколько интерфейсов с разными адресами уровня 2 (то есть Ethernet MAC) поверх одного.
До появления MACVLAN, если вы хотели подключиться к физической сети из виртуальной машины или пространства имен, вам нужно было создать устройства TAP/VETH, подключить одну сторону к мосту и подключить физический интерфейс к мосту на хосте на одновременно, как показано ниже.
Теперь, с помощью MACVLAN, вы можете привязать физический интерфейс, связанный с MACVLAN, напрямую к пространствам имен без использования моста.
Существует пять типов MACVLAN:
<р>1. Частный: не разрешает связь между экземплярами MACVLAN на одном и том же физическом интерфейсе, даже если внешний коммутатор поддерживает режим шпильки.<р>2. VEPA: данные от одного экземпляра MACVLAN к другому на том же физическом интерфейсе передаются через физический интерфейс. Либо подключенный коммутатор должен поддерживать режим шпильки, либо должен быть маршрутизатор TCP/IP, перенаправляющий пакеты для обеспечения связи.
<р>3. Мост: все конечные точки напрямую связаны друг с другом с помощью простого моста через физический интерфейс.
<р>4. Passthru: позволяет одной виртуальной машине напрямую подключаться к физическому интерфейсу.
<р>5. Источник: режим источника используется для фильтрации трафика на основе списка разрешенных исходных MAC-адресов для создания ассоциаций VLAN на основе MAC-адресов. См. сообщение о коммите.
Тип выбирается в соответствии с различными потребностями. Чаще всего используется режим моста.
Используйте MACVLAN, если вы хотите напрямую подключиться к физической сети из контейнеров.
Вот как настроить MACVLAN:
При этом создаются два новых устройства MACVLAN в режиме моста, и эти два устройства назначаются двум разным пространствам имен.
IPVLAN
IPVLAN похож на MACVLAN, но с той разницей, что конечные точки имеют один и тот же MAC-адрес.
IPVLAN поддерживает режимы L2 и L3. Режим IPVLAN L2 действует как MACVLAN в режиме моста. Родительский интерфейс выглядит как мост или коммутатор.
В режиме IPVLAN L3 родительский интерфейс действует как маршрутизатор, а пакеты маршрутизируются между конечными точками, что обеспечивает лучшую масштабируемость.
Что касается того, когда использовать IPVLAN, в документации ядра IPVLAN говорится, что MACVLAN и IPVLAN «очень похожи во многих отношениях, и конкретный вариант использования может очень хорошо определить, какое устройство выбрать. если одна из следующих ситуаций определяет ваш вариант использования затем вы можете выбрать использование ipvlan -
(a) Хост Linux, подключенный к внешнему коммутатору/маршрутизатору, имеет настроенную политику, разрешающую только один Mac на порт.
(b) Нет созданных виртуальных устройств на ведущем устройстве превышает емкость Mac и переводит сетевую карту в неразборчивый режим, а снижение производительности вызывает беспокойство.
(c) Если ведомое устройство должно быть помещено во враждебное/ненадежное сетевое пространство имен, где L2 на ведомом устройстве может быть изменено/использовано неправильно."
Вот как настроить экземпляр IPVLAN:
При этом создается устройство IPVLAN с именем ipvl0 в режиме L2, назначенное пространству имен ns0 .
MACVTAP/IPVTAP
MACVTAP/IPVTAP – это новый драйвер устройства, предназначенный для упрощения виртуализированных мостовых сетей. Когда экземпляр MACVTAP/IPVTAP создается поверх физического интерфейса, ядро также создает символьное устройство/dev/tapX, которое будет использоваться точно так же, как устройство TUN/TAP, которое может напрямую использоваться KVM/QEMU.
С помощью MACVTAP/IPVTAP вы можете заменить комбинацию драйверов TUN/TAP и моста одним модулем:
Обычно MACVLAN/IPVLAN используется для того, чтобы и гость, и хост отображались непосредственно на коммутаторе, к которому подключен хост. Разница между MACVTAP и IPVTAP такая же, как и между MACVLAN/IPVLAN.
Вот как создать экземпляр MACVTAP:
MAC-сек
MACsec (Media Access Control Security) — это стандарт IEEE для обеспечения безопасности проводных локальных сетей Ethernet. Подобно IPsec, как спецификация уровня 2, MACsec может защищать не только IP-трафик, но и ARP, обнаружение соседей и DHCP. Заголовки MACsec выглядят следующим образом:
Основным вариантом использования MACsec является защита всех сообщений в стандартной локальной сети, включая сообщения ARP, NS и DHCP.
Вот как настроить конфигурацию MACsec:
Примечание. При этом добавляется только устройство MACsec с именем macsec0 на интерфейсе eth1 . Более подробные сведения о конфигурациях см. в разделе «Пример конфигурации» в этом вводном руководстве по MACsec, написанном Сабриной Дуброка.
Устройство VETH (виртуальный Ethernet) представляет собой локальный туннель Ethernet. Устройства создаются парами, как показано на схеме ниже.
Пакеты, передаваемые на одном устройстве в паре, немедленно принимаются на другом устройстве. Когда какое-либо из устройств не работает, состояние соединения пары не работает.
Используйте конфигурацию VETH, когда пространствам имен необходимо взаимодействовать с пространством имен основного хоста или между собой.
Вот как настроить конфигурацию VETH:
Это создает два пространства имен, net1 и net2, и пару устройств VETH, и назначает veth1 пространству имен net1 и veth2 пространству имен net2. Эти два пространства имен связаны с этой парой VETH. Назначьте пару IP-адресов, и вы сможете отправлять эхо-запросы и обмениваться данными между двумя пространствами имен.
Подобно сетевым петлевым устройствам, драйвер VCAN (виртуальный CAN) предлагает виртуальный локальный интерфейс CAN (локальная сеть контроллеров), поэтому пользователи могут отправлять и получать сообщения CAN через интерфейс VCAN. В настоящее время CAN в основном используется в автомобильной сфере.
Дополнительную информацию о протоколе CAN см. в документации ядра CAN.
Используйте VCAN, если хотите протестировать реализацию протокола CAN на локальном хосте.
Вот как создать VCAN:
VXCAN
Подобно драйверу VETH, VXCAN (виртуальный туннель CAN) реализует локальный туннель трафика CAN между двумя сетевыми устройствами VCAN. Когда вы создаете экземпляр VXCAN, два устройства VXCAN создаются как пара. Когда один конец получает пакет, пакет появляется на паре устройств и наоборот. VXCAN можно использовать для связи между пространствами имен.
Используйте конфигурацию VXCAN, если вы хотите отправлять сообщения CAN через пространства имен.
Вот как настроить экземпляр VXCAN:
Примечание. VXCAN пока не поддерживается в Red Hat Enterprise Linux.
ИПОИБ
Устройство IPOIB поддерживает протокол IP-over-InfiniBand. Это позволяет передавать IP-пакеты через InfiniBand (IB), поэтому вы можете использовать свое устройство IB в качестве быстрой сетевой карты.
Драйвер IPoIB поддерживает два режима работы: дейтаграмма и подключение. В режиме дейтаграммы используется транспорт IB UD (ненадежная дейтаграмма). В подключенном режиме используется транспорт IB RC (Reliable Connected). Подключенный режим использует преимущества подключенного характера транспорта IB и позволяет использовать MTU до максимального размера IP-пакета 64 КБ.
Подробнее см. в документации по ядру IPOIB.
Используйте устройство IPOIB, если у вас есть устройство IB и вы хотите общаться с удаленным хостом через IP.
Вот как создать устройство IPOIB:
НЛМОН
NLMON — это устройство мониторинга Netlink.
Используйте устройство NLMON, если вы хотите отслеживать системные сообщения Netlink.
Вот как создать устройство NLMON:
Это создает устройство NLMON с именем nlmon0 и настраивает его. Используйте анализатор пакетов (например, tcpdump) для захвата сообщений Netlink. Последние версии Wireshark поддерживают декодирование сообщений Netlink.
Фиктивный интерфейс
Фиктивный интерфейс полностью виртуален, как, например, петлевой интерфейс. Цель фиктивного интерфейса — предоставить устройство для маршрутизации пакетов без фактической их передачи.
Используйте фиктивный интерфейс, чтобы неактивный адрес SLIP (серийный интернет-протокол) выглядел как реальный адрес для локальных программ. В настоящее время фиктивный интерфейс в основном используется для тестирования и отладки.
Вот как создать фиктивный интерфейс:
Драйвер IFB (промежуточный функциональный блок) предоставляет устройство, которое позволяет концентрировать трафик из нескольких источников и формировать входящий трафик, а не отбрасывать его.
Используйте интерфейс IFB, если хотите ставить в очередь и формировать входящий трафик.
Вот как создать интерфейс IFB:
При этом создается устройство IFB с именем ifb0 и заменяется планировщик корневого qdisc на SFQ (Stochastic Fairness Queueing), который является бесклассовым планировщиком очередей. Затем он добавляет планировщик входящего qdisc на eth0 и перенаправляет весь входящий трафик на ifb0 .
Чтобы узнать больше о примерах использования qdisc IFB, обратитесь к этой вики Linux Foundation на IFB.
Дополнительные ресурсы
-
в блоге разработчиков Red Hat в блоге разработчиков Red Hat
интерфейс netdevsim
netdevsim – это смоделированное сетевое устройство, которое используется для тестирования различных сетевых API. В настоящее время основное внимание уделяется тестированию аппаратной
разгрузки, tc/XDP BPF и SR-IOV.
В этой процедуре показано, как создать виртуальную сетевую карту (VNIC). VNIC — это псевдоинтерфейсы, на которых строятся контейнеры виртуальной сети. Полученный VNIC имеет автоматически сгенерированный MAC-адрес. В зависимости от используемого сетевого интерфейса вместо этого вы можете явно назначить MAC-адрес VNIC, как описано в dladm(1M).
При первом входе в систему вы автоматически попадаете в ее глобальную зону, где вы настраиваете VNIC. Вы можете использовать VNIC в глобальной зоне или в качестве строительных блоков для определенного типа неглобальной зоны, эксклюзивной IP-зоны. Общие сведения о зонах см. в разделе Обзор зон в Руководстве системного администратора: виртуализация с использованием операционной системы Solaris.
Стать суперпользователем или взять на себя аналогичную корневую роль.
Просмотр информации о доступных физических интерфейсах системы.
В настоящее время в системе установлено два интерфейса: e1000g0 и e1000g2.
Проверьте состояние каналов передачи данных в системе.
Только канал передачи данных e1000g0 работает через этот интерфейс и настроен на «ВВЕРХ».
Если вы не создадите собственные имена для каналов передачи данных, канал данных будет иметь то же имя, что и имя устройства сетевого интерфейса, отображаемое dladm show-phys . Например, сетевой интерфейс e1000g0 имеет имя канала передачи данных e1000g0, пока вы его не настроите. Дополнительную информацию о настраиваемых именах каналов передачи данных см. в разделе Конфигурация канала передачи данных и IP-интерфейса (задачи).
Проверьте состояние всех интерфейсов на уровне IP.
В выходных данных указано, что интерфейс e1000g0 имеет IP-адрес 192.168.3.70. Таким образом, система подключена к сети 192.168.3.0/24. e1000g0 имеет MAC-адрес 0:14:4f:94:d0:40.
Создайте VNIC в глобальной зоне системы.
канал передачи данных — это имя интерфейса, на котором должен быть настроен VNIC.
vnic-name — это имя, которое вы хотите присвоить VNIC.
Например, чтобы создать VNIC с именем vnic0 на интерфейсе e1000g0, введите следующее:
Повторите этот шаг для всех запланированных VNIC в виртуальной сети.
Подключите VNIC и назначьте ему IP-адрес.
Все виртуальные сетевые адаптеры должны быть настроены и подключены на уровне IP. Виртуальные сетевые карты, которые используются в сочетании с эксклюзивной IP-зоной, можно подключить как часть начальной настройки зоны или вручную, выполнив действия, описанные в разделе Как вручную настроить виртуальную сетевую карту и эксклюзивную IP-зону.
Чтобы настроить VNIC в глобальной зоне, выполните следующие действия:
Используйте команду ifconfig, как показано, для настройки интерфейса.
Например, вы должны настроить и подключить vnic0 через интерфейс e1000g0 следующим образом:
Убедитесь, что VNIC настроен и подключен.
Вывод должен выглядеть следующим образом:
Найдите VNIC, который вы только что настроили, в выходных данных ifconfig. Например, vnic0 находится в предыдущем выводе. Указанный вами IP-адрес и флаг ifconfig «UP» в выходных данных также должны присутствовать. Эти элементы указывают на то, что VNIC правильно настроен и подключен.
Убедитесь, что конфигурация VNIC сохраняется при перезагрузке
Создайте файл /etc/hostname. vnic-name .
В глобальной зоне выполните следующие действия:
Например, вы вводите следующее:
Обновите файл /etc/inet/hosts, указав записи для всех созданных вами VNIC.
Записи в файле должны иметь следующий формат:
Например, вы можете создать следующие записи:
При создании записи псевдонима зоны обязательно поставьте тире после идентификатора зоны. Кроме того, замените точечные разделители в IP-адресе дефисами, как показано ранее.
Информацию об эксклюзивных IP-зонах см. в разделе Как проверить эксклюзивную IP-зону через конфигурацию VNIC
Убедитесь, что новый VNIC создан.
Пример 11–1 Создание виртуальных сетевых интерфейсов (VNIC)
Этот пример содержит команды для создания и проверки трех VNIC. Один VNIC используется в глобальной зоне. Два других VNIC используются с эксклюзивными IP-зонами в предстоящих задачах. В этом примере показаны действия, описанные в разделе «Настройка базовой виртуальной сети» для выполнения следующих действий:
Создайте три VNIC: vnic0, vnic1 и vnic2 на канале передачи данных e1000g0.
Убедитесь, что VNIC созданы
Настройте и подключите vnic0 в глобальной зоне.
Сохраняйте vnic0 при перезагрузке.
Вы должны войти в систему как суперпользователь или эквивалентная роль, чтобы выполнять следующие команды.
Дальнейшие шаги
Информация о настройке домена xVM через VNIC появится позже.
Пример конфигурации базовой виртуальной сети см. в примере 11–6.
В ядре Linux поддержка сетевого оборудования и методы взаимодействия с этими устройствами стандартизированы API сокетов:
Для поддержки новых типов вычислительных рабочих нагрузок, различных сценариев развертывания и более эффективного использования аппаратных ресурсов ОС Linux поддерживает виртуализацию различных вычислительных ресурсов: ЦП, памяти, хранилища и сети. Возможности виртуальной сети действительно используются в качестве основы для размещения виртуальных машин и контейнеров.
Общий обзор компонентов виртуальной сети, доступных в Linux, описан в этой статье с веб-сайта IBM developerworks.
Типы виртуальных сетевых интерфейсов
- Мост: мост Linux ведет себя как сетевой коммутатор. Он пересылает пакеты между подключенными к нему интерфейсами. Обычно он используется для пересылки пакетов на маршрутизаторах, шлюзах или между виртуальными машинами и сетевыми пространствами имен на узле. Он также поддерживает STP, фильтр VLAN и отслеживание многоадресной рассылки.
- TUN. Устройства TUN (сетевой туннель) работают на уровне IP или третьем уровне сетевого стека и обычно представляют собой двухточечные соединения. Типичное использование устройства TUN — установление VPN-соединений, поскольку оно дает программному обеспечению VPN возможность зашифровать данные до того, как они будут переданы по сети. Поскольку устройство TUN работает на третьем уровне, оно может принимать только IP-пакеты, а в некоторых случаях только IPv4. Если вам нужно запустить любой другой протокол на устройстве TUN, вам не повезло. Кроме того, поскольку устройства TUN работают на третьем уровне, их нельзя использовать в мостах, и они обычно не поддерживают широковещательную передачу.
- TAP: устройства TAP (точки доступа к терминалу), напротив, работают на уровне Ethernet или на втором уровне и поэтому ведут себя очень похоже на настоящий сетевой адаптер. Поскольку они работают на втором уровне, они могут передавать любой протокол третьего уровня и не ограничиваются соединениями точка-точка. Устройства TAP могут быть частью моста и обычно используются в системах виртуализации для предоставления виртуальных сетевых адаптеров нескольким гостевым машинам. Поскольку устройства TAP работают на втором уровне, они будут перенаправлять широковещательный трафик, что обычно делает их плохим выбором для VPN-подключений, поскольку канал VPN обычно намного уже, чем сеть LAN (и, как правило, дороже).
- VETH: Виртуальные интерфейсы Ethernet, по сути, являются виртуальным эквивалентом соединительного кабеля: то, что входит в один конец, выходит на другой. Когда какое-либо из устройств не работает, состояние соединения пары не работает.
Пример создания моста:
Подчинение сетевого интерфейса мосту:
Пример создания двух виртуальных интерфейсов Ethernet (ep1,ep2) и их соединения:
veth-интерфейсы также могут быть связаны с мостом:
К интерфейсам также можно добавить IP-адреса, например:
Все доступные сетевые интерфейсы будут показаны с: ip address show
Доступны многие другие типы виртуальных сетевых интерфейсов, как описано в этом сообщении из блога разработчиков RedHat.
Пространства имен — это функция, доступная в ядре Linux, которая используется в качестве основы для многих программных технологий, таких как контейнеры Linux (LXC), Docker и программно-определяемые сети (SDN). В основном это позволяет определять и использовать несколько виртуальных экземпляров ресурсов, доступных на хосте.
Пространства имен Linux включают (дополнительные ссылки доступны на странице руководства):
В частности, сетевые пространства имен позволяют отдельным контейнерам иметь эксклюзивный доступ к ресурсам виртуальной сети, при этом каждому контейнеру может быть назначен отдельный сетевой стек.
Пространства имен сети позволяют различным процессам иметь разные представления о сети, а различные аспекты работы в сети могут быть изолированы между процессами:
- Интерфейсы: разные процессы могут подключаться к адресам на разных интерфейсах.
- Маршруты: поскольку процессы могут видеть разные адреса из разных пространств имен, им также нужны разные маршруты для подключения к сетям на этих интерфейсах.
- Правила брандмауэра: поскольку они зависят от исходного или целевого интерфейсов, вам могут потребоваться разные правила брандмауэра в разных сетевых пространствах имен.
Обработка сетевых пространств имен осуществляется с помощью команды ip, которая является частью пакета iproute2.
ПРИМЕЧАНИЕ: все команды в следующих примерах должны выполняться непосредственно пользователем root или с привилегиями root (например, с помощью sudo ).
Создать, перечислить и удалить сетевое пространство имен:
ns1 — это сетевая NS, полностью отделенная от стандартной (которая всегда доступна после каждой загрузки Linux).
Отдельные сетевые пространства имен можно соединить вместе с помощью интерфейсов veth:
Виртуальным интерфейсам Ethernet можно назначить IP-адрес внутри сетевого класса
После назначения IP-адресов интерфейсы veth должны быть переведены в состояние UP:
Пример выполнения команды ping между двумя разными пространствами имен через интерфейсы veth:
Сетевому пространству имен может быть назначен собственный сетевой интерфейс, например петлевой интерфейс (который по умолчанию всегда присутствует в новой сети NS, но находится в состоянии DOWN):
У него также может быть отдельная таблица маршрутизации (обратите внимание, что при первоначальном задании сетевого пространства имен таблица маршрутизации пуста):
После создания сетевого NS он будет отображаться в нескольких местах:
Виртуальная сеть с сетевыми пространствами имен и мостом
Учитывая следующие свойства:
- сетевые NS могут иметь собственные сетевые маршруты;
- виртуальные интерфейсы Ethernet поставляются парами;
- можно назначить сетевой интерфейс другому сетевому NS;
затем можно создать пример нескольких сетевых NS, соединенных вместе через мост Linux и правила маршрутизации внутри одного физического хоста. Устройство-мост дает нам виртуальный эквивалент сетевого коммутатора, позволяя нам подключать несколько интерфейсов (виртуальных или нет) и обеспечивать их взаимодействие друг с другом.
Ниже представлена концептуальная схема:
- br-veth: прикреплен к мосту
- veth: часть соответствующей сети NS
Сначала будут созданы два сетевых NS:
Затем будут созданы две пары veth:
Теперь два новых veth будут подключены к сети NS ( br-veth — это просто удобное соглашение об именах, но оно не идентифицирует veth, подключенный к мосту).
Два veth будут показаны только в соответствующих сетях NS:
Примечание: veth1 помечен как DOWN . То же самое касается veth2 .
Назначьте IP-адрес 192.168.1.11 с сетевой маской 255.255.255.0 для veth1:
IP-адрес (того же сетевого класса) будет назначен также veth2 :
Даже когда двум veth назначен IP-адрес, они не могут взаимодействовать друг с другом: причина в том, что в сетевом пространстве имен по умолчанию нет настроенного интерфейса, который может отправлять трафик на два veth-интерфейса и обратно.
Добавление моста — единственный способ продвинуться дальше:
Можно проверить, доступен ли мост:
Пришло время подключить два других интерфейса veth ( br-veth ) и подключить их к мосту:
Для доступа к veth-интерфейсам через таблицу маршрутизации самого хоста мосту нужен IP-адрес:
Строка brd задает широковещательный адрес (192.168.1.255) с указанием символа + (255).
Таблицу маршрутизации можно проверить следующим образом:
Из глобальной сети NS можно получить доступ к обоим IP-адресам (192.168.1.) с помощью простого ping .
Также можно получить доступ к ns2 из ns1, если определена правильная маршрутизация:
Достижение ns2 можно проверить следующим образом:
Если установка остановится на этом этапе, обе сетевые NS будут практически изолированы от внешнего мира: они могут только пинговать друг друга (при условии, что настроен внутренний маршрут), но не могут связаться ни с одним другим IP-адресом за пределами 192.168.1.0. /24 пробела.
Для достижения этого результата мы можем использовать NAT (преобразование сетевых адресов) через iptables:
Предыдущая команда укажет, что в таблице nat мы добавляем ( -A ) правило к цепочке POSTROUTING для указанного исходного адреса ( -s ), и действие будет MASQUERADE .
И последнее, но не менее важное: переадресация IP должна быть включена в сетевом стеке хоста:
Читайте также: