GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Datenverkehr auf verschiedenen Schnittstellen basierend auf dem Zielport ausgeben

Du bist nah dran.

Der eigentliche Grund dafür, dass die Anwendung den zurückkommenden Datenverkehr nicht sieht, liegt am eingebauten IP-Spoofing-Schutz des Kernels. D.h. der Rückverkehr passt nicht zur Routing-Tabelle und wird daher verworfen. Sie können dies beheben, indem Sie den Spoofing-Schutz wie folgt deaktivieren:

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

Aber ich würde es nicht empfehlen. Der richtigere Weg ist, eine alternative Routing-Instanz zu erstellen.

  1. Die Markierung ist notwendig. Behalte es.
  2. Quell-NAT ist ebenfalls erforderlich.
  3. Das letzte DNAT ist unnötig, also können Sie es entfernen.

Stellen Sie sicher, dass Sie den iproute haben Paket installiert. Wenn Sie den ip haben Befehl, dann sind Sie fertig (wie es aussieht, aber wenn nicht, holen Sie sich das zuerst).

Bearbeiten Sie /etc/iproute2/rt_tables und fügen Sie eine neue Tabelle hinzu, indem Sie die folgende Zeile anhängen:

200 wlan-route

Anschließend müssen Sie Ihre neue Routingtabelle mit dem Namen wlan-route konfigurieren mit einem Standard-Gateway und erstellen Sie Regeln zum bedingten Senden von Datenverkehr an diese Tabelle. Ich gehe davon aus, dass Ihr Standard-Gateway 192.168.0.1 ist. Natürlich muss dies zu Ihrem tatsächlichen Netzwerk passen und nicht nur zu meinen Annahmen.

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

Ihr endgültiges kommentiertes Skript würde folgendermaßen aussehen:

# 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

Bahamats Lösung ist richtig; Bitte beachten Sie jedoch, dass die einzige Möglichkeit für mich, dies zum Laufen zu bringen, darin bestand, den rp_filter für jede Schnittstelle im System zu deaktivieren, nicht nur für die beiden (in diesem Fall eth1 und wlan0), die am NATing beteiligt sind.

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

(Siehe den WICHTIGEN Hinweis am Ende dieser Seite:Advanced Routing Howto -- der dort gepostete Link existiert nicht mehr, aber ich habe ihn über die Wayback-Maschine gefunden)


Linux
  1. Wie kann `date` die Uhrzeit aus einer anderen Zeitzone ausgeben?

  2. Datenverkehr zwischen 2 Schnittstellen weiterleiten?

  3. Farbhervorhebungsausgabe basierend auf Regex in der Shell

  4. Skript unter Unix remote ausführen, Ausgabe lokal erhalten?

  5. Überwachen Sie den TCP-Verkehr an einem bestimmten Port

Bandbreitenüberwachung

Centos – Separater Netzwerkverkehr auf zwei Netzwerkschnittstellen?

Warum gibt Ls -l eine andere Größe als Ls -s aus?

warum unterscheidet sich die Ausgabe von `du` oft so sehr von `du -b`

Wie kann ich in ein anderes Zielverzeichnis zippen?

Wie unterscheidet sich cp -f von cp --remove-destination?