Das ist nicht, was tatsächlich geschieht.
IP hängt nicht von Ethernet ab, was passiert, hängt vom zugrunde liegenden Protokoll der unteren Schicht ab.
Das Gleiche passiert, wenn es sich um ein lokal erzeugtes IP-Paket handelt oder wenn es für einen anderen Host geroutet wurde.
Der IPv4-Stack von Linux ist in keiner Weise Ethernet-abhängig, vielmehr werden viele andere Link-Layer-Protokolle vom Kernel unterstützt. Da IP ein WAN-Protokoll ist, können Sie zwischen verschiedenen zugrunde liegenden Protokollen routen. Einige Beispiele sind
- ppp, Schlupf (serielle Leitungen)
- PPTP, GRE (für Tunnel, meist VPNs)
- IP über ATM
- Token Ring (meist ältere, glaube ich)
- Loopback und Dummy (nur für die lokale Kommunikation)
- Wireless LAN (obwohl dies tatsächlich weitgehend identisch zu Ethernet)
Wenn also IP-Frames von einer Ethernet-Schnittstelle zu einer anderen weitergeleitet werden, passiert es, dass die Verbindungsschicht vollständig entfernt wird. Dann wird nach dem Routing eine neue Verbindungsschicht gebildet. Wenn das Protokoll nicht Ethernet wäre, würde stattdessen ein geeignetes Verbindungsschichtpaket für dieses Protokoll verwendet werden.
Also niemand "ändert die MAC-Adresse", sondern das Link-Layer-Paket ist gerade komplett neu aufgebaut.
Mein Verständnis ist, dass auf einigen Karten, Software nicht direkt die MAC auf ausgehenden Paketen steuern. Das heißt, Sie können es in ifconfig einstellen, aber für eine solche Karte ist es nicht der Kernel, der den MAC einfügt. Es scheint also, selbst wenn es einen solchen Ort gibt, würde es nicht immer benutzt werden. – asveikau
Aber ich denke immer noch, dass irgendwo der Kernel-Code den Inhalt des Pakets ändern sollte. Ein Linux-Computer kann auch als Bridge fungieren, und in diesem Fall ändert sich die MAC-Adresse, die von der Maschine weitergeleitet/übertragen wird, nicht. Im Router-Fall wurde es geändert, also denke ich, dass es irgendeinen Platz geben sollte, den der Kernel wählen kann, um das Paket zu aktualisieren oder nicht –