VPSs y mas.

Mostrando entradas con la etiqueta linux. Mostrar todas las entradas
Mostrando entradas con la etiqueta linux. Mostrar todas las entradas

viernes, 13 de julio de 2018

Como colocar a Flask a escuchar en IPv4 e IPv6 (dualstack)


Respuesta:
  app.run(host='::',port=5005)

miércoles, 23 de mayo de 2018

Script in Python3 que chequea fecha de vencimiento de certificados SSL y envia correos

Intro:
  Abajo les dejo un script realizado en Python3 que chequea fecha de vencimiento de certificados SSL (https) y realiza el envio de correos.

Importante:
  Que corra en OS modernos (Ubuntu 16.04 o mayor por ejemplo).., la razón es el soporte de librerías actualizadas SSL

El Script:
$ more check_ssl_certificates.py 




#!/usr/bin/python3

#El objetivo de este script es revisar los hostnames en la lista hostnames

#revisar cuantos dias faltan para que expire el certificado SSL

#y se expira pronto (definido por la variable umbral) enviar un correo

#con dicha notificacion




import OpenSSL

import ssl, socket

import argparse

from OpenSSL import SSL

from datetime import datetime




# Please add every FQDN you wish to be checked

hostnames = ["www.sitio1.com","www.sitio2.com","www.sitio3.com"]

umbral = 10 #threshold - number of days left in order to send the notification

notify_to= "you@yourserver.com, youyou@yourserver.com" #list of email addresses to send email separated by ,




def cert_expiration_date(hostname):

# get SSL Cert info

try:

cert = ssl.get_server_certificate((hostname, 443))

x509 = OpenSSL.crypto.load_certificate(OpenSSL.crypto.FILETYPE_PEM, cert)

x509info = x509.get_notAfter()




exp_day = x509info[6:8].decode('utf-8')

exp_month = x509info[4:6].decode('utf-8')

exp_year = x509info[:4].decode('utf-8')




exp_date = str(exp_day) + ' ' + str(exp_month) + ' ' + str(exp_year)

expire_date = datetime.strptime(exp_date, "%d %m %Y")







except Exception:

MSG='el host ' + str(hostname) + ' no pudo ser chequeado '

sendnotification(hostname, 0, MSG)

return #will enter here if could not connect to the website port 443




#print('SSL Certificate for hostname', hostname, 'will be expired on (DD-MM-YYYY)', exp_date)

#print('SSL Certificate for hostname', hostname, 'will be expired on (DD-MM-YYYY)', expire_date)



expire_in = expire_date - datetime.now()

expire_in = str(expire_in).split(' ')[0]




if int(expire_in) < umbral :

MSG='el cert ssl de ' + str(hostname) + ' expira en ' + str(expire_in) + ' dias'

sendnotification(hostname, str(expire_in), MSG)




#print ('Expira en: ', expire_in)




def sendnotification(hostname, expire_in, MSG):

from smtplib import SMTP_SSL as SMTP

import logging

import logging.handlers

import sys

from email.mime.text import MIMEText




#MSG = 'el cert ssl de ' + str(hostname) + ' expira en ' + str(expire_in) + ' dias'

#text = MSG

msg = MIMEText(MSG, 'plain')

msg['Subject'] = MSG

me = 'your@email.com'




recipients = notify_to

msg['To'] = notify_to

try:

conn = SMTP('yourmailserver.com')

conn.set_debuglevel(True)

conn.login('authusr', 'yourpassword')

try:

conn.sendmail(me,recipients.split(',') , msg.as_string())

finally:

conn.close()

except Exception as exc:

logger.error("ERROR!!!")

logger.critical(exc)

sys.exit("Mail failed: {}".format(exc))






if __name__ == "__main__":

for hostname in hostnames:

cert_expiration_date(hostname)


miércoles, 16 de mayo de 2018

Solucion: "mtr: Failure to start mtr-packet: Invalid argument"

Hola,

  Al ejecutar mtr en MAC (en mi caso Sierra) obtienes:

mtr: Failure to start mtr-packet: Invalid argument

  El problema es que "mtr-packet" no está en tu PATH, debes ubicar donde se encuentra -generalmente en /usr/local/sbin-. Puedes buscarlo con:

#find / -name mtr-packet 

  Luego tienes que agregar el directorio que lo contiene al tu PATH. Para hacerlo:

Solución 1:
  En un terminal:
  PATH="$PATH:/usr/local/sbin"



Solución 2:
  Agregar una linea "/usr/local/sbin" /etc/paths, por ejemplo:

  echo "/usr/local/sbin" >> /etc/paths
  Espero te sirva,

miércoles, 9 de mayo de 2018

IPv4 e IPv6 en una sola VPN utilizando OpenVPN

Introducción
  Recientemente conversando con un amigo (@TarantinDigital) me indicaba que le gustaría tener una VPN que soportara IPv4 e IPv6, que le parece una solución muy interesante para IoT.
  Igualmente entre otras cosas ofrece la comodidad de tener direccionamiento IPv6 persistente (siempre el mismo bloque IPv6)

Importante
  No voy a indicar los pasos para instalar o configurar OpenVPN.
  Asumo tienes un servidor OpenVPN corriendo y en el servidor tienes direccionamiento IPv4 e IPv6
  Nos enfocaremos en algunas entonaciones en el servidor y en el archivo server.conf
  Este excelente video (en Ingles) ofrece paso a paso como instalar y configurar OpenVPN: https://www.youtube.com/watch?v=XcsQdtsCS1U

Pasos para agregar IPv6 a un servidor OpenVPN que actualmente ofrece solo IPv4 
  1) Tu interfaz tun (o TAP) tiene que tener direccionamiento IPv6, OpenVPN tiene algunas restricciones en cuando a la longitud de prefijo (*máscara*) que puede utilizar en IPv6, para este ejemplo estaré utilizando un /64
  ifconfig tun0 add 2001:db8::1/64


  2) Es necesario (para nuestro ejemplo, si utilizas un /64 global de IPv4 o direccionamiento IPv4 público no sería necesario) realizar NAT44 y NAT66:

  NAT44
  iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -j SNAT --to xx.xx.xx.xx

  NAT66

  ip6tables -t nat -A POSTROUTING -o eth0 -s 2001:db8::/32 -j MASQUERADE #noten que en eth0 hay un IPv6 global


  3) Hay que agregar algunas directivas de IPv6 en el archivo /etc/openvpn/server.conf. Las mismas son las siguientes:


  proto udp6 #hará que el server maneje sockets v4 y v6
  server-ipv6 2001:db8::1/64  #dirección IP colocada a la interfaz tun en el server openvpn
  tun-ipv6 #tipo de interfaz tunnel con IPv6 
  push tun-ipv6   #se le pide al cliente crear interfaces tun para el tunel (la VPN)
  ifconfig-ipv6 2001:db8::1 2001:db8::2
  push "route-ipv6 2000::/3" #inyecta esta ruta en el cliente

  4) Finalmente es necesario convertir el servidor VPN en un router IPv6. Para ellos editamos el archivo /etc/sysctl.conf y la linea net.ipv6.conf.all.forwarding=1 le quitamos el #


