GNU/Linux >> Tutoriels Linux >  >> Linux

Trafic de sortie sur différentes interfaces en fonction du port de destination

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.

  1. La marque est nécessaire. Gardez-le.
  2. Le NAT source est également nécessaire.
  3. 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)


Linux
  1. Transférer le trafic entre 2 interfaces ?

  2. Pourquoi Ls -l affiche-t-il une taille différente de Ls -s ?

  3. Exécuter un script à distance sur Unix, obtenir une sortie localement ?

  4. Surveiller le trafic TCP sur un port spécifique

  5. Linux SCP définissant le port de destination

Surveillance de la bande passante

pourquoi la sortie de `du` est-elle souvent si différente de `du -b`

Comment puis-je gunzip vers un autre répertoire de destination?

Couleur différente pour la commande et la sortie

Comment un processus peut-il apparaître comme ayant un nom différent dans la sortie ps ?

Comment rediriger des sous-domaines vers un port différent sur le même serveur ?