Pseudo-Ethernet (MACVLAN) интерфейсы в VyOS

Pseudo-Ethernet (MACVLAN) интерфейсы в VyOS

Pseudo-Ethernet или MACVLAN интерфейсы представляют собой виртуальные подинтерфейсы физических Ethernet интерфейсов, каждый из которых имеет уникальный MAC адрес. Эта технология особенно полезна в виртуализированных средах и для сетевого тестирования.

Обзор

Что такое Pseudo-Ethernet (MACVLAN)

MACVLAN позволяет создать несколько виртуальных сетевых интерфейсов на базе одного физического Ethernet порта. Каждый виртуальный интерфейс (sub-interface) получает собственный уникальный MAC адрес и ведет себя как независимый физический интерфейс.

Ключевые особенности:

  • Каждый подинтерфейс имеет уникальный MAC адрес
  • Меньше системных накладных расходов по сравнению с традиционным bridging
  • Позволяет обойти ограничение в 4096 VLAN на физический порт
  • Ведет себя как реальный Ethernet интерфейс
  • Поддерживает IPv4 и IPv6 адресацию
  • Наследует физические характеристики от родительского интерфейса

Преимущества

  1. Виртуализация - идеально подходит для виртуальных машин и контейнеров
  2. Производительность - низкие накладные расходы, работа на уровне ядра
  3. Масштабируемость - создание множества логических интерфейсов без дополнительного оборудования
  4. Гибкость - обход ограничений сетевого оборудования
  5. Тестирование - удобно для сетевого тестирования и эмуляции

Ограничения

Важные ограничения, которые необходимо учитывать:

  1. Ping от хоста невозможен - Pseudo-Ethernet интерфейсы нельзя пинговать с самого хост-роутера
  2. Нет пересылки между Pseudo-Ethernet интерфейсами - Ethernet фреймы не пересылаются между MACVLAN интерфейсами на одном физическом порту
  3. Проблемы совместимости:
    • Может не работать в VMware ESXi (требует promiscuous mode)
    • Некоторые сетевые коммутаторы ожидают один MAC на порт и могут блокировать множественные MAC адреса
    • WiFi интерфейсы обычно не поддерживают множественные MAC адреса
  4. Security - некоторые сети блокируют порты с множественными MAC адресами из соображений безопасности

Базовая конфигурация

Создание Pseudo-Ethernet интерфейса

Основная команда для создания MACVLAN интерфейса:

# Создать peth0 на базе eth0
set interfaces pseudo-ethernet peth0 source-interface eth0
set interfaces pseudo-ethernet peth0 address 192.0.2.1/24
set interfaces pseudo-ethernet peth0 description 'Pseudo-Ethernet on eth0'

commit
save

Компоненты конфигурации:

  • peth0 - имя виртуального интерфейса (может быть любым)
  • source-interface eth0 - физический интерфейс-родитель
  • address - IP адрес виртуального интерфейса
  • description - описание интерфейса

Множественные Pseudo-Ethernet интерфейсы

Создание нескольких MACVLAN интерфейсов на одном физическом порту:

# Первый pseudo-ethernet интерфейс
set interfaces pseudo-ethernet peth0 source-interface eth0
set interfaces pseudo-ethernet peth0 address 10.10.0.1/24
set interfaces pseudo-ethernet peth0 description 'MACVLAN Interface 1'

# Второй pseudo-ethernet интерфейс
set interfaces pseudo-ethernet peth1 source-interface eth0
set interfaces pseudo-ethernet peth1 address 10.20.0.1/24
set interfaces pseudo-ethernet peth1 description 'MACVLAN Interface 2'

# Третий pseudo-ethernet интерфейс
set interfaces pseudo-ethernet peth2 source-interface eth0
set interfaces pseudo-ethernet peth2 address 10.30.0.1/24
set interfaces pseudo-ethernet peth2 description 'MACVLAN Interface 3'

commit
save

Проверка конфигурации

# Показать все интерфейсы
show interfaces

# Показать конкретный pseudo-ethernet интерфейс
show interfaces pseudo-ethernet peth0

# Детальная информация
show interfaces pseudo-ethernet peth0 detail

# Статистика
show interfaces pseudo-ethernet peth0 statistics

# Краткая информация
show interfaces pseudo-ethernet peth0 brief

Конфигурация параметров

IP адресация

Статический IPv4:

set interfaces pseudo-ethernet peth0 source-interface eth0
set interfaces pseudo-ethernet peth0 address 192.168.100.1/24
set interfaces pseudo-ethernet peth0 address 192.168.100.2/24

Статический IPv6:

set interfaces pseudo-ethernet peth0 address 2001:db8:100::1/64
set interfaces pseudo-ethernet peth0 address 2001:db8:100::2/64

Dual-stack (IPv4 + IPv6):

set interfaces pseudo-ethernet peth0 source-interface eth0
set interfaces pseudo-ethernet peth0 address 192.168.100.1/24
set interfaces pseudo-ethernet peth0 address 2001:db8:100::1/64

DHCP клиент

DHCPv4:

set interfaces pseudo-ethernet peth0 source-interface eth0
set interfaces pseudo-ethernet peth0 address dhcp
set interfaces pseudo-ethernet peth0 description 'DHCP client on peth0'