Del lado del cliente veras una interfaz similar a:
utun1: flags=8051 mtu 1500
inet 10.8.0.6 --> 10.8.0.5 netmask 0xffffffff 
inet6 fe80::aebc:32ff:fe96:822b%utun1 prefixlen 64 scopeid 0xd 

inet6 2001:db8::1001 prefixlen 64 



Note que recibió una dirección IPv6 del mismo /64 de la interfaz tun del servidor.

Espero sea de tu utilidad


Referencias
  https://www.youtube.com/watch?v=XcsQdtsCS1U
  http://blog.acostasite.com/2014/07/nat66-en-linux.html





lunes, 7 de mayo de 2018

Solucion a errores: OpenVPN daemon() failed or unsupported: Resource temporarily unavailable (errno=11)

Introducción: 
    Tengo estos errores en syslog luego de intentar levantar openvpn:

May 7 12:59:47 server ovpn-server[764]: library versions: OpenSSL 1.0.2g 1 Mar 2016, LZO 2.08
May 7 12:59:47 server ovpn-server[764]: daemon() failed or unsupported: Resource temporarily unavailable (errno=11)
May 7 12:59:47 server ovpn-server[764]: Exiting due to fatal error

Solución: 
   En el archivo:

 /lib/systemd/system/openvpn@.service 

Ubicar la linea:
LimitNPROC=10 
y comentarla, quedaría así:

#LimitNPROC=10 



   Reiniciar el servidor y listo.

 Espero te ayude.

lunes, 1 de enero de 2018

Solucion de errores: SSH "Permission denied (publickey)". Luego de upgrade. Facil y rapido

En caso de que estes recibiendo el siguiente error al hacer un ssh:


"Permission denied (publickey)."

pero extrañamente venía funcionando todo quizás fue por un upgrade de openssh o del sistema operativo.
Lo primero que te recomiendo es realizar un ssh y con algo de debug (por ejemplo con el -v)

Quedarías así:


$ ssh -v -l alejandro miserver.com

Verás algo así:

$ ssh -v -l alejandro miserver.com
OpenSSH_7.6p1, LibreSSL 2.6.2
debug1: Reading configuration data /Users/alejandroacosta/.ssh/config
debug1: /Users/alejandroacosta/.ssh/config line 1: Applying options for *
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: /etc/ssh/ssh_config line 49: Applying options for *
debug1: Connecting to miserver port 22.
debug1: Connection established.
debug1: key_load_public: No such file or directory
debug1: identity file /Users/alejandroacosta/.ssh/id_rsa type -1
debug1: key_load_public: No such file or directory
debug1: identity file /Users/alejandroacosta/.ssh/id_rsa-cert type -1
debug1: identity file /Users/alejandroacosta/.ssh/id_dsa type 1
debug1: key_load_public: No such file or directory
debug1: identity file /Users/alejandroacosta/.ssh/id_dsa-cert type -1
debug1: key_load_public: No such file or directory
debug1: identity file /Users/alejandroacosta/.ssh/id_ecdsa type -1
debug1: key_load_public: No such file or directory
debug1: identity file /Users/alejandroacosta/.ssh/id_ecdsa-cert type -1
debug1: key_load_public: No such file or directory
debug1: identity file /Users/alejandroacosta/.ssh/id_ed25519 type -1
debug1: key_load_public: No such file or directory
debug1: identity file /Users/alejandroacosta/.ssh/id_ed25519-cert type -1
debug1: Local version string SSH-2.0-OpenSSH_7.6
debug1: Remote protocol version 2.0, remote software version OpenSSH_6.6.1p1 Ubuntu-2ubuntu2.8
debug1: match: OpenSSH_6.6.1p1 Ubuntu-2ubuntu2.8 pat OpenSSH_6.6.1* compat 0x04000000
debug1: Authenticating to miserver.com:22 as 'alejandro'
debug1: SSH2_MSG_KEXINIT sent
debug1: SSH2_MSG_KEXINIT received
debug1: kex: algorithm: curve25519-sha256@libssh.org
debug1: kex: host key algorithm: ecdsa-sha2-nistp256
debug1: kex: server->client cipher: chacha20-poly1305@openssh.com MAC: compression: none
debug1: kex: client->server cipher: chacha20-poly1305@openssh.com MAC: compression: none
debug1: expecting SSH2_MSG_KEX_ECDH_REPLY
debug1: Server host key: ecdsa-sha2-nistp256 SHA256:0CjzVIchz9571bMTChmp6cMZ+9QVogt9mHSaK8JA5VQ
debug1: Host '[miserver.com]:22' is known and matches the ECDSA host key.
debug1: Found key in /Users/alejandroacosta/.ssh/known_hosts:20
debug1: rekey after 134217728 blocks
debug1: SSH2_MSG_NEWKEYS sent
debug1: expecting SSH2_MSG_NEWKEYS
debug1: SSH2_MSG_NEWKEYS received
debug1: rekey after 134217728 blocks
debug1: Skipping ssh-dss key /Users/alejandroacosta/.ssh/id_dsa - not in PubkeyAcceptedKeyTypes
debug1: SSH2_MSG_SERVICE_ACCEPT received
debug1: Authentications that can continue: publickey
debug1: Next authentication method: publickey
debug1: Trying private key: /Users/alejandroacosta/.ssh/id_rsa
debug1: Trying private key: /Users/alejandroacosta/.ssh/id_ecdsa
debug1: Trying private key: /Users/alejandroacosta/.ssh/id_ed25519
debug1: No more authentication methods to try.
alejandro@miserver.com: Permission denied (publickey).


La linea mas importante es:

"debug1: Skipping ssh-dss key /Users/alejandroacosta/.ssh/id_dsa - not in PubkeyAcceptedKeyTypes"


Existen varias maneras de solucionarlo, muchas estan mencionadas en:

https://stackoverflow.com/questions/39715135/problems-deploying-code-with-capistrano-since-upgrading-to-macos-10-12-sierra

y

https://rolfje.wordpress.com/2016/11/12/macos-sierra-ssh-permission-denied/


Sin embargo si estas urgido, corriendo puedes solucionarlo inmediatamente haciendo esto:

Solución

echo "Host *" >> ~/.ssh/config
echo "PubkeyAcceptedKeyTypes=+ssh-dss" >> ~/.ssh/config


