MAC-Adresse abfragen und setzen: Unterschied zwischen den Versionen
Lyl (Diskussion | Beiträge) |
Dirk (Diskussion | Beiträge) K Die Deprecation war vor 10 Jahren und ist nicht mehr relevant. |
||
(14 dazwischenliegende Versionen von 8 Benutzern werden nicht angezeigt) | |||
Zeile 1: | Zeile 1: | ||
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 ([[#Weblinks|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 | == MAC-Adresse auslesen == | ||
Sämtliche Netzwerkgeräteverwaltung geschieht mittels des Tools {{ic|ip}} aus dem Paket {{paket|iproute2}}. In den Beispielen werden {{ic|10.10.0.10}} als IP des Systems, und {{ic|enp0s25}} als Netzwerkkartenname verwendet, dies ist an das eigene System anzupassen. | |||
{{hc|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 {{ic|enp0s25}} mit der (für dieses Beispiel ausgedachten) MAC-Adresse {{ic|00:21:9b:13:c4:13}} vorhanden. | |||
Mittels {{ic|ip neigh}} kann zudem geprüft werden, welche Geräte sich noch in der „Netzwerknachbarschaft“ befinden. | |||
{{hc|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 | |||
}} | |||
Hier befinden sich drei weitere Systeme im Netzwerk, das über {{ic|enp0s25}} direkt erreichbar ist. Es wird auch für diese Systeme die MAC-Adresse angegeben. | |||
== MAC-Adresse | == 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, dass andere Systeme im Netzwerk ausfallen, oder anderweitig gestört werden, wenn man deren MAC-Adresse einstellt. | |||
Um die | Um die MAC-Adresse zu ändern, kann man {{ic|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 MAC-Adresse zur Überprüfung nochmals an. Eventuell muss das Netzwerkinterface vor dem Ändern der MAC-Adresse mittels {{ic|ip link set dev enp0s25 down}} deaktiviert, und hinterher mittels {{ic|… 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. | |||
Wenn | ==== netcfg ==== | ||
Wenn man netcfg verwendet, kann man den Änderungsaufruf in eine spezielle Variable schreiben. | |||
{{hc|1=/etc/network.d/meintollesnetzwerk|2= | |||
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 {{ic|meintollesnetzwerk}} durch den befehl in {{ic|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. | |||
{{hc|1=/etc/systemd/system/changemac@.service|2= | |||
[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 {{ic|systemctl enable changemac@enp0s25}} aktiviert. | |||
==== systemd integriert ==== | |||
Falls man weder netcfg, noch DHCP verwendet, bietet sich folgender Service an. | |||
{{hc|1=/etc/systemd/system/network.service|2= | |||
[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 {{ic|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. | |||
== Siehe auch == | |||
* [[Netzwerkprobleme]] | |||
* [[netctl]] | |||
== Weblinks == | |||
* [http://www.heise.de/newsticker/meldung/MAC-Adressen-IEEE-Registry-Authority-befuerchtet-Knappheit-1821810.html heise.de: MAC-Adressen werden knapp] {{sprache|de}} | |||
* [http://www.itu.int/ITU-T/recommendations/rec.aspx?rec=2820&lang=en Offizielle Empfehlung der ITU zum OSI-Schichtmodell] {{sprache|en}} | |||
* [http://de.wikipedia.org/wiki/OSI-Modell Erklärung des OSI-Schichtmodells in der Wikipedia] {{sprache|de}} | |||
* [https://bbs.archlinux.org/viewtopic.php?id=162031 Thread im englischen Forum zu {{ic|netctl}}s Problemen mit PRE_UP-Verhalten] {{sprache|en}} | |||
[[Kategorie:Hardware]] | [[Kategorie:Hardware]] | ||
[[Kategorie:Netzwerk]] |
Aktuelle Version vom 27. Juni 2022, 08:46 Uhr
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. In den Beispielen werden 10.10.0.10
als IP des Systems, 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
Hier 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, dass 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 MAC-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.