DHCPv6:

set interfaces pseudo-ethernet peth0 address dhcpv6

DHCP опции:

# Client ID
set interfaces pseudo-ethernet peth0 dhcp-options client-id 'my-macvlan-client'

# Hostname
set interfaces pseudo-ethernet peth0 dhcp-options host-name 'vyos-macvlan'

# Vendor class ID
set interfaces pseudo-ethernet peth0 dhcp-options vendor-class-id 'vyos-peth'

# Расстояние маршрута по умолчанию
set interfaces pseudo-ethernet peth0 dhcp-options default-route-distance 210

# Отклонение маршрута по умолчанию от DHCP
set interfaces pseudo-ethernet peth0 dhcp-options no-default-route

MAC адрес

По умолчанию MACVLAN интерфейс получает случайно сгенерированный MAC адрес. Можно установить конкретный MAC:

# Установить конкретный MAC адрес
set interfaces pseudo-ethernet peth0 source-interface eth0
set interfaces pseudo-ethernet peth0 mac '00:50:56:00:ab:cd'
set interfaces pseudo-ethernet peth0 address 192.168.1.100/24

Примечание: Каждый MACVLAN интерфейс должен иметь уникальный MAC адрес.

MTU (Maximum Transmission Unit)

# Установить MTU
set interfaces pseudo-ethernet peth0 source-interface eth0
set interfaces pseudo-ethernet peth0 mtu 1500
set interfaces pseudo-ethernet peth0 address 10.0.0.1/24

Рекомендации по MTU:

  • MTU pseudo-ethernet не может превышать MTU родительского интерфейса
  • Стандартный Ethernet: 1500
  • Jumbo frames: до 9000 (требует поддержки физического интерфейса)

Описание интерфейса

set interfaces pseudo-ethernet peth0 description 'Test network for lab environment'

Отключение интерфейса

# Отключить интерфейс
set interfaces pseudo-ethernet peth0 disable

# Включить интерфейс
delete interfaces pseudo-ethernet peth0 disable

Расширенные параметры

IPv4 настройки

ARP cache timeout:

set interfaces pseudo-ethernet peth0 ip arp-cache-timeout 3600

Proxy ARP:

set interfaces pseudo-ethernet peth0 ip enable-proxy-arp

Source validation (защита от IP spoofing):

# Строгий режим (RFC 3704)
set interfaces pseudo-ethernet peth0 ip source-validation strict

# Мягкий режим
set interfaces pseudo-ethernet peth0 ip source-validation loose

# Отключено
set interfaces pseudo-ethernet peth0 ip source-validation disable

Отключение IP forwarding на интерфейсе:

set interfaces pseudo-ethernet peth0 ip disable-forwarding

IPv6 настройки

IPv6 автоконфигурация (SLAAC):

set interfaces pseudo-ethernet peth0 ipv6 address autoconf

Duplicate Address Detection (DAD):

set interfaces pseudo-ethernet peth0 ipv6 dup-addr-detect-transmits 1

Отключение IPv6:

set interfaces pseudo-ethernet peth0 ipv6 disable

Отключение IPv6 forwarding:

set interfaces pseudo-ethernet peth0 ipv6 disable-forwarding

VLAN на Pseudo-Ethernet

MACVLAN интерфейсы могут иметь собственные VLAN sub-interfaces:

# MACVLAN с VLAN тегированием
set interfaces pseudo-ethernet peth0 source-interface eth0
set interfaces pseudo-ethernet peth0 vif 100 address 10.100.0.1/24
set interfaces pseudo-ethernet peth0 vif 100 description 'VLAN 100 on MACVLAN'

set interfaces pseudo-ethernet peth0 vif 200 address 10.200.0.1/24
set interfaces pseudo-ethernet peth0 vif 200 description 'VLAN 200 on MACVLAN'

commit

Структура:

eth0 (физический интерфейс)
└── peth0 (MACVLAN)
    ├── peth0.100 (VLAN 100)
    └── peth0.200 (VLAN 200)

VRF (Virtual Routing and Forwarding)

Привязка Pseudo-Ethernet интерфейса к VRF:

# Создать VRF
set vrf name RED table 100

# Привязать pseudo-ethernet к VRF
set interfaces pseudo-ethernet peth0 source-interface eth0
set interfaces pseudo-ethernet peth0 address 172.16.1.1/24
set interfaces pseudo-ethernet peth0 vrf RED

commit

Зеркалирование трафика

# Зеркалирование входящего трафика
set interfaces pseudo-ethernet peth0 mirror ingress eth1

# Зеркалирование исходящего трафика
set interfaces pseudo-ethernet peth0 mirror egress eth1

Политики трафика (QoS)

# Создать traffic policy
set traffic-policy shaper PETH-LIMIT bandwidth 100mbit
set traffic-policy shaper PETH-LIMIT default bandwidth 80mbit

# Применить к pseudo-ethernet интерфейсу
set interfaces pseudo-ethernet peth0 traffic-policy out PETH-LIMIT

Практические сценарии использования

Сценарий 1: Сетевое тестирование

Создание нескольких тестовых интерфейсов для лабораторной среды:

# Parent интерфейс
set interfaces ethernet eth0 description 'Lab physical interface'