Mas información:

https://ro-che.info/articles/2015-12-21-permission-denied-publickey-ssh-update












martes, 22 de agosto de 2017

Prueba de ping MUY sencilla con IPv6. Comparativa IPv4 - IPv6 haciendo ping a la loopback

Hola,
  Recientemente estuve haciendo unas pruebas de ping a las direcciones de loopback de Windows, Linux y MAC.
  Si haces ping6 a tu loopback (digamos 1000 paquetes) con Windows o Linux, IPv6 es más rápido.
  Ahora intenta lo mismo en MAC (El Capitan).., IPv6 es 20-25% más lento.
  Hice lo mismo en varios dispositivos y le pedí a varios amigos que hicieran la misma prueba. Todos obtuvieron el mismo resultado


MAC:
--- 127.0.0.1 ping statistics ---
100 packets transmitted, 100 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 0.037/0.098/1.062/0.112 ms
--- ::1 ping6 statistics ---
100 packets transmitted, 100 packets received, 0.0% packet loss
round-trip min/avg/max/std-dev = 0.058/0.120/0.194/0.027 ms



Linux:
--- 127.0.0.1 ping statistics ---
100 packets transmitted, 100 received, 0% packet loss, time 98999ms
rtt min/avg/max/mdev = 0.015/0.021/0.049/0.007 ms

--- ::1 ping statistics ---
100 packets transmitted, 100 received, 0% packet loss, time 99013ms
rtt min/avg/max/mdev = 0.019/0.031/0.040/0.004 ms


Windows 10:

Ping statistics for ::1:
    Packets: Sent = 100, Received = 100, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
    Minimum = 0ms, Maximum = 0ms, Average = 0ms


Ping statistics for 127.0.0.1:
    Packets: Sent = 100, Received = 100, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
    Minimum = 0ms, Maximum = 4ms, Average = 0ms


Esto es todo,

jueves, 10 de agosto de 2017

Manera muy sencilla de incrementar el volumen de un archivo mp3. Utilizando Lame en Linux o MAC

Objetivo: Incrementar el volumen de un archivo de audio Que necesito: Lame Instalación: apt-get install lame o brew install lame Ejemplo: lame --scale 2 archivo-orignal.mp3 archivo-con-volumen-incrementado.mp3 Listo!!

martes, 6 de septiembre de 2016

Ejemplo: Linux y Network Prefix Translation (NPT)

Introducción:
En este post voy a intentar explicar brevemente que es NPT, por qué es útil y finalmente dejaré un pequeño ejemplo que espero sea de utilidad.


¿Qué es NPT?
NPT por sus siglas en Inglés significa Network Prefix Translation, algunos lo podrás comparar con NAT en IPv6.., y bueno,., es medianamente cierto. Siendo la palabra “medianamente” perfectamente utilizada en la oración previa.


En NPT básicamente lo que se busca es traducir la dirección origen en un datagrama IPv6, pero particularmente la sección del prefijo de red (NET ID) dejando la parte del IID (Host ID) sin modificación.


¿Por qué hacer NPT?
Existen varias razones. Voy a mencionar solo dos.


  1. Estoy en una red con dos proveedores de Internet (no tengo IPs propias ni ASN), pero necesito alguna redundancia para salir a Internet. El equipo de borde en vez de realizar un NAT con sobre de carga de puertos a una sola dirección IP (con todos los problemas y limitantes que esto ocasiona) solo modifica los primeros bits del la dirección (digamos, los primeros 64 bits solo como manera de ejemplo).
  2. Si necesitar hacer “renumbering” de tu red pero tienes IPs del tipo ULA (u otra propia quizas) tu vida será mucho más sencillo al solo tener que modificar el traductor NPT y no hacer re-enumeración de toda la red.


Diagrama ejemplo


Configurando un equipo Linux para hacer NPT:


Los pasos para configurar NPTv6 (o NPT) en Linux son muy sencillos. Debes hacerlo tanto de paquetes salientes como de paquetes entrantes.


#From internal network to external Network
ip6tables -t nat -A POSTROUTING -d 2000::/3 -s 2001:db8:AAAA:AAAA::/64 -j NETMAP
--to 2001:db8:CCCC:CCCC::/64;


#From external network to internal network
ip6tables -t nat -A PREROUTING -s 2000::/3 -d 2001:db8:CCCC:CCCC::/64 -j NETMAP
--to 2001:db8:AAAA:AAAA::/64;


Mas info:


Y por supuesto el RFC mismo:

jueves, 28 de julio de 2016

lunes, 7 de diciembre de 2015

Configurando una red con DHCPv6 Server (Cisco), DHCPv6 relay (Linux - ISC) y como CPE un Router Cisco

Introducción
  Este post es muy similar al encontrado en:  http://blog.acostasite.com/2015/11/configurando-una-red-con-dhcpv6-server.html
  La principal diferencia es que en esta oportunidad tendremos el DHCPv6 Server en Cisco y no en Linux
  En el presente post vamos a explicar e implementar como trabajar con DHCPv6 Server, Relay y Cliente.
  Favor leer la sección: "Explicación de la topología" la cual indica cada función


Topología




Explicación de la topología

En la topología de arriba va a ocurrir lo siguiente:

- El Cisco DHCPv6 Server está entregando prefijos v6
- El DHCPv6 Relay (Debian) va a escuchar por la interfaz ethernet1 (e1) por peticiones DHCPv6 de Prefix Delegation (PD). Las mismas serán reenviadas por la interfaz ethernet0 (e0) al servidor DHCPv6 Server
- El Cisco Router DHCPv6 Client va a hacer solicitudes DHCPv6 PD en su interfaz f1/0, del prefijo recibido va a configurar su interfaz f0/0 y enviar Router Advertisements por dicha interfaz permitiendo a los clientes auto-configurarse. En esta oportunidad también configuraremos otras interfaces pero solo a manera de ejemplo.
- Los clientes conectados a la interfaz f0/0 en el Cisco DHCPv6 Cliente van a autoconfigurarse vía SLAAC utilizando el prefijo recibido por RA

  Nótese que para el Router Cisco DHCPv6 Client le es transparente el DHCPv6 Relay Server


Que necesitamos:

- Del lado del Relay el software Relay de DHCPv6 de ISC (que es diferente al server)
- El Router tiene que ser un enrutador que haga DHCPv6 cliente PD

Instalando
En el Relay Server:
  #sudo apt-get install isc-dhcp-relay

  Durante la instalación del relay se van a realizar varias preguntas. Puedes decidir contestarlas o no. Para este post no es necesario responderlas.


Configuraciones:

Del lado del Cisco DHCPv6 Server:

