MAC-Adresse abfragen und setzen: Unterschied zwischen den Versionen

Aus wiki.archlinux.de
sollte geprüft werden wegen veraltetem ifconfig und rc.d-Nutzung
K Die Deprecation war vor 10 Jahren und ist nicht mehr relevant.
 
(6 dazwischenliegende Versionen von 3 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
{{veraltet}}
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.  
Die MAC-Adresse (auch: Hardwareadresse oder Ethernet-ID) ist eine Nummer, über die jedes Netzwerk-Gerät eindeutig identifiziert werden kann, solange sie nicht geändert wurde.


== MAC-Adresse abfragen ==
„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)
Die momentane MAC-Adresse kann mit ifconfig angefragt werden:


  $ ifconfig -a eth0 |grep HW
== MAC-Adresse auslesen ==
  eth0      Link encap:Ethernet  HWaddr 00:11:22:33:44:55
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.


Hier ist die MAC-Adresse "00:11:22:33:44:55".
{{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
}}


'''Hinweis:''' Für eth0 muss der jeweilige Netzwerkadapter eingetragen werden (eth0, eth1, wlan0,...). Im Folgenden wird dies nicht mehr jedes mal erwähnt.
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.


Um die MAC-Adressen aller Geräte anzuzeigen wird kein Netzwerkadapter angegeben.
Mittels {{ic|ip neigh}} kann zudem geprüft werden, welche Geräte sich noch in der „Netzwerknachbarschaft“ befinden.


== MAC-Adresse setzen (Spoofing) ==
{{hc|ip neigh|
Um die Macadresse zu setzen gibt es zwei Möglichkeiten.
10.10.0.100 dev enp0s25 lladdr 00:51:ac:44:8f:1b REACHABLE
Zum einen kann sie über ifconfig gesetzt werden, was für die meisten Fälle das einfachste ist,
10.10.0.12 dev enp0s25 lladdr 00:11:32:08:89:2d REACHABLE
zum anderen besteht die Möglichkeit die Adresse über das Programm macchanger zu ändern.
10.10.0.1 dev enp0s25 lladdr bc:05:43:7b:57:e0 REACHABLE
Um bei jedem Start des Systems eine neue Adresse zuzuweisen kann ein daemon ([[Benutzer:Lyl#macchanger|Beispiel]]) verwendet werden.
}}


=== Netzwerkadapter deaktivieren ===
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.
Um auf die Adresse zugreifen zu können muss der Netzwerkadapter vorübergehend deaktiviert werden.


  # ifconfig eth0 down
== 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.


Wenn mehrere MAC-Adressen gespooft werden sollen und keine Programme oder Dienste Netzwerkzugriff benötigen, können auch alle Netzwerkgeräte deaktiviert werden.
Um die MAC-Adresse zu ändern, kann man {{ic|ip link set}} verwenden. Folgendes Beispiel zeigt dies.


  # /etc/rc.d/network stop
# 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


=== ifconfig (Möglichkeit 1) ===
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.
Die Zuweisung erfolgt über folgenden Befehl:


  # ifconfig eth0 hw ether AB:CD:EF:01:23:45
=== 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.


=== macchanger (Möglichkeit 2) ===
==== netcfg ====
Installiere das Programm macchanger
Wenn man netcfg verwendet, kann man den Änderungsaufruf in eine spezielle Variable schreiben.


  # pacman -S macchanger
{{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'
}}


'''Hinweis:''' Da eine Verbindung zum Internet benötigt wird sollte die Netzwerkkarte über welche die Internetverbindung aufgebaut wird nicht deaktiviert sein.
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.


Danach kann eine zufällige MAC-Adresse zugewiesen werden
==== systemd explizit ====
Um die MAC-Adresse netzwerkverbindungstoolunabhängig zu setzen, kann man einen [[systemd]]-Service verwenden.


  # macchanger -A eth0
{{hc|1=/etc/systemd/system/changemac@.service|2=
[Unit]
Description=Change MAC adress
Before=dhcpcd@%i.service


=== Netzwerkadapter aktivieren ===
[Service]
Nun kann der Netzwerkadapter wieder aktiviert werden
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


  # ifconfig eth0 up
[Install]
WantedBy=network.target
}}


bzw.
Das obige Beispiel gilt, wenn man DHCP verwendet, und wird mittels {{ic|systemctl enable changemac@enp0s25}} aktiviert.


  # /etc/rc.d/network start
==== systemd integriert ====
Falls man weder netcfg, noch DHCP verwendet, bietet sich folgender Service an.


und die neue Hardware-Adresse mit ifconfig überprüft werden.
{{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


  $ ifconfig -a eth0 |grep HW
[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:Netzwerk]]
[[Kategorie:Netzwerk]]
[[en:MAC Address Spoofing]]

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.

Siehe auch

Weblinks