Hallo Gruppe,
heute habe ich mal netzwerktechnisch ein Problem, welches ich mit vorhandenem Wissen offenbar nicht lösen kann und hoffe hier kann mir geholfen werden:
Gegeben ist ein Linuxrechner mit iproute2 und netfilter, der zwei ppp interfaces hat. ppp0 unterliegt dynamischer IP-Zuweisung ppp1 bekommt eine feste IP 1.2.3.4 und einen P-t-P 11.22.33.44 eth0 ist die LAN-Seite mit 3.3.3.1 die default Route ist über ppp0 gesetzt
Erreicht werden soll nun, dass HTTPS-Anfragen an ppp1 (also 1.2.3.4) an einen Rechner im LAN (3.3.3.33) weitergeleitet werden. Das ist ohne zu Denken mittels iptables, PREROUTING und DNAT ganz einfach aufgesetzt, aber so gehen die Antwortpakete ja über ppp0 raus und wir haben einen reichlich undefinierten Zustand.
Sowas hatte ich schon. Gelöst wie folgt: echo "88 https" >> /etc/iproute2/rt_tables ip route add 1.2.3.4/32 dev ppp1 src 1.2.3.4 table https ip route add default via 11.22.33.44 dev ppp1 table https ip rule add from 1.2.3.4/32 table https ip rule add to 1.2.3.4/32 table https ip route flush cache Offenbar wirkt sich das aber nur sinnvoll auf alles aus, was an an/von lo kommt/geht - bzw. funktioniert das im Zusammenhang mit dem PREROUTING und DNAT nicht mehr, denn tcpdump zeigt mit noch immer die Antworten zur Weiterleitung auf ppp0.
Mit iproute und speziellen Protokollen/Ports hatte ich auch schon mal was gemacht: ip rule add fwmark 84 table 84 ip route add default via 11.22.33.44 dev ppp1 table 84 und iptables -t mangle -A PREROUTING ... -j MARK -set-mark=84 In meinem Verständnis werden hier Pakete durch iptables markiert und für diese Markierung gilt eine eigene Routingtable.
Nun glaube ich, muss ich für meinen Anwendungsfall, dass eingehendes HTTPS an ppp1 an den Rechner im LAN geforwarded werden soll und die Antworten dazu auch über ppp1 wieder raus müssen, sämtlicher anderer HTTPS Verkehr (LAN2WAN, WAN2ppp0) aber weiterhin über ppp0 abgewickelt werden soll, wohl beide Varianten "verheiraten". Nur gelingt mir das nicht.
Der erste Teil ist wohl eher unstrittig, weil er funktioniert. Seit ich das eingerichtet habe, geht auch ICMP und SSH auf ppp1 ;-) Warum sehe ich aber trotz Umsetzung des zweiten Teils immer noch ausgehende Antworten auf ppp0, wenn ich HTTPS versuche zu erreichen?
Ich glaube hier immer noch über DNAT zu stolpern, denn: tcpdump an ppp1 sieht: client-ip:highport -> 1.2.3.4:443 - die eigentliche Anfrage client-ip:highport -> 3.3.3.33:443 - das DNAT tcpdump an eth0 sieht: client-ip:highport -> 3.3.3.33:443 - das DNAT/FORWARD ins LAN hat funktioniert 3.3.3.33:443 -> client-ip:highport - die Antwort geht raus tcpdump an ppp0 sieht leider: 1.2.3.4:443 -> client-ip:highport - Maskierung, auf ppp0 mit der IP von ppp1?
Verliere ich durch DNAT das mark=84? Wie mache ich es richtig?
Mit freundlichen Grüßen / Kind regards Ronny Seffner