MAC-Adresse abfragen und setzen: Unterschied zwischen den Versionen

Aus wiki.archlinux.de
Keine Bearbeitungszusammenfassung
K (unkat (das ist keine Grundlage mehr ...))
Markierung: Manuelle Zurücksetzung
(10 dazwischenliegende Versionen von 5 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
== MAC-Adresse ==
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.
„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 abfragen ==
== MAC-Adresse auslesen ==
Sämtliche Netzwerkgeräteverwaltung geschieht mittels des Tools {{ic|ip}} aus dem Paket {{paket|iproute2}}, da {{ic|ifconfig}} aus dem Paket {{paket|net-tools}} als veraltet angesehen wird (siehe Weblinks für eine Liste mit veralteten Netzwerkbefehlen und deren Ersetzungen). 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.


Die momentane MAC-Adresse kann mit ifconfig angefragt werden:
{{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
}}


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


Hier ist die MAC-Adresse "00:11:22:33:44:55".
Mittels {{ic|ip neigh}} kann zudem geprüft werden, welche Geräte sich noch in der „Netzwerknachbarschaft“ befinden.


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


Um die MAC-Adressen aller Geräte anzuzeigen wird kein Netzwerkadapter angegeben.
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 setzen (Spoofing) ==
== 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 Macadresse zu setzen gibt es zwei Möglichkeiten.
Um die MAC-Adresse zu ändern, kann man {{ic|ip link set}} verwenden. Folgendes Beispiel zeigt dies.
Zum einen kann sie über ifconfig gesetzt werden, was für die meisten Fälle das einfachste ist,
zum anderen besteht die Möglichkeit die Adresse über das Programm macchanger zu ändern.


=== Netzwerkadapter deaktivieren ===
# 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


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


  # ifconfig eth0 down
=== 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 mehrere MAC-Adressen gespooft werden sollen und keine Programme oder Dienste Netzwerkzugriff benötigen, können auch alle Netzwerkgeräte deaktiviert werden.
==== netcfg ====
Wenn man netcfg verwendet, kann man den Änderungsaufruf in eine spezielle Variable schreiben.


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


=== ifconfig (Möglichkeit 1) ===
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.


Die Zuweisung erfolgt über folgenden Befehl:
==== systemd explizit ====
Um die MAC-Adresse netzwerkverbindungstoolunabhängig zu setzen, kann man einen [[systemd]]-Service verwenden.


  # ifconfig eth0 hw ether AB:CD:EF:01:23:45
{{hc|1=/etc/systemd/system/changemac@.service|2=
[Unit]
Description=Change MAC adress
Before=dhcpcd@%i.service


=== macchanger (Möglichkeit 2) ===
[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


Installiere das Programm macchanger
[Install]
WantedBy=network.target
}}


  # pacman -Sy macchanger
Das obige Beispiel gilt, wenn man DHCP verwendet, und wird mittels {{ic|systemctl enable changemac@enp0s25}} aktiviert.


'''Hinweis'''Da eine Verbindung zum internet benötigt wird sollte die Netzwerkkarte über welche die Internetverbindung aufgebaut wird nicht deaktiviert sein.
==== systemd integriert ====
Falls man weder netcfg, noch DHCP verwendet, bietet sich folgender Service an.


Danach kann eine zufällige MAC-Adresse zugewiesen 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


  # macchanger -A eth0
[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


=== Netzwerkadapter aktivieren ===
ExecStop=/usr/bin/ip addr flush dev enp0s25
ExecStop=/usr/bin/ip link set dev enp0s25 down


Nun kann der Netzwerkadapter wieder aktiviert werden
[Install]
WantedBy=multi-user.target
}}


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


bzw.
== Siehe auch ==
* [[Netzwerkprobleme]]
* [[netctl]]


  # /etc/rc.d/network start
== Weblinks ==
 
* [http://dougvitale.wordpress.com/2011/12/21/deprecated-linux-networking-commands-and-their-replacements/ Deprecated Linux networking commands and their replacements] {{sprache|en}}
und die neue Hardware-Adresse mit ifconfig überprüft werden.
* [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}}
  $ ifconfig -a eth0 |grep HW
* [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]]

Version vom 2. September 2021, 08:24 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, 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 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