Сменить MAC-адрес сетевой карты в Linux можно двумя способами: временно, до перезагрузки, и постоянно, через конфигурацию сетевой подсистемы. Временная смена делается одной командой ip link set dev <интерфейс> address <MAC> и работает в любом дистрибутиве. Постоянная зависит от того, кто управляет сетью: NetworkManager, netplan, systemd-networkd или ifupdown.
Самый частый случай на сервере с AlmaLinux, Rocky Linux или RHEL 9/10 — NetworkManager. Там MAC задаётся параметром cloned-mac-address в профиле подключения: nmcli connection modify ens18 ethernet.cloned-mac-address 02:11:22:33:44:55. На Ubuntu 24.04 это ключ macaddress в YAML-файле netplan, на Debian 12/13 с классическим ifupdown — строка hwaddress в /etc/network/interfaces.
Аппаратный (заводской) адрес в прошивке карты при этом не меняется. Меняется адрес, который ядро использует для отправки кадров. После сброса настроек или загрузки с другого носителя карта снова будет работать с заводским MAC.
Зачем менять MAC и чем это грозит
Типичные причины на серверах:
- замена сетевой карты или переезд системы на другое железо, когда провайдер или DHCP-сервер выдаёт адрес по старому MAC;
- клонирование виртуальной машины, у которой MAC совпал с оригиналом;
- программа с лицензией, привязанной к MAC (некоторые лицензионные серверы так делают);
- тестирование правил DHCP, port security на коммутаторе, фильтров на маршрутизаторе.
Риски стоит оценить заранее:
- DHCP. Сервер увидит новый MAC и выдаст другой IP-адрес. Если машина доступна только по SSH, вы можете потерять к ней доступ.
- Провайдер и дата-центр. На выделенных серверах коммутатор часто пропускает трафик только с MAC, который закреплён за портом. С чужим MAC сервер пропадёт из сети. Перед сменой уточните правила у провайдера.
- Виртуализация. Гипервизор может блокировать кадры с MAC, который не совпадает с адресом виртуальной карты (MAC spoofing filter). Правильнее менять MAC в настройках виртуальной машины на хосте, а не внутри гостя.
- Лицензии. Если ПО привязано к MAC, смена адреса может как «починить» лицензию после замены карты, так и сломать её. Перенос лицензии на новое железо часто регулируется договором, проверьте его.
- Конфликты. Два одинаковых MAC в одном сегменте сети — это потеря пакетов и трудноуловимые сбои.
Любые изменения сети на удалённом сервере делайте при наличии консоли: IPMI, iDRAC, iLO, VNC-консоль гипервизора или панель провайдера.
Какой MAC-адрес выбрать
MAC — это 6 байт, обычно в записи aa:bb:cc:dd:ee:ff. Два младших бита первого байта имеют значение:
- младший бит должен быть 0 — иначе адрес групповой (multicast), такой адрес интерфейсу назначить нельзя;
- второй бит, равный 1, означает «локально администрируемый адрес». Такие адреса не пересекаются с заводскими адресами производителей.
Практическое правило: вторая шестнадцатеричная цифра первого байта — 2, 6, A или E. Например, 02:11:22:33:44:55 или 0a:1b:2c:3d:4e:5f. Если нужно вернуть машине конкретный старый адрес (DHCP-резервирование, лицензия), используйте именно его.
Временно: ip link
Команда работает в Debian, Ubuntu, AlmaLinux, Rocky Linux и любом другом дистрибутиве с iproute2. Изменение пропадёт после перезагрузки или переподключения интерфейса сетевым менеджером.
# узнать имя интерфейса и текущий MAC
ip -br link
# сменить адрес
sudo ip link set dev ens18 down
sudo ip link set dev ens18 address 02:11:22:33:44:55
sudo ip link set dev ens18 up
Многие драйверы позволяют сменить MAC без отключения интерфейса, но на части карт команда без down вернёт ошибку Device or resource busy. Учтите: если вы подключены через этот интерфейс по SSH, после down сессия оборвётся. Выполняйте все три команды одной строкой через && или из консоли.
Если интерфейсом управляет NetworkManager, он может вернуть свой адрес при следующей активации профиля. Для постоянной смены используйте способы ниже.
Постоянно: NetworkManager и nmcli
Подходит для AlmaLinux и Rocky Linux 9/10, RHEL, Fedora, а также для Debian и Ubuntu, если интерфейсом управляет NetworkManager. Настройка хранится в профиле подключения.
В профиле есть два похожих параметра, их часто путают:
| Параметр nmcli | Что делает | Аналог в старом ifcfg |
|---|---|---|
ethernet.mac-address | Привязывает профиль к карте с этим заводским MAC. Адрес не меняет. | HWADDR= |
ethernet.cloned-mac-address | Задаёт MAC, который будет установлен на интерфейс. | MACADDR= |
Это ровно та ловушка, о которой писали ещё во времена CentOS 6: если поменять HWADDR, система не найдёт карту с таким адресом и откажется поднимать интерфейс. Менять нужно MACADDR, а в современном NetworkManager — cloned-mac-address.
# список профилей и устройств
nmcli connection show
nmcli device status
# задать MAC для профиля ens18
sudo nmcli connection modify ens18 ethernet.cloned-mac-address 02:11:22:33:44:55
# применить
sudo nmcli connection up ens18
Кроме конкретного адреса, cloned-mac-address принимает специальные значения:
permanent— использовать заводской адрес;preserve— не трогать адрес, который уже стоит на интерфейсе;random— новый случайный адрес при каждом подключении;stable— сгенерированный адрес, постоянный для этого профиля и машины.
Чтобы вернуть заводской MAC, очистите параметр: nmcli connection modify ens18 ethernet.cloned-mac-address "", затем снова nmcli connection up ens18. Для Wi-Fi параметр называется wifi.cloned-mac-address.
Где лежит настройка в AlmaLinux и RHEL
В AlmaLinux, Rocky Linux и RHEL 9 новые профили хранятся в формате keyfile в каталоге /etc/NetworkManager/system-connections/. Файл профиля выглядит примерно так:
[connection]
id=ens18
type=ethernet
interface-name=ens18
[ethernet]
cloned-mac-address=02:11:22:33:44:55
[ipv4]
method=auto
Если редактируете файл вручную, после правки выполните sudo nmcli connection reload и sudo nmcli connection up ens18. Права на файл должны быть 600 и владелец root, иначе NetworkManager его проигнорирует.
Старые профили /etc/sysconfig/network-scripts/ifcfg-* в версии 9 ещё читаются, и строка MACADDR= там по-прежнему работает. В версии 10 поддержку ifcfg убрали, поэтому перед обновлением переведите профили в keyfile командой nmcli connection migrate. Подробнее о профилях, nmtui и keyfile — в статье Настройка сети в AlmaLinux и RHEL 9: nmtui и nmcli.
Постоянно: netplan в Ubuntu 24.04
На Ubuntu Server сеть описывается в YAML-файлах в /etc/netplan/, а netplan генерирует из них конфигурацию для systemd-networkd (по умолчанию на сервере) или NetworkManager (на десктопе). MAC задаётся ключом macaddress.
Документация netplan предупреждает: при рендерере networkd смена MAC надёжно работает, только если устройство выбрано по MAC через match, а не по имени. Поэтому пример такой:
# /etc/netplan/50-cloud-init.yaml (имя файла у вас может отличаться)
network:
version: 2
ethernets:
lan0:
match:
macaddress: "52:54:00:aa:bb:cc" # заводской MAC карты
set-name: ens18
macaddress: "02:11:22:33:44:55" # новый MAC
dhcp4: true
Проверьте и примените:
sudo netplan generate
sudo netplan try # откатится сам через 120 секунд, если не подтвердить
sudo netplan apply
netplan try удобен на удалённых серверах: если после применения пропал доступ, через две минуты вернётся старая конфигурация. Если файл создан cloud-init, проверьте, что cloud-init не перезапишет его при следующей загрузке. Обычно для этого в /etc/cloud/cloud.cfg.d/ кладут файл с network: {config: disabled}.
Права на YAML-файлы netplan должны быть 600, иначе netplan apply выдаст предупреждение.
Постоянно: systemd-networkd и файл .link
Если вы используете systemd-networkd напрямую (без netplan) или хотите задать MAC на уровне udev для любого сетевого менеджера, подойдёт файл .link. Его применяет systemd-udevd в момент появления устройства.
# /etc/systemd/network/10-ens18.link
[Match]
PermanentMACAddress=52:54:00:aa:bb:cc
[Link]
MACAddress=02:11:22:33:44:55
Что важно:
- Имя файла должно идти раньше системного
99-default.linkв алфавитном порядке, отсюда префикс10-. Применяется первый подходящий файл. - В
[Match]используйтеPermanentMACAddress=— заводской адрес. Сопоставление по текущемуMACAddress=после смены адреса перестанет совпадать. - Если в файле указан
MACAddress=, параметрMACAddressPolicy=должен быть пустым илиnone. - Если
.linkпереопределяет и имя интерфейса, правило может срабатывать уже в initramfs. Тогда после правки обновите initramfs:update-initramfs -uв Debian/Ubuntu илиdracut -fв AlmaLinux.
Самый надёжный способ применить .link — перезагрузка. Без неё можно попробовать sudo udevadm trigger --action=add /sys/class/net/ens18, но на работающем интерфейсе это срабатывает не всегда. Проверить, какой файл применился к устройству: udevadm test-builtin net_setup_link /sys/class/net/ens18.
Альтернатива для чистого systemd-networkd — ключ MACAddress= в секции [Link] файла .network. Но .link работает независимо от того, кто дальше настраивает IP-адрес.
Постоянно: ifupdown в Debian 12 и 13
На Debian, установленном без графики, сетью обычно управляет ifupdown через файл /etc/network/interfaces. MAC задаётся опцией hwaddress в описании интерфейса:
# /etc/network/interfaces
auto ens18
iface ens18 inet static
address 192.0.2.10/24
gateway 192.0.2.1
hwaddress 02:11:22:33:44:55
Для DHCP так же:
auto ens18
iface ens18 inet dhcp
hwaddress 02:11:22:33:44:55
Встречается и старая запись hwaddress ether 02:11:22:33:44:55, современный ifupdown понимает обе формы. Применить:
sudo ifdown ens18 && sudo ifup ens18
На удалённом сервере выполняйте это только одной строкой и при наличии консоли. Вместо ручной правки можно поставить пакет macchanger из репозитория Debian/Ubuntu: он умеет показать заводской адрес (macchanger -s ens18) и сгенерировать случайный. Но для постоянной настройки всё равно нужна запись в конфигурации.
Проверка результата
ip link show ens18
Вывод примерно такой:
2: ens18: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP mode DEFAULT group default qlen 1000
link/ether 02:11:22:33:44:55 brd ff:ff:ff:ff:ff:ff permaddr 52:54:00:aa:bb:cc
В строке link/ether — текущий адрес. Поле permaddr показывается, когда текущий адрес отличается от заводского. Заводской адрес также покажет ethtool -P ens18.
Дополнительно:
nmcli -f GENERAL.HWADDR device show ens18— адрес глазами NetworkManager;ip -br addr show ens18— получил ли интерфейс IP после смены MAC;- на другой машине в той же сети:
ip neigh— какой MAC видят соседи (после истечения ARP-кэша); - перезагрузите сервер и проверьте ещё раз: постоянная настройка должна пережить перезагрузку.
Таблица: симптом, причина, решение
| Симптом | Причина | Решение |
|---|---|---|
RTNETLINK answers: Device or resource busy | Драйвер не меняет MAC на поднятом интерфейсе | Сначала ip link set dev ens18 down, потом смена адреса |
Cannot assign requested address | Групповой адрес: нечётный первый байт | Возьмите адрес вида 02:xx:xx:xx:xx:xx |
| После перезагрузки вернулся старый MAC | Меняли через ip link, это временно | Задайте адрес в nmcli, netplan, .link или interfaces |
| Интерфейс не поднимается после правки профиля | Изменён HWADDR или ethernet.mac-address вместо клонированного адреса | Верните заводской адрес в привязку, новый задайте через cloned-mac-address / MACADDR |
| Сменили MAC — пропал IP | DHCP выдал новый адрес или резервирование было по старому MAC | Обновите резервирование на DHCP-сервере или используйте статический IP |
| MAC сменился, но трафика нет | Port security на коммутаторе или фильтр MAC в гипервизоре | Согласуйте адрес с провайдером, меняйте MAC в настройках ВМ на хосте |
| netplan: MAC не применяется | Устройство выбрано по имени при рендерере networkd | Выберите устройство через match: macaddress и set-name |
.link не срабатывает | Имя файла после 99-default.link или неверный [Match] | Префикс 10-, сопоставление по PermanentMACAddress=, перезагрузка |
Различия между Debian, Ubuntu и AlmaLinux
| Система | Кто обычно управляет сетью | Где задать MAC |
|---|---|---|
| AlmaLinux / Rocky Linux 9 | NetworkManager, keyfile | nmcli ... ethernet.cloned-mac-address; в старых ifcfg — MACADDR= |
| AlmaLinux / Rocky Linux 10 | NetworkManager, только keyfile | nmcli ... ethernet.cloned-mac-address |
| Ubuntu 24.04 Server | netplan + systemd-networkd | macaddress в /etc/netplan/*.yaml |
| Ubuntu 24.04 Desktop | netplan + NetworkManager | nmcli или настройки GNOME |
| Debian 12 / 13 без графики | ifupdown | hwaddress в /etc/network/interfaces |
| Debian 12 / 13 с графикой | NetworkManager | nmcli |
| Любая система с systemd | systemd-udevd | файл /etc/systemd/network/*.link |
Если вы не знаете, кто управляет сетью, посмотрите: systemctl is-active NetworkManager systemd-networkd networking. Активный сервис и подскажет, какой раздел статьи вам нужен.
Для виртуальных машин помните: MAC гостя задаётся в гипервизоре. В Proxmox VE это поле MAC в свойствах сетевого устройства ВМ. Как развернуть сам гипервизор, рассказано в статье Установка Proxmox VE на свой сервер.
Частые вопросы
Меняется ли MAC в самой сетевой карте?
Нет. Заводской адрес хранится в прошивке карты и остаётся прежним. Linux лишь сообщает драйверу, какой адрес использовать. Заводской адрес можно увидеть командой ethtool -P ens18 или в поле permaddr вывода ip link.
Почему в RHEL нельзя просто поменять HWADDR?
HWADDR в ifcfg и ethernet.mac-address в NetworkManager — это не установка адреса, а привязка профиля к конкретной карте. Если указать там другой адрес, NetworkManager не найдёт подходящее устройство и не поднимет профиль. Для смены адреса предназначены MACADDR и cloned-mac-address.
Можно ли сменить MAC без потери SSH-сессии?
Иногда да: многие драйверы меняют адрес без отключения интерфейса, а при статическом IP связь восстановится после обновления ARP-кэша у шлюза. Но гарантии нет, особенно если IP выдаётся по DHCP или провайдер фильтрует MAC. Держите под рукой консоль и делайте изменения одной командой.
Как вернуть заводской MAC?
Удалите свою настройку: очистите cloned-mac-address в nmcli, уберите macaddress из netplan или hwaddress из /etc/network/interfaces, удалите свой .link-файл. Затем переподключите интерфейс или перезагрузите сервер. В NetworkManager можно явно указать значение permanent.
Нужно ли менять MAC у bond или моста?
Обычно нет. Bond и мост берут MAC одного из подчинённых интерфейсов. Если адрес всё же нужен фиксированный, задавайте его в профиле самого bond или моста: в nmcli для них тоже есть cloned-mac-address, в netplan — macaddress. После смены проверьте, что коммутатор не блокирует новый адрес.
Помогает ли смена MAC при проблемах с IPv6?
Только косвенно. При автонастройке SLAAC с EUI-64 IPv6-адрес строится из MAC, поэтому после смены MAC он тоже изменится. Если задача — вовсе убрать IPv6, смотрите статью Как отключить IPv6 в Linux.