systemd-networkd und direkte Routen

8

Ich habe Probleme beim Hinzufügen direkter Routen durch systemd-networkd. Was ich erreichen möchte, ist ähnlich wie:

ip a a 192.168.0.2/32 dev enp0s3
ip r a 192.168.0.1/32 dev enp0s3
ip r a default via 192.168.0.1

Ich weiß, dass dies ein seltsames Setup ist, aber ich kann es nicht verwenden ip a a 192.168.0.2/24, um das Gateway zu erreichen. Aus irgendeinem Grund ist das gesamte / 24-Subnetz über das Gateway in diesem Subnetz erreichbar. Diese Standardroute gilt also nicht nur für Sammelrouten, sondern auch zum Erreichen des Subnetzes. Also habe ich /etc/systemd/network/enp0s3.network erstellt:

[Match]
Name=enp0s3

[Address]
Address=192.168.0.2/32

[Route]
Destination=192.168.0.1/32

[Route]
Gateway=192.168.0.1

Das Problem bei diesem Setup ist, dass der zweite RouteBlock niemals ausgeführt wird. Ich habe einige Fehlerbehebungen durchgeführt und hier ist der Unterschied zwischen dem, was ipund was systemd-networkdfür den ersten RouteBlock getan wird .

# ip
192.168.0.1 dev enp0s3 scope link
# networkd
192.168.0.1 dev enp0s3 proto static

Fügt systemd-networkdalso nicht scope linkzur Route hinzu. Aus diesem Grund 192.168.0.1schlägt ein Versuch, eine Standardroute über hinzuzufügen , mit einem Network is unreachableFehler fehl . Dies kann durch behoben werden

ip r c 192.168.0.1/32 dev enp0s3 # automatically adds `scope link`
ip r a default via 192.168.0.1   # added successfully

Meine Frage ist also: Sollte ein solches Verhalten als systemd-networkdFehler angesehen werden oder verwende ich es falsch? Ich konnte keine Dokumentation zu direkten Routen in networkd finden. Im Moment habe ich den Dienst deaktiviert systemd-networkdund erstellt, um ipBefehle direkt auszuführen. Ich möchte jedoch den Standardansatz verwenden, da dies CoreOS ist, das ich konfigurieren möchte.

Ineu
quelle

Antworten:

8

Die Lösung hier ist also etwas schwierig: Sie müssen das Gateway als Punktpunktparameter mit / 32-Maske hinzufügen. Das funktioniert:

[Match]
Name=enp0s3

[Address]
Address=192.168.0.2
Peer=192.168.0.1/32

[Network]
Gateway=192.168.0.1
Ineu
quelle
Dies löst ein ähnliches Problem, das ich hatte: Wenn Sie den DHCPServer aktiviert haben und mehrere VLANs auf der Schnittstelle vorhanden sind, fällt der Server aus und die Standardroute wird nicht festgelegt. Durch Deaktivieren des DHCPServers kann die Standardroute festgelegt werden. Mit einem einzigen VLAN kann es eingestellt werden. Da jedoch sowohl der DHCPServer als auch mehrere VLANs vorhanden sind, schlägt die Standardroute fehl. Dies behebt das Problem sehr gut, daher schreibe ich dies hier in der Hoffnung, dass Webcrawler dies aufgreifen. Die Dokumentation für "Peer" ist äußerst spärlich.
Rand'Chris
Ich sehe keine Möglichkeit, meinen Kommentar oben zu bearbeiten, aber dies löst mein Problem nicht wirklich, da diese Lösung (unter Verwendung von Peer) die für DHCP erforderliche Broadcast-Adresse zu beschädigen scheint. Frage verschoben zu: serverfault.com/questions/926853/…
rand'Chris
8

Sie möchten angeben, wie das Gateway über den lokalen Bereich erreicht werden kann. Das heißt, es ist tatsächlich im selben Segment erreichbar. In Ihrem Beispiel fehlt lediglich die Zeile Scope=link.

[Match]
Name=enp0s3

[Address]
Address=192.168.0.2/32

[Route]
Destination=192.168.0.1/32
Scope=link

[Route]
Gateway=192.168.0.1
Towolf
quelle
3

Keine der vorgeschlagenen Lösungen funktionierte mit systemd 237, da sie GatewayOnlink=truefehlte.

Ich konnte ein verbindungslokales IPv4-Gateway mit einer / 32-Schnittstellenadresse mit folgender Konfiguration verwenden:

[Match]
Name=eth0

[Network]
Address=192.0.2.42/32

[Route]
Destination=169.254.1.1
Scope=link

[Route]
Gateway=169.254.1.1
GatewayOnlink=true
Marco d'Itri
quelle
0

Ich habe ein ähnliches Setup für IPv6 (jemand, der den Fall hier beschreibt: https://phyks.me/2014/11/getting-ipv6-to-work-with-a-kimsufi-server.html ).

Für Ihren Fall würde es als solches übersetzen:

[Math]
Name=enp0s3

[Network]
Address=192.168.0.2/32
Gateway=192.168.0.1

[Route]
Destination=192.168.0.1

Es funktioniert in Ordnung (zumindest in meinem Fall), obwohl ich kürzlich die Ausgabe von systemd-networkd bemerkt habe enp1s0f0: Could not set NDisc route or address: Invalid argument. Aber nicht sicher warum und mein System funktioniert immer noch.

EDIT: Dieser Fehler scheint nichts damit zu tun zu haben. Ich habe festgestellt, dass mein Provider RA aktiviert hat, daher gebe ich nicht einmal mehr ein Gateway an (nur eine Adresse, keine Route) und habe immer noch diesen Fehler.

Archange
quelle