Quais arquivos de configuração afetam a tabela de roteamento de um sistema Debian

2

Até onde eu sei, a configuração básica da rede entra em /etc/network/interfaces e o sistema gera a tabela de roteamento a partir dessas informações. Também aprendi que, em geral, /etc/network/interfaces é o lugar para adicionar permanentemente comandos personalizados para manipular a tabela de roteamento (também sugerido às vezes é /etc/rc.local ou um script personalizado em /etc/network/if-up.d/ ). Além disso, pode-se especificar tabelas de roteamento personalizadas em /etc/iproute2/rt_tables .

  • Existem outros locais que afetarão a tabela de roteamento (principal)?
    • Em particular, existem outras possibilidades além de /etc/network/interfaces para tornar as rotas manualmente adicionadas / excluídas permanentes?
  • Um sistema com várias NICs tem um conceito de primário e interfaces de rede secundárias ou esses únicos termos usados para ajudar o usuário? (Durante a configuração, é necessário escolher o primário if e /etc/network/interfaces conterá um comentário apropriado.) Se tal conceito existir, onde ele poderá ser configurado?
  • Existem diferenças no conceito de tabela de roteamento entre o Debian Squeeze e o Debian Jessie?

O pano de fundo da minha pergunta é que eu tenho um sistema legado Debian Squeeze e um novo sistema Debian Jessie que inicializa com diferentes tabelas de roteamento, mas são (até onde eu sei) configuradas de forma idêntica. Eu poderia manipular manualmente a tabela de roteamento para atender às minhas necessidades e tornar as alterações permanentes usando /etc/network/interfaces , mas quero entender o que está acontecendo.

EDITAR

Aqui estão os arquivos de configuração de ambas as máquinas. Eu mudei as primeiras partes de cada endereço IP por motivos de privacidade. No entanto, as sub-redes e as partes do endereço das respectivas redes não foram alteradas. O diretório /etc/network/interfaces.d/ na máquina Jessie está vazio.

/etc/iproute2/rt_tables em Jessie

#
# reserved values
#
255 local
254 main
253 default
0   unspec
#
# local
#
#1  inr.ruhep

/etc/iproute2/rt_tables no Squeeze

#
# reserved values
#
255     local
254     main
253     default
0       unspec
#
# local
#
#1      inr.ruhep

/etc/rc.local em Jessie

#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.

exit 0

/etc/rc.local no Squeeze

#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.

exit 0

/etc/network/interfaces em Jessie

# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