# Тестовая сеть 1
set interfaces pseudo-ethernet lab1 source-interface eth0
set interfaces pseudo-ethernet lab1 address 10.1.1.1/24
set interfaces pseudo-ethernet lab1 description 'Lab Network 1'

# Тестовая сеть 2
set interfaces pseudo-ethernet lab2 source-interface eth0
set interfaces pseudo-ethernet lab2 address 10.2.2.1/24
set interfaces pseudo-ethernet lab2 description 'Lab Network 2'

# Тестовая сеть 3
set interfaces pseudo-ethernet lab3 source-interface eth0
set interfaces pseudo-ethernet lab3 address 10.3.3.1/24
set interfaces pseudo-ethernet lab3 description 'Lab Network 3'

# DHCP для каждой тестовой сети
set service dhcp-server shared-network-name LAB1 subnet 10.1.1.0/24 option default-router 10.1.1.1
set service dhcp-server shared-network-name LAB1 subnet 10.1.1.0/24 range 0 start 10.1.1.100
set service dhcp-server shared-network-name LAB1 subnet 10.1.1.0/24 range 0 stop 10.1.1.200

set service dhcp-server shared-network-name LAB2 subnet 10.2.2.0/24 option default-router 10.2.2.1
set service dhcp-server shared-network-name LAB2 subnet 10.2.2.0/24 range 0 start 10.2.2.100
set service dhcp-server shared-network-name LAB2 subnet 10.2.2.0/24 range 0 stop 10.2.2.200

commit
save

Сценарий 2: Виртуализация с контейнерами

Предоставление отдельных сетевых интерфейсов для Docker контейнеров или Podman:

# MACVLAN для контейнера 1
set interfaces pseudo-ethernet container1 source-interface eth1
set interfaces pseudo-ethernet container1 address 172.20.1.2/24
set interfaces pseudo-ethernet container1 description 'Container 1 Network'

# MACVLAN для контейнера 2
set interfaces pseudo-ethernet container2 source-interface eth1
set interfaces pseudo-ethernet container2 address 172.20.1.3/24
set interfaces pseudo-ethernet container2 description 'Container 2 Network'

# MACVLAN для контейнера 3
set interfaces pseudo-ethernet container3 source-interface eth1
set interfaces pseudo-ethernet container3 address 172.20.1.4/24
set interfaces pseudo-ethernet container3 description 'Container 3 Network'

# Firewall изоляция между контейнерами
set firewall ipv4 forward filter rule 500 action drop
set firewall ipv4 forward filter rule 500 inbound-interface name container1
set firewall ipv4 forward filter rule 500 outbound-interface name container2

set firewall ipv4 forward filter rule 501 action drop
set firewall ipv4 forward filter rule 501 inbound-interface name container2
set firewall ipv4 forward filter rule 501 outbound-interface name container1

commit
save

Сценарий 3: Множественные подсети на одном порту

Обход ограничения количества VLAN на физическом интерфейсе:

# Физический интерфейс
set interfaces ethernet eth0 description 'Uplink to provider'

# Вместо использования VLAN (которых может быть ограничено количество),
# используем MACVLAN интерфейсы

# Подсеть клиента 1
set interfaces pseudo-ethernet client1 source-interface eth0
set interfaces pseudo-ethernet client1 address 203.0.113.1/28
set interfaces pseudo-ethernet client1 description 'Client 1 subnet'

# Подсеть клиента 2
set interfaces pseudo-ethernet client2 source-interface eth0
set interfaces pseudo-ethernet client2 address 203.0.113.17/28
set interfaces pseudo-ethernet client2 description 'Client 2 subnet'

# Подсеть клиента 3
set interfaces pseudo-ethernet client3 source-interface eth0
set interfaces pseudo-ethernet client3 address 203.0.113.33/28
set interfaces pseudo-ethernet client3 description 'Client 3 subnet'

# NAT для каждого клиента
set nat source rule 100 outbound-interface name client1
set nat source rule 100 source address 10.0.1.0/24
set nat source rule 100 translation address 203.0.113.1

set nat source rule 110 outbound-interface name client2
set nat source rule 110 source address 10.0.2.0/24
set nat source rule 110 translation address 203.0.113.17

commit
save

Сценарий 4: Тестирование производительности сети

Создание среды для тестирования пропускной способности:

# Source интерфейс для генерации трафика
set interfaces pseudo-ethernet perf-src source-interface eth0
set interfaces pseudo-ethernet perf-src address 192.168.50.1/24
set interfaces pseudo-ethernet perf-src description 'Performance test source'

# Destination интерфейс для приема трафика
set interfaces pseudo-ethernet perf-dst source-interface eth0
set interfaces pseudo-ethernet perf-dst address 192.168.50.2/24
set interfaces pseudo-ethernet perf-dst description 'Performance test destination'

# Разрешить трафик между интерфейсами
set firewall ipv4 forward filter rule 600 action accept
set firewall ipv4 forward filter rule 600 source address 192.168.50.0/24
set firewall ipv4 forward filter rule 600 destination address 192.168.50.0/24

commit
save

# Тестирование с помощью iperf3 (операционный режим)
# На destination:
run generate container image iperf3
run generate container name iperf-server image iperf3 network perf-dst command "-s"