ipv6 unicast-routing
interface FastEthernet0/0
 ipv6 address 2001:DB8::1/64
 ipv6 dhcp server DHCPv6-SERVER
end

ipv6 dhcp pool DHCPv6-SERVER
 prefix-delegation pool MY-PD-1

ipv6 local pool MY-PD-1 2001:DB8:ABCD::/48 56


Explicando la configuración:
Primero se le indica al equipo que puede enrutar paquetes IPv6. Luego se configura IPs estáticas entre el relay y la interfaz f0/0 (revisar la ethernet0 del relay).
Luego, se le indica que la interfaz sirve como DHCPv6 Server y se le asigna el pool DHCPv6-Server, aquí podemos escribir cualquier nombre.

Dentro del pool DHCPv6-Server se le dice que haga prefix-delegation (se le puede indicar más información pero para nuestro propósito hasta aquí es suficiente) y que utilice un pool local llamado MY-PD-1. Este pool va a utilizar prefijos dentro de 2001:DB8:ABCD::/48 y entregará bloques /56 a sus clientes. Aquí podemos indicar el tamaño de prefijo que queremos.


Del lado del relay:
Red:
  #ifconfig eth0 inet6 add 2001:db8::2/64
  #ifconfig eth1 inet6 add 2001:db8:1::2/64

  No hay configuraciones. El relay es levantado con este comando:
  #dhcrelay -I -l eth1 -u eth0

Explicación del comando para ejecutar el dhcp-relay:
Hay muchas maneras y opciones para dhcrelay, en el comando anterior se esta diciendo: que se utilice el DHCPv6 interface-id option, que escuche peticiones por eth1 y las mismas sean enviadas por eth0


Del lado del Cisco Router DHCPv6 Cliente:

ipv6 unicast-routing
interface FastEthernet1/0
 description Hacia DHCPv6 Relay Server
 ipv6 address 2001:DB8:1::1/64
 ipv6 dhcp client pd IP-FROM-DHCPv6-SERVER
end

interface FastEthernet0/0
 description Hacia LAN
 ipv6 address IP-FROM-DHCPv6-SERVER ::1/64
end

Explicación de la configuración del router Cisco:
Primero se habilita el routing IPv6 en el equipo.
Segundo, en la interfaz F1/0 se le esta diciendo al router que es DHCP cliente para prefijos y le asignamos el nombre: IP-FROM-DHCPv6-SERVER
Tercero, en la interfaz f0/0 le indica al router que utilice el prefijo recibido via DHCPv6 client y asigne el mismo a la interfaz como ::1/64. Es decir, el router toma el /56 del DHCPv6 y el mismo router va a crear una /64 para f0/0 (nota que puedes configurar otras interfaces utilizando el mismo prefijo recibido por el DHCP). 


Para revisar:
Del lado del DHCPv6 Server deberiamos ver algo como:

a) Con el DHCPv6 server corriendo en foreground puedes ver:

DHCP-Server#debug ipv6 dhcp detail

Se veran mensajes como:

*Dec  1 09:55:14.619: IPv6 DHCP: Received RELAY-FORWARD from 2001:DB8::2 on FastEthernet0/0
*Dec  1 09:55:14.623: IPv6 DHCP: detailed packet contents
*Dec  1 09:55:14.623:   src 2001:DB8::2 (FastEthernet0/0)
*Dec  1 09:55:14.627:   dst FF05::1:3
*Dec  1 09:55:14.627:   type RELAY-FORWARD(12), hop 0
*Dec  1 09:55:14.627:   link 2001:DB8:1::2
*Dec  1 09:55:14.631:   peer FE80::C801:24FF:FE20:1C
*Dec  1 09:55:14.631:   option INTERFACE-ID(18), len 4
*Dec  1 09:55:14.635:     0x01000000
*Dec  1 09:55:14.639:   option RELAY-MSG(9), len 50
*Dec  1 09:55:14.639:     type SOLICIT(1), xid 2389101
*Dec  1 09:55:14.643:     option ELAPSED-TIME(8), len 2
*Dec  1 09:55:14.643:       elapsed-time 0
*Dec  1 09:55:14.647:     option CLIENTID(1), len 10
*Dec  1 09:55:14.647:       00030001CA0124200000
*Dec  1 09:55:14.647:     option ORO(6), len 6
*Dec  1 09:55:14.651:       IA-PD,DNS-SERVERS,DOMAIN-LIST
*Dec  1 09:55:14.655:     option IA-PD(25), len 12
*Dec  1 09:55:14.659:
DHCP-Server# IAID 0x00040001, T1 0, T2 0
*Dec  1 09:55:14.663: IPv6 DHCP: Using interface pool DHCPv6-SERVER
*Dec  1 09:55:14.667: IPv6 DHCP: Source Address from SAS 2001:DB8::1


b) DHCP-Server#sh ipv6 dhcp binding
Client: FE80::C801:24FF:FE20:1C
  DUID: 00030001CA0124200000
  Username : unassigned
  Interface : relayed
  IA PD: IA ID 0x00040001, T1 302400, T2 483840
    Prefix: 2001:DB8:ABCD::/56
            preferred lifetime 604800, valid lifetime 2592000
            expires at Dec 31 2015 09:55 AM (2589331 seconds)


Del lado del Cliente DHCPv6 Cisco:
Para revisar si la interfaz f0/0 se autoconfiguró cone l prefijo recibido por el DHCPv6:
a) R1#show ipv6 interface f0/0

Vamos a ver algo como:

R1#sh ipv6 int f0/0
FastEthernet0/0 is up, line protocol is up
  IPv6 is enabled, link-local address is FE80::C801:24FF:FE20:0
  No Virtual link-local address(es):
  Description: Hacia LAN
  General-prefix in use for addressing
  Global unicast address(es):
    2001:DB8:ABCD::1, subnet is 2001:DB8:ABCD::/64 [CAL/PRE]


Nótese que 2001:DB8:ABCD::/64 corresponde al prefijo configurado en el DHCPv6 Server que es entregado vía PD


Algo muy importante es el comando:

b) R1#show ipv6 dhcp

El cual muestra el DUID (DHCPv6 Unique ID) del equipo (RFC3315):
This device's DHCPv6 unique identifier(DUID): 00030001CA0124200000


Podemos apreciar que este mismo número es que le llega al DHCPv6 Server


Del lado del cliente:
Depende de tu OS puedes hacer:
c:\ipconfig 

o

#ifconfig


¿Si hay más de una interfaz del lado del cliente?
En el ejemplo anterior el Cisco DHCPv6 Cliente está recibiendo un prefijo /56, esto quiere decir que tenemos hasta 8 redes /64 para crear. Hasta el momento solo hemos utilizado una en la f0/0.

