iptables routing fragen!

Hallo

ich hab mir nen kleiner router für mein vdsl anschluss hingestellt. nun hab ich einige fragen bzlg. der routingsettings.

ich hab das ganze bisher ganz simpel aufgezogen, spricht den input erstmal komplett gesperrt und im anschluss den ausgehenden traffic freigeschalten.


Code:
root@pluto:~# iptables -t nat -S
-P PREROUTING ACCEPT
-P INPUT ACCEPT
-P OUTPUT ACCEPT
-P POSTROUTING ACCEPT
-A PREROUTING -i ppp0 -p tcp -m tcp --dport 33333 -j DNAT --to-destination 192.168.112.17:33333
-A PREROUTING -i ppp0 -p tcp -m tcp --dport 8080 -j DNAT --to-destination 192.168.112.17:8080
-A POSTROUTING -o ppp0 -j MASQUERADE
root@pluto:~# iptables -t filter -S
-P INPUT DROP
-P FORWARD ACCEPT
-P OUTPUT ACCEPT
-A INPUT -i ppp0 -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT -i ppp0 -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -i eth0 -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

jetzt möchte ich allerdings erreichen, dass ich traffic, der aus meinem netzwerk kommt, auf meine ppp0 ip zugreift auch wieder bei mir rauskommt.
zb angenommen wenn ich ne dns auf meine ip geschalten habe und mein netzinterner rechner auf die dns zugreifen soll, geht das alles vor die hunde.

aber wie muss dazu die regel aussehen? ich bekomm bisher nur kopfschmerzen, wenn ich drüber nachdenk. kann mir jemand nen tipp geben?

und... ist bisher nen elementarer fehler in den settings drin?

achja noch kurz am rande:

Code:
<netz> <-- eth0 --> <router> *ppp0* <-- eth1.7 (vlan wegen vdsl) --> <-- modem -->
 
Regel hätte ich jetzt keine auf Lager, aber ich habe das gleiche Problem bei mir anders gelöst. Auf dem Router läuft ein DNS-Server, denn die restlichen Geräte verwenden, und der liefert dann bei einer Anfrage auf den Server daheim die lokale Adresse aus.

mfg benediktibk
 
hm, das bedeutet ich müsste nen richtigen dns server einbauen anstatt auf das dnsmasq zu vertrauen?

aber ich weis, das bei nem ipcop das ganze auch mit der ip funktioniert, also die externe ip wird quasi auf interne ports umgebogen, wenn ich auf externeip:8080 zugreife. das bedeutet der löst nicht nur die dns anders auf.

hm, muss ich mir nochmal den kopf zerbrechen.
 
Heyho :),

dnsmasq und so ist ja alles ganz nett, funktioniert aber eben nur für DNS und irgendwie ist das auch nicht, was easteregg wollte.

"NAT-Loopback" (so nennt es zumindest die Community). Dazu addest du pro (!) Portforwarding 2 noch zusätzliche Regeln:
Code:
# dein Portforwarding, nur eben auf eth0 und Destination gemünzt
~# iptables -t nat -A PREROUTING -i eth0 -p tcp -m tcp --dport 8080 -d DEINE.PUBLIC.IP.ADRESSE -j DNAT --to-destination 192.168.112.17:8080
# jetzt noch ein SNAT
~# iptables -t nat -A POSTROUTING -o eth0 -p tcp -m tcp -d 192.168.112.0/24 -s 192.168.112.0/24 --dport 8080 -j SNAT --to-source DEINE.PUBLIC.IP.ADRESSE
Die erste Regel rewrited die Destination, genauso wie deine ppp0-Rule, die nicht matched, weil dein Paket von eth0 kommt, nicht von ppp0 :). Die Angabe deiner public IP-Adresse ist hier "leider" notwendig, da sonst _jede_ Verbindung nach außen auf Port 8080 redirected wird.

Die zweite Rule ist auch notwendig, da du mit deinem Rechner ja eine Verbindung mit deiner public IP-Adresse aufbauen willst. Der Server (.17) würde aber ohne SNAT auf deine private Adresse antworten => so kommt keine Verbindung zu stande. -s und -d sind nur drin, um die Regel stabiler zu machen. Sonst matched die nachher noch auf irgendwas anderes ;)

"NAT-Loopback" unter Linux ist aufgrund der Angabe der (dynamischen?) public IP-Adresse immer ein bisschen nervig. Allerdings kannst du dir auch eine eigene Chain erstellen, in der du die NAT-Loopbacks immer mit der richtigen Adresse einträgst, wenn dein Interface up'ed.

Wenn du nicht für jeeeedes einzelne Portforwarding noch die zwei extra Rules adden willst, kannst du auch die Port- und Protokollselektoren (-p, --dport) rauslassen. Somit wird, wenn du von intern verbinden willst, jedes Paket an deine public IP-Adresse auf die .17 geforwardet.

;)

-k

//edit: achja, die rules sind ungetestet ;) Typos nicht ausgeschlossen.
 
Zuletzt bearbeitet:
okay, das bringt mich schonmal nen stück weiter. beduetet, wenn ich die beiden selectoren vom protokoll und port weglasse, schieb ich quasi allen internen traffic von meinen clients an meine externe ip geht zurück auf die eine adresse.

kann man das noch dynamischer gestalten?

angenommen ich leite von aussen port 81 auf interne ip1 und port 82 auf interne ip2?

geht es quasi ne regel zu erstellen, die ausgehenden traffic die auf meine externe ip geht einfach umbiege und sage führe alle anderen routing regeln aus? (quasi den interne traffic auf meine wwan ip als "externen" traffic behandeln?)
 
Zurück
Oben