[OT] Problema "muy extraño" en una red

Manuel López Torrent malotor en gmail.com
Mar Jul 12 15:59:14 CDT 2005


La estructura de la red es la siguiente:

Tengo las redes de casa  y la oficina conectadas a internet através de
un router de telefonica y un modem ONO respectivamente. La de telefonica
es IP fija y la de 
ONO es dinamica ( dominio loquesea.net ). En ambas redes dispongo de un
ordenador que hace de router 
y firewall. Tengo configurado un tunel vpn entre las dos. El objetivo de
la vpn es poder acceder a servicios de cada una de las redes sin tener
que 
abrir puertos a internet . El problema es que no puedo acceder
directamente a puertos en equipos de distintas redes. Por ejemplo si 
accedo por "ssh loquesea.net" funciona perfectamente, pero si accedo por
"shh 192.168.0.1" funciona correctamente pero cuando un "ll /" (por
ejemplo) se queda como colgado . No he conseguido solucionar el
problema. Espero que me puedan ayudar .

El siguiente "gráfico" ilustra la estructura de la red:

Casa				   RouterA ( poseidon )
192.168.1.0/24    --> switch <--    eth1:192.168.0.2
				    eth0:(***ip_publica***) 
					|              |
					|              |
			[Router Telefónica (NAT)] Tunel 10.0.0.2
					|              |
					|              |
				   [INTERNET]	       |
					|              |
					|              |
					|              |
				[Modem Cable ONO]	 Tunel 10.0.0.1
					|              |
					|              |	  
Oficina			   		RouterB ( mercuri )
192.168.0.0/24    --> switch <--   eth0:192.168.0.1  eth1:dhcp

He comprobado el acceso a todos los sitios mediante "ping" y desde
192.168.1.3 ( mi pc personal ) puedo acceder a todos.


CONFIGURACIÓN DEL ROUTER A

Rutas:
soul en poseidon:~ $ route
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use
Iface
10.0.0.1        10.0.0.2        255.255.255.255 UGH   0      0        0
tun0
(***ip_publica***)   *               255.255.255.192 U     0      0
0 eth0
192.168.1.0     *               255.255.255.0   U     0      0        0
eth1
192.168.0.0     10.0.0.1        255.255.255.0   UG    0      0        0
tun0
default         193.Red-80-32-2 0.0.0.0         UG    0      0        0
eth0


CONFIGURACION DEL ROUTER B

root en mercuri:/ # route
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use
Iface
10.0.0.2        10.0.0.1        255.255.255.255 UGH   0      0        0
tun0
192.168.1.0     10.0.0.2        255.255.255.0   UG    0      0        0
tun0
192.168.0.0     *               255.255.255.0   U     0      0        0
eth0
81.203.236.0    *               255.255.254.0   U     0      0        0
eth1
default         81-203-236-1.us 0.0.0.0         UG    0      0        0
eth1

FIREWALL

Uso el mismo firewall en los dos routers pero con los datos de
configuracion adecuados para cada uno. Creo que sobran bastantes reglas,
pero he ido añadiendo para probar a ver si solucionaba el problema.

#!/bin/bash

IPTABLES=/sbin/iptables
# Interfaz conectada a internet
EXT="eth1"
# Interfaz conectada a la red interna
INT="eth0"
#Nuestra red local
LAN="192.168.0.0/24"
#Red local remota conectada a la nuestra por una vpn
RLAN="192.168.1.0/24"
#Entrada tunel VPN
INTUN="10.0.0.1"
#Salida tunel VPN
OUTTUN="10.0.0.2"
#IPS del tunel
LANTUN="10.0.0.0/24"

LOOP=127.0.0.1

