OpenWRT en aaNetworks – BGP, Anycast DNS & OpenDNS.

OpenWRT puede ser que no necesite introducción pero aquí va, OpenWRT es un pequeño Linux que se instala en muchos dispositivos embeded. Después de muchos años siendo usuario de m0n0wall luego pfSense y por ultimo Vyatta, decidí usar este pequeño amiguito por el hardware que tengo disponible en este momento, tengo 2 Soekris, uno es 4801 y otro es 4501, ambos productos son bastante viejos.

La instalación en x86 (plataforma de Soekris) fue muy sencilla, estos son los pasos:

  1. descargar http://downloads.openwrt.org/attitude_adjustment/12.09/x86/generic/openwrt-x86-generic-combined-ext4.img.gz
  2. Usando 7-Zip extraer el archivo .img
  3. Usando dd en Linux o WinImage en Windows enviamos la imagen a nuestro CF.
  4. Nos aseguramos de tener la velocidad correcta en el Soekris, esta debe ser igual que la implementada por defecto en OpenWRT (38400).

En este punto deberíamos tener un OpenWRT listo para trabajar con él.

El Soekris 4801 (ELZAR) y el 4501 (WERNSTROM) forman parte de una Mesh VPN usando Tinc. Gracias a esto tengo varias localidades interconectadas vía VPN con poco mantenimiento requerido para funcionar.

En este post me centrare en como he hecho para tener filtro de DNS y Anycast DNS. Anycast es algo que no se ve en una red casera pero mi red desde hace tiempo dejo de ser normal. OpenWRT cuenta con un package manager (opkg) que nos permitirá instalar software para conseguir las funcionalidades que deseamos en nuestro OpemWRT. Lo primero, claro, es tener nuestro OpenWRT funcionando y con el NAT deshabilitado (ese es el caso en mi red), instalaremos  BGP (Quagga) y reconfiguraremos DNSmasq.

Instalando los paquetes.

Quagga es la suite que usaremos para tener BGP (OSPF lo uso para redistribuir rutas a mi Vyatta), esto nos ahorrara trabajo (tengo otros nodos con Quagga) ya que solo tendré que copiar parte de la configuración, cambiar ASN, router ID y otras mínimas líneas de la config.

opkg update

Estos son los paquetes instalados actualmente en ELZAR.

  • quagga
  • quagga-bgpd
  • quagga-libospf
  • quagga-libzebra
  • quagga-ospf6d
  • quagga-ospfd
  • quagga-vtysh
  • quagga-watchquagga
  • quagga-zebra

Ahora toca configurar e iniciar los servicios para tener BGP funcionando. La instalación es por defecto, esto quiere decir que tendremos /etc/quagga donde pondremos los archivos de configuración que se requieren.

Para que BGP (módulo de Quagga) funcione necesitamos tener configurado zebra.conf y bgpd.conf.

Configuración básica de estos archivos.

zebra.conf :

  • hostname -zebra
  • password MiSuperPassword
  • service advanced-vty
  • !
  • line vty
  • access-class vty
  • !

bgpd.conf :

  • hostname -bgpd
  • password MiSuperPassword
  • service advanced-vty
  • !
  • access-list vty permit 127.0.0.0/8
  • access-list vty deny any
  • !
  • line vty
  • access-class vty
  • exec-timeout 0 0
  • !

Con esto podemos iniciar el servicio de Quagga usando /etc/init.d/quagga start, ya tendremos el servicio de BGP funcionando pero aun no es suficiente para que OpenWRT cumpla con la tarea asignada, ahora toca configurar BGP conectándonos a la consola que está disponible en el puerto 2605 (telnet localhost bgpd) y nos pedirá el password que usamos en la configuración base (MiSuperPassword en este ejemplo). Una vez dentro configuraremos nuestro número autónomo, las subredes que anunciaremos desde este router y los vecinos a quienes estaremos anunciando estas subredes.

Esta es la configuración en ELZAR (un poco editada).

  • Current configuration:
  • !
  • hostname elzar-bgpd
  • password MiSuperPassword
  • service advanced-vty
  • !
  • router bgp 64845
  • bgp router-id 10.45.254.9
  • network 10.45.254.9/32
  • network 10.45.255.1/32

Toda la configuración después de estas líneas es relacionada a los vecinos (neighbors) con los cuales el servicio de BGP intercambia rutas.

Internamente son 3 router con BGP que usar el ASN 64845 y están agrupados así:

  • neighbor aaNetworksHQ peer-group
  • neighbor aaNetworksHQ remote-as 64845
  • neighbor aaNetworksHQ override-capability
  • neighbor aaNetworksHQ next-hop-self
  • neighbor aaNetworksHQ soft-reconfiguration inbound

