¿Cómo habilitar correctamente el reenvío de IP permanente en Linux con systemd?

8

Trato de permitir el reenvío de IP (entre enp0s3y tun0las interfaces) y escribir net.ipv4.ip_forward = 1en /etc/sysctl.conf. Después de reiniciar tengo

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

Pero el reenvío aún no funciona. Trato de añadir net.ipv4.conf.default.forwarding=1en /etc/sysctl.conf. Ahora después de reiniciar tengo

$ 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

No puedo permitir /proc/sys/net/ipv4/conf/enp0s3/forwardingy /proc/sys/net/ipv4/conf/tun0/forwardingen sysctl.confdebido a que estos archivos no existe en el momento de inicio temprano:

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)

, más sobre tun0es interfaz dinámica (se puede agregar y quitar en cualquier momento).

Si habilito manualmente el reenvío enp0s3y tun0luego el reenvío funciona como se esperaba.

Entonces, ¿cómo habilitar correctamente el reenvío de interfaces?

PD: Gentoo con kernel 4.1.15 y systemd 226

PPS: si mi memoria me sirve hace algún tiempo net.ipv4.ip_forward = 1fue suficiente.

Sin sacrificar
fuente

Respuestas:

3

Finalmente resuelvo el problema. Uso systemd (con networkd) y se ha introducido una nueva característica sobre el reenvío de IP en systemd-221: "IPForwarding =" - consulte https://github.com/systemd/systemd/blob/a2088fd025deb90839c909829e27eece40f7fce4/NEWS

De man systemd.network:

[RED] OPCIONES DE SECCIÓN

...

IPForward =

Configura el reenvío de IP para la interfaz de red. Si se habilitan los paquetes entrantes en la interfaz de red, se enviarán a otras interfaces de acuerdo con la tabla de enrutamiento. Toma un argumento booleano o los valores "ipv4" o "ipv6", que solo permiten el reenvío de IP para la familia de direcciones especificada, o "kernel", que conserva la configuración de sysctl existente. Esto controla las opciones sysctl de net.ipv4.conf..forwarding y net.ipv6.conf..forward de la interfaz de red (consulte ip-sysctl.txt [1] para obtener detalles sobre las opciones sysctl). Por defecto es "no".

Nota: a menos que esta opción esté activada o configurada en "kernel", no se realizará el reenvío de IP en esta interfaz, incluso si está activada globalmente en el kernel, con net.ipv4.ip_forward, net.ipv4.conf. all.forwarding y net.ipv6.conf.all.forwarding sysctl opciones.

Así que ahora uso el archivo de red como el siguiente para habilitar el reenvío de IP (por interfaz):

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

[Network]
IPForward=ipv4
Sin sacrificar
fuente