systemd-networkd e rotas diretas

4

Eu tenho problema adicionando rotas diretas através do systemd-networkd. O que estou tentando alcançar é semelhante a:

ip a a 192.168.0.2/32 dev enp0s3
ip r a 192.168.0.1/32 dev enp0s3
ip r a default via 192.168.0.1

Esta é uma configuração estranha, eu sei, mas não posso usar o usual ip a a 192.168.0.2/24 para chegar ao gateway. Por algum motivo, a sub-rede inteira / 24 é acessível através do gateway nesta sub-rede. Portanto, essa rota padrão não é somente para rotas catch-all, mas também para alcançar a sub-rede. Então, eu criei o /etc/systemd/network/enp0s3.network:

[Match]
Name=enp0s3

[Address]
Address=192.168.0.2/32

[Route]
Destination=192.168.0.1/32

[Route]
Gateway=192.168.0.1

O problema com esta configuração é que o segundo bloco Route nunca é executado. Fiz algumas depurações e aqui está a diferença entre o que ip e systemd-networkd fazem para o primeiro bloco Route .

# ip
192.168.0.1 dev enp0s3 scope link
# networkd
192.168.0.1 dev enp0s3 proto static

Portanto, systemd-networkd não adiciona scope link à rota. É por isso que uma tentativa de adicionar a rota padrão via 192.168.0.1 falha com o erro Network is unreachable . Isso pode ser corrigido por

ip r c 192.168.0.1/32 dev enp0s3 # automatically adds 'scope link'
ip r a default via 192.168.0.1   # added successfully

Então, minha pergunta é: esse comportamento deve ser considerado um bug systemd-networkd ou estou usando errado? Não consegui encontrar nenhuma documentação sobre rotas diretas na networkd. Por enquanto, desativei systemd-networkd e criei o serviço para executar os comandos ip diretamente. Mas eu gostaria de usar a abordagem padrão, já que isso é o CoreOS que estou tentando configurar.

    
por Ineu 13.02.2015 / 09:06

3 respostas

6

Portanto, a solução aqui é um pouco complicada: você precisa adicionar o gateway como um parâmetro pointopoint com a máscara / 32. Isso funciona:

[Match]
Name=enp0s3

[Address]
Address=192.168.0.2
Peer=192.168.0.1/32

[Network]
Gateway=192.168.0.1
    
por 28.03.2015 / 12:17
6

O que você deseja é especificar como o gateway pode ser alcançado através do escopo local. Isso é de fato alcançável no mesmo segmento. Seu exemplo está faltando apenas a linha Scope=link .

[Match]
Name=enp0s3

[Address]
Address=192.168.0.2/32

[Route]
Destination=192.168.0.1/32
Scope=link

[Route]
Gateway=192.168.0.1
    
por 15.06.2016 / 10:02
0

Eu tenho uma configuração semelhante para o IPv6 (alguém descrevendo o caso aqui: link ).

Para o seu caso, seria assim:

[Math]
Name=enp0s3

[Network]
Address=192.168.0.2/32
Gateway=192.168.0.1

[Route]
Destination=192.168.0.1

Funciona bem (no meu caso, pelo menos), embora eu tenha notado recentemente o systemd-networkd emitindo enp1s0f0: Could not set NDisc route or address: Invalid argument . Mas não tenho certeza do porquê e meu sistema ainda funciona.

EDIT: este erro parece não relacionado. Descobri que meu provedor ativou o RA, por isso, nem estou especificando mais um Gateway (apenas um endereço, sem rota) e ainda tenho esse erro.

    
por 22.06.2017 / 00:53