Serwer linux'owy jako router + iptables?

Lukasz Duda sirius w poczta.fm
Nie, 16 Lut 2003, 19:12:35 CET


Witam!
Z gory przepraszam, ze pytanie dotyczy akurat w tej chwili Debiana -- ale 
poniewaz czeka mnie to samo za pare dni na serwerze z PLD wiec odwazylem sie 
zapytac... Poza tym to tutaj sa wg mnie najlepsi specjalisci od Linuxa i 
sieci.

Pomozcie w nastepujacym problemie... Siedze juz nad tym od paru dni i cos mi 
nie za bardzo dziala!

Jest serwer Linuxowy z dowma interfejsami fizycznymi oraz jednym wirualnym 
(alias). eth0 to wyjscie na zewnatrz do routera, eth1 (dla sieci 192.168.0.0; 
adresy maskowane z puli adresow nieroutowalnych) oraz eth1:0 (ta sama siec co 
na eth0 ale po tej samej stronie co adresy nieroutowalne). Moze maly rysunek?

                                                                             
INTERNET
   |
   |
| router |(10.20.30.193/27)
   |
   |
|switch|
   |
eth0(10.20.30.194/27)
|                                  |
|     Serwer Linuxowy     |
   |
   |
eth1(192.168.0.1/24)
eth1:0(10.20.30.195/27)

Komputery z adresami z puli publicznej (eth1:0) oraz z adresami prywatnymi 
(eth1) sa podpiete na tych samych kablach: ta sama warstwa fizyczna.
Inne adresy publiczne (wiekszosc) z puli 10.20.30.192/27 sa podpiete do 
switcha za routerem. Kilka do eth1:0 za Linuxem.

Zawartosc pliku /etc/network/interfaces: (w PLD bede to musial zrobic gdzie 
indziej ;-) ale tablica routingu wyjasnia wszystko):
# /etc/network/interfaces -- configuration file for ifup(8), ifdown(8)

# The loopback interface
auto lo
iface lo inet loopback

# The first network card - this entry was created during the Debian 
installation
# (network, broadcast and gateway are optional)
auto eth0 eth1 eth1:0
iface eth0 inet static
	address 10.20.30.194
	netmask 255.255.255.224
	network 10.20.30.192
	broadcast 10.20.30.223
	gateway 10.20.30.193

iface eth1 inet static
	address 192.168.0.1
	netmask 255.255.255.0
	network 192.168.0.0
	broadcast 192.168.0.255

iface eth0:1 inet static
	address 10.20.30.195
	netmask 255.255.255.224
	network 10.20.30.192
	broadcast 10.20.30.223


Tablica routingu wyglada nastepujaco:

Kernel IP routing table
Destination     Gateway       Genmask          Flags Metric Ref    Use Iface
10.20.30.192       *             255.255.255.224  U     0      0      0 eth0
192.168.0.0         *             255.255.255.0     U     0      0      0 eth1
10.20.30.192       *             255.255.255.224 U     0      0      0 eth1
default         router            0.0.0.0         UG    0      0        0 eth0


Wg mnie tak powinno byc? W regulach IPTABLES sa takie miedzy innymi wpisy 
(nie jest to wszystko):


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


echo "1" > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
echo "1" > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses
echo "1" > /proc/sys/net/ipv4/ip_forward
echo "1" > /proc/sys/net/ipv4/conf/all/rp_filter


/sbin/modprobe ipt_MASQUERADE
/sbin/modprobe ip_nat_ftp
/sbin/modprobe ip_nat_irc

${IPTABLES} -F 
${IPTABLES} -t nat -F
${IPTABLES} -t mangle -F
 
${IPTABLES} -P FORWARD ACCEPT


${IPTABLES} -t nat -A POSTROUTING -o eth0 -s 192.168.0.0/24 -j SNAT 
--to-source 10.20.30.194


${IPTABLES} -A INPUT -d 10.20.30.198/27 -s 0/0 -j ACCEPT
${IPTABLES} -A INPUT -d 10.20.30.199/27 -s 0/0 -j ACCEPT


Nie jest to cala zawartosc skryptu tylka ta wg mnie najwazniejsza... Poza tym 
adres 10.20.30 -- jest zmyslony prawdziwa jest tylko koncowka (192-223).

W sieci prywatnej (maskowanej) wszystko dziala... W sieci publicznej za 
firewall'em -- nie! :-(

Pytanie tylko czemu? Co nie tak jest zrobione?
No i pytania (watpliwosci):

-Czy takie sztuczki robi sie na firewallu? Jak?
-Czy nie mozna tego zrobic tylko routingiem? Jak? Moze routing nie do sieci 
na eth1:0 tylko do konkretnych hostow?
-Czy moze tak sie nie da, nie mozna, nie powinno robic?
Znalazlem podobny przyklad ale tam ta siec na eth1:0 jest publiczna ale z 
innej puli...
-Czy tu moze powinen byc jakis routing miedzy dwoma interfejsami? Juz 
zaczynam gadac glupoty? Cos ala ,,pseudomost''?
-Wzglednie gdzie mozna na ten temat poczytac (w HOWTO do routingu i 
iptables-pf, nat juz czytalem...). Na razie pomijam iproute2; czy da sie to 
zrobic ,,tradycyjnie''?
-I na koniec jeszcze pytanie: jak wyswietlic wszystkie maskowane (obecnie 
aktywne polaczenia w IPTABLES)? W IPCHAINS wystarczylo: ipchains -L -M -n -- 
i wszystko bylo widac... A jak to sie robi w iptables'ach? Nie chodzi o 
reguly -- tylko o to co w danej chwili jest (coj jak netstat -F -M)?


P/S
	Gdyby sie ktos pytal (bo np. nie zobaczyl tego na rysunku):  ,,A czemu masz 
dwa wpisy dla sieci 10.20.30.192 i to dla dwóch różnych interfaców?'' To 
odpowiadam:

Poniewaz czesc hostow (10.20.30.192/27) jest podlaczona do 
drugiego interfejsu (eth1:0) czyli jest jakby za Linuxem, za firewallem na 
tym samym kablu co hosty z adresami nieroutowalnymi (192.168.0.0/24) (eth1).
Reszta hostow ma bezposredni dostep do INTERNETU tak samo jak ten Linux.

-Juz nie wiem moze to zrobic przez PROXY ARP? Moze dla wpisu dotyczacego 
eth1:0 (10.20.30.195) podac jako domyslna bramke adres interfejsu eth0 
(10.20.30.194)? Wydaje mi sie, ze to powinien robic zwykly routing?
Poza tym... mysle, ze ten problem jest na tyle ogolny -- ze moze ktos jeszcze 
z waszych podpowiedzi skorzysta?

Przepraszam ze sie tak rozpisalem... Ale nie czesto odwazam sie pisac na taka 
liste... Poza tym z PLD jestem od niedawna -- ale zaczyna mnie to wciagac! :-)



Więcej informacji o liście dyskusyjnej pld-users-pl