[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