routing / iptables

Fórumok

Üdv mindenkinek,

Van egy suse 10.0 szerver, ami csatlakozna 2 különböző internet szolgáltatóhoz.
Hogyan tudnám megoldani, hogy a kimenő levélforgalom az egyik (eth4) a többi a másik (eth3) kapcsolaton keresztül működjön
(eth2 a helyi hálózat kb 20 klienssel)

volt némi próbálkozásom, és egy fél nap googlém. Az eredmény: nem nyert.

A válaszokat előre is köszönöm.

iptables:
#!/bin/sh
IPTABLES=/usr/sbin/iptables

$IPTABLES -F INPUT
$IPTABLES -F OUTPUT
$IPTABLES -t nat -F

$IPTABLES -P INPUT DROP
$IPTABLES -P OUTPUT ACCEPT

$IPTABLES -A INPUT -i eth2 -j ACCEPT
$IPTABLES -A INPUT -i lo -j ACCEPT

$IPTABLES -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPTABLES -A INPUT -i eth4 -p tcp --dport 22 -j ACCEPT
$IPTABLES -A INPUT -i eth3 -p tcp --dport 22 -j ACCEPT

$IPTABLES -t nat -A POSTROUTING -p tcp -s 192.168.100.10 -o eth3 -j MASQUERADE

$IPTABLES -t nat -A POSTROUTING -p tcp -s 192.168.100.254 -o eth3 -j MASQUERADE
$IPTABLES -t nat -A POSTROUTING -p tcp -m iprange --src-range 192.168.100.100-192.168.100.149 -o eth3 -j MASQUERADE
$IPTABLES -t nat -A POSTROUTING -p tcp -m iprange --src-range 192.168.100.160-192.168.100.200 -o eth3 -j MASQUERADE

#$IPTABLES -t nat -A POSTROUTING -p tcp -s 192.168.100.0/24 --dport ! 80 -o eth4 -j MASQUERADE
$IPTABLES -t nat -A POSTROUTING -p tcp -s 192.168.100.0/24 --dport ! 25 -o eth3 -j MASQUERADE
$IPTABLES -t nat -A POSTROUTING -p tcp -s 192.168.100.0/24 --dport 25 -o eth4 -j MASQUERADE
$IPTABLES -t nat -A POSTROUTING -p udp -s 192.168.100.0/24 -o eth3 -j MASQUERADE
$IPTABLES -t nat -A POSTROUTING -p icmp -s 192.168.100.0/24 -o eth3 -j MASQUERADE
$IPTABLES -t nat -A POSTROUTING -p igmp -s 192.168.100.0/24 -o eth3 -j MASQUERADE

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

modprobe ip_nat_ftp
modprobe ip_conntrack
modprobe ip_conntrack_ftp

kameleon:~ # route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
192.168.100.0 0.0.0.0 255.255.255.0 U 0 0 0 eth2
192.168.60.0 0.0.0.0 255.255.255.0 U 0 0 0 eth3
172.16.205.0 0.0.0.0 255.255.255.0 U 0 0 0 eth4
169.254.0.0 0.0.0.0 255.255.0.0 U 0 0 0 eth2
127.0.0.0 0.0.0.0 255.0.0.0 U 0 0 0 lo
0.0.0.0 192.168.60.1 0.0.0.0 UG 0 0 0 eth3

Hozzászólások

Az SNAT nem lenne jobb megoldás, mint a maszkolás? A megfelelő portot snatolod a megfelelő kártyád címéhez. Bár ehhez talán nem ártana fix cím az internet szolgáltatótól.

--
http://laszlo.co.hu/

valoszinuleg ide inkabb policy routing kene.

#!/bin/bash
networkA=aa.bb.cc.dd/ee
networkB=ff.gg.hh.ii/jj
#networkB=`route -n|grep ppp0|cut -f1 -d\ `
ipA=a.b.c.d
ipB=e.f.g.h
gwA=a.b.c.z
gwB=e.f.g.z
#gwB=`ifconfig ppp0|head -2|tail -1|cut -f3 -d:|cut -f1 -d\ `
tableA=lan
tableB=adsl

ip route del $networkA
ip route del $networkB
ip route add $networkA dev eth0 src $ipA table $tableA
ip route add $networkB dev ppp0 src $ipB table $tableB
ip route add $networkB dev ppp0 src $ipB
ip route add $networkA dev eth0 src $ipA
ip route add default via $gwA
ip rule add from $ipA table $tableA
ip rule add from $ipB table $tableB

ja, /etc/iproute2/rt_tables -t egeszitsd ki:
2 lan
3 adsl

ezzel megoldottad h a csomag arra menjen vissza amerre jott.
ha azt is mondod, h ip rule add to ipcim table lan (akkor az ipcim fele lan-on fog menni)

Köszönöm, holnap délelőtt ki fogom próbálni, de lenne 1 kérdésem.

Nem látom benne azt, hogy csak a levélforgalom menjen az eth4 re, a többi forgalom eth3 ra.
Én úgy látom, hogy ha 2 részre osztanám a klienseket, akkor az egyik felének a teljes forgalmát egy egyik szolgáltatóhoz irányítanám, a másik felét pedig a másik szolgáltatóhoz.

Vagy rosszul értelmezem a soraidat ?

A fentiben azt mutattam meg, h adott IP-re hogyan tudod az specifikalni az iranyt (a def.gw-hez kepest masfele).
Persze dst helyett megadhatsz dst portot is, valamint csinalhatod azt is h nem iranyt allitasz be, hanem mark-ot.
utana iptables mangle tablaban markolod a tcp/25-t (meg amit meg arra akarsz)

csak en vagyok hulye vagy tenyleg nincs olyan, hogy tema figyelese???

Na mind1 erdemben nem igazan tudok hozzaszolni, mert nem tudom, hogy a linux hogy kezeli azt ha 2 default route van. Ha jol tudom akkor a POSTROUTING chain az mint a neve is mondja post routing tehat a kimeno interface mar el van dontve. Az hogy te mit csinals a forras nattal az nem sokat valtoztat a dolgon de lehet, hogy itt en ertem felre a dolgot.

Neked valoszinu, hogy a
physdev
--physdev-out name
Ha jol ertelemezem a manualt akkor ez megszabja, hogy melyik interfacen fog kimenni a csomag. Ha jol ertem ez kell neked.

> a kimenő levélforgalom az egyik (eth4) a többi a másik (eth3) kapcsolaton keresztül működjön

Be kell állítani a levelező programot (ha be lehet), hogy az eth4-hez rendelt IP címhez bind()-eljen, és így ezzel az IP-vel mint forráscímmel küldje a leveleket. A eth4 címét forráscímként használva a levelező program forgalma az eth4-en megy ki, pont ahogy szeretnéd.

Postfix-nél úgy nézem így lehet beállítani.

Sendmail-nél meg így.