Después de reiniciar no funciona script iptables [Solucionado]

Hola, soy yo otra vez, siguiendo con lo anterior, me he dado cuenta de una cosita, si miramos el hilo anterior

http://www.esdebian.org/foro/41282/hacer-routing

No consigo hacer el script para que añada el iptables despues de reiniciar, no se porque falla, si es porque hasta que el modem no conecta no existe la interfaz ppp0 o por que pero vamos... que me falla y no lo saco, teneis alguno idea de porque puede ser?

Gracias de nuevo.

¿podrias mostrar el script? ¿tenes en cuenta que iptables lo ejecutas con privilegios de root ?

Como no se bien como se trata al iptables, lo único que he hecho a sido crear esto:

#!/bin/sh
iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE

en un fichero y darle permisos de ejecución y meterlo dentro de crontab de la siguiente forma

# m h dom mon dow command
*/1 * * * * sh /root/scripts/nat.sh
0 * * * * sh /root/scripts/nat.sh

Para que lo ejecute nada mas encender y para que luego lo haga cada 1 minuto por lo del tiempo este que tarda el modem en encender y conectar.

Seguramente esto este mal hecho asi, pero es que no entiendo de iptables y no me aclaro demasiado...

Con respecto a lo de root, siempre soy root en esta maquina, no es por una cuestion de "comodidad", sino porque este equipo no lo va a usar nadie fisicamente para nada, de hecho no tiene X ni nada parecido.

Espero que te sirva esto. Gracias.

Aqui creo que encontraras lo que necesitas,

saludos

El título lo modifico... por favor pon títulos descriptivos.

No necesitas poner el script para que sea lanzado cada minuto ,Pone al inicio del script un condicional para que

controle que tengas acceso a internet ,y si lo tiene luego ejecuta el scritp de iptables

Algo asi como :

sleep 20   # le das un tiempo de espera para que se conecte

if ping -c 1 208.69.32.231 > /dev/null ; then #  ping a google u otra ip de la web
                                              ## luego ejecutas el script si se cumple la condicion

Es solo un ejemplo ,modificalo segun uso y necesidad !

En todo caso podrías incluir el script para que se lance al inicio ,en vez de usar cron .

En fin si buscas ejemplos en el foro hay unos cuantos ,y sobre iptables también ,tu script podria pulirse

Mueve el script a /etc/init.d y ejecutas el comando update-rc.d. Busca más información al respecto.

Saludos wink

Hola a todos, perdon por la tardanza pero no he estado en casa en todo el dia... motivos familiares bastantes serios...

A ver.. he hecho este script

#!/bin/sh

echo "ESPERANDO CONEXION"
sleep 120
echo "COMPROBANDO CONEXION"
if ping -c 1 208.69.32.231 > /dev/null ; then
echo "REDIRECCIONANDO RUTAS"
sleep 2
iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE
sleep 2
echo "ACCESO REALIZADO"
else
echo "EL ENLACE A FALLADO"
fi

Lo tengo metido en mi carpeta de scripts pero he hecho un enlace simbolico a /etc/init.d/ y lo he añadido a update-rc.d con la opcion -f, pero nada, seguimos en las mismas, no me hace la funcion que le pido... si lo ejecuto a mano si, pero sino no... No entiendo porque...

Que os parece el script? Gracias..

Pablo-GNU escribió:

Hola a todos, perdon por la tardanza pero no he estado en casa en todo el dia... motivos familiares bastantes serios...

A ver.. he hecho este script

#!/bin/sh

echo "ESPERANDO CONEXION"
sleep 120
echo "COMPROBANDO CONEXION"
if ping -c 1 208.69.32.231 > /dev/null ; then
echo "REDIRECCIONANDO RUTAS"
sleep 2
iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE
sleep 2
echo "ACCESO REALIZADO"
else
echo "EL ENLACE A FALLADO"
fi

Lo tengo metido en mi carpeta de scripts pero he hecho un enlace simbolico a /etc/init.d/ y lo he añadido a update-rc.d con la opcion -f, pero nada, seguimos en las mismas, no me hace la funcion que le pido... si lo ejecuto a mano si, pero sino no... No entiendo porque...

Que os parece el script? Gracias..

¿se ejecuta ?¿te falla todo o solo en partes ? en todo caso agregale a cada linea de ordenes al final algo asi como ' && bien ' , entonces cada linea que se ejecute bien te va a devolver un bien ,,así le haces un seguimiento al script cuando se ejecuta .( si lo hace ! )
Ejemplo:

iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE && bien

Bueno, creo que ya lo he solucionado...

He hecho lo siguiente:

1º He creado este script para que conecte con wvdial y lo ejecute en segundo plano, luego compruebe si hay conexion y una vez hecho eso lanze la regla para el iptables. Lo he creado en mi carpeta de scripts pero luego he hecho un enlace simbolico a/etc/init.d/ y lo he añadido con update-rc.d -f al arranque. Como veis esto tambien sirve para que conecte a internet, antes lo tenia añadido wvdial a rc.local, pero esta manera me funciona muy bien.

### BEGIN INIT INFO
# Provides: REDES
# Required-Start: $remote_fs $syslog
# Required-Stop: $remote_fs $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Start daemon at boot time
# Description: Enable service provided by daemon.
### END INIT INFO

#!/bin/sh

echo "ESTABLECIENDO CONEXION"
wvdial &
sleep 60
echo "ESPERANDO CONEXION"
sleep 20
echo "COMPROBANDO CONEXION"
if ping -c 1 208.69.32.231 > /dev/null ; then
echo "REDIRECCIONANDO RUTAS"
sleep 2
iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE
sleep 2
echo "ACCESO REALIZADO"
else
echo "EL ENLACE A FALLADO"
fi

2º Ademas me he dado cuenta de que de vez en cuando el modem se puede desconectar solo, no se la razon, pero si se como apañarlo, lo que he hecho a sido crear una regla en udev, la he hecho añadiendo un fichero en /etc/udev/rules.d/ llamado 20-modem-internet.rules con este contenido:

BUS=="usb", SYSFS{idVendor}=="12d1", SYSFS{idProduct}=="1003", KERNEL=="ttyUSB[0-9]*", NAME="ttyUSB%n", SYMLINK+="usb/tts/%n", MODE="0664", GROUP="dialout", RUN+="/usr/bin/wvdial"

Lo que hace es que si detecta que un dispositivo con esa identificacion de vendor y de device se conecta por USB ejecuta el comando especificado en RUN+, en este caso wvdial.

Lo he probado y funciona bien desde el arranque, ademas de que he soltado con la mano el modem y lo he vuelto a enchufar y me conecta, ademas de que me sigue manteniendo la regla de iptables.

Posiblemente se pueda afinar mas, pero oye.. funciona y es un punto de partida para quien necesite hacer lo mismo, espero que sirva para muchos.

Saludos y gracias.