Envie um pacote pela rede, mesmo quando seu destino for o host local

10

No Linux, se você enviar um pacote para o endereço de uma de suas interfaces de rede , esse pacote é roteado internamente, nunca é enviado pela rede. Essa é a coisa certa em 99,99% dos casos.

Ocasionalmente, ao testar configurações de rede, é útil enviar um pacote através de um link local da própria máquina, com a própria máquina como destino. Como posso fazer isso? Pelo menos para um link do tipo barramento, como Ethernet, se não for para um link ponto a ponto. Estou interessado apenas em pacotes IP (IPv4 e IPv6).

Gilles 'SO- parar de ser mau'
fonte
Tentou digitalizar nmap?
Ruban Savvy
Você está interessado no pacote fisicamente saindo para a rede e sendo roteado de volta? Ou você quer que ele apareça como se fosse (passe pela pilha de roteamento, iptables, etc)?
24413 Patrick
@ Patrick Quero que ele saia e alcance o roteador local. Embora permanecer no local, mas parecer localmente, como se tivesse saído, também pode ser útil em diferentes circunstâncias.
Gilles 'SO- stop be evil'
@Gilles Você já teve algum sucesso com isso? No momento, estou tentando fazer isso com dois adaptadores TAP e algum código de ponte simples e sem sucesso. O roteamento parece estar correto, mas o ARP não parece estar funcionando (os pacotes estão saindo com src mac == dst mac). Eu poderia explicar minha configuração se isso ajudasse.
Jonathon Reinhart
1
@Gilles Eu não tentei nada disso, mas posso imaginar a implementação de um roteador de uma maneira que ele nunca envie nada de volta para onde ele veio, por exemplo, para evitar um salto eterno entre dois roteadores. Apenas uma coisa para ficar de olho durante o teste, caso o pacote saia, mas nunca volte.
Anthon

Respostas:

7

Cada adaptador de rede no linux possui um parâmetro booleano sysctl accept_local( /proc/sys/net/ipv4/conf/eth0/accept_local). Tente defini-lo como 0 para todos os adaptadores envolvidos (além disso, pode ser necessário modificar sua tabela de roteamento para se adequar à sua configuração de teste).

Além disso, verifique se rp_filter( /proc/sys/net/ipv4/conf/eth0/rp_filter) está ativado (não 0).

Referência: http://code.metager.de/source/xref/linux/stable/Documentation/networking/ip-sysctl.txt

oakad
fonte