Por que Resposta ARP somente quando o adaptador de rede está em modo promíscuo?

2

Na minha rede doméstica (10.0.0.0/24) eu quero implantar uma impressora de rede, sem colocar um cabo do switch para ele. Então eu usei um Raspberry Pi, que se conecta via Wi-Fi à minha rede sem fio e com fio é a porta Ethernet com a impressora. O objetivo era ter algo como uma ponte Wifi-Ethernet aqui ...

RPi Ethernet IP (eth0): 10.0.0.32
RPi Wifi IP (wlan0): 10.0.0.31
Printer IP: 10.0.0.30

Depois de brincar com o tcpdump descobri que o RPi está respondendo aos pedidos ARP do roteador (10.0.0.1), somente quando eu tinha

net.ipv4.ip_forward = 1
net.ipv4.conf.all.proxy_arp = 1

ativado. O que é algo que eu posso entender lendo as manpages. Eu testei isso com pings simples do roteador para o IP da impressora.

Agora, quando apaguei o cache ARP no roteador sem ter o tcpdump aberto no RPi, de alguma forma as respostas ARP pararam de funcionar. Então eu estava me perguntando por que isso começou a funcionar novamente, assim que eu comecei o tcpdump no Pi. Acontece que o tcpdump está colocando a interface WiFi do Raspberry Pi no modo promíscuo. Para funcionar corretamente eu coloco a Interface WiFi do Pi em modo promíscuo permanente

 ip link set wlan0 promisc on

e tudo está funcionando bem agora, mas como eu tenho a impressão de que essa solução "cheira", eu gostaria de saber o que está acontecendo aqui e por que proxy_arp não é suficiente?

Além disso, como tenho duas interfaces de rede aqui, trabalhando na mesma sub-rede, verifiquei com algumas diretivas de roteamento que somente o tráfego para a impressora é roteado via eth0.

localhost ~ # ip rule show
0:      from all lookup local
32764:  not from all to 10.0.0.30 lookup main
32765:  from all to 10.0.0.30 lookup print
32766:  from all lookup main
32767:  from all lookup default


localhost ~ # ip route show table print
10.0.0.30 dev eth0  scope link
    
por Christian Ehrig 25.02.2018 / 17:31

1 resposta

2

Existem basicamente duas maneiras de fazer o que você está tentando fazer: roteamento e ponte.

Nenhum deles faz uso de proxy_arp . proxy_arp é um hack que você pode usar se partes da sua rede acharem que você está roteando e outras partes acharem que você está conectando. É um último recurso que você deve usar somente quando tiver descartado todas as outras opções.

Minha recomendação é que você entenda totalmente a solução de roteamento e ponte e entenda por que nenhuma delas funcionará para você antes de recorrer a proxy_arp .

Seu caso de uso não parece um daqueles em que proxy_arp seria necessário.

Resolvendo o problema com a ponte

O WiFi usa endereços MAC em duas camadas da pilha. Você terá um par de endereços MAC para os terminais, como na Ethernet com fio. E você terá um par de endereços MAC indicando os pontos finais do link sem fio.

Infelizmente, o padrão WiFi original presumiu que um par específico desses quatro endereços MAC seria sempre idêntico, e essa suposição não é verdadeira ao fazer uma ponte. Então, um novo padrão chamado WDS foi introduzido para corrigir isso.

Portanto, para configurar a bridging, você precisa garantir que o hardware em ambas as extremidades da conexão Wi-Fi oferece suporte ao WDS e que ele esteja habilitado. Em seguida, você precisa reverter essas duas alterações de sysctl feitas porque elas não são usadas para criar pontes.

Finalmente, você precisa configurar uma ponte no Pi que combine as interfaces com e sem fio em uma ponte. Se você quiser que o Pi fale o IP também, configure na interface da bridge não as interfaces físicas subjacentes.

Este é um monte de coisas para configurar e há o risco de que o WDS não seja suportado pelo hardware.

Resolvendo o problema com o roteamento

Se você quiser fazer o roteamento, ainda precisará reverter a configuração proxy_arp . No entanto, a configuração net.ipv4.ip_forward = 1 está correta para uma configuração de roteamento.

No Pi você precisa configurar as duas interfaces de rede com prefixos diferentes. A rede sem fio que você já configurou com 10.0.0.0/24 provavelmente pode sair como está, já que essa parte já está funcionando.

A interface com fio, no entanto, você precisa configurar com outro prefixo. Uma escolha possível é 10.0.1.0/24 . E você pode atribuir 10.0.1.1 à interface com fio no Pi.

A impressora pode ser configurada com um endereço IP estático, como 10.0.1.2 , ou pode ser configurada dinamicamente, o que exige a instalação de um servidor DHCP no Pi, que distribui endereços no prefixo 10.0.1.1 .

Finalmente, você precisa informar ao seu roteador existente sobre essa nova rede adicionando uma entrada na tabela de roteamento. Na configuração do roteador existente, adicione uma entrada da tabela de roteamento para o prefixo 10.0.1.0/24 (alternativamente gravado como 10.0.1.0/255.255.255.0 ) com um endereço de gateway de 10.0.0.31 . Você precisa garantir que o endereço 10.0.0.31 seja de alguma forma mantido estático, caso contrário, sua entrada na tabela de roteamento ficará incorreta.

    
por 25.02.2018 / 19:10

Tags