# На source:
run generate container name iperf-client image iperf3 network perf-src command "-c 192.168.50.2 -t 60"

Сценарий 5: Отдельные интерфейсы для сервисов

Разделение различных сервисов на отдельные интерфейсы:

# MACVLAN для DNS сервиса
set interfaces pseudo-ethernet dns-service source-interface eth1
set interfaces pseudo-ethernet dns-service address 10.100.0.53/24
set interfaces pseudo-ethernet dns-service description 'DNS Service Interface'

# MACVLAN для Web сервиса
set interfaces pseudo-ethernet web-service source-interface eth1
set interfaces pseudo-ethernet web-service address 10.100.0.80/24
set interfaces pseudo-ethernet web-service description 'Web Service Interface'

# MACVLAN для Mail сервиса
set interfaces pseudo-ethernet mail-service source-interface eth1
set interfaces pseudo-ethernet mail-service address 10.100.0.25/24
set interfaces pseudo-ethernet mail-service description 'Mail Service Interface'

# Firewall: разрешить доступ к сервисам только на нужных портах
set firewall ipv4 input filter rule 100 action accept
set firewall ipv4 input filter rule 100 destination address 10.100.0.53
set firewall ipv4 input filter rule 100 destination port 53
set firewall ipv4 input filter rule 100 protocol udp

set firewall ipv4 input filter rule 101 action accept
set firewall ipv4 input filter rule 101 destination address 10.100.0.80
set firewall ipv4 input filter rule 101 destination port 80,443
set firewall ipv4 input filter rule 101 protocol tcp

set firewall ipv4 input filter rule 102 action accept
set firewall ipv4 input filter rule 102 destination address 10.100.0.25
set firewall ipv4 input filter rule 102 destination port 25,587
set firewall ipv4 input filter rule 102 protocol tcp

commit
save

Интеграция с облачными платформами

Yandex Cloud

В Yandex Cloud MACVLAN интерфейсы могут использоваться для создания дополнительных IP адресов на одной виртуальной машине:

# Основной интерфейс (получен от Yandex Cloud)
# eth0: 10.128.0.10/24

# Дополнительные IP через MACVLAN
set interfaces pseudo-ethernet yc-web source-interface eth0
set interfaces pseudo-ethernet yc-web address 10.128.0.20/24
set interfaces pseudo-ethernet yc-web description 'Web service IP in Yandex Cloud'

set interfaces pseudo-ethernet yc-db source-interface eth0
set interfaces pseudo-ethernet yc-db address 10.128.0.21/24
set interfaces pseudo-ethernet yc-db description 'Database IP in Yandex Cloud'

# NAT для публичного доступа (если есть внешний IP)
set nat destination rule 100 inbound-interface name eth0
set nat destination rule 100 destination port 80
set nat destination rule 100 protocol tcp
set nat destination rule 100 translation address 10.128.0.20
set nat destination rule 100 translation port 80

set nat destination rule 101 inbound-interface name eth0
set nat destination rule 101 destination port 3306
set nat destination rule 101 protocol tcp
set nat destination rule 101 translation address 10.128.0.21
set nat destination rule 101 translation port 3306

commit
save

Важно для Yandex Cloud:

  • Убедитесь, что security group разрешает трафик на используемых портах
  • При использовании множественных MAC адресов, проверьте настройки сети в консоли Yandex Cloud
  • Некоторые конфигурации могут требовать включения IP forwarding в настройках подсети

VK Cloud (Mail.ru Cloud)

Аналогичная конфигурация для VK Cloud:

# Основной интерфейс VK Cloud
# eth0: 10.0.1.10/24

# MACVLAN интерфейсы для микросервисов
set interfaces pseudo-ethernet vk-api source-interface eth0
set interfaces pseudo-ethernet vk-api address 10.0.1.20/24
set interfaces pseudo-ethernet vk-api description 'API Service - VK Cloud'

set interfaces pseudo-ethernet vk-frontend source-interface eth0
set interfaces pseudo-ethernet vk-frontend address 10.0.1.21/24
set interfaces pseudo-ethernet vk-frontend description 'Frontend - VK Cloud'

set interfaces pseudo-ethernet vk-backend source-interface eth0
set interfaces pseudo-ethernet vk-backend address 10.0.1.22/24
set interfaces pseudo-ethernet vk-backend description 'Backend - VK Cloud'

# Firewall для микросервисной архитектуры
set firewall ipv4 forward filter rule 200 action accept
set firewall ipv4 forward filter rule 200 source address 10.0.1.21
set firewall ipv4 forward filter rule 200 destination address 10.0.1.20
set firewall ipv4 forward filter rule 200 destination port 8080
set firewall ipv4 forward filter rule 200 protocol tcp

commit
save

Мониторинг и диагностика

Проверка состояния интерфейсов

# Список всех pseudo-ethernet интерфейсов
show interfaces pseudo-ethernet

# Конкретный интерфейс
show interfaces pseudo-ethernet peth0

# Детальная информация
show interfaces pseudo-ethernet peth0 detail

# Краткая информация
show interfaces pseudo-ethernet peth0 brief

Статистика интерфейса

