Como habilitar permanentemente o encaminhamento de ip corretamente no Linux com systemd?

8

Tento Activar reencaminhamento IP (entre enp0s3e tun0as interfaces) e escrever net.ipv4.ip_forward = 1em /etc/sysctl.conf. Após 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=1em /etc/sysctl.conf. Agora, após o reinício, 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

Eu não posso permitir /proc/sys/net/ipv4/conf/enp0s3/forwardinge /proc/sys/net/ipv4/conf/tun0/forwardingem sysctl.confporque esses arquivos não existe a tal tempo início de boot:

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 sobre tun0a interface dinâmica (pode ser adicionada e removida a qualquer momento).

Se eu ativar manualmente o encaminhamento enp0s3e, em tun0seguida, o encaminhamento funcionará como esperado.

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

PS: Gentoo com o kernel 4.1.15 e systemd 226

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

Não sacrificado
fonte

Respostas:

3

Eu finalmente resolvo o problema. Eu uso systemd (com networkd) e um novo recurso sobre encaminhamento de ip foi introduzido no systemd-221: "IPForwarding =" - consulte https://github.com/systemd/systemd/blob/a2088fd025deb90839c909829e27eece40f7fce4/NEWS

De man systemd.network:

[REDE] OPÇÕES DE SEÇÃO

...

IPForward =

Configura o encaminhamento de IP para a interface de rede. Se ativado, os pacotes recebidos na interface de rede serão encaminhados para outras interfaces, de acordo com a tabela de roteamento. Adota um argumento booleano ou os valores "ipv4" ou "ipv6", que permitem apenas o encaminhamento de IP para a família de endereços especificada ou "kernel", que preserva as configurações sysctl existentes. Isso controla as opções sysctl net.ipv4.conf..forwarding e net.ipv6.conf..forwarding da interface de rede (consulte ip-sysctl.txt [1] para obter detalhes sobre as opções sysctl). O padrão é "não".

Nota: a menos que essa opção esteja ativada ou definida como "kernel", nenhum encaminhamento de IP será feito nessa interface, mesmo que isso esteja ativado globalmente no kernel, com o arquivo net.ipv4.ip_forward, net.ipv4.conf. opções sysctl all.forwarding e net.ipv6.conf.all.forwarding.

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

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

[Network]
IPForward=ipv4
Não sacrificado
fonte