case "$1" in
        start)
                # Cargamos los módulos necesarios
                echo "Setting firewall rules..."
                #echo -n "Loading kernel modules: "
                #/sbin/insmod -q -s ip_tables
                #/sbin/insmod -q -s ip_conntrack
                #/sbin/insmod -q -s ip_conntrack_ftp
                #/sbin/insmod -q -s ip_conntrack_irc
                #/sbin/insmod -q -s iptable_nat
                #/sbin/insmod -q -s ip_nat_ftp
                echo "done"

                # Activamos el IP forwarding
                echo -n "Activating IP Forwarding support: "
                echo "1" > /proc/sys/net/ipv4/ip_forward
                echo "done"

                # Eliminamos las reglas anteriores
                echo -n "Deleting firewall rules: "
                $IPTABLES -F INPUT
                $IPTABLES -F OUTPUT
                $IPTABLES -F FORWARD
                $IPTABLES -F
                $IPTABLES -t nat -F
                echo "done"

		# Establecemos las politicas por defecto
		echo -n "Setting default policy: "
		$IPTABLES -P INPUT DROP
		$IPTABLES -P OUTPUT ACCEPT
		$IPTABLES -P FORWARD ACCEPT

		# Evitar que los paquetes externos usen la dirección de loopback
		$IPTABLES -A INPUT -i $EXT -s $LOOP -j DROP
		$IPTABLES -A FORWARD -i $EXT  -s $LOOP -j DROP
		$IPTABLES -A INPUT -i $EXT  -d $LOOP -j DROP
		$IPTABLES -A FORWARD -i $EXT -d $LOOP -j DROP

		#Activamos el enmascaramiento para que todo lo que salga de la lan
hacia inet salga por la ip pública
		#Ojo!!!! Con el enmascaramiento en las VPNS!!!! Deberemos indicar
explicitamente que no se enmascare ja que sino no saldrá por el tunel
                echo -n "Activating NAT: "
 		$IPTABLES -t nat -A POSTROUTING -s $LAN -o $EXT -j MASQUERADE
		
		#Forward para las vpn
		#Si tenemos varias deberiamos hacerlas para cada uno recordar que es
necesario incluir routas para que podem alcanzar las redes
		#route add -net 192.168.0.0 netmask 255.255.255.0 gw 10.0.0.1
		#Con la ruta anterior podremos alcanzar la red 192.168.0.0 desde la
192.168.1.0 usando como gateway la salida del tunel vpn
		
		$IPTABLES -A FORWARD -s $LAN -d $RLAN -j ACCEPT
		$IPTABLES -A FORWARD -s $RLAN -d $LAN -j ACCEPT
                echo "done"

                echo -n "Activating ICMP echo request: "
                $IPTABLES -A INPUT -i $EXT -p ICMP -j ACCEPT
                echo "done"
		
  		echo -n "Setting other rules: "
		
		#Ojo!!!!! Falta asegurar que los paquetes que entran por localhost
realemente vienen de localhost !!!!!!!!!!!!!!!!!!!!!!!
		
		

		#Operar en localhost sin limitaciones
		$IPTABLES -A INPUT -i lo -j ACCEPT
		$IPTABLES -A OUTPUT -o lo -j ACCEPT		

		#Ip de administración remota
		#Esto nos permite administrar el firewall remotamente			
		$IPTABLES -A INPUT -s (***ip_publica***) -j ACCEPT

		#Acceptamos de la LAN
		#!Peligrooooo!!!!!!! Usuarios pueden toquetear
		$IPTABLES -A INPUT -s $LAN -j ACCEPT
		$IPTABLES -A OUTPUT -d $LAN -j ACCEPT
		
		#Para conectarnos a los PC de la red no necesitamos estas ya que el
FORWARD está acceptado, pero parar conectar con el firewall si
		$IPTABLES -A INPUT -s $RLAN -j ACCEPT
		$IPTABLES -A OUTPUT -d $RLAN -j ACCEPT
		
		#Acceptamos todo lo que vienen del tunel
		#No se si es necesaria!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
		$IPTABLES -A INPUT -s $OUTTUN -j ACCEPT		
		$IPTABLES -A OUTPUT -d $OUTTUN -j ACCEPT	
		echo "done"

                echo -n "Setting firewall port rules: "
		
                # 21: ftp
                #$IPTABLES -A INPUT -i $EXT -p TCP --dport 21 -m state
--state NEW -j ACCEPT
                #$IPTABLES -A INPUT -i $EXT -p TCP --dport 2100 -m state