# Статистика трафика
show interfaces pseudo-ethernet peth0 statistics

# Счетчики пакетов
show interfaces pseudo-ethernet peth0 counters

# Сброс счетчиков
clear interfaces pseudo-ethernet peth0 counters

MAC адреса

# Показать MAC адрес интерфейса
show interfaces pseudo-ethernet peth0 | grep "Hardware address"

# ARP таблица
show arp interface peth0

# В операционной системе
ip link show peth0

Мониторинг трафика

# Мониторинг в реальном времени
monitor interfaces pseudo-ethernet peth0 traffic

# Capture трафика
monitor traffic interface peth0

# Фильтрованный capture
monitor traffic interface peth0 filter 'port 80 or port 443'

# Сохранение в файл
monitor traffic interface peth0 save /tmp/peth0-capture.pcap

Проверка родительского интерфейса

# Убедиться, что source интерфейс активен
show interfaces ethernet eth0

# Физическое состояние
show interfaces ethernet eth0 physical

# Проверка связи parent-child
ip link show type macvlan

Устранение неполадок

Интерфейс не поднимается

Проблема: Pseudo-ethernet интерфейс находится в состоянии down.

Возможные причины:

  1. Родительский интерфейс (source-interface) находится в состоянии down
  2. Неправильная конфигурация source-interface
  3. Конфликт MAC адресов

Диагностика:

# Проверить состояние parent интерфейса
show interfaces ethernet eth0

# Проверить конфигурацию
show configuration commands | grep pseudo-ethernet

# Проверить kernel messages
sudo dmesg | grep macvlan

# Проверить состояние в системе
ip link show peth0

Решение:

# Убедиться, что parent интерфейс включен
delete interfaces ethernet eth0 disable
commit

# Пересоздать pseudo-ethernet интерфейс
delete interfaces pseudo-ethernet peth0
commit

set interfaces pseudo-ethernet peth0 source-interface eth0
set interfaces pseudo-ethernet peth0 address 192.168.1.1/24
commit
save

Нет сетевой связности

Проблема: Интерфейс поднят, но нет связности.

Возможные причины:

  1. Коммутатор блокирует множественные MAC адреса на порту
  2. Firewall блокирует трафик
  3. Неправильная маршрутизация
  4. Проблемы с ARP

Диагностика:

# Проверить ARP
show arp

# Проверить маршруты
show ip route

# Ping с source адресом
ping 192.168.1.100 source-address 192.168.1.1

# Проверить firewall
show firewall

# tcpdump на интерфейсе
sudo tcpdump -i peth0 -n

Решение для port security на коммутаторе:

Cisco пример:

interface GigabitEthernet0/1
 description VyOS with MACVLAN
 switchport mode access
 switchport access vlan 10
 spanning-tree portfast
 ! Разрешить множественные MAC адреса
 switchport port-security maximum 10
 switchport port-security

HP/Aruba пример:

interface 1
 name "VyOS MACVLAN"
 untagged vlan 10
 ! Отключить port security или увеличить лимит

Конфликт MAC адресов

Проблема: Дублирующиеся MAC адреса в сети.

Диагностика:

# Показать MAC адреса всех интерфейсов
show interfaces | grep "Hardware address"

# Проверить в системе
ip link show | grep "link/ether"

# Лог системы
show log | match "duplicate"

Решение:

# Назначить уникальный MAC вручную
set interfaces pseudo-ethernet peth0 mac '00:50:56:01:23:45'
set interfaces pseudo-ethernet peth1 mac '00:50:56:01:23:46'
commit

Проблемы в виртуализированной среде

Проблема: MACVLAN не работает в VMware или другой виртуализированной среде.

Причина: Виртуальный коммутатор блокирует множественные MAC адреса по умолчанию.

Решение для VMware:

  1. Включить promiscuous mode на vSwitch:

    vSwitch -> Edit Settings -> Security
    Promiscuous Mode: Accept
    MAC Address Changes: Accept
    Forged Transmits: Accept
  2. Или использовать Port Group с нужными настройками:

    Port Group -> Security
    Promiscuous Mode: Accept

Решение для KVM/QEMU:

<!-- Включить promiscuous mode в libvirt -->
<interface type='bridge'>
  <mac address='52:54:00:12:34:56'/>
  <source bridge='br0'/>
  <model type='virtio'/>
  <virtualport type='openvswitch'/>
  <!-- Разрешить множественные MAC -->
</interface>

Невозможно пинговать с самого роутера

Проблема: Ping на адрес pseudo-ethernet интерфейса с самого VyOS не работает.

Объяснение: Это ожидаемое поведение MACVLAN. Из документации:

  • Pseudo-Ethernet интерфейсы нельзя пинговать с хост-системы
  • Ethernet фреймы не пересылаются между MACVLAN интерфейсами на одном родительском порту

Это не баг, а особенность архитектуры MACVLAN.

Workaround (если действительно нужна локальная связность):

# Использовать bridge вместо MACVLAN
set interfaces bridge br0
set interfaces bridge br0 member interface eth0
set interfaces ethernet eth0 address 192.168.1.1/24

Производительность ниже ожидаемой

Проблема: Низкая производительность MACVLAN интерфейсов.

Диагностика:

