Por que existe um campo de interface na tabela de roteamento?

2

Imagine que temos um pacote IP e precisamos descobrir para qual interface ele deve ser enviado. Existe um eth0 (por exemplo) correspondente ao nosso endereço de destino do pacote.

Mas e se houver mais de um protocolo de camada de enlace de dados acima de eth0 ?

Por exemplo, Ethernet e PPPoE . Como podemos descobrir qual protocolo o pacote deve estar usando?

    
por Jofsey 18.07.2012 / 14:03

2 respostas

4

Eu não acho que você possa ter mais de uma camada de link em uma única interface.

No caso do PPPoE, estabelecer a conexão PPP cria outra interface, geralmente chamada ppp0 . Sua entrada na tabela de roteamento apontará para ppp0 , não para eth0 . Quando um pacote é roteado para ppp0 , ele é realmente entregue ao software PPPoE local, não transmitido em lugar nenhum. Mas então o software PPPoE produz um pacote novo que transmite via eth0 .

Isso é semelhante ao modo de funcionamento de algumas VPNs. O OpenVPN , por exemplo, cria uma nova interface chamada tun0 ou tap0 , cuja "camada de link" é a Daemon do OpenVPN. Envie um pacote para um desses, e o daemon o criptografa e coloca o texto cifrado em um novo pacote, geralmente UDP simples, endereçado ao servidor OpenVPN remoto. Esse pacote passa pelo processo de roteamento e encontra seu caminho para uma interface real como eth0 .

(Ao contrário do exemplo de VPN, quando o PPPoE envia um pacote acima de eth0 , ele não depende da tabela de roteamento para rotear o pacote, porque eth0 não está configurado com um endereço IP e os pacotes não podem Em vez disso, acho que ele usa um soquete bruto para enviar um quadro Ethernet personalizado, endereçado ao PPPoE peer. Endereço MAC, que contém uma carga útil PPP, não uma carga útil IP. RFC 2516 tem os detalhes do protocolo.)

    
por 18.07.2012 / 14:18
0

Nunca há mais do que um único protocolo de camada de dados operando sobre uma interface (a menos que você esteja fazendo algo muito estranho). Onde parece que pode haver, quase sempre alguma forma de tunelamento ou encapsulamento usando está acontecendo - geralmente há alguma outra interface virtual "montando em cima dele".

"PPPoE" significa PPP over Ethernet. A interface física eth0 está usando a Ethernet como o protocolo da camada 2. O PPP é uma camada sobre ele, manipulada por um daemon PPPoE. Portanto, os pacotes "camada de enlace" do PPP são encapsulados em quadros Ethernet.

Basicamente, o PPPoE funciona como um software de túnel / VPN, como diz o @Wyzard. Os túneis têm uma interface virtual em um "lado", o software de encapsulamento no meio e a interface real no outro lado.

Então você terá uma interface como ppp0 ou qualquer outra coisa, que esteja conectada ao daemon PPPoE, e então o daemon PPPoE encapsula o que vem em ppp0 e empurra para fora da eth0. E vice versa.

Uma coisa a ter em mente é que, uma vez que a MTU da Ethernet é 1500, são necessários 8 bytes de espaço para o cabeçalho PPPoE, de modo que a MTU da interface PPPoE se torne 1492.

Você não precisa tocar a eth0 diretamente, pois tudo que você deseja que saia da eth0 são os pacotes PPPoE para o seu provedor de DSL. É o mesmo conceito geral para VPNs ou túneis IPv6 sobre IPv4.

    
por 18.07.2012 / 14:36