Anterior Siguiente
Inicio
1.
Scripts
Esto son una serie de scripts que
hice para cambiar más facilmente las rutas y reglas de iptables
según la conexión a internet que usara. Además
incluyo scripts de inicio de mi servidor
Conexión a internet
Rutas estáticas
Red inalámbrica
Iptables
Openvpn
Autoconfiguración de la red con ifplugd y
guessnet
Conexión
a internet:
#!/bin/bash
#A este script tenemos que pasarle como argumentos: "modem" ó
"wireless", según la conexión
#que queramos usar
PROVIDER="terra" #Mi
proveedor de internet vía modem
case $1 in
modem)
echo Conectando a $PROVIDER
##Borramos puerta de enlace por defecto (si existe) y NAT
if [ `route -n |grep UG | awk '{print $2}' |wc -l` > 0
];then #Si
hay puerta de enlace definida
route del default gw `route -n |grep UG | awk '{print
$2}'` #La borramos
fi
iptables -t nat
-F
#Limpiamos reglas de NAT
#Desconectamos el módem en caso de estar usándolo
PPD=`ps aux |grep pppd | wc -l` #Numero de procesos de pppd
while [ $PPD -gt 0 ]; #Mientras haya algún ppd
ejecutándose...
do
killall pppd -9
PPD=`ps aux |grep pppd | wc -l`;
done
#Conectamos tarifa plana
pon terra
#Hacemos nat para ppp0
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o ppp0 -j MASQUERADE
;;
wireless)
#Desconectamos el módem en caso de estar usándolo
PPD=`ps aux |grep pppd | wc -l` #Numero de procesos de pppd
while [ $PPD -gt 0 ]; #Mientras haya algún ppd
ejecutándose...
do
killall pppd -9
PPD=`ps aux |grep pppd | wc -l`;
done
#Configuramos red wireless y añadimos puerta de enlace
iwconfig wlan0 essid ACME mode managed
ifconfig wlan0 172.16.0.8 netmask 255.255.255.0
route add default gw 172.16.0.5
#Hacemos nat para wlan0
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o wlan0 -j MASQUERADE
;;
*)
echo "Usage: $0 {modem|wireless}"
;;
esac
Rutas
estáticas:
# Fichero en deshuso mientras no tengamos más redes
# Por el momento no tenemos más redes que las de nuestros
interfaces eth0, ppp0, wlan0
#!/bin/bash
#No activamos ip_forward ya que lo activamos en /etc/network/options
#echo 1 > /proc/sys/net/ipv4/ip_forward
case $1 in
start)
#Rutas estáticas
route add -net 172.16.0.0/16 gw 192.168.2.100
route add -net 192.168.1.0/24 gw 192.168.2.100
;;
stop)
# Por hacer
# Sería algo como un "while `route -n | wc -l > 0`; then
route del -net `route -n |awk....`";done
;;
restart)
# stop && start :D
;;
*)
echo "Usage: $0
{start|stop|restart}"
esac
Red
inalámbrica:
#!/bin/bash
# Con este script iniciamos y configuramos la red inalámbrica
ESSID=ACME
case $1 in
start)
modprobe ndiswrapper
sleep 6 # necesario mientras se carga el driver
iwconfig wlan0 essid $ESSID mode managed
ifup wlan0 # tenemos las ip's configuradas en
/etc/network/interfaces
;;
stop)
ifconfig wlan0 down
rmmod ndiswrapper
;;
restart)
ifconfig wlan0 down
rmmod ndiswrapper
modprobe ndiswrapper
sleep 6
iwconfig wlan0 essid $ESSID mode managed
ifup wlan0
;;
*)
echo "Usage: $0 {start|stop|restart}"
;;
esac
Iptables:
modprobe
ip_nat_irc ports=6667
modprobe ip_nat_ftp
iptables -F
iptables -t nat -F
#Hacemos nat para las ip's de la
192.168.0.102 a la 110
IP=102 #IP desde la cual
comienza la pila para NAT
for (( IP=101; IP<110; IP=$IP+1
)); do
iptables -t nat -A POSTROUTING -s 192.168.0.$IP -j MASQUERADE;
done
Openvpn:
Con este script iniciamos o paramos el demonio openvpn (tenemos la vpn
configurada para que haga bridge)
Lo linkamos a /etc/rcS/S39openvpn,
para que se ejecute antes que S40networking,
ya que en networking se le
asigna la ip a br0
Este es mi openvpn.conf
#!/bin/bash
OPENVPN=/usr/sbin/openvpn
case "$1" in
start)
echo Starting openvpn
$OPENVPN --config /etc/openvpn/openvpn.conf --daemon
echo Configuring bridge
ifconfig eth0 0.0.0.0
ifconfig tap0 0.0.0.0
brctl addbr br0
brctl addif br0 tap0
brctl addif br0 eth0
;;
stop)
echo Killing openvpn daemon
killall openvpn -9
break
;;
restart)
echo Killing openvpn daemon
kill -9 `ps aux |grep openvpn |grep nobody |awk '{print $2}'`
echo Starting openvpn
$OPENVPN --config /etc/openvpn/openvpn.conf --daemon
ifconfig tap0 0.0.0.0
brctl addif br0 tap0
;;
*)
echo "Usage: $0 {start|stop|restart}"
;;
esac
exit 0
Ifplugd y guessnet:
Cuando nos conectamos a diversas redes con un portátil,
vendría bien un sistema que detectara la red en la que nos
encontramos en cada momento, y configurase nuestra tarjeta de red
acorde con el lugar en que nos encontramos. Además sería
genial que lo hiciera cuando enchufamos el cable de red, o cuando nos
asociamos a un punto de acceso en caso de una red inalámbrica.
Para ello combinaremos ifplugd y guessnet.
Ifplugd detecta el cable de red y levanta el interface de red, o lo
detiene cuando se quita el cable de red.
Guessnet realiza pruebas sobre la red para escoger entre distintos
perfiles el que se adecúa al lugar en que nos encontramos.
En la instalación de ifplugd nos preguntará sobre
qué interfaces debe monitorizar. Si se trata de interfaces
pcmcia o usb, los debemos poner en la sección "Hotplug
interfaces".
La configuración de guessnet se realiza sobre el fichero
interfaces de configuración de red.
Veamos un ejemplo:
auto
lo
auto eth0
iface lo inet loopback
mapping eth0
script guessnet-ifupdown
map timeout: 3
# List of maps to scan for
# If none specified, guessnet scans for all
map work home
mapping eth1
script guessnet-ifupdown
map timeout: 3
# List of maps to scan for
# If none specified, guessnet scans for all
map home
# Profile to select when all tests fail
map default: none
iface work inet static
address 192.168.0.6
network 192.168.0.0
netmask 255.255.255.0
broadcast 192.168.0.255
gateway 192.168.0.1
test peer address 192.168.0.1 mac 00:0F:90:E9:D7:EC source 192.168.0.0
iface home inet static
test peer address 192.168.0.101 mac 00:01:03:15:B5:0F source 192.168.0.0
address 192.168.0.106
network 192.168.0.0
netmask 255.255.255.0
broadcast 192.168.0.255
gateway 192.168.0.1
# Si ninguna es encontrada,
prueba DHCP
iface none inet dhcp
De este modo le decimos que monitorice los interfaces físicos
eth0 y eth1 (mapping), y que para eth0 compruebe los perfiles "home" y
"work", mientras que para eth1 compruebe sólo el peril "home".
Esto es así ya que la tarjeta de red con cable la uso
indistintamente en casa o en el trabajo, pero la inalámbrica
solo la utilizo en casa. Especificamos un timeout de 3 segundos, de
modo que si pasado ese tiempo no encuentra nada, o bien deja sin
configurar ese interface, o bien configura el perfil por defecto
especificado.
La configuración de la red es la de siempre, salvo la
línea test que es la usada para comprobar en qué red
estamos. Esto se realiza comprobando que la mac especificada
corresponda con la red especificada. En los casos en que no nos detecte
bien dicho test, puede deberse a que el paquete se genera desde la
dirección de red. En este caso podemos especificar una ip no
usada en el campo "source".
Fuente: https://drupal.gulic.org/node/412
Detección del cable de red al
iniciar
Al iniciar el equipo se levantan los interfaces de red seleccionados
como "auto" aunque no tengan el cable conectado. Para evitar esto,
modificamos el script /etc/init.d/networking y cambiamos la
sección "start" por esta:
(Especificar los interfaces de red adecuados. En mi caso lo y eth0)
start)
process_options
log_action_begin_msg "Configuring network interfaces"
if [ "`ifplugstatus |grep eth0 | awk '{print $2}'`" == "link" ] ; then
log_action_end_msg $?
ifup lo eth0
else
ifup lo
log_action_end_msg $?
fi
;;
Anterior Siguiente
Inicio