# Проверить статистику ошибок
show interfaces pseudo-ethernet peth0 statistics

# Проверить CPU usage
show system resources

# Проверить offload настройки parent интерфейса
ethtool -k eth0

Решение:

# Включить offload на parent интерфейсе
set interfaces ethernet eth0 offload gro
set interfaces ethernet eth0 offload gso
set interfaces ethernet eth0 offload tso
commit

# Увеличить ring buffer
set interfaces ethernet eth0 ring-buffer rx 1024
set interfaces ethernet eth0 ring-buffer tx 1024
commit

Операционные команды

Управление интерфейсами

# Включить интерфейс
delete interfaces pseudo-ethernet peth0 disable
commit

# Отключить интерфейс
set interfaces pseudo-ethernet peth0 disable
commit

# Удалить интерфейс
delete interfaces pseudo-ethernet peth0
commit

Сброс и перезагрузка

# Сброс счетчиков
clear interfaces pseudo-ethernet peth0 counters

# Перезагрузка интерфейса (down/up)
set interfaces pseudo-ethernet peth0 disable
commit
delete interfaces pseudo-ethernet peth0 disable
commit

Тестирование связности

# Ping с указанием source
ping 192.168.1.100 source-address 192.168.1.1

# Traceroute с source
traceroute 8.8.8.8 source-address 192.168.1.1

# Проверка маршрута
show ip route 192.168.1.0/24

Примеры полных конфигураций

Пример 1: Лабораторная среда с множественными сетями

configure

# Физический интерфейс
set interfaces ethernet eth0 description 'Physical uplink'
set interfaces ethernet eth0 address dhcp

# Лабораторная сеть 1 - Development
set interfaces pseudo-ethernet dev-net source-interface eth1
set interfaces pseudo-ethernet dev-net address 10.10.1.1/24
set interfaces pseudo-ethernet dev-net description 'Development Network'

# Лабораторная сеть 2 - Staging
set interfaces pseudo-ethernet stage-net source-interface eth1
set interfaces pseudo-ethernet stage-net address 10.10.2.1/24
set interfaces pseudo-ethernet stage-net description 'Staging Network'

# Лабораторная сеть 3 - Production
set interfaces pseudo-ethernet prod-net source-interface eth1
set interfaces pseudo-ethernet prod-net address 10.10.3.1/24
set interfaces pseudo-ethernet prod-net description 'Production Network'

# DHCP для каждой сети
set service dhcp-server shared-network-name DEV subnet 10.10.1.0/24 option default-router 10.10.1.1
set service dhcp-server shared-network-name DEV subnet 10.10.1.0/24 range 0 start 10.10.1.100
set service dhcp-server shared-network-name DEV subnet 10.10.1.0/24 range 0 stop 10.10.1.200

set service dhcp-server shared-network-name STAGE subnet 10.10.2.0/24 option default-router 10.10.2.1
set service dhcp-server shared-network-name STAGE subnet 10.10.2.0/24 range 0 start 10.10.2.100
set service dhcp-server shared-network-name STAGE subnet 10.10.2.0/24 range 0 stop 10.10.2.200

set service dhcp-server shared-network-name PROD subnet 10.10.3.0/24 option default-router 10.10.3.1
set service dhcp-server shared-network-name PROD subnet 10.10.3.0/24 range 0 start 10.10.3.100
set service dhcp-server shared-network-name PROD subnet 10.10.3.0/24 range 0 stop 10.10.3.200

# NAT для доступа в интернет
set nat source rule 100 outbound-interface name eth0
set nat source rule 100 source address 10.10.0.0/16
set nat source rule 100 translation address masquerade

# Firewall изоляция
set firewall ipv4 forward filter rule 100 action accept
set firewall ipv4 forward filter rule 100 state established
set firewall ipv4 forward filter rule 100 state related

# Development → Internet (разрешено)
set firewall ipv4 forward filter rule 110 action accept
set firewall ipv4 forward filter rule 110 source address 10.10.1.0/24
set firewall ipv4 forward filter rule 110 outbound-interface name eth0

# Staging → Internet (разрешено)
set firewall ipv4 forward filter rule 120 action accept
set firewall ipv4 forward filter rule 120 source address 10.10.2.0/24
set firewall ipv4 forward filter rule 120 outbound-interface name eth0

# Production → Internet (разрешено)
set firewall ipv4 forward filter rule 130 action accept
set firewall ipv4 forward filter rule 130 source address 10.10.3.0/24
set firewall ipv4 forward filter rule 130 outbound-interface name eth0

# Блокировать трафик между средами
set firewall ipv4 forward filter rule 900 action drop
set firewall ipv4 forward filter rule 900 source address 10.10.1.0/24
set firewall ipv4 forward filter rule 900 destination address 10.10.2.0/24

set firewall ipv4 forward filter rule 901 action drop
set firewall ipv4 forward filter rule 901 source address 10.10.1.0/24
set firewall ipv4 forward filter rule 901 destination address 10.10.3.0/24

commit
save
exit

Пример 2: Контейнерная платформа

configure

# Основной интерфейс
set interfaces ethernet eth1 description 'Container network uplink'