De manera de ejemplo vamos a crear otras redes en las interfaces loopback0 y looback1 del router del lado del cliente.

interface Loopback0
 ipv6 address IP-FROM-DHCPv6-SERVER ::1:0:0:0:1/64
end

interface Loopback1
 ipv6 address IP-FROM-DHCPv6-SERVER ::2:0:0:0:1/64
end


La manera de construir los pseudo IPs (pe. ::1:0:0:0:1/64) colocados en la interfaz es la siguiente:
Imaginamos el prefijo recibido por DHCPv6, sabemos que es un /56. Lo que estamos haciendo es completando el resto del IP. 

Es decir: recibimos por DHCPv6 2001:db8:ABCD::/56. Al decirle a la loopback 1 ::1:0:0:0:1/64 construimos:  2001:db8:ABCD::1:0:0:0:1/64 (Prefijo recibido + la configuracion de la interfaz)


Vamos a revisar que IPs tienen entonces L0 y L1:

R1#sh ipv6 int l0
Loopback0 is up, line protocol is up
  Global unicast address(es):
    2001:DB8:ABCD:1::1, subnet is 2001:DB8:ABCD:1::/64 [CAL/PRE]


R1#sh ipv6 int l1
Loopback1 is up, line protocol is up
  Global unicast address(es):
    2001:DB8:ABCD:2::1, subnet is 2001:DB8:ABCD:2::/64 [CAL/PRE]


Proximos pasos
- Falta la parte de routing, hay muchas maneras de hacerlo, indiscutiblemente la intención es hacerlo con un protocolo de enrutamiento dinámico


Para más información:
https://tools.ietf.org/html/rfc6355
http://www.cisco.com/c/en/us/support/docs/ip/ip-version-6-ipv6/113141-DHCPv6-00.html
http://blog.acostasite.com/2014/04/instalar-isc-dhcp-43-en-linux-ubuntu.html
http://blog.acostasite.com/2014/04/solucion-tres-errores-cuando-queremos.html
http://blog.acostasite.com/2015/11/configurando-una-red-con-dhcpv6-server.html

martes, 11 de agosto de 2015

Como monitorear independientemente contadores IPv4 e IPv6 en Cisco (tráfico)

Introduccion
  Hoy en día es muy común ver redes en la modalidad Dual Stack (IPv4 + IPv6) donde ambos protocolos conviven en misma VLAN y/o Bus de red

  En el presente post voy a mostrar como monitorear independientemente el tráfico IPv4 e IPv6 que atraviesa una interfaz de un equipo Cisco.

Que se necesita
  a) Primero es muy importante el soporte de IP::MIB en el IOS del router, muy probablemente ya lo tengas pero vas a necesitar un IOS relativamente novedoso porque existen OID que no estan en versiones viejas.

  Para la realizacion del siguiente documento utilizamos:  c7200-adventerprisek9_sna-mz.152-4.M8.bin

  b) El cliente debe tener el software con el que vayas a monitorear..., eso es todo :-)  El siguiente post brevemente da ejemplos en MRTG, por ello instalamos:

apt-get install snmp
apt-get install snmp-mibs-downloader
apt-get install mrtg

  c) Para un mejor seguimiento de este documento es mejor tener compilado el MIB: IP-MIB de Cisco, muy seguramente quedó instalado luego de ejecutar apt-get install snmp-mibs-downloader.


Topologia utilizada para este post




Pasos

a)  Primero hay que averiguar el índice de la interfaz. Hay dos maneras:
  1) Desde el CLI del equipo Cisco con el comando:

#show snmp mib ifmib ifindex

Obtendremos algo así:

FastEthernet1/1: Ifindex = 3
Loopback0: Ifindex = 5
Null0: Ifindex = 4
FastEthernet1/0: Ifindex = 2
FastEthernet0/0: Ifindex = 1

 Logicamente trabajaremos con las interfaces que nos interecen, recordemos el número de índice que lo necesitaremos más adelante.


  2) Vía SNMP:
  Sabiendo al menos el IPv4 que queremos monitorear (mas adelante podremos monitorear IPv6 también)

Desde el equipo linux hacemos:
#snmpwalk -mALL -v2c -chola3 host1 .1.3.6.1.2.1.4.20.1.2.+DIRIPv4  
Por ejemplo:
#snmpwalk -mALL -v2c -chola3 host1 .1.3.6.1.2.1.4.20.1.2.192.168.1.1

Lo anterior nos devuele el indice de la interfaz que queremos monitorear. Listo!.

Si queremos estar seguro podemos hacer:

#snmpwalk -mALL -v2c -chola3 host1 1.3.6.1.2.1.2.2.1.2.+IntfIndex  
y nos devuelve la interfaz.

Donde:
host1 = host (podemos colocar un IP)
hola3 = la comunidad SNMP


b)  Crear los OID a monitorear
  i) Para obtener el OID de paquetes "INPUT IPv6" haremos lo siguiente:
- Utilizaremos este OID base y la agregaremos el indice de la interfaz al final:
  1.3.6.1.2.1.4.31.3.1.5.2 (IP-MIB::ipIfStatsInOctets.ipv6) + ifIndex = 1.3.6.1.2.1.4.31.3.1.5.2.1

 ii) Para obtener el OID de paquetes "Output IPv6" haremos lo siguiente:
  1.3.6.1.2.1.4.31.3.1.32.2 (IP-MIB::ipIfStatsOutOctets.ipv6) + ifIndex = 1.3.6.1.2.1.4.31.3.1.32.2.1

En MRTG el mrtg.cfg quedaría algo así:

Target[ipv6_f00]:1.3.6.1.2.1.4.31.3.1.5.2.1&1.3.6.1.2.1.4.31.3.1.32.2.1:readonly@192.168.1.1


Ahora bien, también queremos monitorear el tráfico IPv4:

i) Para obtener el OID de paquetes "INPUT IPv4" haremos lo siguiente:
- Utilizaremos este OID base y la agregaremos el indice de la interfaz al final:
  .1.3.6.1.2.1.4.31.3.1.5.1 (IP-MIB::ipIfStatsInOctets.ipv4) + ifIndex (F0/0) = .1.3.6.1.2.1.4.31.3.1.5.1.1

ii) Para obtener el OID de paquetes "Output IPv4" haremos lo siguiente:
  1.3.6.1.2.1.4.31.3.1.32.1 (IP-MIB::ipIfStatsOutOctets.ipv4) + ifIndex (F0/0) = 1.3.6.1.2.1.4.31.3.1.32.1.1


