Neues Jahr neues Projekt! Diesmal geht es ein Problemchen welches ich zu lösen hatte. Aber erstmal genaueres zum Problem. Was ist eigentlich das Problem? Die Fritzbox, welche ich nutze, hat ein tolles Feature um Hostnamen aufzuösen. Man muss also nicht mehr 192.168.178.XX eingeben sondern kann direkt einfach Hostname.fritz.box eingeben. Leider ist das ganze an der MAC Adresse des Gerätes gebunden. Die Ansätze im Internet an dem Server dem Netzwerkgerät zusagen er solle doch bitte nur X-Beliebige neue IP-Adressen beziehen ist also Käse da ja dadurch die IP-Adressen die gleiche MAC-Adresse haben. Für ein Router der nicht von AVM ist kann das evt. kein Problem sein doch in meinem Fall war es ein großes Problem das so die Hostnamen auflösung nicht funktionierte. Andere Geräte im Netz Pingten ihre Aufforderungen also immernoch ins Leere…
Ich werde hier allerdings nur eine Ubuntu Variante behandeln und wie immer gilt anfassen auf eigner Gefahr!
Doch was machen wir überhaupt? Nun wir erstelllen Virtuelle Netzwerkadapter. Einen UntaggedVLAN. Dazu müsssen wir erstmal Rausfinden welches Netzwerkgerät grade mit unserem Router Verbunden ist. Dank dem neuesten Updatet haben die jetzt auch „Predicable Names“ bekommen. Um hier einmal Germancoding zu Zitieren:
Was Bringen predictable interface names wenn kein Mensch sich erklären kann wie die eigentlich generiert werden?
germancoding.com
Das bekommen mit einer kleinen Abfrage raus. IP a (achtung das a hat keine – davor!). Nicht erschrecken da kommt recht viel auf dich zu! Suche jetzt in dem ganzen gerümpel mal nach deiner IP welche dein Gerät trägt. Das sollte dann dein Netzwerk gerät sein. Bei Lan könnte es z.B. enp0s0 sein. Haben wir das herraus gefunden kann es losgehen mit dem erstellen des Interfaces. Das lässt sich ganz einfach mit dem Befehl:
ip link add link <Gerätenamen> address 00:11:11:11:11:11 <Gerätenamen>.<Eine Zahl> type macvlan
Natürlich muss man das in den <> stehende anpassen und ersetzten. Deine MAC-Adresse ist hier übrigens fast frei wählbar. Warum fast? naja … Man sollte schon eine machen die auch MAC-Adressenkonform ist. Aber das sollte ja klar sein. Nun müssen wir dem System aber noch sagen das die Pakete welche an dem einem Adapter ankommt auch nur für dieses bestimmt ist! Aber systemctl hat für uns natürlich passende Befehle:
sysctl -w net.ipv4.conf.all.arp_ignore=1 sysctl -w net.ipv4.conf.all.arp_announce=2
Doch wie bekommen wir jetzt DHCP auf die Interfaces? Dazu müssen wir erstmal eine neue Datei in /etc/systemd/network/ anlegen. Diese solle „1-Beschreibung.network“ heißen. Die 1 am Anfang ist die Prioritäts Zahl. Sollte man mehrere Konfigurationen haben so kann man damit einstellen welche Konfig Vorfahr hat. Je kleiner die Zahl desdo höher der Vorrang. Darein kommt nun erstmal folgendes:
[Match] Name=<Neuangelegt1> Name=<Neuangelegt2> [Network] DHCP=ipv4 LinkLocalAddressing=ipv6 [DHCP] RouteMetric=100 UseMTU=true
Mit einem systemctl restart systemd-networkd wird die Config wirksam.
In der Theorie lässt sich auch DHCP deativieren und Statische IP’s eintragen aber… das geht zuweit. Wenn man übrigens nicht die MAC adresse ändern will kann man diese Datei anlegen und das Stadard Interface in Match eintragen und im Network Tab mehrere Address=XXX Befehle schreiben… dazu muss DHCP ausgeschaltet werden. Die neuen IP-Adressen sind dann aber rein statisch und das ist nicht das Ziel von uns…
Ok also weiter im Text! Oh was? So anstrengend? Ok ok… Achtung Hunde Bild!
Genug getrödelt es stehet Arbeit an! Denn noch sind unsere Interfaces nicht eingeschaltet! Dafür müssen wir :
ip link set <NeuerGerätename> up
ausführen. Jetzt ein blick in IP a uns siehe da wir haben neue IPs bekommen! Ein blick in die Fritzbox bestätigt! Wir haben ein neues Gerät! Jetzt lässt sich der Hostname noch frei Wählen das wäre geschaft aber… MOMENT MAL!
Persistenz erzeugen!
Ganz richtig gelesen dieser ganze klumpatsch ist gar nicht persistent! Beim nächsten freiwilligen oder beii mir auch öfteren nicht freiwilligen reboot ist das ganze für die Katz…
Das ganze was wir jetzt gemacht haben kommt nun in ein Script was noch vor allem anderen ausgeführt werden sollte. RC-Local ist hier die Wahl!
Also /etc/systemd/system/rc-local-comp.service anlegen und
[Unit] Description=/etc/rc.local Compatibility ConditionPathExists=/etc/rc.local [Service] Type=forking ExecStart=/etc/rc.local start TimeoutSec=0 StandardOutput=tty RemainAfterExit=yes SysVStartPriority=99 [Install] WantedBy=multi-user.target#
rein kopieren. Jetzt das ganze noch mit chmod 755 ausführ bar machen und mit einem systemctl enable rc-local-comp.service bereit machen!
Und in /etc/rc.local nun das hier:
#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.
ip link add link <Gerät> address 00:11:11:11:11:11 <Gerät>.<Zahl> type macvlan
ip link set <Gerät>.<Zahl> up
exit 0
Und dann jetzt ein Reboot und hoffen das sich das Gerät noch per SSH ansprechen lässt. Und wenn das Geht ja dann… tja dann hast du es geschafft!
Mir gefällt die Idee mit den Hundebildern
toll.
falsch:
Mit einem systemctl restart systemd-nertworkd wird die Config wirksam.
richtig:
Mit einem systemctl restart systemd-networkd wird die Config wirksam.
Huch da hat sich wohl ein Tippfehler eingeschlichen!