Como ativar corretamente o encaminhamento de ip no Linux com o systemd?

7

Eu tento habilitar o encaminhamento de IP (entre enp0s3 e tun0 interfaces) e escrevo net.ipv4.ip_forward = 1 em /etc/sysctl.conf . Depois de reiniciar eu tenho

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

Mas o encaminhamento ainda não está funcionando. Eu tento adicionar net.ipv4.conf.default.forwarding=1 em /etc/sysctl.conf . Agora depois de reiniciar eu tenho

$ 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

Não consigo ativar /proc/sys/net/ipv4/conf/enp0s3/forwarding e /proc/sys/net/ipv4/conf/tun0/forwarding em sysctl.conf porque esses arquivos não existem em um tempo de inicialização tão cedo:

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)

, mais de tun0 é interface dinâmica (pode ser adicionada e removida a qualquer momento).

Se eu ativar manualmente o encaminhamento para enp0s3 e tun0 , o encaminhamento funcionará como esperado.

Então, como ativar corretamente o encaminhamento para interfaces?

PS: Gentoo com kernel 4.1.15 e systemd 226

PPS: se a minha memória me serve há algum tempo, net.ipv4.ip_forward = 1 foi suficiente.

    
por Unsacrificed 04.02.2016 / 12:34

1 resposta

2

Eu finalmente resolvo o problema. Eu uso systemd (com networkd) e novo recurso sobre o encaminhamento de ip foi introduzido no systemd-221: "IPForwarding=" - consulte link

De man systemd.network :

[NETWORK] SECTION OPTIONS

...

IPForward=

Configures IP forwarding for the network interface. If enabled incoming packets on the network interface will be forwarded to other interfaces according to the routing table. Takes either a boolean argument, or the values "ipv4" or "ipv6", which only enables IP forwarding for the specified address family, or "kernel", which preserves existing sysctl settings. This controls the net.ipv4.conf..forwarding and net.ipv6.conf..forwarding sysctl options of the network interface (see ip-sysctl.txt[1] for details about sysctl options). Defaults to "no".

Note: unless this option is turned on, or set to "kernel", no IP forwarding is done on this interface, even if this is globally turned on in the kernel, with the net.ipv4.ip_forward, net.ipv4.conf.all.forwarding, and net.ipv6.conf.all.forwarding sysctl options.

Então, agora eu uso o arquivo de rede como segue para ativar o encaminhamento de ip (por interface):

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

[Network]
IPForward=ipv4
    
por 08.02.2016 / 14:19