Target[ipv4_f00]:.1.3.6.1.2.1.4.31.3.1.5.1.1&1.3.6.1.2.1.4.31.3.1.32.1.1:readonly@192.168.1.1


  c) Se generó tráfico desde los hosts IPv4 e IPv6 hacia la Loopback del router principal con la aplicación bwping, se cambió el ancho de banda transmitido con el objeto de ver los cambios en la interfaz

    Para generar el tráfico utilicé el siguiente script:

while [ 1] 
do 
  bwping6 -b 256 -s 100 -v 9999 2001:db8:ffff::ffff
done

y

while [ 1] 
do 
  bwping -b 128 -s 100 -v 9999 192.168.255.255
done




Resultados

IPv4:




IPv6:



Total en la interfaz (default en MRTG):



















martes, 28 de julio de 2015

Contenido www y embriones sobre IPv6. Region Lacnic

Buenas tardes,
  En esta oportunidad les quiero compartir un pequeño análisis sobre estadísticas de penetración de IPv6 en el mundo de contenido. En otras oportunidades (*1) hemos conversado
sobre estadísticas de penetración de IPv6 desde la perspectiva del usuario final. En lo personal me alegra mucho contar con este tipo de mediciones porque es algo que nos faltaba.
¿Qué quiere decir estadísticas de penetración de IPv6 en el mundo de contenido?Básicamente es saber cuánto contenido/servidores existe sobre IPv6, NO cuántos usuarios NI cuánto tráfico sobre IPv6 está siendo cursado. 
ProblemasEl mayor problema que se encuentra es determinar con certeza cuál contenido se encuentra en un país. Recordemos que Internet es una red globalizada, saber que donde se encuentra el "host" de un dominio es algo muy complejo. Ciertamente existen muchas técnicas pero de igual manera no son 100% confiables. Ejemplo: indicar que el dominio www.example.com.ve está en Venezuela puede ser totalmente cierto, parcialmente cierto o totalmente negativo. Para poder llevar a cabo este estudio decidimos tomar únicamente dominios con ccTLD de nuestra región.
¿Cómo se realizó este estudio?Vamos a indicarlos por pasos para visualizarlo mejor:
1) Se toma un archivo con los TOP 1 millón de dominios del mundo (*2)
2) Se toma el ccTLD de los mismos (.ar, .uy, .br, .ve, etc)
3) Del punto 2 se averigua si tienen registros AAAA en su www
4) Del punto 2 se hace un estudio para averiguar si existen "embriones
IPv6", es decir, dominios que no tienen IPv6 en su www pero si tienen host con los nombres w6, www6, ipv6, v6 + dominio
Procesamiento:
- Del archivo Majestic Million con un millón de dominios, aproximadamente 8000 tienen ccTLD de la región de Latinoamérica y Caribe.
- Posteriormente se utiliza el dominio y se buscan registros AAAA para:
www + dominio
ipv6|v6|www.ipv6|www6|ip6|w6 + dominio
Resultados:De puede apreciar lo siguiente:
1.- Para Websites con IPv6 actuales:El top 5 de los países con Websites con AAAA tenemos:


Gráfico #1. Resumen países con sitios con registros AAAA

1.- Brasil cuenta con 180 sitios que representa el 57.3% del total
2.- Colombia con 47 sitios que representa el 15% del total
3.- México con 33 sitios que representa el 10.5% del total
4.- Argentina con 10 sitios que representa el 3.2% del total
5.- Chile con 7 sitios que representa el 2.2 del total

(estadísticas para el 22 de Julio, 7709 dominios estudiados y 314 Websites con AAAA)


Gráfico #2. Resumen sitios actuales con AAAA
2.- Para Websites embriones:El top 5 de los países con Websites embriones tenemos:

Gráfico #3. Resumen países con embriones IPv6


1.- Brasil 25 (con 45.5 %)
2.- Colombia 18 (32.7%)
3.- Mexico (9.1%)
4.- Perú 2 (3.6 %)
5.- Chile 2 (3.6 %)

(estadísticas para el 22 de Julio, 7709 dominios estudiados y 55 Websites embrios encontrados)

Gráfico #4. Resumen sitios embriones IPv6


Es muy interesante apreciar que Brasil, Colombia, México y Chile se encuentran en ambos cuadros mientras que Perú y Argentina se intercambian la 4ta posición.
Los resultados pueden ser obtenidos en el sitio: http://stats.labs.lacnic.net y buscando por “Websites actuales con IPv6” y “Embriones Websites (AAAA)” en la columna de la izquierda.


Conclusión:  Primero, que nada, es una alegría observar que existen más sitios con IPv6 que embriones por nacer ( claro, de alguna manera se entiende que lo anterior tiene sentido y en realidad no quise caer en comparaciones de otras índoles).
  Segundo, se entiende que puede existir un aspecto también de idiosincrasia donde algunos países y administradores sean más cuidadosos -o menos- y no usen un URL de embriones y coloquen su sitio en v6 directamente.
  Tercero, de alguna manera podemos esperar que en un futuro consigamos que los sitios embrionarios se conviertan en sitios formales (www) con IPv6.
¿Posibles próximos pasos?- En el presente estudio se evaluó únicamente dominios listados en el TOP 1 millón de Majestic
filtrados por ccTLD de la nuestra región Latam y Caribe, se puede evaluar la manera de extender este estudio a otros listados
- Identificar si la dirección IPv6 que apunta el AAAA es de Lacnic
- Estudiar cuánto tiempo pasa un sitio embrión a un sitio formal con IPv6.

Margen de error:- Se entiende que puede existir un margen de error, un host embrión no significa que sea
necesariamente movido al www del dominio.
Tecnisismos:- Todos los scripts fueron realizados en python3 sobre Linux Ubuntu 13.04

Por:
Alejandro Acosta
Lacnic
@ITandNetworking
*1. Retrospectiva: Acceso IPv6 en la region Latinoamerica y Caribe (LAC) en: http://portalipv6.lacnic.net/retrospectiva-acceso-ipv6-en-la-region-latinoamerica-y-caribe-lac/
*2. https://majestic.com/reports/majestic-million

lunes, 27 de abril de 2015

Construyendo una topología de red 464XLAT (mecanismo de transicion)

Introducción:
  El siguiente post indica el procedimiento que puedes seguir para tener una topología de red con 464XLAT


Topología:



