2/24/2007

Как узнать MAC адрес сетевой карты: смена МАК адреса в Linux

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


Временная смена MAC-адреса в Linux
Для этого набираем
sudo ifconfig eth0 hw ether xx:xx:xx:xx
при этом MAC-адрес изменится и будет оставаться таковым до перезагрузки. Если нужно сделать так, чтобы MAC-адрес был таким всегда, нужно приударить в соответствующий бубен системный конфиг.


Постоянный изменённый MAC-адрес
в Linux
Для этого идём в /etc/network/if-pre-up.d/ и создаём там от рута файл, например имени pre-up.

В этот файл пишем следующее:
#! /bin/sh
ifconfig eth0 hw ether 00:00:00:00
Нули замените своим мак-адресом. Чтобы изменения вступили сразу же, без перезагрузки, даём команду:
/etc/init.d/networking restart
При этом в первый раз (особенно при работающем интерфейсе) может вылезти такое:

# /etc/init.d/networking restart
Setting up IP spoofing protection: rp_filter.
Reconfiguring network interfaces...SIOCDELRT: No such process
ifup: interface lo already configured
SIOCSIFHWADDR: Device or resource busy
run-parts: /etc/network/if-pre-up.d/pre-up exited with return code 1
done.
Повторяем команду, на этот раз всё должно быть без шума и пыли:
notebeast:/home/beast# /etc/init.d/networking restart
Setting up IP spoofing protection: rp_filter.
Reconfiguring network interfaces...ifup: interface lo already configured
done.
Всё, MAC изменён и останется таковым и после перезагрузки.

Сменить MAC-адрес в Линукс можно разными способами - на то он и Линукс. Например, можно заменить содержимое /etc/network/interfaces на следующее:
# The primary network interface
allow-hotplug eth0
iface eth0 inet dhcp
hwaddress ether 00:00:00:00:00:00
Нули, как и ранее, заменяем на требуемый MAC-address.
В Debian всё проще: в описание интерфейса в /etc/network/interfaces добавляем:
hwaddress ether XX:XX:XX:XX:XX:XX
Другие способы описаны в комментариях к этому посту ниже.


Узнать MAC-адрес сетевой карты
в LinuxЧтобы узнать текущий MAC-адрес просто: набираем
sudo ifconfig
И видим нечто вроде:
eth0 Link encap:Ethernet HWaddr 00:0A:E4:53:AA:2D
inet addr:10.26.49.77 Bcast:10.26.63.255 Mask:255.255.240.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:208554 errors:0 dropped:0 overruns:0 frame:0
TX packets:125071 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:40664531 (38.7 MiB) TX bytes:45919980 (43.7 MiB)
Interrupt:21 Base address:0x4c00

lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:18511 errors:0 dropped:0 overruns:0 frame:0
TX packets:18511 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:537155 (524.5 KiB) TX bytes:537155 (524.5 KiB)

Красное полужирное выделение и есть MAC-адрес (в данном случае, сетевой карты моего ноутбука).


Замечания
Этот пост может быть полезен абонентам московской сети Кверти (qwerty) и Корветт (провайдер OnLime), чтобы лишний раз не пытаться пробиться в службу тех.поддержки, а решить проблему самостоятельно.

