Como a interface de rede de loopback é implementada?

2

A interface de rede de loopback "é um dispositivo de rede virtual implementado inteiramente em software", de acordo com outra pergunta no Unix.SE .

Mas como essa implementação é realmente realizada e como você a manipula?

Até onde eu sei, os IPs são marcados como locais na tabela de roteamento local:

ip route show table local  

O envio para um IP marcado como local acionará o dispositivo de loopback. Mas esta detecção é feita apenas por tabelas de roteamento ou também por outras operações do kernel ?

Meu objetivo final é manipular a configuração do dispositivo de loop, para que o envio de datagramas entre dois adaptadores de WLAN no meu laptop resulte em tráfego real / datagramas na rede e não em loops locais. Isso é:

Interface 1 -> WLAN -> Interface 2 

e NÃO:

Interface 1 -> LOOP -> Interface 2
    
por user22602 27.08.2012 / 17:29

2 respostas

3

Em um nível muito básico, é um dispositivo implementado exclusivamente em software. Semelhante à maneira como uma VM é totalmente software, o mesmo ocorre com o loopback (embora usando mecanismos bem diferentes).

Normalmente, quando uma interface envia um pacote, ele é finalmente colocado no fio e liberado. O loopback, por outro lado, em vez de ser colocado no fio, o pacote de saída é movido para a fila de entrada para aquela interface e então processado como qualquer pacote de entrada.

Enquanto netfilter está avaliando um pacote, há duas ocasiões em que uma decisão de roteamento é feita. Uma vez para os pacotes de entrada (por exemplo, este pacote foi recebido na interface correta?) E uma vez para os pacotes de saída (por exemplo, em que interface esse pacote deve ser transmitido?). Esta decisão de roteamento é quando o kernel verifica o pacote na tabela de roteamento local.

    
por 27.08.2012 / 18:09
3

Tabela de roteamento → dispositivo → driver de dispositivo ( loopback )

UPD. (2012-10-20) : Recentemente corri para o doc do sysctl .: «…

accept_local - BOOLEAN
    Accept packets with local source addresses. In combination
    with suitable routing, this can be used to direct packets
    between two local interfaces over the wire and have them
    accepted properly.

    rp_filter must be set to a non-zero value in order for
    accept_local to have an effect.

… », por isso, responde à 2ª parte da sua pergunta, espero.

    
por 27.08.2012 / 18:16