komplizierte Portweiterleitung

#0
27.01.2004, 11:14
...neu hier

Beiträge: 6
#1 Hi,

folgendes Beispiel:

ich will den Port 10010 von Server X über Server Y an Server Z schicken.
Das gleiche muss auch wieder zurück funktionieren.

Soweit so gut - bis hier ist es ja noch "einfach". (auf den ersten Blick)

Mein Problem ist aber folgendes.

Server X sendet Pakete DIREKT an Server Y. Die IP von Server Z erscheint nicht in den Paketen. So bringt in meinen Augen keine FORWARD Regel etwas. D.H. (habe ich auch schon getestet) dass das PAKET als INPUT abgearbeitet wird.


Nur wie leite ich das dann weiter ??? Habe hier und da geselesen, dass das nicht möglich wäre mit normalen iptables.

Versteht jemand mein Problem und hat eventuell eine Lösung ?

Gruß r0bIn

[UPDATE]
habe nun folgendes gemacht.

modprobe ip_tables &> /dev/null
modprobe ip_conntrack &> /dev/null
modprobe ip_contrack_ftp &> /dev/null
modprobe ipt_state &> /dev/null
modprobe ipt_REJECT &> /dev/null
modprobe ipt_MASQUERADE &> /dev/null
modprobe iptable_filter &> /dev/null
modprobe iptable_nat &> /dev/null
modprobe ipt_LOG &> /dev/null

echo 1 > /proc/sys/net/ipv4/ip_forward

iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 10010 -j LOG --log-prefix "Vom Server kommend:"
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 10010 -j DNAT --to-destination XXX.XXX.XXX.XXX:10010

laut iptables list wird die regle auch angenommen wenn ich eine anfrage sende, nur irgendwie kommt auf dem Server mit XXX.XXX.XXX.XXX keine Daten an ://
[/UPTDATE]
Dieser Beitrag wurde am 27.01.2004 um 13:23 Uhr von r0bIn editiert.
Seitenanfang Seitenende
27.01.2004, 13:43
Member
Avatar Emba

Beiträge: 907
#2 wie sieht die default policy UND forward-rule für die pakete an SERVER XXX.XXX.XXX.XXX aus?

denn das "genatete" paket muss ja die forward chain durchlaufen
aja: normales routing ist nicht möglich in deinem falle, oder?

greez
Seitenanfang Seitenende
27.01.2004, 13:48
...neu hier

Themenstarter

Beiträge: 6
#3 "normales routing" ? was verstehst du darunter ?

habe eigentlich alle default policy auf "accept".

das kommt wenn ich iptables-save mache

:INPUT ACCEPT [402579:38811578]
:FORWARD ACCEPT [66:3312]
:OUTPUT ACCEPT [42062:12582957]

wenn ich von meinem lokalen windows rechner auf Server XXX.XXX.XXX.XXX port 10010 eine anfrage schicke, loggt der Server XXX.XXX.XXX.XXX das. also daher liegt es nicht an XXX.XXX.XXX.XXX.

Gruß Sebastian
Seitenanfang Seitenende
27.01.2004, 16:01
Member
Avatar Emba

Beiträge: 907
#4 na wieso muss es NAT sein?
geht kein einfaches IP-Routing?

mach mal ein

iptables -t filter -L -nv

greez
Seitenanfang Seitenende
27.01.2004, 16:07
Member
Avatar Xeper

Beiträge: 5291
#5 @r0bIn

also wenn du nur den Server Z über Server Y ereichen willst dann reicht normales routing. Willst du aber alle Daten die am port X ankommen automatisch weiterleiten brauchst du NAT (Network Address Translation). Du musst Forward rule sowie auch Postrouting rule einstellen das erste natürlich nur dann wenn die Policy nicht auf ACCEPT steht - aus sicherheitsgründen sollte sie das aber nicht - da du sowas besser explizit angeben solltest. Soweit ich das von hieraus betrachten kann sind deine zwei Regeln absolut richtig. Die erste logt ja nur nach stdout und die zweite ist dafür verantwortlich das alles was auf tcp port "10010" eingeht zu einem bestimmten Ziel weitergeleitet wird. Wie ich schon sagte solltest du die Forwarding Policy auf DROP stellen und noch eine explizite Forward regel dafür erstellen. Die Chain INPUT im filter hat nichts damit zu tuen da solche Pakete diese Chain erst gar nicht ereichen - sie werden sofort über die NAT table geleitet. Am besten ist es wenn du nicht sowas wie iptables-save usw. bentuzt nach meiner Erfahrung ist das nicht so einfach zu überblicken als wenn du einfach ein einfaches shell script baust und es in den runlevel schiebst. Zum Ziel Server selbst - der muss natürlich auch den Netfilter korekkt eingestellt haben du kannst solche aktivitäten am besten per 'tcpdump' überwachen - im moment kann ich nicht sagen was genau passiert du solltest dich mit 'tcpdump' beschäftigen und eventuell relevanten output hier rein pasten.

MFG

Xeper
__________
E-Mail: therion at ninth-art dot de
IRC: megatherion @ Freenode
Seitenanfang Seitenende
28.01.2004, 10:40
...neu hier

Themenstarter

Beiträge: 6
#6 @Emba:

Chain INPUT (policy ACCEPT 936K packets, 92M bytes)
pkts bytes target prot opt in out source destination