36 комментариев:

  1. Сегодня наконец-то решил опубликовать пост, который уже успел покрытся слоем пыли, по этой же теме, но только при помощи пакетика macchanger :)

    ОтветитьУдалить
  2. 2 dim4ik
    Сегодня наконец-то решил опубликовать пост, который уже успел покрытся слоем пыли
    Аналогичная ситуация: надо бы пост уже наконец выложить, чтобы не потереть случайно и самому потом не забыть :-)

    ОтветитьУдалить
  3. Наиболее мне понравилось как подобное реализовано в Gentoo. Вот кусок содержимаго файла /etc/conf.d/net

    mac_eth0="00:50:8D:63:41:DE"
    config_eth0=( "192.168.100.37 netmask 255.255.252.0" )
    routes_eth0=(
    "default via 192.168.100.1"
    )

    Все понятно и чисто, за это я и люблю Gentoo :)

    ОтветитьУдалить
  4. Если MAC-адрес используется для авторизации доступа — это повод сменить провайдера, а не MAC-адрес. Без шуток.

    ОтветитьУдалить
  5. 2 ulmen
    Наиболее мне понравилось как подобное реализовано в Gentoo.
    Ну так! Потому гента, как известно, и рулит :-))

    Все понятно и чисто, за это я и люблю Gentoo :)
    У нас тоже не особенно мутно, но со своими особенностями. Но если у нас в Москве похолодает ещё круче - буду ставить генту и оптимизировать всё до полного посинения :-)

    2 jankkhvej
    Если MAC-адрес используется для авторизации доступа — это повод сменить провайдера
    Зачем так категорично? Если честно, я не очень в курсе этой кухни, но МАК там используется в пределах небольшого сегмента и, вместе с IP-адресом, они определяют пользователя. Никаких накладок и проблем в Центеле по этому поводу не было никогда - всё работает (в отличие от любителей виндовых VPN) на ура.

    ОтветитьУдалить
  6. А зачем выносить скрипт? У меня запись сразу в interfaces :
    pre-up ifconfig eth0 hw ether 00:00:00:00:00:00

    ОтветитьУдалить
  7. Вариантов много. Это ж Линукс :)
    Если читать man interfaces, то результат будет следующий:
    iface eth0 inet static
    address 192.168.1.1
    netmask 255.255.255.0
    hwaddress ether xxxxxxxxxxxx

    ОтветитьУдалить
  8. У меня hwaddress ether xxxxxxxxxxxx не работает по неизвестным причинам. Но я не удивлен, у меня долго не работал replacedefaultroute, пока не исправили :)

    ОтветитьУдалить
  9. У меня в interfaces:
    auto eth1
    iface eth1 inet dhcp
    hwaddress ether 00:00:00:00:00:00

    И все работает. Удивительно, как многим нужна смена адреса. :)

    Мне она понадобилась из-за смены компьютера, чтобы не звонить провайдеру, а то их как попросишь о чем-нибудь, так они все ломают и связь минимум на сутки пропадет.

    ОтветитьУдалить
  10. 2 jmv
    Удивительно, как многим нужна смена адреса. :)
    Да, и естественно, что в Линуксе вариантов куча. Большое спасибо комментаторам за то, что избавили от необходимости читать man ifconfig :-))

    Мне она понадобилась из-за смены компьютера, чтобы не звонить провайдеру
    Та же песня: настраивали интернет на старом ноутбуке, купил новый - в суппорт не прозвониться. Решил на местном форуме спросить - немного помаялся и теперь всё отлично. Чтобы не забыть / не потерять МАК-адрес, решил его сюда забросить. И потом, мало ли кому пригодится.

    ОтветитьУдалить
  11. Верьте мне, я провайдер ;)
    Привязка к MAC-адресу имено так легко обходится, а это уже означает, что защита не работает. Неудобств от привязки MAC-адреса для провайдера больше, а выгоды нет никакой.
    Если IP и MAC используются для идентификации пользователя - это опять таки легко обходится. Если свитч с определённого порта пропускает определённый MAC и/или IP - это достаточно дорогой свитч. И его ж каждый раз надо конфигурировать, как только меняется что-то. Можно использовать много наворотов, но в итоге это неоправданно. Проще использовать 802.1x или PPPoE, технологии специально для этого сделанные.

    ОтветитьУдалить
  12. Заранее хочу сказать что я в линухе безгоду неделю...
    Пытаюсь познать Debian Etch...
    но что касается смены Мака, отключается у меня интерфейс после данных изменений:

    iface lo inet loopback
    address 127.0.0.1
    netmask 255.0.0.0

    iface eth0 inet static
    address *.*.*.*
    netmask 255.255.0.0
    gateway *.*.*.*
    hwaddress enter 00:00:00:00:00:00

    auto eth0


    нет в жизни счастья:\
    ...продолжаю копать,может чего поскажите?;)

    А Блог просто супер, надо же нам ЛинухЛамерам на чём-то учиться :)
    ...продолжайте в том же духе!
    Побольше статей, хороших и разныХ!:)

    ОтветитьУдалить
  13. 2 Senpai
    Пытаюсь познать Debian Etch...
    И это правильно. Настоящие джедаи никогда не ищут лёгких путей типа убунты :-)

    но что касается смены Мака, отключается у меня интерфейс после данных изменений:
    И правильно делает: в конфиге ошибка.

    hwaddress enter 00:00:00:00:00:00

    А надо ether.

    нет в жизни счастья:\
    Есть, только не сразу. Держаться и не поддаваться соблазну перебежать куда-нибудь ещё.

    ...продолжаю копать,может чего поскажите?;)
    Собственно, выше. Можно смело писать на почту - я её просматриваю и даже отвечаю :-)

    ...продолжайте в том же духе!
    Спасибо за тёплые слова. Будем продолжать.

    ОтветитьУдалить
  14. 2 jankkhvej

    >>Верьте мне, я провайдер ;)
    Привязка к MAC-адресу имено так легко обходится, а это уже означает, что защита не работает. Неудобств от привязки MAC-адреса для провайдера больше, а выгоды нет никакой.

    --reply
    Именно для провайдера нет никаких неудобств - исключительно выгоды, одной из которых является "лекго обходится". Регистрация нового MAC пользователя проводится в 2 счёта, "нелегалы" отсеиваются как мухи от котлет - отдельно, безопасность и контроль пользовательского сегмента заметно повышаются.

    >>Если IP и MAC используются для идентификации пользователя - это опять таки легко обходится. Если свитч с определённого порта пропускает определённый MAC и/или IP - это достаточно дорогой свитч. И его ж каждый раз надо конфигурировать, как только меняется что-то. Можно использовать много наворотов, но в итоге это неоправданно. Проще использовать 802.1x или PPPoE, технологии специально для этого сделанные.

    --reply
    С применением PPPoE метода авторизации пользователя аналогично применимо ограничение по MAC. Ограничивается не на свитче, следовательно их нет необходимости тысячи раз перепрограммировать. Масштабировать такую сеть значительно легче.

    ОтветитьУдалить
  15. Выше спрашивали, - "Зачем писать смену в отдельный pre-up скрипт, а не ограничиться, например, дополнительной строкой в interfaces"
    У меня возникла такая ситуация: есть очень капризный пакет network-manager в ubuntu 7.04, который перестает нормально работать с vpn, если хоть чуть-чуть тронешь interfaces.

    ОтветитьУдалить
  16. 2 jankkhvej

    >>Верьте мне, я провайдер ;)
    >>Привязка к MAC-адресу имено так легко обходится, а это уже означает, что защита не работает. Неудобств от привязки MAC-адреса для провайдера больше, а выгоды нет никакой.

    >>Если IP и MAC используются для идентификации пользователя - это опять таки легко обходится. Если свитч с определённого порта пропускает определённый MAC и/или IP - это достаточно дорогой свитч. И его ж каждый раз надо конфигурировать, как только меняется что-то. Можно использовать много наворотов, но в итоге это неоправданно. Проще использовать 802.1x или PPPoE, технологии специально для этого сделанные.

    вот, блин, после такого сообщения могу только сказать об уровне твоей сети - один-два дома.
    ты еще добавь, что использование вланов - это очень неудобно в настройке и требует, опять же, дорогого оборудования...

    в общем, не неси бред.
    по нормальному все происходит так:
    управляемые свитчи, два влана (на каждый район) - один для свитчей, второй для пользователей.
    каждому пользователю прописывается его мак на порту свитча (и, понятое дело, что только эти пакеты свитч будет пропускать), тем самым гарантируется, что ни кто другой из любого места сети под этим маком в сеть не выйдет. на сервере же под этот мак спокойно привязывается интернет.

    при нормальной техподдержке прописывание мака на порт - 5 (ну хорошо, 10) минут.
    система же надежна как молоток.

    говорю это как работавший в НОРМАЛЬНОЙ провайдерской конторе 2.5 года (и как админ, и как техподдержка).

    ОтветитьУдалить
  17. интересно, здесь только с генты и убунты сидят?
    У меня вопрос тоже по смене мак адреса. компа 2 а кабель один, приходится перетыкать каждый раз. в техподдержке уже тупо посылают потому как задолбал звонить им по 5 раз в день. Нужно сменить мак но то что тут написано не подходит. у меня Альтлинукс и там в /etc нет папок /network /interfaces или /conf.d
    Куда что писать?

    ОтветитьУдалить
  18. Ну почему только гента или убунта, я вот на федьке с арчем сижу :) Те же вопросы также решаются. Никаких проблем, только мелкие отличия :)

    ОтветитьУдалить
  19. Анонимный пишет...

    У меня hwaddress ether xxxxxxxxxxxx не работает по неизвестным причинам.
    ---
    причина:
    http://bugs.busybox.net/view.php?id=880

    ОтветитьУдалить
  20. Спасибо за статью, как раз появилась необходимость подключения двух разных компов, а в сети идет привязка по маку и постоянно приходиться звонить в суппорт. Теперь проблема решена :)

    ОтветитьУдалить
  21. Мне нужно подменить МАС спутникового ресивера.
    Сервис меняет МАС в течение 5 минут, в течение 1 часа 3 раза бесплатно, 4 раз снимают 100 рублей. Но возникла потребность подключиться с другого компьютера с другим ресивером.
    Присвоение МАС адреса делаю так: вписываю в .etc/rc.local
    dvbnet -p 4175

    ifconfig dvb0_0 10.251.55.372 netmask 255.255.255.255 broadcast 255.255.255.0 hw ether 00:02:CB:1$

    Так вот вопрос, если я этот МАС пропишу для ресивера с Другим МАС адресом, он будет работать?

    ОтветитьУдалить
  22. Просто хочу присоединиться к благодарностям автору за данную статью, спасибо. Все работает (комп и ноут, один кабель). Вот.

    dncaps

    ОтветитьУдалить
  23. > А зачем выносить скрипт? У меня запись сразу в /etc/network/interfaces :

    /etc/conf.d/net из gentoo =
    /etc/network/interfaces in debian

    > у меня Альтлинукс и там в /etc нет папок /network /interfaces или /conf.d
    > Куда что писать?
    спроси девелоперов Альта. Меня честно говоря не очень радует находить подобные отличия.

    ОтветитьУдалить
  24. Не знаю, правильно ли, но в ALT Linux 4.1 долговременно MAC можно изменить так:
    1) Открыть для редактирования (с правами root) файл /etc/rc.d/rc.sysinit (в комментарии в начале файла сказано, что он "run once at boot time").
    2) Вставить в конец файла строки
    /sbin/ifconfig eth0 down #Выключаем eth0
    /sbin/ifconfig eth0 hw ether 11:22:33:44:55:FF #Нужный Вам MAC
    /sbin/ifconfig eth0 up #Включаем eth0

    Особенность ALT Linux'a - основные утилиты собраны в /sbin
    При этом IP адрес должен настраиваться через NetworkManager (апплет в правой части панели задач), а соединение должно привязываться к интерфейсу по MAC адресу. Сам MAC при настройке можно не указывать.

    ОтветитьУдалить
  25. спасибо за статью...очень помогло!

    ОтветитьУдалить
  26. В ALTLinux'е правильно скрипт ifup-pre положить в каталог /etc/net/ifaces/eth0/
    Понято после чтения http://www.altlinux.org/Etcnet :).
    А ещё лучше в этом случае содержание скрипта сделать следующим:

    #!/bin/sh
    eth=$(basename $(pwd))
    ifconfig $eth hw ether < ваш_мак-адрес >

    ОтветитьУдалить
  27. * Строку
    eth=$(basename $(pwd))
    нужно заменить строкой
    eth=$(basename $(dirname $0))
    для того, чтобы работало в ifup и в service network start :). (ну или оставить просто eth0 и не мучаться))

    ОтветитьУдалить
  28. А что можно сделать, что бы при воровстве чужих, логинов и паролейот сервера статистики, при пользовании чужим тарифом тебя самого не запалили? Слышал что это палится по мак адресу это правда?только не подумайте этой бредятиной я не занимаюсь просто интересно

    ОтветитьУдалить
  29. Подскажите как в Ubuntu 10.04 войти под рутом, чтобы изменить МАС. Ничего из вышеперечисленного не действует. Спасибо

    ОтветитьУдалить
  30. Дык просто до команды набирать sudo, только там мак менять нужно в NetworkManager.

    ОтветитьУдалить
  31. Mint Linux.
    файлик в /etc/network/pre-up.d сделала, в /etc/network/interfaces новый МАС тоже вписала. Работает до первого ребута О_о
    Что я упустила?

    ОтветитьУдалить
  32. to Sakura:
    на файлик pre-up.d поставить права на исполнение (x).

    ОтветитьУдалить
  33. Также для Sakura:
    У меня инет по маку и Линукс Минт 9. Стоит 2 сетевые, на той с которой беру инет(eth0) - разболтано гнездо... коннектор не держится. Решил перебросить провод на 2 сетевую(eth1), ибо звонить в техподдержку сообщать новый МАК лень. Сменил вот как:

    sudo gedit /etc/network/interfaces(редактирование файла interfaces с правами рута)
    в редакторе затем заменил(!именно заменил, а не дописал - если боитесь что-то испортить - сохраните содержимое в другом файле) содержимое на:
    auto eth1
    iface eth1 inet dhcp
    pre-up ifconfig eth1 hw ether хх:хх:хх:хх:хх:хх(это МАК, подставишь)
    и сохранил. перезагрузил сеть командой:
    sudo /etc/init.d/networking restart
    работает. перезагрузка проявила единственный минус - с панели пропал индикатор сети. как вернуть - пока не знаю, но сие не важно. главное инет работает не до первого ребута!

    ОтветитьУдалить
  34. а вот подскажите пожалуйста: у меня всё прекрасно получилось сменить мак адрес. В сетевых соединениях пишет auto eth0 типа соединено, но инета нету. прописал там ещё статический ip, маску, шлюз и dns. все сделал правильно в этом я уверен, может просто чего то пропустил?
    ПС: когда подключаешь кабель, автоматически не соединяется к auto eth0, а просто идёт какое то пподключение к ethernet, потом он не может соединиться и переходит в автономный режим))
    помогите пожалуйста..

    ОтветитьУдалить
  35. В 11-той mandrive прямо в networkmanager есть клонирование MAC. Каждому сетевому соеденению приписывается свой...

    ОтветитьУдалить
  36. Спасибо автору! статья актуальна даже сейчас в 2012году!от себя хочу сказать что если что-то добавлять в файле /etc/network/interfaces:при
    установленном network-manager-пустая трата времени.

    ОтветитьУдалить