Comment activer correctement le transfert IP sous Linux avec systemd?

8

J'essaie de permettre ip le transfert (entre enp0s3et tun0interfaces) et écriture net.ipv4.ip_forward = 1dans /etc/sysctl.conf. Après le redémarrage, j'ai

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

Mais la transmission ne fonctionne toujours pas. J'essaie d'ajouter net.ipv4.conf.default.forwarding=1à /etc/sysctl.conf. Maintenant, après le redémarrage, j'ai

$ 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

Je ne peux pas activer /proc/sys/net/ipv4/conf/enp0s3/forwardinget /proc/sys/net/ipv4/conf/tun0/forwardingen sysctl.confparce que ces fichiers n'existe pas au moment de démarrage rapide:

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)

, plus tun0est l'interface dynamique (peut être ajoutée et supprimée à tout moment).

Si activer manuellement le renvoi pour enp0s3et tun0ensuite la transmission fonctionne comme prévu.

Alors, comment activer correctement le transfert pour les interfaces?

PS: Gentoo avec le noyau 4.1.15 et systemd 226

PPS: si ma mémoire est bonne il y net.ipv4.ip_forward = 1a quelque temps, c'était suffisant.

Non sacrifié
la source

Réponses:

3

Je résous enfin le problème. J'utilise systemd (avec networkd) et une nouvelle fonctionnalité sur le transfert ip a été introduite dans systemd-221: "IPForwarding =" - voir https://github.com/systemd/systemd/blob/a2088fd025deb90839c909829e27eece40f7fce4/NEWS

De man systemd.network:

[RÉSEAU] OPTIONS DE LA SECTION

...

IPForward =

Configure le transfert IP pour l'interface réseau. Si activé, les paquets entrants sur l'interface réseau seront transmis à d'autres interfaces conformément à la table de routage. Prend soit un argument booléen, soit les valeurs "ipv4" ou "ipv6", qui active uniquement le transfert IP pour la famille d'adresses spécifiée, ou "kernel", qui préserve les paramètres sysctl existants. Ceci contrôle les options sysctl net.ipv4.conf..forwarding et net.ipv6.conf..forwarding de l'interface réseau (voir ip-sysctl.txt [1] pour plus de détails sur les options sysctl). Par défaut, "non".

Remarque: sauf si cette option est activée ou définie sur "noyau", aucune redirection IP n'est effectuée sur cette interface, même si celle-ci est globalement activée dans le noyau, avec net.ipv4.ip_forward, net.ipv4.conf. options sysctl all.forwarding et net.ipv6.conf.all.forwarding.

Alors maintenant, j'utilise un fichier réseau comme suit pour activer le transfert IP (par interface):

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

[Network]
IPForward=ipv4
Non sacrifié
la source