Wie kann ich die IP-Weiterleitung unter Linux mit systemd dauerhaft aktivieren?

8

Ich versuche , Weiterleitung zu aktivieren ip (zwischen enp0s3und tun0Schnittstellen) und Schreib net.ipv4.ip_forward = 1in /etc/sysctl.conf. Nach dem Neustart habe ich

$ cat /proc/sys/net/ipv4/ip_forward
1

Aber die Weiterleitung funktioniert immer noch nicht. Ich versuche hinzufügen net.ipv4.conf.default.forwarding=1in /etc/sysctl.conf. Jetzt nach dem Neustart habe ich

$ cat /proc/sys/net/ipv4/ip_forward
1
$ cat /proc/sys/net/ipv4/conf/default/forwarding
1
$ cat /proc/sys/net/ipv4/conf/all/forwarding
1
$ cat /proc/sys/net/ipv4/conf/enp0s3/forwarding
0
$ cat /proc/sys/net/ipv4/conf/tun0/forwarding
0

Ich kann /proc/sys/net/ipv4/conf/enp0s3/forwardingund /proc/sys/net/ipv4/conf/tun0/forwardingin nicht aktivieren, sysctl.confda diese Dateien zu einem so frühen Startzeitpunkt nicht vorhanden sind:

systemd-sysctl[85]: Couldn't write '1' to 'net/ipv4/conf/enp0s3/forwarding', ignoring: No such file or directory
systemd-sysctl[85]: Couldn't write '1' to 'net/ipv4/conf/tun0/forwarding', ignoring: No such file or directory)

Darüber hinaus tun0ist die dynamische Schnittstelle (kann jederzeit hinzugefügt und entfernt werden).

Wenn ich manuell aktivieren Weiterleitung für enp0s3und tun0dann funktioniert die Weiterleitung wie erwartet.

Wie kann die Weiterleitung für Schnittstellen ordnungsgemäß aktiviert werden?

PS: Gentoo mit Kernel 4.1.15 und Systemd 226

PPS: Wenn mein Gedächtnis mir vor einiger Zeit dient, net.ipv4.ip_forward = 1war das genug.

Nicht geopfert
quelle

Antworten:

3

Ich löse endlich das Problem. Ich verwende systemd (mit networkd) und in systemd-221 wurde eine neue Funktion zur IP-Weiterleitung eingeführt: "IPForwarding =" - siehe https://github.com/systemd/systemd/blob/a2088fd025deb90839c909829e27eece40f7fce4/NEWS

Von man systemd.network:

[NETZWERK] ABSCHNITTOPTIONEN

...

IPForward =

Konfiguriert die IP-Weiterleitung für die Netzwerkschnittstelle. Wenn aktiviert, werden eingehende Pakete auf der Netzwerkschnittstelle gemäß der Routing-Tabelle an andere Schnittstellen weitergeleitet. Nimmt entweder ein boolesches Argument oder die Werte "ipv4" oder "ipv6", wodurch nur die IP-Weiterleitung für die angegebene Adressfamilie aktiviert wird, oder "kernel", wodurch vorhandene sysctl-Einstellungen erhalten bleiben. Dies steuert die sysctl-Optionen net.ipv4.conf..forwarding und net.ipv6.conf..forwarding der Netzwerkschnittstelle (Einzelheiten zu sysctl-Optionen finden Sie unter ip-sysctl.txt [1]). Der Standardwert ist "Nein".

Hinweis: Sofern diese Option nicht aktiviert oder auf "Kernel" gesetzt ist, erfolgt auf dieser Schnittstelle keine IP-Weiterleitung, auch wenn diese im Kernel mit der Datei net.ipv4.ip_forward, net.ipv4.conf global aktiviert ist. all.forwarding- und net.ipv6.conf.all.forwarding-sysctl-Optionen.

Jetzt verwende ich die folgende Netzwerkdatei, um die IP-Weiterleitung (pro Schnittstelle) zu aktivieren:

# cat /etc/systemd/network/tun0.network
[Match]
Name=tun0

[Network]
IPForward=ipv4
Nicht geopfert
quelle