De esta manera solo necesito hacer lo siguiente para establecer relación entre 2 routers con el mismo ASN:

  • neighbor 10.45.252.10 peer-group aaNetworksHQ
  • neighbor 10.45.252.10 update-source 10.45.252.9
  • neighbor 10.45.252.14 peer-group aaNetworksHQ
  • neighbor 10.45.252.14 update-source 10.45.252.13

El router 10.45.252.10 es otro OpenWRT (wernstrom) el cual también funciona como Anycast DNS en mi red local, el router con 10.45.252.14 es un Vyatta que funciona como router para Internet y es quien agrupa todas las rutas que se puede distribuir hacia el OSPF internamente.

Al final terminamos con algo así:

  • router bgp 64845
  • bgp router-id 10.45.254.9
  • network 10.45.254.9/32
  • network 10.45.255.1/32
  • neighbor aaNetworks peer-group
  • neighbor aaNetworks remote-as 64635
  • neighbor aaNetworks update-source aanet
  • neighbor aaNetworks override-capability
  • neighbor aaNetworks soft-reconfiguration inbound
  • neighbor 10.45.252.10 peer-group aaNetworksHQ
  • neighbor 10.45.252.10 update-source 10.45.252.9
  • neighbor 10.45.252.14 peer-group aaNetworksHQ
  • neighbor 10.45.252.14 update-source 10.45.252.13

Ya tenemos a ELZAR conectado (Interfaces dedicadas hacia los demás routers) a sus vecinos e intercambiando rutas, Excelente!.

La idea es que ELZAR y WERNSTROM publiquen la dirección 10.45.255.1 y a su vez estén corriendo DNSmasq que por defecto viene instalado en OpenWRT. Antes de seguir, aquí dejo un pequeño diagrama de red para que se pueda entender la idea.

Otra configuración que debemos realizar es en zebra.conf, allí crearemos las interfaces donde tendremos las direcciones IP con /32, estas son la loopback (usada en router id & la IP para Anycast).

La configuración en ELZAR es la siguiente:

  • Current configuration:
  • !
  • hostname elzar-zebra
  • password MiSuperPassword
  • service advanced-vty
  • !
  • interface aanet
  • ipv6 nd suppress-ra
  • !
  • interface eth0
  • description «testing»
  • ipv6 address 2001:470:b24c:f021::1/126
  • ipv6 nd suppress-ra
  • !
  • interface eth1
  • ipv6 address 2001:470:b24c:ff22::2/126
  • ipv6 nd suppress-ra
  • !
  • interface eth2
  • ipv6 address 2001:470:b24c:dead::9/64
  • ipv6 nd suppress-ra
  • !
  • interface lo
  • ip address 10.45.254.9/32
  • ipv6 address 2001:470:b24c:254::9/128
  • ip address 10.45.255.1/32
  • !
  • access-list vty permit 127.0.0.0/8
  • access-list vty deny any
  • !
  • ip forwarding
  • ipv6 forwarding
  • !
  • !
  • line vty
  • access-class vty
  • !
  • End

Aquí se pueden ver las 2 direcciones IP.

En este momento las direcciones de loopback y la usada para Anycast son visibles en los demás routers de mi red.

Configurando DNSmasq al estilo OpenWRT.

OpenWRT tiene su método de configuración, aunque la mayoría de los paquetes instalables se pueden configurar vía su propio método, algunas veces es mejor hacerlo así.

DNSmasq es configurado desde /etc/config específicamente en el archivo dhcpd.

Luego procedemos a editar el dnsmasq.conf ubicado en /etc, aquí podemos realizar configuración de la forma oficial y soportada por el proyecto de dnsmasq. La configuración es muy extensa pero lo más importante y relacionado con esta entrada es:

  • listen-address=10.45.255.1
  • #Send most DNS lookups to opendns.com
  • server=208.67.222.222
  • server=208.67.220.220
  • #aaNetworks request to internal servers
  • server=/aanetworks.org/172.22.35.66
  • #server=/aanetworks.org/10.45.254.7
  • server=/172.in-addr.arpa/172.22.35.66
  • server=/10.in-addr.arpa/172.22.35.66
  • server=/aanetworks.local/172.22.35.50
  • server=/aanetworks.local/172.22.35.100

No me gusta que OpenDNS me responda bogus-nxdomain así que agregamos lo siguiente:

  • #blocked opendns.com bogus-nx
  • bogus-nxdomain=67.215.65.130
  • bogus-nxdomain=67.215.65.132
  • bogus-nxdomain=208.67.222.222
  • bogus-nxdomain=208.67.220.220

