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