2 de marzo de 2014

Resolver los problemas de reconexión wifi en Xubuntu 13.10

Tengo problemas con la wifi de Xubuntu 13.10, se desconecta y no vuelve a reconectarse.

Debe ser un problema de la tarjeta wifi del equipo, ya que en otro ordenador FitPC con Xubuntu 13.10 no me ocurre esto y se reconecta sin problemas.

El equipo problemático es un Foxconn Netbox NT-A3500

Este es el hardware del equipo.

#lspci
00:00.0 Host bridge: Advanced Micro Devices, Inc. [AMD] Family 14h Processor Root Complex
00:01.0 VGA compatible controller: Advanced Micro Devices, Inc. [AMD/ATI] Wrestler [Radeon HD 6310]
00:01.1 Audio device: Advanced Micro Devices, Inc. [AMD/ATI] Wrestler HDMI Audio
00:11.0 SATA controller: Advanced Micro Devices, Inc. [AMD/ATI] SB7x0/SB8x0/SB9x0 SATA Controller [AHCI mode]
00:12.0 USB controller: Advanced Micro Devices, Inc. [AMD/ATI] SB7x0/SB8x0/SB9x0 USB OHCI0 Controller
00:12.2 USB controller: Advanced Micro Devices, Inc. [AMD/ATI] SB7x0/SB8x0/SB9x0 USB EHCI Controller
00:13.0 USB controller: Advanced Micro Devices, Inc. [AMD/ATI] SB7x0/SB8x0/SB9x0 USB OHCI0 Controller
00:13.2 USB controller: Advanced Micro Devices, Inc. [AMD/ATI] SB7x0/SB8x0/SB9x0 USB EHCI Controller
00:14.0 SMBus: Advanced Micro Devices, Inc. [AMD/ATI] SBx00 SMBus Controller (rev 42)
00:14.1 IDE interface: Advanced Micro Devices, Inc. [AMD/ATI] SB7x0/SB8x0/SB9x0 IDE Controller (rev 40)
00:14.2 Audio device: Advanced Micro Devices, Inc. [AMD/ATI] SBx00 Azalia (Intel HDA) (rev 40)
00:14.3 ISA bridge: Advanced Micro Devices, Inc. [AMD/ATI] SB7x0/SB8x0/SB9x0 LPC host controller (rev 40)
00:14.4 PCI bridge: Advanced Micro Devices, Inc. [AMD/ATI] SBx00 PCI to PCI Bridge (rev 40)
00:14.5 USB controller: Advanced Micro Devices, Inc. [AMD/ATI] SB7x0/SB8x0/SB9x0 USB OHCI2 Controller
00:15.0 PCI bridge: Advanced Micro Devices, Inc. [AMD/ATI] SB700/SB800/SB900 PCI to PCI bridge (PCIE port 0)
00:15.2 PCI bridge: Advanced Micro Devices, Inc. [AMD/ATI] SB900 PCI to PCI bridge (PCIE port 2)
00:15.3 PCI bridge: Advanced Micro Devices, Inc. [AMD/ATI] SB900 PCI to PCI bridge (PCIE port 3)
00:16.0 USB controller: Advanced Micro Devices, Inc. [AMD/ATI] SB7x0/SB8x0/SB9x0 USB OHCI0 Controller
00:16.2 USB controller: Advanced Micro Devices, Inc. [AMD/ATI] SB7x0/SB8x0/SB9x0 USB EHCI Controller
00:18.0 Host bridge: Advanced Micro Devices, Inc. [AMD] Family 12h/14h Processor Function 0 (rev 43)
00:18.1 Host bridge: Advanced Micro Devices, Inc. [AMD] Family 12h/14h Processor Function 1
00:18.2 Host bridge: Advanced Micro Devices, Inc. [AMD] Family 12h/14h Processor Function 2
00:18.3 Host bridge: Advanced Micro Devices, Inc. [AMD] Family 12h/14h Processor Function 3
00:18.4 Host bridge: Advanced Micro Devices, Inc. [AMD] Family 12h/14h Processor Function 4
00:18.5 Host bridge: Advanced Micro Devices, Inc. [AMD] Family 12h/14h Processor Function 6
00:18.6 Host bridge: Advanced Micro Devices, Inc. [AMD] Family 12h/14h Processor Function 5
00:18.7 Host bridge: Advanced Micro Devices, Inc. [AMD] Family 12h/14h Processor Function 7
02:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller (rev 06)
03:00.0 USB controller: ASMedia Technology Inc. ASM1042 SuperSpeed USB Host Controller
04:00.0 Network controller: Intel Corporation Centrino Wireless-N 1000 [Condor Peak]

