Vous êtes proche.
La véritable raison pour laquelle l'application ne voit pas le trafic de retour est la protection intégrée du noyau contre l'usurpation d'adresse IP. C'est-à-dire que le trafic de retour ne correspond pas à la table de routage et est donc abandonné. Vous pouvez résoudre ce problème en désactivant la protection contre l'usurpation comme ceci :
sudo sysctl net.ipv4.conf.wlan0.rp_filter=0
Mais je ne le recommanderais pas. La méthode la plus appropriée consiste à créer une instance de routage alternative.
- La marque est nécessaire. Gardez-le.
- Le NAT source est également nécessaire.
- Le DNAT final n'est pas nécessaire, vous pouvez donc le supprimer.
Assurez-vous d'avoir le iproute
paquet installé. Si vous avez le ip
commande alors vous êtes défini (ce qui semble être le cas, mais si ce n'est pas le cas, obtenez-le d'abord).
Modifier /etc/iproute2/rt_tables
et ajoutez un nouveau tableau en ajoutant la ligne suivante :
200 wlan-route
Vous devez ensuite configurer votre nouvelle table de routage nommée wlan-route
avec une passerelle par défaut et créez des règles pour envoyer conditionnellement le trafic vers cette table. Je suppose que votre passerelle par défaut est 192.168.0.1. Naturellement, cela doit correspondre à votre réseau actuel, et pas seulement à mes hypothèses.
ip route add default via 192.168.0.1 dev wlan0 table wlan-route
ip rule add fwmark 0x1 table wlan-route
Votre script annoté final ressemblerait à ceci :
# Populate secondary routing table
ip route add default via 192.168.0.1 dev wlan0 table wlan-route
# Anything with this fwmark will use the secondary routing table
ip rule add fwmark 0x1 table wlan-route
# Mark these packets so that iproute can route it through wlan-route
iptables -A OUTPUT -t mangle -o eth1 -p tcp --dport 443 -j MARK --set-mark 1
# now rewrite the src-addr
iptables -A POSTROUTING -t nat -o wlan0 -p tcp --dport 443 -j SNAT --to 192.168.0.2
la solution de bahamat est correcte ; cependant, veuillez noter que la seule façon pour moi de faire fonctionner cela était de désactiver le rp_filter pour chaque interface du système, pas seulement les deux (eth1 et wlan0 dans ce cas) impliquées dans le NATing.
for f in /proc/sys/net/ipv4/conf/*/rp_filter; do echo 0 > $f; done
echo 1 > /proc/sys/net/ipv4/route/flush
(voir la note IMPORTANTE à la fin de cette page :Advanced Routing Howto -- le lien qui y est posté n'existe plus, mais je l'ai trouvé via la machine à remonter)