--state NEW -j ACCEPT

                # 22: ssh
                #$IPTABLES -A INPUT -i $EXT -p TCP --dport 22 -m state
--state NEW -j ACCEPT

                # 25: smtp
                #$IPTABLES -A INPUT -i $EXT -p TCP --dport 25 -m state
--state NEW -j ACCEPT

                # 80: apache
                #$IPTABLES -A INPUT -i $EXT -p TCP --dport 80 -m state
--state NEW -j ACCEPT

		#mldonkey
		$IPTABLES -A INPUT -i $EXT -p TCP  --dport 9010 -m state --state NEW
-j ACCEPT
		$IPTABLES -A INPUT -i $EXT -p UDP  --dport 9014 -m state --state NEW
-j ACCEPT
		
		#bittorrent
		$IPTABLES -A INPUT -i $EXT -p TCP --dport 6882 -m state --state NEW -j
ACCEPT
		$IPTABLES -A INPUT -i $EXT -p TCP --dport 6881 -m state --state NEW -j
ACCEPT
               
		#$IPTABLES -A INPUT -s 0.0.0.0/0 -p tcp -dport 1:1024 -j DROP
		#$IPTABLES -A INPUT -s 0.0.0.0/0 -p udp -dport 1:1024 -j DROP
		echo "done"

		echo -n "Setting NAT rules: "
		$IPTABLES -t nat -A PREROUTING -i $EXT -p tcp --dport 9010 -j DNAT
--to 192.168.0.2:9010
		$IPTABLES -t nat -A PREROUTING -i $EXT -p udp --dport 9014 -j DNAT
--to 192.168.0.2:9014
		$IPTABLES -t nat -A PREROUTING -i $EXT -p tcp --dport 6882 -j DNAT
--to 192.168.0.2:6882
		$IPTABLES -t nat -A PREROUTING -i $EXT -p tcp --dport 6881 -j DNAT
--to 192.168.0.2:6881
		#$IPTABLES -t nat -A PREROUTING -i $EXT -p tcp --dport 4080 -j DNAT
--to 192.168.0.2:4080
		#$IPTABLES -t nat -A PREROUTING -i $EXT -p tcp --dport 4001 -j DNAT
--to 192.168.0.2:4001

		echo "done"

                echo -n "Final approach: "
                # Aceptamos paquetes de una conexión ya establecida
                $IPTABLES -A INPUT -m state --state RELATED,ESTABLISHED
-j ACCEPT

                # Rechazamos los de conexiones nuevas
                #$IPTABLES -A INPUT -i $EXT -m state --state NEW,INVALID
-j DROP

                # Rechazamos conexiones de forwarding no establecidas
                #$IPTABLES -A FORWARD -i $EXT -m state --state
NEW,INVALID -j DROP

                echo "done"
                ;;

        stop)
                echo -n "Stopping firewall: "
                $IPTABLES -F INPUT
                $IPTABLES -F OUTPUT
                $IPTABLES -F FORWARD
                $IPTABLES -F
                $IPTABLES -t nat -F

		#Debemos dejar las reglas de forward para no dejar a oscuras el
router 
		/sbin/iptables -P INPUT ACCEPT
		/sbin/iptables -P OUTPUT ACCEPT
		/sbin/iptables -P FORWARD ACCEPT

		echo "1" > /proc/sys/net/ipv4/ip_forward
		
		iptables -t nat -A POSTROUTING -s $LAN -o eth0 -j MASQUERADE

                echo "done"
                ;;

        restart)
                $0 stop
                echo -n "Sleeping a few seconds before setting the rules
again: "
                sleep 2
                echo "done"
                $0 start
                ;;

        status)
                $IPTABLES -L
                $IPTABLES --table nat --list --exact --verbose --numeric
--line-numbers
                ;;

        *)
                echo "Usage: $0 {start|stop|restart|status}"
                exit 1
esac
exit 0

------------------------------------------------------------------------------

Gracias por adelantado.
Saludos, Manuel







Más información sobre la lista de distribución ubuntu-es