fwmark-basierendes Routing (ip rule fwmark)

Einrichten des lokalen Netzes, Verbindung zu anderen Computern und Diensten.
Antworten
MasterOne
Beiträge: 10
Registriert: 13.08.2009 17:54:33

fwmark-basierendes Routing (ip rule fwmark)

Beitrag von MasterOne » 13.08.2009 18:32:30

Ich habe hier zwei DSL-Leitungen (1x mit dynamischer IP & 1x mit fixer IP), die von meinem Firewall-Gateway mit Debian Lenny verwaltet werden.

Ich habe bereits ein Policy-Routing-Setup, das aber bislang nur anhand der IP Adresse routet (also "ip rule from ...."), und möchte nun zusätzlich auch per "iptables -j MARK --set-mark" markierte Pakete per "ip rule fwmark ..." routen, was mir aber einfach nicht gelingen will.

Der spezielle Fall, an dem ich mir heute schon die Zähne ausgebissen habe: Die Standardroute führt über $WAN_IF_INODE, und ich möchte nun SMTP-Verbindungen vom Host $MX_HOST (der sich im Netzwerk $LAN_NET_VLAN befindet, und über das Interface $LAN_IF_VLAN erreichbar ist) über $WAN_IF_TELE2 routen. Die relevanten Teile in meinem Firwall-Skript sehen dabei folgendermaßen aus (da fehlt natürlich jede Menge, mein Skript ist sehr umfangreich):

Code: Alles auswählen

# Allow new, established & related connections WAN <-> VLAN
iptables -A FORWARD -i $WAN_IF_ALL -o $LAN_IF_VLAN -d $LAN_NET_VLAN -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -i $LAN_IF_VLAN -o $WAN_IF_ALL -s $LAN_NET_VLAN -j ACCEPT

# Allow mailserver forwarding WAN_TELE2 -> VLAN
iptables -A FORWARD -i $WAN_IF_TELE2 -o $LAN_IF_VLAN -p tcp -d $MX_HOST -m multiport --dports smtp,ssmtp -j ACCEPT

# Mailserver ports forwarding WAN_TELE2 -> VLAN
iptables -t nat -A PREROUTING -i $WAN_IF_TELE2 -d $WAN_IP_TELE2 -p tcp --dport smtp  -j DNAT --to-destination $MX_HOST:25
iptables -t nat -A PREROUTING -i $WAN_IF_TELE2 -d $WAN_IP_TELE2 -p tcp --dport ssmtp -j DNAT --to-destination $MX_HOST:465

# Enable SNAT for WAN_TELE2
iptables -t nat -A POSTROUTING -o $WAN_IF_TELE2 -s $LAN_NET_VLAN -j SNAT --to-source $WAN_IP_TELE2

# Mark traffic for policy routing
iptables -t mangle -A FORWARD -i $LAN_IF_VLAN -s $MX_HOST -p tcp -m multiport --dports smtp,ssmtp -j MARK --set-mark 1

# Setup Tele2 routing table
ip route replace default dev $WAN_IF_TELE2 table tele2

# Setup rules
ip rule add fwmark 1	 	table tele2	prio 60
(Beide WAN_IF sind ppp-Devices, somit ist $WAN_IF_ALL = ppp+)

Das funktioniert aber nicht, die Pakete gehen trotzdem über §WAN_IF_INODE raus, obwohl diese nachweislich von iptables korrekt markiert werden (kann man ja per "iptables -t mangle -L -v" überprüfen).

Wenn ich nun die Policy-Routing-Rule auf Host-Matching umstelle, funktioniert es:

Code: Alles auswählen

ip rule add from $MX_HOST table tele2	prio 60
Aber dann wird natürlich der gesamte Traffic vom $MX_HOST über $WAN_IF_TELE2 geleitet, was eben nicht gewünscht ist.

Ich habe heute den ganzen Nachmittag damit rumgespielt, und komme einfach nicht weiter.

Warum klappt es mit dem Host-Match, aber nicht mit dem fwmark-Match?

Ich muß da irgendwas entscheidendes übersehen. Ich habe natürlich schon im Internet gesucht, und ein paar Beispiele gefunden, die ähnlich aufgebaut sind, also Pakete, die an einen bestimmten Port gesendet werden, mit iptables auf ebendiese Weise markieren, und dann einfach per "ip rule fwmark ..." über das korrekte Interface rausschicken, was ja eigentlich auch so funktionieren soll.

Wer kann mir sagen, was hier los ist, bzw. wie ich dem Problem auf die Spur kommen kann?

P.S. Wenn ich das Marking von der Mangle-Forward-Chain in die Mangle-Prerouting-Chain verschiebe, kann man von $MX_HOST keine Verbindung mehr über Port 25/465 aufbauen. Ich habe das zum Testen jeweils von $MX_HOST per "telnet destination-mailserver smtp" probiert, so konnte ich immer gleich sehen, daß die Verbindung trotz allem über $WAN_IF_INODE rausging. Mit dem Marking in der Mangle-Prerouting-Chain tut sich nach Eingabe des Telnet-Kommandos einfach nichts mehr.

MasterOne
Beiträge: 10
Registriert: 13.08.2009 17:54:33

Re: fwmark-basierendes Routing (ip rule fwmark)

Beitrag von MasterOne » 13.08.2009 19:04:53

Also da hat's doch eindeutig was:

Wenn ich kein Marking durchführe, sondern einfach die Default-Route für $MX_HOST auf $WAN_IF_TELE2 stelle (also "ip rule from $MX_HOST table tele2"), funktioniert es wunschgemäß (wobei dann aber natürlich der gesamte Traffic von $MX_HOST über $WAN_IF_TELE2 rausgeht).

Wenn ich nun zusätzlich alle SMTP Pakete in der Mangle-Prerouting-Chain markiere (iptables -t mangle -A PREROUTING -p tcp --dport smtp -j MARK --set-mark 1), und die Routing-Rule auf "ip rule from $MX_HOST fwmark 1table tele2" ändere, tut sich mit dem o.g. Telnet-Test auf Port 25 nichts mehr.

Wenn ich dann stattdessen die SMTP Pakete in der Mangle-Forward-Chain markiere (iptables -t mangle -A FORWARD -p tcp --dport smtp -j MARK --set-mark 1), geht der Telnet-Test auf Port 25 wieder fälschlicherweise über $WAN_IF_INODE raus.

??? :? ???

MasterOne
Beiträge: 10
Registriert: 13.08.2009 17:54:33

Re: fwmark-basierendes Routing (ip rule fwmark)

Beitrag von MasterOne » 17.08.2009 17:55:26

Na, hat wirklich niemand eine Idee, woran das hier scheitern könnte?

Antworten