Que se necesita:
Del lado del cliente:
- Un cliente CLAT, en nuestro ejemplo utilizamos: https://github.com/toreanderson/clatd
- Tayga como NAT64 (http://www.litech.org/tayga/)  En este post puedes conseguir el procedimiento de instalación (más abajo dejo todos los archivos de configuración)


y del lado del servidor:
- Tayga como NAT64 (http://www.litech.org/tayga/)  En este post puedes conseguir el procedimiento de instalación (más abajo dejo todos los archivos de configuración)
- Para nuestro ejemplo un DNS Server pero si tienes otro puedes obviarlo. Es recomendable utilizar DNS64 para facilitar el reconocimiento de red cuando se ejecute el clatd.
- radvd (para hacer los anuncios RA y que el cliente se auto-configure), una vez puedes obviarlo y hacer tus configuraciones manuales


Configuraciones:
Del lado del cliente:
En lineas generales no es necesario configuar nada. El tayga utiliza un archivo de ejemplo construido en el momento y el clatd verifica todo lo necesario. Por favor asegura que el archivo /etc/resolv.conf contenga la línea;

nameserver 2001:13c7:100:f101::1


IMPORTANTE: Del lado del cliente lo unico que hay que hacer es ejecutar el cliente clatd. El procedimiento es el siguiente:
#unzip clatd-master
#cd clatd-master
#./clatd  

Con este último comando el clatd será capaz de reconocer que NO hay direcciones IPv4 en el equipo donde se ejecuta y reconocer como es su conectividad hacia el exterior.

Del lado del servidor (6 pasos):
1) El radvd se configura en el archivo /etc/radvd.conf y debe quedar así:

interface eth0 { 
        AdvSendAdvert on;
        MinRtrAdvInterval 3; 
        MaxRtrAdvInterval 10;
        prefix 2001:13c7:0100:f101::/64 { 
                AdvOnLink on; 
                AdvAutonomous on; 
                AdvRouterAddr on; 
        };
};


2) Tayga: Del lado del servidor si es muy importante realizar una configuración de tayga. Para nuestro ejemplo:

En /usr/local/etc/tayga.conf:
tun-device nat64
ipv4-addr 192.168.64.1
prefix 64:ff9b::/96
dynamic-pool 192.168.64.0/24
data-dir /var/log/tayga
ipv6-addr 2001:13c7:100:f101::1


3) Las interfaces del lado del servidor deben quedar así:
/usr/local/sbin/tayga --mktun
/sbin/ip link set nat64 up
/sbin/ip addr add 10.0.3.15 dev nat64
/sbin/ip addr add 64:ff9b::1 dev nat64
/sbin/ip route add 192.168.64.0/24 dev nat64
/sbin/ip route add 64:ff9b::/96 dev nat64

4) Levantar tayga:
/usr/local/sbin/tayga -d &


5) Hacer NAT de la red IPv4:
/sbin/iptables -t nat -A POSTROUTING -s 192.168.64.0/24 -o eth10 -j MASQUERADE


6) El DNS Server debe quedar con la siguiente directiva dentro de /etc/bind/named.conf.options:

        dns64 64:ff9b::/96 {
          clients {
           any; };
        };  // End of DNS64 Section


Un poco mas de como quedas las interfaces. La salida de ifconfig del lado del servidor:

eth10      Link encap:Ethernet  HWaddr 00:0c:29:06:e9:cc
          inet addr:10.0.3.15  Bcast:10.0.3.255  Mask:255.255.255.0
          inet6 addr: fe80::20c:29ff:fe06:e9cc/64 Scope:Link
          inet6 addr: 2001:13c7:7001:500::21/64 Scope:Global   ---> HACIA WAN
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:42282238 errors:0 dropped:307 overruns:0 frame:0
          TX packets:11377224 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:5706072894 (5.7 GB)  TX bytes:2226397897 (2.2 GB)

eth9      Link encap:Ethernet  HWaddr 00:0c:29:06:e9:d6
          inet addr:10.64.0.1  Bcast:10.64.0.255  Mask:255.255.255.0
          inet6 addr: fe80::20c:29ff:fe06:e9d6/64 Scope:Link
          inet6 addr: 2001:13c7:100:f101::1/64 Scope:Global  --- HACIA LAN
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:652093 errors:0 dropped:72 overruns:0 frame:0
          TX packets:2662969 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:84197892 (84.1 MB)  TX bytes:1461857730 (1.4 GB)

nat64     Link encap:UNSPEC  HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
          inet addr:10.0.3.15 P-t-P:10.0.3.15  Mask:255.255.255.255
          inet6 addr: 64:ff9b::1/128 Scope:Global
          UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1500  Metric:1
          RX packets:1135938 errors:0 dropped:0 overruns:0 frame:0
          TX packets:1074859 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:500
          RX bytes:939693414 (939.6 MB)  TX bytes:931853538 (931.8 MB)




Explicando todo lo anterior:

1) Supongamos que el cliente quiere acceder una direcciones IPv6.., no pasa nada extraño  :-). El routing es 100% IPv6, no hay NAT, todo normal.

2) En el supuesto que el cliente quiera acceder a una dirección IPv4:

a) El cliente clatd otorgará un socket IPv4 a la aplicación
b) El paquete que construya el cliente será 100% IPv6. Será su dirección IPv6 origen y el destino será 64:ff9b::/96 + 32 bits de la dirección IPv4 destino. Recordemos que no hay IPv4 en el core de la red.
c) El PLAT (Tayga del lado del servidor)  al recibir un paquete con destino 64:ff9b::/96 lo enruta por la interfaz TUN NAT64 (interfaz lógica) donde tayga remueve los primeros 96 bits del destino dejando unicamente los 32 bits menos significativos (la dirección IPv4). Al origen (IPv6) se le hace una mapeo stateless con una direccion IPv4 (del pool en el archivo de configuración (192.168.64.0/24).
d) Cuando el paquete con el origen 192.168.64.0/24 del servidor desee salir del equipo será nateado con iptables al IPv4 que tenga eth10 (/sbin/iptables -t nat -A POSTROUTING -s 192.168.64.0/24 -o eth10 -j MASQUERADE)




Anexo:
a) ping a un destino IPv4 desde el cliente:




b) Clatd ejecutándose:



c) Captura en Wireshark de un ping desde el cliente (IPv6 only) a un destino IPv4:









martes, 17 de febrero de 2015

Solucion a: quagga vtysh " Exiting: failed to connect to any daemons."

Situacion:
  Al ejecutar el comando vtysh en el shell de linux para conectarse a los demonios de quagga (bgpd, ospfd, etc) da el siguiente error "Exiting: failed to connect to any daemons"

alejandro@miserver:~$ vtysh -d bgpd
Exiting: failed to connect to any daemons.

alejandro@miserver:~$ vtysh 
Exiting: failed to connect to any daemons.


Solucion:
  La solución es agregar al usuario con el que ejecutas vtysh al grupo quagga, para ello edita el archivo /etc/group.
  La linea en /etc/group debe quedar algo asi:

quagga:x:1003:alejandro

puedes especificar varios haciendo:

quagga:x:1003:alejandro, john


  Lo anterior es necesario porque la conexión a los demonios de quagga los realiza con UNIX domain socket y no todos los usuarios tienen acceso a dichos sockets.

