Envoyer un paquet sur le réseau même lorsque sa cible est l'hôte local

10

Sous Linux, si vous envoyez un paquet à l'adresse de l'une de ses interfaces réseau , ce paquet est routé en interne, il n'est jamais envoyé sur le réseau. C'est la bonne chose dans 99,99% des cas.

Parfois, lors du test de configurations réseau, il est utile d'envoyer un paquet sur une liaison locale depuis la machine elle-même, avec la machine elle-même comme cible. Comment puis-je faire ceci? Au moins pour une liaison de type bus telle qu'Ethernet, sinon pour une liaison point à point. Je ne suis intéressé que par les paquets IP (IPv4 et IPv6).

Gilles 'SO- arrête d'être méchant'
la source
Numérisation Nmap essayée?
Ruban Savvy
Êtes-vous intéressé par le fait que le paquet sort physiquement vers le réseau et qu'il soit réacheminé? Ou voulez-vous simplement qu'il apparaisse comme si c'était le cas (passez par la pile de routage, iptables, etc.)?
Patrick
@Patrick Je veux qu'il sorte et atteigne le routeur local. Bien que rester à l'intérieur mais avoir l'air localement comme s'il était sorti peut également être utile dans différentes circonstances.
Gilles 'SO- arrête d'être méchant'
@Gilles Avez-vous déjà réussi? J'essaie actuellement de le faire avec deux adaptateurs TAP et un code de pontage simple et sans succès. Le routage semble être correct, mais ARP ne semble pas fonctionner (les paquets sortent avec src mac == dst mac). Je pourrais expliquer ma configuration si cela pouvait aider.
Jonathon Reinhart
1
@Gilles Je n'ai rien essayé de tout cela, mais je peux imaginer implémenter un routeur de manière à ce qu'il ne renvoie jamais rien d'où il vient, par exemple pour empêcher un rebond éternel entre deux routeurs. Juste une chose à surveiller lors des tests au cas où le paquet sortirait mais ne reviendrait jamais.
Anthon

Réponses:

7

Chaque adaptateur réseau sous linux a un paramètre booléen sysctl accept_local( /proc/sys/net/ipv4/conf/eth0/accept_local). Essayez de le mettre à 0 pour tous les adaptateurs impliqués (en outre, vous devrez peut-être modifier votre table de routage pour l'adapter à votre configuration de test).

Assurez-vous également que rp_filter( /proc/sys/net/ipv4/conf/eth0/rp_filter) est activé (pas 0).

Référence: http://code.metager.de/source/xref/linux/stable/Documentation/networking/ip-sysctl.txt

Oakad
la source