PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : mails von vserver zu vserver schicken



farion
16.10.09, 18:25
Hallo,

ich möchte gerne von einem Vserver auf einen anderen Vserver Mails verschicken. Beide Vserver laufen auf dem selben Host und das ist das Problem.

Auf Vserver A läuft ein Mailserver.

Von Vserver B möchte ich nun Mails an von Vserver A gehandelte Adressen schicken.

Ein "telnet mail.domain.tlp 25" auf Vserver B ergibt ein "Connection refused". Gebe ich die interne IP des Mailservers an, also "telnet 192.168.1.40 25" klappts.
"telnet mail.domain.tlp 25" von extern klappt natürlich auch.
Es soll aber auch intern klappen.

Ich verbinde so ja auf die externe IP, deswegen dachte ich, dass da die normalen iptables greifen und den Port 25 an den richtigen vserver schicken. So wie von extern auch. Das scheint aber irgendwie nicht zu klappen.

Meine iptables auf dem Host:

#!/bin/bash

MAINIP=aaa.bbb.ccc.ddd
INTERFACE=eth0

### OUTGOING VSERVER ###
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -d ! 192.168.1.0/24 -j SNAT --to-source $MAINIP

function allowservice()
{
iptables -t nat -A PREROUTING -s ! 192.168.1.0/24 -m tcp -p tcp --dport $1 -j DNAT --to-destination $2:$3
iptables -A INPUT -p tcp --dport $1 -i $INTERFACE -j ACCEPT
}

### MAILSERVER ###

#SMTP
allowservice 25 192.168.1.40 25

#Hier kommen noch weiter allowservice für andere ports [...]


Gruss Frieder

mamue
16.10.09, 21:43
"Das scheint aber irgendwie nicht zu klappen." ist mir ein bisschen zu vage. Was sagt denn das mail-log des Vserver-A? Oder kannst Du gar nicht die iptables verändern? Ich dachte, das geht zumeist bei vservern nicht? Warum setzt Du beim Vserver B nicht die 192.168.1.40 als Mail relay ein? Welchen MTA verwendest Du eigentlich?

mamue

farion
18.10.09, 03:05
"Das scheint aber irgendwie nicht zu klappen." ist mir ein bisschen zu vage.
Ich vermute, dass meine iptables Verbindungen auf die externe IP nur behandeln, wenn diese auch von extern kommen. Verbindungen von internen IPs des 192.168.1.X Netztes auf die externe IP werden dabei ignoriert und bleiben beim Host.

Mache ich von einem Vserver ein "ssh externeip" lande ich direkt beim host. Der Host hat aber natürlich keinen Port 25 offen und die iptables leiten den auch nicht an den Mailserver weiter.


Was sagt denn das mail-log des Vserver-A?
Gar nix, da kommt nix an (ausser den Sachen von aussen)


Oder kannst Du gar nicht die iptables verändern? Ich dachte, das geht zumeist bei vservern nicht?
Doch klar, der Host ist mir. Die Vserver sind nicht einzeln gemietet, sondern erstellt. Das ist ja auch das Problem, wenn man Vserver mietet bekommt man pro Vserver eine IP - beim rootserver nur eine für jede Menge Vserver.


Warum setzt Du beim Vserver B nicht die 192.168.1.40 als Mail relay ein?
Weil nicht garantiert ist, dass Vserver B immer auf diesem Host läuft und damit im selben internen Netz des Mailservers ist.

[QUOTE]Welchen MTA verwendest Du eigentlich?[QUOTE]
Postfix. Aber das spielt glaube ich keine Rolle.

Idee
So jetzt habe ich gerade noch ne Idee. "allowservice" in meiner iptables erlaubt ja nur Verbindungen über eth0 - alles andere ist dicht. Das interne Netz geht bei Vservern aber doch über ein dummy-interface. Evtl. liegt da der Hase im Pfeffer.

farion
18.10.09, 05:26
Hab die Lösung.

Das Problem war, dass der host bei lokalen Zugriffen die ports nicht weitergeleitet hat. Die Verbindungen sind tatsächlich auf dem Host hängen geblieben.

Folgendes in der "allowservice"-Funktion fängt nun die ausgehenden Anfragen an die externe IP ab und leitet sie direkt wie gewünscht weiter.

iptables -t nat -A OUTPUT -p tcp -d $MAINIP --dport $3 -j DNAT --to-destination $2:$3

Ergebnis: Ich kann jetzt von jedem beliebigen VServer Port 25 auf der externen IP ansprechen und bekomme den entsprechenden VServer.

Gruss Frieder