Blog en espanol destinado a diferentes temas tecnicos principalmente en IT y Networking. Se desea cubrir Linux, DNS, DNSSEC, RPKI, BGP, Cisco, Programacion (Bash, Python, etc), Protocolos de Enrutamiento, Seguridad en Redes, VoIP.
Mostrando entradas con la etiqueta linux. Mostrar todas las entradas
Mostrando entradas con la etiqueta linux. Mostrar todas las entradas
lunes, 27 de agosto de 2018
viernes, 13 de julio de 2018
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)
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"
PATH="$PATH:/usr/local/sbin"
Solución 2:
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
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:
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
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
NAT66
3) Hay que agregar algunas directivas de IPv6 en el archivo /etc/openvpn/server.conf. Las mismas son las siguientes:
iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -j SNAT --to xx.xx.xx.xx
ip6tables -t nat -A POSTROUTING -o eth0 -s 2001:db8::/32 -j MASQUERADE #noten que en eth0 hay un IPv6 global
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.
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,
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:
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.
- 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).
- 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
ipv6 dhcp server DHCPv6-SERVER
end
ipv6 dhcp pool DHCPv6-SERVER
prefix-delegation pool MY-PD-1
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:
Para revisar:
Del lado del DHCPv6 Server deberiamos ver algo como:
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
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?
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
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/64ipv6 dhcp server DHCPv6-SERVER
end
prefix-delegation pool MY-PD-1
ipv6 local pool MY-PD-1 2001:DB8:ABCD::/48 56
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
description Hacia LAN
ipv6 address IP-FROM-DHCPv6-SERVER ::1/64
end
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]
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):
Get Tweaked apps, iOS Emulators and Hack games with iPA Library Browse and download iOS IPA Apps, tweaks and ++ apps for iPhone, iPad and iPod Touch.
Guia do Host: Dicas para Criação e Hospedagem de Sites alphimedia hospedagem de site e revenda de hospdagem mais barata do brasil O Guia do Host é o local ideal para quem quer aprender mais como criar e hospedar um site. Nele você vai encontrar dica melhor hospedagem site brasil No Guia do Host você vai encontrar a melhor hospedagem para seu projeto, acompanhe também nossas promoções e cupons de desconto em parceria com as melhores hospedagens de sites da atualidade.
인스타그램 바로가기
जीबी व्हाट्सएप APK WhatsApp का मॉड वर्जन है जिसमें कई सारे Advance Features मिलते है तो जीबी व्हाट्सएप डाउनलोड करें और पाए Hide Last Seen जैसे बेहतरीन फीचर्स।
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
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):
Get Tweaked apps, iOS Emulators and Hack games with iPA Library Browse and download iOS IPA Apps, tweaks and ++ apps for iPhone, iPad and iPod Touch.
Guia do Host: Dicas para Criação e Hospedagem de Sites alphimedia hospedagem de site e revenda de hospdagem mais barata do brasil O Guia do Host é o local ideal para quem quer aprender mais como criar e hospedar um site. Nele você vai encontrar dica melhor hospedagem site brasil No Guia do Host você vai encontrar a melhor hospedagem para seu projeto, acompanhe também nossas promoções e cupons de desconto em parceria com as melhores hospedagens de sites da atualidade.
인스타그램 바로가기
जीबी व्हाट्सएप APK WhatsApp का मॉड वर्जन है जिसमें कई सारे Advance Features मिलते है तो जीबी व्हाट्सएप डाउनलोड करें और पाए Hide Last Seen जैसे बेहतरीन फीचर्स।
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.
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
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
- 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 %)
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.
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
*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
Anexo:
a) ping a un destino IPv4 desde el cliente:
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()
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()
Suscribirse a:
Entradas (Atom)
Una mejora práctica en el Transporte DNS sobre UDP en IPv6
Por Hugo Salgado y Alejandro Acosta Introducción y planteamiento del problema En el presente documento queremos discutir sobre un draft (bor...
-
Debido al crecimiento moderado que ha tenido el presente blog se me ocurrió añadir/integrar las estadisticas de google analytics a mi blog. ...
-
Introduccion: En algunas ocasiones es necesario "bajar" o deshabilitar iptables en nuestro Linux, el procedimiento depende de...
-
Saludos, Lo primero que debemos de hacer para quitar el stacking entre los switches es desconectar los cables Stack que los unen.... Es buen...