J'ai un système avec plusieurs interfaces. J'ai isolé toutes ces interfaces les unes des autres à l'aide de quelques sysctl
options, de tables de routage et de règles.
Chaque interface a sa propre table de routage définissant une route par défaut.
Chaque table de routage a un ensemble de 4 règles qui définissent quels paquets doivent aller à quelle table.
Pour simplifier, disons que j'ai eth0 (192.168.1.1)
et eth1 (192.168.1.2)
.
de
192.168.1.1
tableeth0
à
192.168.1.1
tableeth0
iif eth0
table eth0
oif eth0
table eth0
Car eth2
c'est pareil.
Les sysctl
options sont:
net.ipv4.conf.all.arp_filter = 1
net.ipv4.conf.all.arp_ignore = 2
net.ipv4.conf.all.arp_announce = 1
net.ipv4.conf.all.rp_filter = 1
Cela fonctionne très bien pour 99% des cas d’utilisation auxquels je suis destiné, mais l’un échoue. Si un paquet est généré à partir d'une socket non liée, comme pour répondre à un client UDP avec "sendto", l'appel échoue avec "Network Unreachable". Si une adresse IP spécifique est liée avant d'appeler sendto, l'appel aboutit comme prévu.
En dehors de la configuration d'une route par défaut fourre-tout pour de telles situations, y a-t-il quelque chose qui puisse être fait en utilisant un routage de politique (par exemple, iptables, règle d'IP) pour résoudre ce problème?
Merci
ip link add dummy0 type dummy
; ip link set dummy0 up
; ip route add default dev dummy0
. De toute évidence, aucun paquet ne sera envoyé au mauvais endroit. Lors de mon test avec socat, je suis passé de "Le réseau est inaccessible" à une réponse avec la source 192.168.1.1 lorsque le même réseau a été contacté via eth0 à 192.168.1.1. Maintenant, cela semble être un cas simple. Existe-t-il un cas réel? Au fait, vous n'avez pas écrit de route dans la question, donc je ne peux pas faire plus que ça ici