Pseudo-Ethernet (MACVLAN) интерфейсы в VyOS
Pseudo-Ethernet или MACVLAN интерфейсы представляют собой виртуальные подинтерфейсы физических Ethernet интерфейсов, каждый из которых имеет уникальный MAC адрес. Эта технология особенно полезна в виртуализированных средах и для сетевого тестирования.
Обзор
Что такое Pseudo-Ethernet (MACVLAN)
MACVLAN позволяет создать несколько виртуальных сетевых интерфейсов на базе одного физического Ethernet порта. Каждый виртуальный интерфейс (sub-interface) получает собственный уникальный MAC адрес и ведет себя как независимый физический интерфейс.
Ключевые особенности:
- Каждый подинтерфейс имеет уникальный MAC адрес
- Меньше системных накладных расходов по сравнению с традиционным bridging
- Позволяет обойти ограничение в 4096 VLAN на физический порт
- Ведет себя как реальный Ethernet интерфейс
- Поддерживает IPv4 и IPv6 адресацию
- Наследует физические характеристики от родительского интерфейса
Преимущества
- Виртуализация - идеально подходит для виртуальных машин и контейнеров
- Производительность - низкие накладные расходы, работа на уровне ядра
- Масштабируемость - создание множества логических интерфейсов без дополнительного оборудования
- Гибкость - обход ограничений сетевого оборудования
- Тестирование - удобно для сетевого тестирования и эмуляции
Ограничения
Важные ограничения, которые необходимо учитывать:
- Ping от хоста невозможен - Pseudo-Ethernet интерфейсы нельзя пинговать с самого хост-роутера
- Нет пересылки между Pseudo-Ethernet интерфейсами - Ethernet фреймы не пересылаются между MACVLAN интерфейсами на одном физическом порту
- Проблемы совместимости:
- Может не работать в VMware ESXi (требует promiscuous mode)
- Некоторые сетевые коммутаторы ожидают один MAC на порт и могут блокировать множественные MAC адреса
- WiFi интерфейсы обычно не поддерживают множественные MAC адреса
- 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/64Dual-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/64DHCP клиент
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 dhcpv6DHCP опции:
# 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-routeMAC адрес
По умолчанию 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 3600Proxy ARP:
set interfaces pseudo-ethernet peth0 ip enable-proxy-arpSource 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-forwardingIPv6 настройки
IPv6 автоконфигурация (SLAAC):
set interfaces pseudo-ethernet peth0 ipv6 address autoconfDuplicate 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-forwardingVLAN на 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 countersMAC адреса
# Показать 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.
Возможные причины:
- Родительский интерфейс (source-interface) находится в состоянии down
- Неправильная конфигурация source-interface
- Конфликт 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Нет сетевой связности
Проблема: Интерфейс поднят, но нет связности.
Возможные причины:
- Коммутатор блокирует множественные MAC адреса на порту
- Firewall блокирует трафик
- Неправильная маршрутизация
- Проблемы с 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-securityHP/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:
Включить promiscuous mode на vSwitch:
vSwitch -> Edit Settings -> Security Promiscuous Mode: Accept MAC Address Changes: Accept Forged Transmits: AcceptИли использовать 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Лучшие практики
Планирование:
- Документируйте назначение каждого MACVLAN интерфейса
- Используйте понятные имена интерфейсов (не просто peth0, peth1)
- Планируйте схему MAC адресов заранее
MAC адреса:
- Используйте MAC адреса из locally administered диапазона: начинаются с 02:, 06:, 0A:, 0E:
- Избегайте конфликтов с существующими MAC адресами в сети
- Документируйте назначенные MAC адреса
Безопасность:
- Используйте firewall для контроля трафика между MACVLAN интерфейсами
- Применяйте source validation для предотвращения IP spoofing
- Изолируйте критичные сервисы в отдельных VRF
Производительность:
- Включайте hardware offload на parent интерфейсе
- Используйте jumbo frames если сеть поддерживает
- Мониторьте использование CPU и network throughput
Совместимость:
- Проверяйте поддержку множественных MAC адресов на коммутаторе
- В виртуализированных средах включайте promiscuous mode
- Тестируйте перед развертыванием в production
Мониторинг:
- Регулярно проверяйте состояние интерфейсов
- Мониторьте статистику ошибок
- Настройте алерты на состояние down
Документация:
- Используйте description для всех интерфейсов
- Документируйте топологию сети
- Ведите инвентаризацию MAC адресов
Тестирование:
- Всегда тестируйте в лабораторной среде
- Проверяйте connectivity после настройки
- Тестируйте failover scenarios
Ограничения:
- Помните, что MACVLAN интерфейсы нельзя пинговать с самого роутера
- Учитывайте отсутствие коммуникации между MACVLAN интерфейсами на одном parent
- Планируйте альтернативы если нужна локальная связность
Backup:
- Регулярно сохраняйте конфигурацию
- Храните копии в версионной системе
- Документируйте изменения
Сравнение с альтернативами
MACVLAN vs VLAN
| Характеристика | MACVLAN | VLAN (802.1Q) |
|---|---|---|
| MAC адреса | Уникальный для каждого интерфейса | Один MAC, множество VLAN |
| Тегирование | Не требуется | Требуется 802.1Q |
| Поддержка коммутатора | Может требовать настройки port security | Стандартная поддержка |
| Количество | Ограничено MAC таблицей | Ограничено 4096 VLAN |
| Use case | Виртуализация, тестирование | Сегментация сети |
| Overhead | Минимальный | 4 байта на тег |
MACVLAN vs Bridge
| Характеристика | MACVLAN | Bridge |
|---|---|---|
| Производительность | Высокая (kernel level) | Средняя (STP overhead) |
| Изоляция | Нет связности между sub-interfaces | Полная связность |
| Ping от хоста | Невозможен | Возможен |
| Use case | Изоляция, виртуализация | Объединение интерфейсов |
| Сложность | Простая | Средняя |
MACVLAN vs VRF
| Характеристика | MACVLAN | VRF |
|---|---|---|
| Уровень изоляции | 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 интерфейсов позволяют эффективно использовать эту технологию в различных сетевых сценариях, обеспечивая гибкость и производительность при минимальных накладных расходах.
Следующие шаги
- Ethernet интерфейсы - базовая конфигурация физических интерфейсов
- VLAN интерфейсы - настройка 802.1Q VLAN
- Bridge интерфейсы - объединение интерфейсов в мост
- VRF - изоляция routing таблиц
- Firewall - контроль трафика между интерфейсами