Enviar un paquete a través de la red incluso cuando su objetivo sea el host local

10

En Linux, si envía un paquete a la dirección de una de sus interfaces de red , este paquete se enruta internamente, nunca se envía a través de la red. Eso es lo correcto en el 99.99% de los casos.

Ocasionalmente, cuando se prueban las configuraciones de red, es útil enviar un paquete a través de un enlace local desde la máquina misma, con la máquina como destino. ¿Cómo puedo hacer esto? Al menos para un enlace de tipo bus como Ethernet, si no es para un enlace punto a punto. Solo me interesan los paquetes IP (tanto IPv4 como IPv6).

Gilles 'SO- deja de ser malvado'
fuente
¿Intentó escanear nmap?
Ruban Savvy
¿Está interesado en que el paquete salga físicamente a la red y sea enrutado nuevamente? ¿O simplemente quiere que aparezca como si lo hiciera (ir a través de la pila de enrutamiento, iptables, etc.)?
Patrick
@Patrick Quiero que salga y llegue al enrutador local. Aunque permanecer dentro pero mirar localmente como si se hubiera apagado también podría ser útil en diferentes circunstancias.
Gilles 'SO- deja de ser malvado'
@Gilles ¿Alguna vez has tenido éxito con esto? Actualmente estoy tratando de hacer esto con dos adaptadores TAP y un código de puente simple y no tengo ningún éxito. El enrutamiento parece ser correcto, pero ARP no parece estar funcionando (los paquetes salen con src mac == dst mac). Podría explicar mi configuración si ayudaría.
Jonathon Reinhart
1
@Gilles No he intentado nada de esto, pero me imagino implementando un enrutador de manera que nunca envíe nada de donde vino, por ejemplo, para evitar el rebote eterno entre dos enrutadores. Solo es algo a tener en cuenta durante las pruebas en caso de que el paquete se salga pero nunca regrese.
Anthon

Respuestas:

7

Cada adaptador de red en Linux tiene un parámetro booleano sysctl accept_local( /proc/sys/net/ipv4/conf/eth0/accept_local). Intente configurarlo en 0 para todos los adaptadores involucrados (además, es posible que deba modificar su tabla de enrutamiento para adaptarla a su configuración de prueba).

Además, asegúrese de que rp_filter( /proc/sys/net/ipv4/conf/eth0/rp_filter) esté habilitado (no 0).

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

Oakad
fuente