source /etc/network/interfaces.d/*

# The loopback network interface
auto lo
iface lo inet loopback

auto eth1
iface eth1 inet static
    address 143.103.155.254
    netmask 255.255.255.0
    network 143.103.155.0
    gateway 143.103.155.254

# The primary network interface
auto eth2
iface eth2 inet static
    address 27.126.19.194
    netmask 255.255.255.248
    network 27.126.19.192
    broadcast 27.126.19.199
    gateway 27.126.19.193
    # dns-* options are implemented by the resolvconf package, if installed
    dns-nameservers 143.103.5.1
    dns-search subdomain.domain.de

/etc/network/interfaces no Squeeze

# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface

auto eth0
iface eth0 inet static
        address 143.103.155.254
        netmask 255.255.255.0
        network 143.103.155.0
        gateway 143.103.155.254

auto eth2
iface eth2 inet static
        address 27.126.19.194
        netmask 255.255.255.248
        network 27.126.19.192
        broadcast 27.126.19.199
        gateway 27.126.19.193

saída de ip route show table main em Jessie

default via 143.103.155.254 dev eth1 
143.103.155.0/24 dev eth1  proto kernel  scope link  src 143.103.155.254 
27.126.19.192/29 dev eth2  proto kernel  scope link  src 27.126.19.194

saída de ip route show table main no Squeeze

27.126.19.192/29 dev eth2  proto kernel  scope link  src 27.126.19.194
143.103.155.0/24 dev eth0  proto kernel  scope link  src 143.103.155.254
default via 27.126.19.193 dev eth2
default via 143.103.155.254 dev eth0  scope link

saída de route -n em Jessie

Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         143.103.155.254  0.0.0.0         UG    0      0        0 eth1
143.103.155.0    0.0.0.0         255.255.255.0   U     0      0        0 eth1
27.126.19.192  0.0.0.0         255.255.255.248 U     0      0        0 eth2

saída de route -n no Squeeze

Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
27.126.19.192  0.0.0.0         255.255.255.248 U     0      0        0 eth2
143.103.155.0    0.0.0.0         255.255.255.0   U     0      0        0 eth0
0.0.0.0         27.126.19.193  0.0.0.0         UG    0      0        0 eth2
0.0.0.0         143.103.155.254  0.0.0.0         UG    0      0        0 eth0
    
por sigy 21.05.2015 / 15:40

2 respostas

1

Ambos os seus arquivos / etc / network / interfaces contêm um e o mesmo erro: o gateway padrão é especificado duas vezes.

Você pode ter vários gateways padrão, apenas sob uma circunstância muito específica (negligenciando métricas): que você tem várias tabelas de roteamento, cada uma especificada no arquivo / etc / iproute2 / rt_tables , mas cada roteamento A tabela deve ter um gateway padrão único .

Você, em vez disso, especifica um para cada interface, na mesma tabela main . Então, o que estamos vendo aqui é uma pequena diferença na implementação do pacote iproute2 , e como ele responde aos erros.

No caso de Jessie , ele estabelece o primeiro gateway mencionado, 143.103.155.254, como o único gateway, simplesmente porque é mencionado primeiro. Quando a declaração do segundo gateway, 27.126.19.193, ocorre, nada acontece porque é não precedido por

      ip route del default

O Squeeze, ao contrário, lida com o erro de uma maneira diferente: limita o escopo do segundo gateway para link local . Para mais informações sobre escopo , consulte o manual iproute2 , que declara:

scope link --- the address is link local, valid only on this device.

Wikipedia afirma que:

In a computer network, a link-local address is a network address that is valid only for communications within the network segment (link) or the broadcast domain that the host is connected to.

Assim, o intervalo (sinônimo impreciso para escopo ) do segundo gateway foi muito limitado a seu segmento de rede ( ie , seu domínio de broadcast 143.103.155.0/24 ). Assim, Jessie também, de uma maneira diferente, lidou com sua declaração incorreta de múltiplos gateways na mesma tabela de roteamento.

Naturalmente, não há comportamento esperado em como os pacotes lidam com erros. A maneira correta de você configurar seu arquivo / etc / network / interfaces é omitir a declaração

   gateway 143.103.155.254

completamente (isso é estranho também porque diz que o gateway do seu próprio pc é ... ele mesmo!). Para ver uma boa explicação disso, leia o parágrafo da Solução Inicial aqui ; mais tarde, também é explicado como adicionar vários gateways, com várias tabelas de roteamento.

Se, como você afirma,

I can try again to verify but I'm pretty sure that I tried that already and still was not able to reach any external IP.

é mais provável porque você não permitiu o encaminhamento de IPv4 de uma interface para a outra (como sudo:

     echo 1 > /proc/sys/net/ipv4/ip_forward

cuida disso), ou porque suas regras do iptables bloqueiam o encaminhamento.

    
por 25.06.2015 / 17:17
1

A principal diferença entre Squeeze e Jessie é que ip chamadas de comando ifconfig para o primeiro e iproute2 para o último.

O ifconfig não conhece várias configurações de gateway, pelo menos sem métricas. É por isso que você vê diferenças entre os dois comandos ip route (ou route -n (depreciado))

O iproute2 pode rastrear várias tabelas de roteamento

ip route show all

O conceito de interfaces de rede primárias e secundárias é apenas uma maneira de distingui-las, geralmente chamadas de eth0 (1st) e eth1 (2nd), mas a ordem pode variar!

E sim, você pode definir a rota permanente de /etc/network/interfaces até o uso de up da seguinte forma:

up ip route add 1.2.3.4/24 via 1.2.3.1
    
por 22.06.2015 / 15:41