Reiniciamos DNSmasq para probar que nuestro IP para Anycast DNS sea utilizado como IP preferido para escuchar en los puertos de DNS.

Desde un cliente de la red, con una dirección de 172.22.35.0/26 esto es lo que tenemos cuando hacemos un dnslookup.

También un traceroute desde el mismo cliente que se realizó el nslookup.

Removiendo un vCenter no existente en vCloud Director.

Hace un tiempo que tenía instalado y funcionando vCloud Director en el homelab pero el vCenter en ese momento sufrió un accidente y fue reemplazado por un vCSA en un ESXi remoto (en OVH). El problema fue que toda la configuración realizada en ese vCenter se perdió, en ese momento no le di importancia.

Hace unos días decidid seguir jugando un poco más con vCloud pero quería recuperar la instalación de vCloud & vShield. vShield fue fácil, eliminar el plugin usando instrucciones encontradas aquí (https://communities.vmware.com/docs/DOC-10847).

vCloud fue un poco problemático, cada vez que intentaba eliminar el vCenter este me mostraba un error donde me decía que aun tenia dependencias de vCenter configuradas en algún sitio. Estas dependencias eran 2 host ESXi que fueron preparados desde vCloud.

Al final encontré un KB (2057335) donde explicaba como remover datasotre problemáticos en vCloud, decidi probar algo y además de las instrucciones de eliminar información de la base de datos, agregue el contenido de la tabla managed_server en la cual se encontraban los 2 ESXi.

 

Luego de realizar estos pasos podemos hacer un detach a nuestro viejo vCenter.

Aventuras en Flash! – PernixData FVP en el homelab.

Lo primero es que Flash en los Hypervisores es una realidad, eso queda demostrado por las nuevas tendencias (Pernixdata & VMware VSAN), así que si aún no etas explorando esas alternativas recomiendo que dediques un tiempo e investigues.

 
Esta entrada es para explicar un poco como está configurado mi homelab y que he estado haciendo con él. El homelab es muy básico, cuenta con almacenamiento por iSCSI (Iomega ix4-200) y 2 ESXi. Desde hace tiempo se ha estado hablando de PernixData y decidí investigar, al momento de entrar al sitio web veo que tienen un formulario para solicitar el beta y sin pensarlo me inscribí, lo próximo que supe era que tenía una llamada de un representante para recolectar información y determinar si era elegible para el beta, muy amablemente me informaron que tenía que contar con dispositivos Flash (SSD o PCIe), desde hace un tiempo ya estaba pensando con agregar SSD a los 2 ESXi del homelab así que tome esto como excusa para visitar eBay y adquirir 2 SSD de 128G Kingston.

 
Otro dato era que la versión que en ese momento se estaba ofreciendo en el beta era la 1.0 que no tiene soporte para vSphere 5.5 y que actualmente tengo en mi homelab, pero luego me entere que la versión 1.5 de FVP viene con soporte para vSphere 5.5… ¡Excelente!

 
Un correo con la información de descarga para la beta fue lo próximo que recibí, unos momentos leyendo la guía de instalación y estaba listo para la aventura. Es increíblemente sencillo (¿está de moda lo simple?), ya tenía instalado los SSD en ambos host de ESXi y solo faltaba instalar el VIB el cual no requiere que reinicies el host, esto quiere decir que si ya se tenía el dispositivo SSD en el equipo no tendríamos ningún corte de servicio cuando vayamos a instalar esta solución.

 
Siguiendo paso a paso la guía de instalación esto es lo que deberíamos hacer:
1.    Instalar el VIB en nuestros equipos que cuentan con los SSD.
2.    Instalar el software de manejo, si usamos VCSA deberemos seleccionar un equipo con Windows Server para realizar esta instalación, yo he decidido crear una nueva VM para esto e instalar SQL Express.
3.    Registrar el plugin en vSphere Web Client, necesitamos entrar al portal de administración de VCSA y reiniciar el servicio de web client.

 
Fácil, aquí están las imágenes tomadas de la instalación realizadas en mi homelab.

esxcli software vib install -d <ZIP file name with full path> —no-sig-check

/sbin/auto-backup.sh

nota: En la imagen se puede apreciar que cuando ejecute el comando para instalar el VIB no use el PATH completo y por eso recibí un error como respuesta.

 
Luego que tenemos los VIB + Management Software instalados podemos proceder a crear nuestro cluster de Flash.
Falta poco para tener los beneficios de FVP, lo próximo es decidir si agregamos todo un datastore o si agregamos solo las VM que queremos que sean aceleradas por FVP. Yo he decidido probar con Máquinas Virtuales directamente, debemos tener en cuenta que si contamos con más de 1 clúster de SSD en FVP podemos tener varias asignaciones, por ejemplo, si tenemos una VM (WEB01) y esta VM reside en un datastore (DS01), agregamos el datastore a un clúster de Flash llamado Silver y as u vez queremos que la VM sea acelerada por el Clúster de Flash llamado Gold es posible por el hecho de que FVP da prioridad a la asignación hecha directamente a la VM.

 
Para administrar nuestro cluster de Flash debemos dirigirnos a una nueva sección que aparecerá en nuestra área derecha, así podemos crear el clúster y realizar todo lo relacionado a FVP. Inicialmente en esta parte encontré un inconveniente que ya reporte al programa de beta en PernixData. Creo que es algo relacionado a mi ambiente de lab ya que se de otras personas que están usando FVP 1.5 sin problemas via vSphere Web Client.

Realizando el proceso para la creación de un clúster obtenía un error, en un principio pensé en problemas de conexión al servicio de inventario de vSphere pero al final parece que no es el caso ya que usando el módulo de FVP para PowerShell pude crear el cluster.

Para crear el cluster desde PowerShell hacemos lo siguiente:
1.    Registrarnos con el servicio de manejo de FVP


2.    Creamos el cluster – Luego de –Name usaremos el nombre que deseamos para el Cluster, en mi caso fue aaFlash


Después podemos volver al WebClient y no tendremos problemas.

 
En lo personal creo que una de las secciones más visitadas por una persona que tenga FVP en su ambiente de vSphere es el tab de Summary, en este tab podemos ver información relacionada al cluster y a las datastore o VM que estén siendo aceleradas.

 

Se puede notar que FVP ha ayudado de manera significativa a mi pobre ix4-200 que en su momento fue un dispositivo relevante para el homelab, últimamente ha sido desplazado por otros NAS debido al poco rendimiento que este ofrece.

 

 
En fin, este ha sido el inicio de mis aventuras en Flash. El trial tiene 60 días de licencia así que después que termine el trial decidiré si uso VSAN o si monto un NAS (XPEnology?) y agrego los SSD allí.

Para terminar, una lista de enlaces casi obligatorios para leer sobre FVP.
Frank Denneman
http://frankdenneman.nl/pernixdata/
Chris Wahl
http://wahlnetwork.com/2014/02/10/pernixdata-1-5/

http://wahlnetwork.com/tag/pernixdata/

VMware Horizon View – sin proxy.

Desde hace tiempo uso la versión HTML de VMware View porque siempre tenía problemas de conexión debido al proxy. Actualmente tengo un View instalado en casa y otro hospedado en OVH, ambas instalaciones se ven una a la otra y no importa en cual bróker me conecte puedo acceder a las mismas VMs sin problemas. El portal Web es útil, pero siento que el desempeño de las VM no es el mismo que cuando conecto usando el cliente nativo.

El caso es el siguiente, establezco una VPN para poder tener acceso a aaNetworks (network playground), de este modo puedo acceder a todos los equipos que componen mi red (172.22.35.0/24, 172.22.114.0/24 & 10.45.0.0/16 – RouterLooingGlass). Ya tengo el cliente de View instalado y lo normal sería decirle cual es el FQDN del bróker (view.aanetworks.local o desktops.aanetworks.org) y esperar para introducir el usuario y password, lamentablemente detrás de un proxy a veces no funciona y nos encontramos con esta ventana de error:

La soluciona este error es crear una entrada en el Registro de Windows (RegEdit) para que el cliente de View se salte el proxy. En View 5.x en adelante solo se crea una entrada en el Registro – HKEY_LOCAL_MACHINE\SOFTWARE\Policies\VMware, Inc.\VMware VDM\Client\.

Creamos el nuevo key llamado TunnelProxyBypass que es un MultiStringValue. Normalmente para que un cambio en el registro tome efecto debemos reiniciar la máquina, una vez la máquina de vuelta en Windows no deberíamos tener problemas para acceder a nuestro View sin proxy, pero a diferencia de mi caso el bróker no está en la red local, lo veo solo cuando estoy conectado a mi VPN. Para solventar esto he recurrido a un viejo truco en Windows (o en cualquier OS moderno), he manipulado la tabla de hosts y creado entradas para los dominios de mis bróker y de esta manera el trafico se realice vía VPN.

De ahora en adelante en lugar de usar el FQDN completo solo uso la parte host del bróker, es decir que para conectarme a view.aanetworks.local solo usaría view en el cuadro de Connection Server.

El proceso está documentado en el KB1009238 – Configuring VMware View Client to bypass Internet Explorer proxy settings (1009238).