Para solucionar esto voy a hacer un script que verifique la conectividad y en caso de estar caída reinicie la red.

En Ubuntu el manejo de la red es poco transparente ya que no usa las configuraciones estandar de Debian.

Opto por configurar la red al estilo Debian:

Vamos a ello:

1) Configurar wpa_supplicant:
Ya esta instalado en el Xubuntu 13.10, hay que crear el archivo /etc/wpa_supplican/wpa_supplicant.conf

Para cifrar la clave de acceso al punto de acceso usar:

      #  wpa_passphrase [passphrase]

ejemplo:

      # wpa_passphrase TuSSID TuPASSWORD
      network={
              ssid="TuSSID"
              #psk="TuPASSWORD"
              psk=6119df2140edbedeacd5341d6065adbbae85fbb472407f5ffbfdc083aee39fe1
      }

y pegar el resultado en el fichero /etc/wpa_supplicant/wpa_supplicant.conf.

He añadido algunas opciones que me han fucionado y el resultado es este,
y borrar la línea donde aparece el password en texto plano!!!:

      # cat /etc/wpa_supplicant/wpa_supplicant.conf
      network={
              ssid="TuSSID"
              scan_ssid=1
              proto=WPA
              key_mgmt=WPA-PSK
              psk=6119df2140edbedeacd5341d6065adbbae85fbb472407f5ffbfdc083aee39fe1
      }

2) Configurar /etc/network/interfaces
Es una buena idea hacer una backup del archivo /etc/network/interfaces por si fuera necesario recuperarlo.

      # cp /etc/network/interfaces /etc/network/interfaces.bck

Configuramos la red y los interfaces que vamos a usar, en mi caso con ip estáticas:

      # cat /etc/network/interfaces
      auto lo
      iface lo inet loopback

      auto wlan0
      iface wlan0 inet static
              address 192.168.10.10  (poner aqui la direccion de red del interface)
              netmask 255.255.255.0
              gateway 192.168.10.1   (poner aqui la direccion de red del router)
              dns-nameservers 8.8.8.8 8.8.4.4 (poner aqui las direcciones de las DNS, estos son de google)
              wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf

3) Reiniciar el sistema
      # reboot
... y comprobar que la red se ha activado y que hay conectividad interna y externa.

Revisar la red con:
      # ifconfig
      # iwconfig

4) Manejo de la red
Una vez configurada por el método Debian podemos activar y desactivar las tarjetas de red con los comandos:

      # ifup    
      # ifdown

Ahora ya tenemos herramientar para hacer un sencillo script que rvise si la red esta activa y que la reinicie en caso necesario.

5) Script de verificación y reincio de la red

Lo mas fácil será hacerlo en BASH, y ejecutarlo periodicamente con el demonio Cron.
El script lo llamaremos /root/netPatrol.sh

#!/bin/bash
interface="wlan0"
target="192.168.1.1"
if [ -z "`ping -c 3 $target | grep '64 bytes from'`" ]; then
        now=`date +"%Y%m%d%H%M%S"`
        echo "$now: Red down Restarting network" >> /var/log/netPatrol.log
        ifdown $interface
        ifup   $interface
fi
exit 0
En la variable $interface pondremos el dispositivo de red a controlar y reinciair.
En $target pondremos una equipo de la red, lo ideal es el router, o si queremos testear también el acceso a internet podemos poner www.google.com, que suele estar encendido y contesta a los pings ;))
Cuando el script detecta la red caída y la reinicia nos hace un log en /var/log/netPatrol.log 

Finalmente pondremos el script en /etc/crontab para que se inicie todas las horas a 15 minutos:
Añadir la línea en /etc/crontab:

      # m  h   dom  mon  dow  user    command
        15  *   *      *       *      root     /root/netPatrol.sh

Y reiniciamos el demonio cron:
      # service cron restart


Desde que he hecho esto en Xubunto 13.10 la red esta mas estable y me aseguro que como máximo estará caído 1 hora en caso de desconexión.