# Container 1 - Web Frontend
set interfaces pseudo-ethernet cnt-web source-interface eth1
set interfaces pseudo-ethernet cnt-web address 172.20.1.10/24
set interfaces pseudo-ethernet cnt-web mac '02:00:00:00:01:10'
set interfaces pseudo-ethernet cnt-web description 'Web Frontend Container'

# Container 2 - Application Backend
set interfaces pseudo-ethernet cnt-app source-interface eth1
set interfaces pseudo-ethernet cnt-app address 172.20.1.20/24
set interfaces pseudo-ethernet cnt-app mac '02:00:00:00:01:20'
set interfaces pseudo-ethernet cnt-app description 'App Backend Container'

# Container 3 - Database
set interfaces pseudo-ethernet cnt-db source-interface eth1
set interfaces pseudo-ethernet cnt-db address 172.20.1.30/24
set interfaces pseudo-ethernet cnt-db mac '02:00:00:00:01:30'
set interfaces pseudo-ethernet cnt-db description 'Database Container'

# Container 4 - Cache (Redis)
set interfaces pseudo-ethernet cnt-cache source-interface eth1
set interfaces pseudo-ethernet cnt-cache address 172.20.1.40/24
set interfaces pseudo-ethernet cnt-cache mac '02:00:00:00:01:40'
set interfaces pseudo-ethernet cnt-cache description 'Cache Container'

# Firewall: микросервисная архитектура
# Web → App (разрешено)
set firewall ipv4 forward filter rule 200 action accept
set firewall ipv4 forward filter rule 200 source address 172.20.1.10
set firewall ipv4 forward filter rule 200 destination address 172.20.1.20
set firewall ipv4 forward filter rule 200 destination port 8080
set firewall ipv4 forward filter rule 200 protocol tcp

# App → Database (разрешено)
set firewall ipv4 forward filter rule 201 action accept
set firewall ipv4 forward filter rule 201 source address 172.20.1.20
set firewall ipv4 forward filter rule 201 destination address 172.20.1.30
set firewall ipv4 forward filter rule 201 destination port 5432
set firewall ipv4 forward filter rule 201 protocol tcp

# App → Cache (разрешено)
set firewall ipv4 forward filter rule 202 action accept
set firewall ipv4 forward filter rule 202 source address 172.20.1.20
set firewall ipv4 forward filter rule 202 destination address 172.20.1.40
set firewall ipv4 forward filter rule 202 destination port 6379
set firewall ipv4 forward filter rule 202 protocol tcp

# Web → Database (запрещено)
set firewall ipv4 forward filter rule 210 action drop
set firewall ipv4 forward filter rule 210 source address 172.20.1.10
set firewall ipv4 forward filter rule 210 destination address 172.20.1.30

commit
save
exit

Пример 3: Мультитенантная среда

configure

# Физический интерфейс
set interfaces ethernet eth2 description 'Multi-tenant uplink'

# Tenant 1
set interfaces pseudo-ethernet tenant1 source-interface eth2
set interfaces pseudo-ethernet tenant1 address 10.100.1.1/24
set interfaces pseudo-ethernet tenant1 mac '02:01:00:00:00:01'
set interfaces pseudo-ethernet tenant1 description 'Tenant 1 Network'

# Tenant 2
set interfaces pseudo-ethernet tenant2 source-interface eth2
set interfaces pseudo-ethernet tenant2 address 10.100.2.1/24
set interfaces pseudo-ethernet tenant2 mac '02:01:00:00:00:02'
set interfaces pseudo-ethernet tenant2 description 'Tenant 2 Network'

# Tenant 3
set interfaces pseudo-ethernet tenant3 source-interface eth2
set interfaces pseudo-ethernet tenant3 address 10.100.3.1/24
set interfaces pseudo-ethernet tenant3 mac '02:01:00:00:00:03'
set interfaces pseudo-ethernet tenant3 description 'Tenant 3 Network'

# VRF для каждого tenant (полная изоляция)
set vrf name TENANT1 table 101
set vrf name TENANT2 table 102
set vrf name TENANT3 table 103

set interfaces pseudo-ethernet tenant1 vrf TENANT1
set interfaces pseudo-ethernet tenant2 vrf TENANT2
set interfaces pseudo-ethernet tenant3 vrf TENANT3

# DHCP для каждого tenant
set service dhcp-server shared-network-name T1 subnet 10.100.1.0/24 option default-router 10.100.1.1
set service dhcp-server shared-network-name T1 subnet 10.100.1.0/24 range 0 start 10.100.1.100
set service dhcp-server shared-network-name T1 subnet 10.100.1.0/24 range 0 stop 10.100.1.200

set service dhcp-server shared-network-name T2 subnet 10.100.2.0/24 option default-router 10.100.2.1
set service dhcp-server shared-network-name T2 subnet 10.100.2.0/24 range 0 start 10.100.2.100
set service dhcp-server shared-network-name T2 subnet 10.100.2.0/24 range 0 stop 10.100.2.200

set service dhcp-server shared-network-name T3 subnet 10.100.3.0/24 option default-router 10.100.3.1
set service dhcp-server shared-network-name T3 subnet 10.100.3.0/24 range 0 start 10.100.3.100
set service dhcp-server shared-network-name T3 subnet 10.100.3.0/24 range 0 stop 10.100.3.200

