![iptables: Wie kann ich eine Portumleitung „überschreiben“?](https://rvso.com/image/1452245/iptables%3A%20Wie%20kann%20ich%20eine%20Portumleitung%20%E2%80%9E%C3%BCberschreiben%E2%80%9C%3F.png)
Mein Setup ist wie folgt:
Ich habe einen Linux-Server mit zwei Schnittstellen eth0
und eth1
. eth1
hat eine Internetverbindung über mein normales LAN. eth0
dient zum DHCP-Dienst und die Schnittstelle selbst hat die IP-Adresse 10.0.0.1
.
Ich möchte Folgendes erreichen:
Ich möchte, dass Pakete auf Port 80, die von angeschlossenen Maschinen stammen, eth0
auf Port 80 der Routing-Maschine selbst umgeleitet werden und Antwortpakete natürlich zurückgeleitet werden. Das ist an sich einfach genug, aber ich habe noch eine weitere Anforderung. Ich möchte, dass Clients mit eth0
bestimmten IP-Adressen davon ausgenommen werden können und dass Pakete auf Port 80 wie gewohnt geroutet werden. Wie kann ich das machen? Bisher habe ich Folgendes getan, um alle Pakete auf Port 80 auf eth0
die lokale Maschine umzuleiten. Es funktioniert, aber ich weiß nicht, wie ich meine zweite Anforderung erfüllen soll.
iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination 10.0.0.1:80 -i eth0
iptables -t nat -A POSTROUTING -p tcp -d 127.0.0.1 --dport 80 -j SNAT --to-source 10.0.0.1
Antwort1
Sie müssen die PREROUTING
Tabelle einfach verlassen, bevor die folgende Zeile erreicht wird DNAT
:
iptables -t nat -I PREROUTING -p tcp -s <exempt ip> -j RETURN
Dadurch sollte -I
eine neue Regel eingefügt () werden, um -j RETURN
die Routing-Tabelle für alle Pakete von der ausgenommenen IP ( -s <exempt ip>
) als erste Regel zu verlassen (), sodass es getroffen wird, bevor es die Regel erreicht DNAT
.
(Möglicherweise müssen Sie auch etwas Ähnliches tun POSTROUTING
, ich bin nicht sicher.)
Die andere Möglichkeit besteht darin, einen IP-Satz ( ) für die IPs zu erstellen man ipset
, die Sie ausnehmen möchten, und dann eine umgekehrte Übereinstimmung zu Ihren DNAT
und SNAT
Regeln hinzuzufügen:
ipset create exempt hash:ip
ipset add exempt <exempt ip 1>
ipset add exempt <exempt ip 2>
ipset add exempt <exempt ip 3>
iptables -t nat -A PREROUTING -p tcp --dport 80 -m set ! --match-set exempt src -j DNAT --to-destination 10.0.0.1:80 -i eth0
Dies lässt sich einfacher verwalten, da Sie ausgenommene IPs problemlos zum IP-Set hinzufügen oder daraus entfernen können, ohne die IP-Tables zu ändern.