# MAC address _Сеть: L2 / L3 · LinuxLab Knowledge Base_ **TL;DR:** MAC - 48-битный аппаратный адрес сетевой карты, формат `aa:bb:cc:dd:ee:ff`. Уникален в пределах L2-сегмента, используется в [[ethernet-frame]] для адресации L2. ## Структура 48 бит = 6 байт, обычно записывается шестнадцатерично через двоеточие или дефис: `aa:bb:cc:dd:ee:ff`. - **Первые 3 байта** - OUI (Organizationally Unique Identifier), выдаются IEEE производителям (Cisco, Intel, Dell, ...). По OUI можно найти вендора: https://www.wireshark.org/tools/oui-lookup.html - **Последние 3 байта** - серийник от производителя ## Специальные значения - `ff:ff:ff:ff:ff:ff` - broadcast (все на сегменте) - `01:00:5e:xx:xx:xx` - IPv4 multicast (используется протоколами вроде [ospf](/kb/ospf.md), `ip multicast`) - `33:33:xx:xx:xx:xx` - IPv6 multicast - **Locally administered** (второй младший бит первого октета, U/L bit) - адрес НЕ глобально уникальный, выдан админом локально. Так делают VM/container managers (Docker, libvirt). Видно по форматам типа `02:42:...` (Docker, 0x02 = `…10`) или `0a:...` (0x0a = `…10`). ## ip link и MAC В Linux MAC живёт «на интерфейсе», не «на IP». Один интерфейс = один MAC (исключение: macvlan/macvtap создают доп. виртуальные карты). ```bash ip -br link # eth0 UP fe:80:42:... ← lladdr # lo UNKNOWN 00:00:... ← у loopback нулевой MAC cat /sys/class/net/eth0/address # тот же MAC через sysfs ``` Можно сменить (если NIC поддерживает): ```bash sudo ip link set eth0 down sudo ip link set eth0 address aa:bb:cc:00:11:22 sudo ip link set eth0 up ``` Зачем менять - MAC spoofing в обход 802.1x, тесты, обход MAC-allowlist у провайдера. ## Диапазон видимости MAC MAC - **L2**-адрес, виден только в одном broadcast-домене (между коммутаторами). Когда пакет проходит через роутер, его destination MAC на каждом hop'е переписывается на MAC следующего роутера. Source MAC тоже меняется. **IP-адреса** же сохраняются от первого до последнего hop'а (исключение - [nat](/kb/nat.md)). ## Команды ```bash ip -br link ``` Все интерфейсы с их MAC-адресами одной строкой ```bash cat /sys/class/net/eth0/address ``` MAC через sysfs (без парсинга `ip` вывода) ```bash ip neigh | awk '{print $5}' ``` Все MAC-адреса соседей которых мы знаем (см. [[arp]]) ```bash sudo ip link set eth0 address de:ad:be:ef:00:01 ``` Поменять MAC интерфейса (требует down → set → up) ## См. также - [ARP - Address Resolution Protocol](/kb/arp.md) - [Ethernet frame](/kb/ethernet-frame.md) - [VLAN и trunk - 802.1Q](/kb/vlan-and-trunk.md) - [Linux bridge - программный свитч](/kb/linux-bridge.md) - [Bonding и teaming - объединение интерфейсов](/kb/bonding-and-teaming.md)