Por que não consigo adicionar uma rota padrão?

1

Eu tenho uma máquina do CentOS 7 no espaço de endereço privado, o IP é 10.10.0.2. Eu gostaria de ter acesso à Internet através de um gateway com um IP público que está conectado ao mesmo switch , vamos chamá-lo 50.50.50.50. Eu tive que trabalhar em algum momento, mas agora quebrou e parece não ser capaz de consertá-lo. Eu também instalei net-tools porque acho muito mais fácil colocar minha cabeça em torno do formato para isso.

[root@node002 ~]# ip route show
10.0.0.0/8 dev ens785 proto kernel scope link src 10.10.0.2 metric 100 
[root@node002 ~]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
10.0.0.0        0.0.0.0         255.0.0.0       U     100    0        0 ens785

Então, como posso adicionar uma rota para todo o resto, com 50.50.50.50 como o gateway?

Eu tentei algumas coisas, como [root@node002 ~]# ip route add 0.0.0.0/0 dev ens785 , mas isso não adiciona nada à tabela de roteamento. Nenhuma mensagem de erro também. Eu também tentei adicionar uma rota para o host como este ip route add 50.50.50.50 dev ens785 , o que me deu uma linha extra na tabela de roteamento.

[root@node002 ~]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
10.0.0.0        0.0.0.0         255.0.0.0       U     100    0        0 ens785
50.50.50.50     0.0.0.0         255.255.255.255 UH    0      0        0 ens785

Eu também tentei outras variações, como [root@node002 ~]# ip route add 0.0.0.0/0 via 50.50.50.50 , mas isso excluiu minha rota para o host, pois é assim que fica imediatamente após a execução:

[root@node002 ~]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
10.0.0.0        0.0.0.0         255.0.0.0       U     100    0        0 ens785

Eu também tentei:

[root@node002 ~]# ip route add default via 50.50.50.50/0
Error: ??? address is expected rather than "50.50.50.50/0".

E até mesmo:

[root@node002 ~]# ip route add default dev ens785
[root@node002 ~]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
10.0.0.0        0.0.0.0         255.0.0.0       U     100    0        0 ens785
50.50.50.50     0.0.0.0         255.255.255.255 UH    0      0        0 ens785

Todas as outras máquinas têm uma rota padrão que tem 0.0.0.0 como o destino e o gateway. Como minha área de trabalho, por exemplo, o que faz sentido - o tráfego na mesma rede vai para a rede local sem um gateway, o tráfego para qualquer outra coisa passa pelo roteador.

root@desktop ~ $ route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         100.100.100.1   0.0.0.0         UG    100    0        0 eth0
100.100.100.0   0.0.0.0         255.255.255.0   U     100    0        0 eth0

Eu não sei bem como eu quebrei isso ou como consertá-lo. Quaisquer ponteiros muito apreciados!

EDITAR

Primeiro de tudo, dei à máquina do gateway um endereço particular na mesma interface. Agora é 10.1.1.1, o que eu acho que significa com uma máscara de sub-rede de 255.0.0.0 significa que é a mesma rede. O endereço é pingável. Mas também não posso adicioná-lo como padrão.

[root@node002 ~]# ip route add default via 10.1.1.1
[root@node002 ~]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
10.0.0.0        0.0.0.0         255.0.0.0       U     100    0        0 ens785
50.50.50.50     0.0.0.0         255.255.255.255 UH    0      0        0 ens785

Posso adicionar temporariamente um IP público ao nó e, ENTÃO, posso adicionar um gateway padrão:

[root@node002 ~]# ip a add 50.50.50.51 dev ens785
[root@node002 ~]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
10.0.0.0        0.0.0.0         255.0.0.0       U     100    0        0 ens785
50.50.50.50     0.0.0.0         255.255.255.255 UH    0      0        0 ens785
[root@node002 ~]# ip route add default via 10.1.1.1
[root@node002 ~]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         10.1.1.1        0.0.0.0         UG    100    0        0 ens785
10.0.0.0        0.0.0.0         255.0.0.0       U     100    0        0 ens785
50.50.50.50     0.0.0.0         255.255.255.255 UH    0      0        0 ens785
50.50.50.51     0.0.0.0         255.255.255.255 UH    100    0        0 ens785

Eu posso remover o endereço IP público, mas ainda manter a rota padrão:

[root@node002 ~]# ip a del 50.50.50.51/32 dev ens785
[root@node002 ~]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         10.1.1.1        0.0.0.0         UG    100    0        0 ens785
10.0.0.0        0.0.0.0         255.0.0.0       U     100    0        0 ens785
50.50.50.50     0.0.0.0         255.255.255.255 UH    0      0        0 ens785

Então, por que eu tenho que adicionar um IP público para poder adicionar um gateway, se eu puder remover o IP público e manter o gateway?

EDIT 2 Ainda não consigo obter uma rota padrão para adicionar usando os comandos ip, a menos que eu adicione um IP público brevemente.

Mais confusamente, posso conseguir coisas ignorando o NetworkManager e usando arquivos ifcfg (e trocando para uma atribuição estática ao invés de DHCP).

[root@node002 ~]# cat /etc/sysconfig/network-scripts/ifcfg-ens785 
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static
NM_CONTROLLED=no
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
NAME=ens785
DEVICE=ens785
ONBOOT=yes
MTU=9000
HWADDR=00:11:22:33:44:55
IPADDR=10.10.0.2
NETMASK=255.0.0.0
GATEWAY=10.1.1.1
DNS1=10.1.1.1
[root@node002 ~]# systemctl stop NetworkManager 
[root@node002 ~]# ifdown ens785 && ifup ens785
[root@node002 ~]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use 
Iface
0.0.0.0         10.1.1.1        0.0.0.0         UG    0      0        0 ens785
10.0.0.0        0.0.0.0         255.0.0.0       U     0      0        0 ens785
169.254.0.0     0.0.0.0         255.255.0.0     U     1004   0        0 ens785
    
por Biggles 20.10.2017 / 04:20

3 respostas

4

Primeiro, não é possível adicionar o gateway padrão via IP e você não tem uma interface que tenha um IP do mesmo intervalo do gateway. Portanto, para adicionar um gateway padrão, por exemplo, 50.50.50.50/24 , você deve ter um IP do mesmo intervalo, por exemplo, 50.50.50.100/24 .

Se você tiver apenas uma interface e tiver um endereço IP privado e precisar acessar a Internet, será necessário um roteador para que ele possa transformar o NAT de IP local em IP público.

Você só tem que alternar, para corrigir esse problema, você pode fazer um truque que é adicionar uma interface de sub (alias) à mesma interface que tem o IP privado com IP do intervalo de IP público, por exemplo 50.50.50.100/24 e adicione o gateway padrão como este ip route add default via 50.50.50.50

    
por 20.10.2017 / 04:50
2

O roteamento é sempre feito na camada 3 (IP). Não é suficiente ter uma rota padrão apontando para 50.50.50.50 , sua tabela de roteamento também deve conter uma entrada que mostre como chegar a esse host. Para a camada IP, algum endereço aleatório é inacessível, mesmo se estiver no mesmo link; a camada IP não sabe disso. Somente quando a camada IP tiver determinado a partir da tabela de roteamento para a qual o pacote IP deve ir, ela estará pronta para entregá-la à camada 2.

Observe que não é estritamente necessário que seu host tenha um IP no mesmo intervalo (digamos 50.50.50.51 ); O importante é que você tenha rota para a sub-rede. No entanto, adicionar um endereço secundário ( ip addr add 50.50.50.51/24 dev ens785 ) adiciona automaticamente uma rota a 50.50.50.0/24 .

Dito isso, acho que a maneira correta de fazer isso é o que você tentou fazer: adicionar um endereço secundário ao roteador no intervalo 10.0.0.0/8 e adicionar uma rota padrão a esse endereço ( 10.1.1.1 em seu exemplo ). Não sei por que adicionar a rota não funcionou para você. Você recebeu alguma mensagem de erro de ip route add default via 10.1.1.1 ?

Se você deseja acessar a Internet a partir dos hosts em sua rede 10.0.0.0/8 , o roteador precisa realizar NAT entre os endereços público e privado, como @WissamRoujoulah disse acima.

    
por 21.10.2017 / 11:47
0

Acho que isso é um bug no gerenciador automático de configuração de rede. Se você desligar o gerenciador de configuração colocando:

NM_CONTROL=no

no seu ifcfg-ens785 e reiniciar a rede, você deve adicionar manualmente a rota padrão.

    
por 06.12.2017 / 15:08