GNU/Linux >> Linux Esercitazione >  >> Linux

Uscita del traffico su diverse interfacce in base alla porta di destinazione

Sei vicino.

Il vero motivo per cui l'applicazione non vede il traffico di ritorno è a causa della protezione da spoofing IP incorporata nel kernel. Cioè, il traffico di ritorno non corrisponde alla tabella di routing e viene quindi eliminato. Puoi risolvere questo problema disattivando la protezione dallo spoofing in questo modo:

sudo sysctl net.ipv4.conf.wlan0.rp_filter=0

Ma non lo consiglierei. Il modo più corretto è creare un'istanza di routing alternativa.

  1. Il segno è necessario. Tienilo.
  2. È necessario anche il NAT di origine.
  3. Il DNAT finale non è necessario, quindi puoi rimuoverlo.

Assicurati di avere il iproute pacchetto installato. Se hai il ip comando allora sei a posto (cosa che sembra che tu faccia, ma se non lo fai prendilo prima).

Modifica /etc/iproute2/rt_tables e aggiungi una nuova tabella aggiungendo la seguente riga:

200 wlan-route

Devi quindi configurare la tua nuova tabella di routing chiamata wlan-route con un gateway predefinito e creare regole per inviare il traffico in modo condizionale a quella tabella. Presumo che il tuo gateway predefinito sia 192.168.0.1. Naturalmente questo deve corrispondere alla tua rete effettiva, e non solo alle mie supposizioni.

ip route add default via 192.168.0.1 dev wlan0 table wlan-route
ip rule add fwmark 0x1 table wlan-route

Il tuo script annotato finale sarebbe simile a questo:

# 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 soluzione di bahamat è corretta; tuttavia, tieni presente che l'unico modo per farlo funzionare era disabilitare rp_filter per ogni interfaccia nel sistema, non solo le due (eth1 e wlan0 in questo caso) coinvolte nel NATing.

for f in /proc/sys/net/ipv4/conf/*/rp_filter; do echo 0 > $f; done
echo 1 > /proc/sys/net/ipv4/route/flush

(vedi la nota IMPORTANTE alla fine di questa pagina:Advanced Routing Howto -- il link qui pubblicato non esiste più, ma l'ho trovato tramite la wayback machine)


Linux
  1. Linux:traffico di output su interfacce diverse in base alla porta di destinazione?

  2. Inoltro del traffico tra 2 interfacce?

  3. perché l'output di `du` è spesso così diverso da `du -b`

  4. Eseguire script in remoto su Unix, ottenere l'output in locale?

  5. Monitora il traffico TCP su una porta specifica

Monitoraggio della larghezza di banda

Come fare in modo che "data" produca l'ora da un fuso orario diverso?

Perché Ls -l genera una dimensione diversa da Ls -s?

Output di evidenziazione del colore basato sulla regex nella shell

Come posso eseguire il gunzip in una directory di destinazione diversa?

Colore diverso per comando e output