MAC-Adresse abfragen und setzen
Jeder Netzwerkadapter besitzt eine theoretisch weltweit einmalige Media-Access-Control-Nummer, die MAC-Adresse. Diese wird benötigt, damit Netzwerkgeräte auf OSI-Layer #2 (siehe Weblinks) explizit adressiert werden können, um Dienste auf höheren Schichten anbieten zu können.
„Ein Switch benötigt aber eine MAC-Adresse, wenn er selbst über das Rechnernetz administriert wird oder Monitoring-Dienste anbietet (zum Beispiel über Telnet, SNMP oder HTTP). Eine MAC-Adresse wird ebenfalls benötigt, wenn Bridges oder Switches den Spanning Tree Algorithmus zur Vermeidung von Schleifen in redundant ausgelegten Rechnernetzen verwenden.“ (Wikipedia)
MAC-Adresse auslesen
Sämtliche Netzwerkgeräteverwaltung geschieht mittels des Tools ip
aus dem Paket iproute2, da ifconfig
aus dem Paket net-tools als veraltet angesehen wird (siehe Weblinks für eine Liste mit veralteten Netzwerkbefehlen und deren ersetzungen). In den beispielen werden 10.10.0.10
als IP des Systes, und enp0s25
als Netzwerkkartenname verwendet, dies ist an das eigene System anzupassen.
ip link
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 2: enp0s25: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT qlen 1000 link/ether 00:21:9b:13:c4:13 brd ff:ff:ff:ff:ff:ff
Im Beispiel ist das Netzwerk-Interface enp0s25
mit der (für dieses Beispiel ausgedachten) MAC-Adresse 00:21:9b:13:c4:13
vorhanden.
Mittels ip neigh
kann zudem geprüft werden, welche geräte sich noch in der „Netzwerknachbarschaft“ befinden.
ip neigh
10.10.0.100 dev enp0s25 lladdr 00:51:ac:44:8f:1b REACHABLE 10.10.0.12 dev enp0s25 lladdr 00:11:32:08:89:2d REACHABLE 10.10.0.1 dev enp0s25 lladdr bc:05:43:7b:57:e0 REACHABLE
Hie befinden sich drei weitere Systeme im Netzwerk, das über enp0s25
direkt erreichbar ist. Es wird auch für diese Systeme die MAC-Adresse angegeben.
MAC-Adresse ändern
Man sollte die MAC-Adresse nur ändern, wenn man sich sicher ist, warum man dies muss. Im harmlosesten Fehlerfall kommt das System nicht mehr online, aber es kann auch passieren, dsas andere Systeme im Netzwerk ausfallen, oder anderweitig gestört werden, wenn man deren MAC-Adresse einstellt.
Um die MAC-Adresse zu ändern, kann man ip link set
verwenden. Folgendes Beispiel zeigt dies.
ip link show enp0s25 | grep ether link/ether 00:21:9b:13:c4:13 brd ff:ff:ff:ff:ff:ff ip link set dev enp0s25 address de:ad:be:ef:13:37 ip link show enp0s25 | grep ether link/ether de:ad:be:ef:13:37 brd ff:ff:ff:ff:ff:ff
Das Beispiel zeigt zuerst die Originale MAC-Adresse an, setzt dann die neue MAC-Adresse, und zeigt die AMC-Adresse zur überprüfung nochmals an. Eventuell muss das Netzwerkinterface vor dem Ändern der MAC-Adresse mittels ip link set dev enp0s25 down
deaktiviert, und hinterher mittels … up
wieder aktiviert werden.
Dauerhaft speichern
Je nachdem, welches System man verwendet, gibt es mehrere Möglichkeiten, die MAC-Adressänderung dauerhaft zu „speichern“. Da man im Regelfall die MAC-Adresse nicht direkt auf der Netzwerkhardware ändern kann, muss man sie bei jedem start neu definieren.
netcfg
Wenn man netcfg verwendet, kann man den Änderungsaufruf in eine spezielle Variable schreiben.
/etc/network.d/meintollesnetzwerk
INTERFACE="enp0s25" CONNECTION="ethernet" IP='static' ADDR='10.0.0.1' PRE_UP='ip link set dev enp0s25 address de:ad:be:ef:13:37'
Damit wird die neue MAC-Adresse bei jedem Start des Profils meintollesnetzwerk
durch den befehl in PRE_UP
gesetzt. Das aktuellere netctl kann derzeit keine Vor-Start-Befehle ausführen.
systemd explizit
Um die MAC-Adresse netzwerkverbindungstoolunabhängig zu setzen, kann man einen systemd-Service verwenden.
/etc/systemd/system/changemac@.service
[Unit] Description=Change MAC adress Before=dhcpcd@%i.service [Service] Type=oneshot ExecStart=/usr/bin/ip link set dev %i address de:ad:be:ef:13:37 ExecStart=/usr/bin/ip link set dev %i up [Install] WantedBy=network.target
Das obige Beispiel gilt, wenn man DHCP verwendet, und wird mittels systemctl enable changemac@enp0s25
aktiviert.
systemd integriert
Falls man weder netcfg, noch DHCP verwendet, bietet sich folgender Service an.
/etc/systemd/system/network.service
[Unit] Description=Wired Static IP Connectivity Wants=network.target Before=network.target BindsTo=sys-subsystem-net-devices-enp0s25.device After=sys-subsystem-net-devices-enp0s25.device [Service] Type=oneshot RemainAfterExit=yes ExecStart=/usr/bin/ip link set dev enp0s25 address de:ad:be:ef:13:37 ExecStart=/usr/bin/ip link set dev enp0s25 up ExecStart=/usr/bin/ip addr add 10.10.0.10/24 dev enp0s25 ExecStart=/usr/bin/ip route add default via 10.10.0.1 ExecStop=/usr/bin/ip addr flush dev enp0s25 ExecStop=/usr/bin/ip link set dev enp0s25 down [Install] WantedBy=multi-user.target
Dadurch wird mittels systemctl enable network
nicht nur das Netzwerk an sich eingerichtet (IP ist ggf. an das eigene Netzwerk anzupassen), sondern auch die MAC-Adresse gesetzt, sobald der Service aktiv wird.