[linux] dvaja ISP a port forward do vnutornej siete

Rybarik, Michal mrybarik na tronet.sk
Čtvrtek Červenec 31 13:57:23 CEST 2003


hello all,

mam do linux routera pripojenych dvoch providerov a nedokazem ho nastavit tak,
aby mi fungovali ingoing connections, ktore sa maju forwardovat na server v LANke.
vysvetlim:

bol linux router s jednym internet providerom a verejnou ipckou. spojenia na 
verejny interface routera na porty 25, 80 a 110 sa NATovali na server dnu v LAN.
vsetky stroje v LAN su maskaradovane. toto chodilo bez problemov.

teraz pribudla druha linka na ineho internet providera, ktora je len na 
outgoing connections (je rychlejsia ale nema verejnu IP). zamer je taky,
aby ISP1 bol pouzivany na ingoing connections a na outgoing do jednej 
C-ckovej siete u toho providera, a ISP2 na vsetko ostatne.

  ISP1 (gw 195.x.x.65)
  -------------------------------------+
                         195.x.x.66/29 | eth1
                                 +-----+----+
                                 |  LINUX   | eth0 10.23.23.5/8
                                 |  ROUTER  +------+
                                 +-----+----+      |
                         172.16.26.2/8 | eth2      |
  -------------------------------------+           |
  ISP2-DSL (gw 172.16.26.1)                        |
                                                   |
                             +-------------+       |
                             | SMTP/POP3/  +-------+---------> LAN
                             | HTTP SERVER |
                             +-------------+
                               10.23.23.1

pripojil som druheho providera, nastavil som interface, routovanie (prikazom
"route"), pricom default routa bola na ISP2, a na ISP1 bola nastavena jedna 
staticka routa. outgoing fungoval ok, routoval ma presne tam kam som chcel, ale
ingoing spojenia nefungovali vobec, ani na forwardovane porty, ani priamo na
port 22 routera. tcpdumpovanim som zistil ze SYN prisiel od ISP1, SYN+ACK ale 
chcel odchadzat cez default route (ISP2), co bolo zle.

zrusil som teda cele toto routovanie na nastavil som ho cez iproute2 (prikaz 
"ip route"), tak ako je popisane v 
http://lartc.org/howto/lartc.rpdb.multiple-links.html (vratane doplnenia od roda 
roarka), plus som pridal vlasnu staticku routu jedneho C-cka na ISP1. v takomto 
stave funguju outgoing spojenia a aj ingoing cez ISP1 na port 22 routera. nechodia
a vytrvalo odolavaju porty 25, 80 a 110, ktore maju byt forwardovane dnu do LAN.
skusal som zrusit iptables-ovy DNAT a vyriesit ingoing z internetu do LAN na dva
kroky, teda spojenim na router a spojenim z routra do LAN (tieto samostatne funguju).
spravil som v xinetd na routeri service smtp, ktory sa spoji na port 25 v LAN.
priamo z routera to funguje, z internetu vsak nie. teraz stahujem na router gcc a 
idem nakompilovat redir, ale nie som si isty vysledkom. 

mate niekto nejaku ideu ako rozchodit tie spojenia zvonku do LAN??

este prikladam konfiguraciu (iproute2 settings je chodivy, iptables su stare a po 
pridani druheho ISP nechodia):


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

IF0=eth0
IP0=10.23.23.5
P0_NET=10.0.0.0/8

IF1=eth1
IP1=195.x.x.66
P1=195.x.x.65
P1_NET=195.x.x.64/29

IF2=eth2
IP2=172.16.26.2
P2=172.16.26.1
P2_NET=172.0.0.0/8

ip route add $P1_NET dev $IF1 src $IP1 table T1
ip route add default via $P1 table T1
ip route add $P2_NET dev $IF2 src $IP2 table T2
ip route add default via $P2 table T2
ip route add $P1_NET dev $IF1 src $IP1
ip route add $P2_NET dev $IF2 src $IP2
ip rule add from $IP1 table T1
ip rule add from $IP2 table T2
ip route add $P0_NET dev $IF0 table T1
ip route add $P2_NET dev $IF2 table T1
ip route add 127.0.0.0/8 dev lo table T1
ip route add $P0_NET dev $IF0 table T2
ip route add $P1_NET dev $IF1 table T2
ip route add 127.0.0.0/8 dev lo table T2

ip route add default via $P1  # len docasne aby mohli ludia robit, ma byt P2
ip route add 195.x.x.0/24 via $P1

# stare nastavenie cez route, s nim nechodili ziadne ingoing spojenia, bolo nahradene iproute2
#/sbin/route add -net 195.x.x.0 netmask 255.255.255.0 gw 195.x.x.66
#/sbin/route add default gw 172.16.26.1

/sbin/iptables -t nat -A POSTROUTING -o eth1 -s 10.0.0.0/8 -j SNAT --to 195.x.x.66
/sbin/iptables -t nat -A POSTROUTING -o eth2 -s 10.0.0.0/8 -j SNAT --to 172.16.26.2

# forwarding portov 25,80,110 zvonku na novell
/sbin/iptables -A PREROUTING -t nat -p tcp -d 195.x.x.66 --dport 25 -j DNAT --to 10.23.23.1:25
/sbin/iptables -A PREROUTING -t nat -p tcp -d 195.x.x.66 --dport 80 -j DNAT --to 10.23.23.1:80
/sbin/iptables -A PREROUTING -t nat -p tcp -d 195.x.x.66 --dport 110 -j DNAT --to 10.23.23.1:110

# aby isli pakety z vnutornej siete smerovane na forwardovane porty
/sbin/iptables -A POSTROUTING -t nat -s 10.0.0.0/8 -d 10.0.0.0/8 -j SNAT --to 195.x.x.66

# aby isli pakety ktore vznikli na tomto stroji na forwardovane porty
/sbin/iptables -A OUTPUT -t nat -p tcp -d 195.x.x.66 -j DNAT --to 10.23.23.1

za kazdu pomoc vopred dakujem.

michal rybarik



Další informace o konferenci linux