Modificando a entrada de rota existente no linux

11

qual é o comando para modificar a métrica de uma entrada de rota existente no linux? Consigo alterar o gateway de uma entrada existente usando o comando "ip route change" conforme abaixo, mas não consigo alterar as métricas. Existe algum outro comando para isso?

route –n
40.2.2.0        30.1.3.2        255.255.255.0   eth2

ip route change 40.2.2.0/24 via 30.1.2.2

route -n
40.2.2.0        30.1.2.2        255.255.255.0   eth1
user1762571
fonte
Aqui está uma página do site que possui os comandos para editar endereços IP usando o comando ifconfig. Não conheço todos os comandos em cima da minha cabeça, mas espero que esta página o ajude. tecmint.com/ifconfig-command-examples
Nicholas Awesomepants
1
Exclua a rota e adicione-a novamente, a menos que eles tenham corrigido lkml.iu.edu/hypermail/linux/net/0504.3/0017.html
thrig

Respostas:

7

Como observado em um comentário à pergunta, citando uma mensagem na lista de discussão linux-net: "A métrica / prioridade não pode ser alterada [...] Esta é uma limitação do protocolo atual [...]".
A única maneira é excluir a rota e adicionar uma nova.

Isso é feito usando o routecomando, exemplo:

sudo route add -net default gw 10.10.0.1 netmask 0.0.0.0 dev wlan0 metric 1

Página de manual do Debian para o comando route

Jan
fonte
4
A questão não era como adicionar uma rota a uma determinada métrica; O OP queria alterar a métrica em uma rota existente (sem excluir e adicionar novamente a rota).
András Korn
4
Obviamente, você não leu o comentário na pergunta que links para a exibição de e-mail que não a lata métrica ser alterada: The metric/priority cannot be changed [...] This is a limitation of the current protocol[...]. A única maneira é excluir a rota e adicionar uma nova.
Jan
7
Eu sei que a métrica não pode ser alterada. Sua resposta ainda não responde à pergunta - talvez indique, na resposta, que a métrica só pode ser alterada ao excluir e adicionar novamente a rota?
András Korn
16

(Combinando vários comentários em uma resposta)

Atualmente, não é possível modificar a métrica de uma rota. Como indica uma mensagem de 2005 no LKML :

[...] A métrica / prioridade não pode ser alterada porque não temos campos separados para os campos corresponderem aos novos valores; portanto, se você especificar uma métrica, a entrada simplesmente não será encontrada e a solicitação falhará com ENOENT porque NLM_F_CREATE não está especificado. Esta é uma limitação do protocolo atual e pode ser uma boa ideia alterar isso, no entanto, não é trivial [...]

Isso parece se aplicar a - ip route changee ip route replaceo primeiro resulta em um erro para mim, enquanto o último cria uma rota adicional conforme anunciado (sua página de manual afirma que replacesubstituirá ou criará uma rota). Isso é consistente com o kernel que responde com ENOENT e ip route replaceacompanha uma solicitação de criação de rota.


Portanto, a solução é excluir a rota existente e adicionar uma nova. por exemplo

ip route del 40.2.2.0/24 via 30.1.2.2
ip route add 40.2.2.0/24 via 30.1.2.2 metric 1234
Marca
fonte
sim, foi mordido por este problema este últimos meses ... como Brian Cantrill mantém dizendo sobre Linux: É uma coisa evoluindo com NIH (não inventado aqui) síndrome ...
Hvisage
@Hvisage você pode elaborar? Existe alguma ferramenta que permita alterar a métrica sem precisar removê-la?
Braiam 23/04/19
@Braiam Isso é um negativo, como em: NÃO existe tal ferramenta. conforme a resposta. Se você se refere a minhas citações Bryan Cantrill, ele estava em algum lugar Eu acredito em youtube.com/watch?v=wTVfAMRj-7E
Hvisage
2

ifmetric permitirá que você altere a métrica de sua rota rapidamente, dada a interface pelas quais você deseja alterar.

Uso

ifmetric <iface> [<metric>]

Por exemplo, use ifmetric tun0 12para alterar a métrica para 12 para todas as rotas percorridas tun0.

AeroClassics
fonte
4
Oi! Seria melhor dar um exemplo prático de como usar o comando para obter os resultados que a pergunta pede.
dhag
Sim, seria mesmo. Obrigado.
Aeroclassics