Otra solución:
  Otra solución puede ser durante la compilación especificar el grupo para la creación de los sockets pasando lo siguiente durante el configure:

./configure --enable-vty-group=group

 


  Suerte, espero haya sido útil,






martes, 9 de diciembre de 2014

Python Script: Probably useless but functional IPv6 Network scanner

Below is the code of what is probably useless but a functional IPv6 host scanner written in Python using threading.

To perform a regular (brute force) network scans in an IPv6 Network is almost impossible and it can take over 5.000 years to finish.

This project was purely academic and I just wanted to learn about threading in Python.

This software is not recommended for general usage.....

This  script  will call the OS to actually perform the ping

This software receives two parameters:
a) Prefix to scan in the format 2001:db8::/64 (subnet, not host)
b) Number of simultaneous processes it can run (MAXPINGS)

One more time it was purely academic stuff but hopefully it can make your day

Finally, AFAIK nmap does not yet support IPv6 network scan.

The code was written in python3:

--- cut here ---

#!/usr/bin/python3

import threading
import sys
import ipaddress
import subprocess
import time

CURRENTPINGS=0 # Number of simultaneous ping at a time

def DOPING6(IPv6ADDRESS):
  global MAXPINGS, CURRENTPINGS
  CURRENTPINGS+=1
  CMD="ping6 -c 3 "+str(IPv6ADDRESS) + " 2> /dev/null > /dev/null"
  return_code = subprocess.call(CMD, shell=True)
  if return_code == 0:  #If ping was succesful
    print (IPv6ADDRESS," is alive")

  CURRENTPINGS-=1

def main():
  global MAXPINGS, CURRENTPINGS
  if len(sys.argv) != 3: #Validate how many parameters we are receiving
    print("  Not enough or too many parameter")
    print("  Usage: ./scanipv6.py IPv6Prefix/lenght MAXPINGS")
    print("  Example: ./scanipv6.py 2001:db8::/64 20")
    print("  Prefix lenght can be between 64-128")
    print("  MAXPINGS corresponds to how many pings will be running at the same time")
    exit()

  SUBNET,MASK=sys.argv[1].split("/")
  MAXPINGS=int(sys.argv[2])

  for addr in ipaddress.IPv6Network(sys.argv[1]):  #Let's loop for each address in the Block
    ping_thread=threading.Thread(target=DOPING6,args=(addr,))

    while CURRENTPINGS >= MAXPINGS: # With this while we make it possible to run max simultaneous pings
      time.sleep(1)  # Let's wait one second before proceeding
      #print ("Interrumping...., CURRENTPINGS > MAXPINGS") #Uncomment this line just for debugging

    ping_thread.start()

main()

Linux - Touchpad no funciona al primer arranque pero si al reiniciar

Situacion:
  El touchpad de la laptop no funciona la primera vez que arranca la laptop/computadora pero si al reiniciar la misma

Solucion:
  1. Edita el archivo /etc/default/grub (NO es grub.cfg)

  2. Ubica la siguiente linea:
  GRUB_CMDLINE_LINUX=" "

  3. Agrega lo siguiente entre "":
  i8042.nomux=1 locale=fr_FR i8042.reset

  4. La linea debe quedar asi:
  GRUB_CMDLINE_LINUX="i8042.nomux=1 locale=fr_FR i8042.reset"

  5. Graba el archivo y sal.

  6. En el terminar ejecuta:
  #sudo update-grub

  7. Listo, apaga y prende tu computadora.


Creditos a:
http://ubuntuforums.org/showthread.php?t=2217553

miércoles, 23 de julio de 2014

NAT66 en Linux

Hola,
  El dia de hoy voy a hacer un post el cual no deseo que sea tomado de mala manera. Indiscutiblemente no estoy a favor del NAT pero aun asi pienso que es un mecanismo que no desaparecera en IPv6 (se reducira drasticamente) pero siempre existira. En lo posible recomiendo evitar hacer NAT cuando exista la posibilidad.
  Pueden haber muchas razones para implementar NAT66, a) seguramente los clientes acostumbrados a hacer NAT querran hacerlo en IPv6 (suene feo o bonito), b) personas que quieran ocultar su topologia a Internet, c) empresas que consideren NAT como mecanismo para cambiar los IPs de sus redes, d) la tendencia mundial de no permitir tethering en los celulares, e) querer ofrecer IPv6 detras de un dispositivo y mi proveedor no tenga DHCPv6-PD o solo me entregue una red /64, f) alguien que piense que NAT sirve de mecanismo de seguridad, etc, etc, etc, etc.

  En base a lo anterior la intencion de este post no es estar a favor o en contra de NAT, solo deseo indicar que esta disponible en el mundo de IPv6 y ofrecer un sencillo ejemplo. Para bien o para mal puede ser utilizado en algunos escenarios.

Requerimientos:
  El equipo a realizar el NAT66 debe tener:
  - Kernel > 3.9 
  - iptables > 1.4.18

  Ubuntu 14.04 cubre ambos requerimientos "out-of-the-box" y por ello es muy sencillo hacerlo.

  Existen patch para hacer NAT66 en versiones previas pero no lo indicare en este momento.

Escenario:
  Esta es la topologia en la que estoy trabajando. Deseo que "Device 2"  traduzca la direccion IPv6 origen de "Device 1" con la direccion IPv6 de la interfaz saliente (eth2). Con el comando NAT implementado estoy realmente haciendo NAT de toda la subred 2001:db8:12::/48




Configuraciones:

En DEVICE 1:
#ifconfig eth0 inet6 add 2001:db8:12::2/48
#route -A inet6 add default gw 2001:db8:12::1

En DEVICE 2:

Configurar las direcciones IPv6 en el equipo
#ifconfig eth1 inet6 add 2001:db8:12::1/48
#ifconfig eth2 inet6 add 2001:db8:23::1/48

Habilitar enrutamient o IPv6 entre las interfaces:
#sysctl -w net.ipv6.conf.all.forwarding=1

Configurar el NAT66:
#ip6tables -t nat -A POSTROUTING -o eth2 -s 2001:db8:12::/48 -j MASQUERADE

(es de notar que existen muchas otras maneras de hacer NAT con ip6tables)

En DEVICE 3:
#ifconfig eth1 inet6 add 2001:db8:23::2/48
#route -A inet6 add default gw 2001:db8:23::1


  Del lado de Device 3 pueden verificar de muchas maneras que todo funcione, incluso sin ruta por default en Device 3, DEVICE 1 puede llegarle. De igual manera tcpdump, wireshark o una sencilla revision de los logs puedes verificar que efecticamente el NAT esta llevandose a cabo.

  Espero sea de tu utilidad