Como limitar todo o tráfego tcp à interface de rede em que a sessão foi iniciada?

1

Eu tenho um sistema Linux embutido com duas interfaces de rede (lan0, wlan0) que são configuradas para a mesma sub-rede. Um servidor neste sistema aceita conexões tcp em ambas as interfaces.

Como posso garantir que todas as respostas de uma sessão sejam enviadas na mesma interface em que a solicitação foi recebida? Ou seja como todo o tráfego de uma sessão de tcp pode ser limitado a uma interface de rede específica?

O socket listen () e os sockets aceites podem ser ligados a uma interface / dispositivo com setsockopt (fd, BIND_TO_DEVICE). O servidor faz isso para ambas as interfaces. Isso ajuda a detectar em qual interface a sessão foi criada e a limitar o tráfego de saída à mesma interface.

Mas quando o accept () acontece, o SYN-ACK é enviado de volta para o cliente e um problema parece ser que este pacote inicial pode ser enviado pela outra interface (errada) por causa da pesquisa ARP. O arp pode encontrar o endereço IP do cliente na outra interface "errada" porque o cliente também é visível lá.

    
por dantje 04.04.2012 / 14:26

1 resposta

-2

Você pode limitar a conexão tcp para a interface usando o iptables.

#iptables -A INPUT -p tcp -i eth0 --syn -m limit --limit 1/s --limit-burst 3 -j RETURN

--limit 1/s: Maximum average matching rate in seconds
--limit-burst 3: Maximum initial number of packets to match
    
por 04.04.2012 / 15:22