GNU/Linux >> Tutoriels Linux >  >> Linux

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

Ma question est fondamentalement la même que Autoriser uniquement certains trafics sortants sur certaines interfaces.

J'ai deux interfaces eth1 (10.0.0.2) et wlan0 (192.168.0.2).
Ma route par défaut est pour eth1 .
Disons que je veux que tout le trafic https passe par wlan0 .
Maintenant, si j'utilise la solution suggérée dans l'autre question, le trafic https passera par wlan0 , mais aura toujours l'adresse source de eth1 (10.0.0.2). Étant donné que cette adresse n'est pas acheminable pour le wlan0 passerelle, les réponses ne reviendront jamais. Le moyen le plus simple serait simplement de définir correctement l'adresse de liaison dans l'application, mais dans ce cas, cela ne s'applique pas.

Je pense que je dois réécrire le src-addr :

# first mark it so that iproute can route it through wlan0
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

Maintenant, tcpdump voit très bien les paquets sortants et les paquets entrants arrivent pour 192.168.0.2, mais ils ne se retrouvent probablement jamais dans l'application, car tout ce que je vois, c'est que l'application renvoie le paquet SYN, bien que le SYN- ACK a déjà été reçu.

Alors j'ai pensé que je devais peut-être aussi réécrire l'adresse entrante :

iptables -A PREROUTING -t nat -i wlan0 -p tcp --sport 443 -j DNAT --to 10.0.0.2

mais cela n'a pas fonctionné non plus. Donc je suis un peu coincé ici. Des suggestions ?

Réponse acceptée :

Vous êtes proche.

La véritable raison pour laquelle l'application ne voit pas le trafic de retour est due à la protection contre l'usurpation d'adresse IP intégrée au noyau. C'est-à-dire que le trafic de retour ne correspond pas à la table de routage et est donc supprimé. 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 l'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 réel, 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

Linux
  1. Linux - La sortie de Ps Lstart a changé?

  2. tee Exemples de commandes sous Linux

  3. Linux SCP définissant le port de destination

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

  5. Android - Est-ce qu'Android est basé sur Linux ?

Comment faire une analyse de port sous Linux

Comment installer et utiliser l'analyseur de trafic réseau Linux basé sur le Web de Darkstat

Comment envoyer un ping à un numéro de port sous Linux

Explication de la redirection d'entrée-sortie sur Linux

Exemples de commandes echo Linux

Ouvrir un port sous Linux