Chain FORWARD (policy ACCEPT 69 packets, 3456 bytes)
pkts bytes target prot opt in out source destination

Chain OUTPUT (policy ACCEPT 585K packets, 181M bytes)
pkts bytes target prot opt in out source destination

Was meinst du mit einem "normalen routing" ? Habe für testzwecke alles auf accept.

@Xeper:
mm ... also ich will das alle Daten die über den Port 10010 von einer definierten IP-Adresse kommen an eine andere IP weitergeleitet werden.

Zum Zielserver:
ich logge alles mit was auf port 10010 passiert. wenn ich direkt eine anfrage an die ziel ip schicke wird das geloggt (port ist also offen) nur über den Server Y kommt nix an den Ziel Server.

ich denke mal das die ip tables einträge richtig sind - vielleicht blockt ja irgendwas anderes.
Bin ratlos, versuche das problem seit tagen zu lösen ;(

Gruß Sebastian
Seitenanfang Seitenende
28.01.2004, 12:04
Member
Avatar Emba

Beiträge: 907
#7 unter normalem routing verstehe ich das weglassen von NAT und in so einer form:

rechner A (10.0.0.1) -> gateway (10.0.0.2/192.168.0.1) -> server B (192.168.0.2):10010

dazu brauchst du kein NAT und musst rechner A nur anweisen, dass er o.g. gateway zu nutzen hat, wenn er mit server B kommunizieren will ("direkte anfrage")

wann du NAT benötigst, hat xeper oben bereits beschrieben

weiß ja nicht, wie deine ausgangssituation ist

- die filter table ist soweit okay bei dir
- ip_forwarding ist ja auch aktiv
- DNAT-Rule ist okay

log doch mal auf dem DNAT-Gateway mit tcpdump, was da abgeht ;)

greez
Seitenanfang Seitenende
28.01.2004, 12:20
...neu hier

Themenstarter

Beiträge: 6
#8 Hi,

nein, ein Gateway kann ich aus technsichen Gründen nicht auf dem Server einrichten.

ich habe mal ein tcpdump gemacht.

217.234.88.106 = meine lokale IP-Adresse
217.160.132.218 = IP-Adresse meines Servers (Y)
217.82.25.250 = Ip-Adresse des Ziel-Servers

p15105823:~/tcpdump-3.8.1# tcpdump -n port 10010
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 68 bytes
12:15:49.194814 IP 217.234.88.106.19436 > 217.160.132.218.10010: S 3196218075:3196218075(0) win 64240 <mss 1400,nop,nop,sackOK>
12:15:49.212896 IP 217.234.88.106.19436 > 217.82.25.250.10010: S 3196218075:3196218075(0) win 64240 <mss 1400,nop,nop,sackOK>
12:15:52.107600 IP 217.234.88.106.19436 > 217.160.132.218.10010: S 3196218075:3196218075(0) win 64240 <mss 1400,nop,nop,sackOK>
12:15:52.107630 IP 217.234.88.106.19436 > 217.82.25.250.10010: S 3196218075:3196218075(0) win 64240 <mss 1400,nop,nop,sackOK>
12:15:58.132318 IP 217.234.88.106.19436 > 217.160.132.218.10010: S 3196218075:3196218075(0) win 64240 <mss 1400,nop,nop,sackOK>
12:15:58.132340 IP 217.234.88.106.19436 > 217.82.25.250.10010: S 3196218075:3196218075(0) win 64240 <mss 1400,nop,nop,sackOK>

eine Anfrage teste ich immer mit dem befehl:

telnet 217.160.132.218 10010

Gruß Sebastian
Seitenanfang Seitenende
28.01.2004, 13:03
Member
Avatar Emba

Beiträge: 907
#9 wenn du mir noch schnell sagst, wo du tcpdump (auf welchem rechner) ausführst?

greez
Seitenanfang Seitenende
28.01.2004, 13:08
...neu hier

Themenstarter

Beiträge: 6
#10 auf 217.160.132.218, also Server Y (auf dem der die Daten weiterleiten soll)
Seitenanfang Seitenende
28.01.2004, 13:56
Member
Avatar Emba

Beiträge: 907
#11 hm, sieht doch okay aus...

zuerst bekommt server Y das paket, natet es und forwared es, weil die zieladresse umgeschrieben wird

also liegts wohl eher am zielserver...
du kannst ja testweise mal alle icmp pakete, die an server Y gehen, dnaten, sodass sie an server z weitergereicht werden und dort dumpen, ob icmp einkommen

greez
Seitenanfang Seitenende
28.01.2004, 14:02
...neu hier

Themenstarter

Beiträge: 6
#12 also werden die pakete zu 100% weitergeleite ?

dann check ich mal den den zielserver.

danke schonmal für deine bemühungen und deine hilfe.

werd mich auf jeden fall nochmal melden wenn ich probleme bzw die lösung habe.

Gruß Sebastian

[uptate]
mmm ... das paket geht nicht raus, definitiv. Der Zielserver funktioniert einwandfrei. habe es getestet. habe einfach direkt eine telner verbindung aufgebaut und dann kam was zurück. irgendwas muss noch falsch konfiguriert sein. habs nun auf 3 servern ausprobiert :/

Gruß Sebastian
[/uptate]
Dieser Beitrag wurde am 28.01.2004 um 14:59 Uhr von r0bIn editiert.
Seitenanfang Seitenende