# Bandwidth limiting для каждого tenant
set traffic-policy shaper TENANT1-LIMIT bandwidth 100mbit
set traffic-policy shaper TENANT2-LIMIT bandwidth 50mbit
set traffic-policy shaper TENANT3-LIMIT bandwidth 200mbit

set interfaces pseudo-ethernet tenant1 traffic-policy out TENANT1-LIMIT
set interfaces pseudo-ethernet tenant2 traffic-policy out TENANT2-LIMIT
set interfaces pseudo-ethernet tenant3 traffic-policy out TENANT3-LIMIT

commit
save
exit

Лучшие практики

  1. Планирование:

    • Документируйте назначение каждого MACVLAN интерфейса
    • Используйте понятные имена интерфейсов (не просто peth0, peth1)
    • Планируйте схему MAC адресов заранее
  2. MAC адреса:

    • Используйте MAC адреса из locally administered диапазона: начинаются с 02:, 06:, 0A:, 0E:
    • Избегайте конфликтов с существующими MAC адресами в сети
    • Документируйте назначенные MAC адреса
  3. Безопасность:

    • Используйте firewall для контроля трафика между MACVLAN интерфейсами
    • Применяйте source validation для предотвращения IP spoofing
    • Изолируйте критичные сервисы в отдельных VRF
  4. Производительность:

    • Включайте hardware offload на parent интерфейсе
    • Используйте jumbo frames если сеть поддерживает
    • Мониторьте использование CPU и network throughput
  5. Совместимость:

    • Проверяйте поддержку множественных MAC адресов на коммутаторе
    • В виртуализированных средах включайте promiscuous mode
    • Тестируйте перед развертыванием в production
  6. Мониторинг:

    • Регулярно проверяйте состояние интерфейсов
    • Мониторьте статистику ошибок
    • Настройте алерты на состояние down
  7. Документация:

    • Используйте description для всех интерфейсов
    • Документируйте топологию сети
    • Ведите инвентаризацию MAC адресов
  8. Тестирование:

    • Всегда тестируйте в лабораторной среде
    • Проверяйте connectivity после настройки
    • Тестируйте failover scenarios
  9. Ограничения:

    • Помните, что MACVLAN интерфейсы нельзя пинговать с самого роутера
    • Учитывайте отсутствие коммуникации между MACVLAN интерфейсами на одном parent
    • Планируйте альтернативы если нужна локальная связность
  10. Backup:

    • Регулярно сохраняйте конфигурацию
    • Храните копии в версионной системе
    • Документируйте изменения

Сравнение с альтернативами

MACVLAN vs VLAN

ХарактеристикаMACVLANVLAN (802.1Q)
MAC адресаУникальный для каждого интерфейсаОдин MAC, множество VLAN
ТегированиеНе требуетсяТребуется 802.1Q
Поддержка коммутатораМожет требовать настройки port securityСтандартная поддержка
КоличествоОграничено MAC таблицейОграничено 4096 VLAN
Use caseВиртуализация, тестированиеСегментация сети
OverheadМинимальный4 байта на тег

MACVLAN vs Bridge

ХарактеристикаMACVLANBridge
ПроизводительностьВысокая (kernel level)Средняя (STP overhead)
ИзоляцияНет связности между sub-interfacesПолная связность
Ping от хостаНевозможенВозможен
Use caseИзоляция, виртуализацияОбъединение интерфейсов
СложностьПростаяСредняя

MACVLAN vs VRF

ХарактеристикаMACVLANVRF
Уровень изоляцииL2 (MAC level)L3 (Routing table)
RoutingОбщая таблица (если не используется VRF)Отдельная таблица
Use caseМножественные IP на одном портуMulti-tenancy routing
ПроизводительностьВысокаяСредняя
СовместимостьМожет быть ограниченаШирокая

Рекомендации выбора:

  • MACVLAN: виртуализация, контейнеры, тестирование, множественные IP
  • VLAN: стандартная сегментация сети, работа с коммутаторами
  • Bridge: объединение интерфейсов, нужна связность между портами
  • VRF: мультитенантность, полная изоляция routing таблиц

Заключение

Pseudo-Ethernet (MACVLAN) интерфейсы в VyOS предоставляют мощный и гибкий механизм для создания множественных виртуальных интерфейсов на базе одного физического порта. Они особенно полезны в следующих сценариях:

  • Виртуализация и контейнеры - предоставление изолированных сетевых интерфейсов
  • Тестирование - создание лабораторных сред без дополнительного оборудования
  • Обход ограничений - работа с сетями, где VLAN ограничены
  • Микросервисы - изоляция сервисов с отдельными IP адресами
  • Multi-tenancy - разделение сетевых ресурсов между клиентами

При использовании MACVLAN важно помнить об ограничениях:

  • Невозможность ping с хост-системы
  • Отсутствие коммуникации между MACVLAN интерфейсами на одном parent
  • Возможные проблемы совместимости с некоторым сетевым оборудованием

Правильное планирование, конфигурация и мониторинг MACVLAN интерфейсов позволяют эффективно использовать эту технологию в различных сетевых сценариях, обеспечивая гибкость и производительность при минимальных накладных расходах.

Следующие шаги