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

domingo, 2 de junio de 2024

Solución: "The following security updates require Ubuntu Pro with 'esm-apps' enabled"

Situación

 Al momento de querer hacer algunas operaciones en Ubuntu utilizando apt/do-release-upgrade se recibe el mensaje:


"The following security updates require Ubuntu Pro with 'esm-apps' enabled"

Solución
  La solución que me funcionó fue ejecutar esto:

cd /etc/apt/sources.list.d 
for i in *.list; do mv ${i} ${i}.disabled; done 
apt clean
apt autoclean 
sudo do-release-upgrade 


Referencia
Upgrade from Ubuntu 18.04

miércoles, 1 de mayo de 2024

Solución a: Error: eth0 interface name is not allowed for R2 node when network mode is not set to none

Problema:

  Containerlab devuelve un error similar:

Error: eth0 interface name is not allowed for R2 node when network mode is not set to none


Solución:
  En el archivo .yml en la sección del nodo que indica el error de la topología especificar: 

network-mode: none

Ejemplo:

topology:
  kinds: 
    linux:
      image: quay.io/frrouting/frr:8.4.1
  nodes:
    R1:
      kind: linux
      image: quay.io/frrouting/frr:8.4.1
      network-mode: none


  Volver a ejecutar la topología con clab dep -t archivo.yml y listo!

Suerte.







miércoles, 28 de febrero de 2024

viernes, 23 de febrero de 2024

La verdadera solución para correr ContainerLAB en MAC m1, m2, m3 apple silicon

 



Paso 1: Instalar Multipass de Canonical

$brew install multipass


Paso 2: Instalar la VM llamada docker

$multipass launch docker --name mydocker


Paso 3: Conectarse a la nueva VM

$multipass shell mydocker


Paso 4: Dentro de la VM instalar ContainerLab

$sudo su

#bash -c "$(curl -sL https://get.containerlab.dev)"


Vamos a probar con esta sencilla topología back2back de dos equipos Linux con FRR


-- 2-frr-back2back.yml --

name: ipv6-ws

topology:

  kinds:

    linux:

      image: ghcr.io/hellt/network-multitool

  nodes:

  ROUTERS ###

    R1:

      kind: linux

      image: quay.io/frrouting/frr:8.4.1

      exec:

        - "sysctl -w net.ipv6.conf.all.forwarding=1"

        - "ip address add dev eth1 2001:db8:ffab::1/64"

    R2:

      kind: linux

      image: quay.io/frrouting/frr:8.4.1

      exec:

        - "ip address add dev eth1 2001:db8:ffab::2/64"

        - "sysctl -w net.ipv6.conf.all.forwarding=1"

  links:

    - endpoints: ["R1:eth1", "R2:eth1"]

--- yml --


Paso 5: Levantemos la topología con clab:

clab dep -t 2-frr-back2back.yml


Paso 6: finalmente vamos a conectarnos a una de las VMs dentro de ContainerLAB

docker exec -i -t clab-ipv6-ws-R2 bash

martes, 5 de diciembre de 2023

BGP: Ejemplo IPv6 Only entre FRR y OpenBGPD

FRR:

show run

frr# sh run 

Building configuration...


Current configuration:

!

frr version 8.1

frr defaults traditional

hostname frr

log syslog informational

service integrated-vtysh-config

!

interface l0

 ipv6 address 2001:db8::1/128

exit

!

router bgp 65001

 bgp router-id 1.1.1.1

 no bgp ebgp-requires-policy

 neighbor 2001:db8:12::2 remote-as 65002

 !

 address-family ipv6 unicast

  redistribute connected

  neighbor 2001:db8:12::2 activate

  neighbor 2001:db8:12::2 soft-reconfiguration inbound

 exit-address-family

exit

!



OpenBGPD

Archivo: /etc/bgpd.conf

# macros

ASN="65002"

fib-update yes

log updates


# global configuration

AS $ASN

router-id 2.2.2.2


network 2001:db8::2/128

network inet6 connected


neighbor 2001:db8:12::1 {

    descr "epa"

    remote-as 65001

    announce IPv6 unicast

}


deny from any

deny to any

allow from 2001:db8:12::1

allow to 2001:db8:12::1


#

(por favor notar el espacio en blanco entre la última línea y la antepenúltima línea)

lunes, 4 de diciembre de 2023

Como crear una ruta IPv6 a null/blackhole en Linux

Caso:

   Como crear una ruta IPv6 a null/blackhole en Linux

Comando:

  ip -6 route add blackhole fd00:12:34::0/48


Espero sea útil

lunes, 6 de noviembre de 2023

domingo, 29 de octubre de 2023

Como deshabilitar IPv4 temporalmente en una interfaz dentro de Linux

Caso:

  Deseamos deshabilitar IPv4 en una interfaz


Solución:

  sudo ip -4 addr flush dev enp0s1


Explicación:

  El comando anterior elimina todas las direcciones IPv4 para la interfaz enp0s1. Importante, recuerda que esta deshabilitación es solo temporal.


jueves, 27 de julio de 2023

NGINX Reverse Proxy y Granja de Servidores IPv6 Only

 Introducción

En el presente trabajo presentaremos una manera muy sencilla de ofrecer acceso Web Dual Stack a una granja de servidores IPv6 Only utilizando NGINX. Con el crecimiento continuo de la red y la adopción gradual del protocolo IPv6, es esencial garantizar la conectividad y accesibilidad para aquellos clientes que utilizan tanto IPv4 como IPv6.


Explicaremos cómo configurar NGINX para admitir acceso web Dual Stack; veremos cómo configurar NGINX como un proxy inverso que escucha tanto en direcciones IPv4 como IPv6, y cómo direccionar correctamente las solicitudes entrantes a los servidores backend que solo tienen direcciones IPv6.  Por cierto, lo que estudiaremos en el siguiente artículo es un importante paso para lograr el ansiado ahorro de direcciones IPv4, entre muchos otros beneficios.



¿Qué es un reverse proxy?


Cloudflare define en [1] un Servidor Proxy Inverso o Reverso como:


“Un proxy inverso es un servidor que se sitúa delante de los servidores web y reenvía las solicitudes del cliente (por ejemplo, el navegador web) a esos servidores web. Los proxies inversos suelen implementarse para ayudar a aumentar la seguridad, el rendimiento y la fiabilidad. Para entender mejor cómo funciona un proxy inverso y las ventajas que puede aportar, definamos primero qué es un servidor proxy.”


¿Qué es un servidor proxy?


Nuevamente Cloudflare define en [1] un Servidor Proxy como:


“Un proxy de reenvío, con frecuencia conocido como proxy, servidor proxy o proxy web, es un servidor que se sitúa delante de un grupo de máquinas cliente. Cuando esos ordenadores realizan solicitudes a sitios y servicios en Internet, el servidor proxy intercepta esas peticiones y luego se comunica con los servidores web en nombre de esos clientes, como un intermediario.”



¿Cuáles son los beneficios de un Reverse Proxy?


  •     Ofrecer IPv4 o IPv6 transparente a clientes provenientes desde Internet servidos desde una granja de servidores IPv6 Only (en esto nos enfocaremos)


  •     Escalabilidad: Al utilizar un proxy inverso, es posible agregar o eliminar servidores backend según sea necesario sin afectar a los usuarios finales. Esto facilita la escalabilidad horizontal de las aplicaciones, lo que permite manejar un mayor número de solicitudes y usuarios simultáneos.


  •     Cacheo de contenido estático: NGINX puede almacenar en caché contenido estático como imágenes, archivos CSS y JavaScript, lo que reduce la carga en los servidores backend y acelera la entrega de contenido a los usuarios. Esto mejora el tiempo de carga de las páginas y reduce el ancho de banda necesario.


  •     Seguridad: NGINX actúa como un punto de entrada a la aplicación, lo que proporciona una capa adicional de seguridad. Puede realizar funciones como filtrado de solicitudes, prevención de ataques DDoS, protección contra inyecciones SQL y autenticación de clientes. Además, NGINX puede habilitar el uso de SSL/TLS para cifrar la comunicación entre los clientes y el servidor backend.


  •     Enrutamiento avanzado: Un proxy inverso permite realizar enrutamiento avanzado según diferentes criterios, como el nombre de dominio, la URL o las cabeceras HTTP. Esto es útil en casos donde se necesite dirigir el tráfico a diferentes servidores backend según las características de la solicitud.


  •     Consolidación de servicios: NGINX puede actuar como un punto de entrada único para varios servicios backend. Esto simplifica la infraestructura al consolidar múltiples servicios en un solo servidor, lo que facilita la administración y el mantenimiento.


  •     Mejora del rendimiento: NGINX está diseñado para ser liviano y eficiente en el uso de recursos. Su arquitectura optimizada y su capacidad para manejar grandes cantidades de conexiones simultáneas lo convierten en una opción popular para mejorar el rendimiento de las aplicaciones web.


  •  Balanceo de carga: Un proxy reverso como NGINX puede distribuir el tráfico entrante a través de varios servidores backend. Esto ayuda a equilibrar la carga de trabajo y garantiza que ningún servidor esté sobrecargado, lo que mejora el rendimiento y la capacidad de respuesta de la aplicación. 




Topología que vamos a usar



¿Qué vamos a lograr el día de hoy?

El servidor en el borde (Servidor Proxy Reverso) va a ser capaz de recibir peticiones HTTP en IPv4 e IPv6, y dependiendo del sitio Web que se desea visitar (dominio) re-enviará la consulta al servidor correcto. En el ejemplo actual ocurrirá lo siguiente:


El Cliente visita      Petición enviada a:

server-a.com   →   2001:db8:123::101

server-b.com   →   2001:db8:123::102

server-c.com   →   2001:db8:123::103



Prerrequisitos

  • Linux con Nginx en el Servidor Proxy Reverso 

  • Acceso super usuario

  • Servidor Web en cada uno de los servidores de la granja

  • Conectividad a Internet IPv4 e IPv6

  • Conectividad interna en IPv6


Manos a la obra

1) Instalar nginx en todos los servidores 

   #apt update

   #apt install nginx


2) Crear los sitios Web en el Proxy Reverso NGINX 


Archivo  /etc/nginx/sites-available/server-a.com


server {

listen 80;

listen [::]:80;


    server_name server-a.com;

    location / {

        proxy_pass http://[2001:db8:123::101];

    }


}



Archivo  /etc/nginx/sites-available/server-b.com

server {

listen 80;

listen [::]:80;


    server_name server-b.com;

    location / {

        proxy_pass http://[2001:db8:123::102];

    }


}




Archivo  /etc/nginx/sites-available/server-c.com

server {

listen 80;

listen [::]:80;


    server_name server-c.com;

    location / {

        proxy_pass http://[2001:db8:123::103];

    }


}



3) Crear links simbólicos para habilitar los sitios configurados:


root@ProxyReverseSRV:/etc/nginx/sites-enabled# ln -s /etc/nginx/sites-available/server-a.com /etc/nginx/sites-enabled/server-a.com


root@ProxyReverseSRV:/etc/nginx/sites-enabled# ln -s /etc/nginx/sites-available/server-b.com /etc/nginx/sites-enabled/server-b.com


root@ProxyReverseSRV:/etc/nginx/sites-enabled# ln -s /etc/nginx/sites-available/server-c.com /etc/nginx/sites-enabled/server-c.com



4) Recordemos reiniciar nginx:

$sudo systemctl restart nginx


Sobre los logs

Los registros de conexión (logs) son de suma importancia para cualquier empresa e ISP que desea realizar alguna revisión de las conexiones entrantes.

  Lo que ocurre es que NGINX por defecto utilizará su propia dirección IP cuando realice las conexiones salientes, lo que trae como consecuencia que se pierde la dirección del cliente que originó la solicitud HTTP.  Pero no se preocupen, NGINX tiene la solución, se llama proxy_set_header y la configuración se divide en el servidor final y en el servidor Proxy Reverso.


  1. En el Servidor Proxy Reverso, archivo del sitio web.


# Ejemplo de  nginx reverse proxy que permite conservar la dirección

# y puerto de original del cliente

location /examples {

  proxy_pass http://[2001:db8:123::103];

  proxy_buffering off;

  proxy_set_header X-Real-IP $remote_addr;

  proxy_set_header X-Forwarded-Host $host;

  proxy_set_header X-Forwarded-Port $server_port;

  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

}


  1. En el servidor final en el archivo: /etc/nginx/nginx.conf agregar en la sección http lo siguiente:


   set_real_ip_from 2001:db8:123::100; #sustituir la dirección IP por la del Proxy

   real_ip_header X-Forwarded-For;

   real_ip_recursive on;


Ejemplo:


http {

    …

    set_real_ip_from 2001:db8:123::100;

    real_ip_header X-Forwarded-For;

    real_ip_recursive on;

   …

}


  Luego de estas configuraciones el servidor final confiará en la cabecera llamada X-Forwarded-For que provenga del IP 2001:db8:123::100 y en sus registros (/var/log/nginx/access.log) se podrá apreciar la dirección origen del cliente.



Conclusiones

Se puede percibir que con el diseño propuesto podemos administrar una granja de servidores web 100% IPv6 Only con acceso al mundo tanto IPv4 e IPv6 de una manera muy sencilla, escalable y eficiente. Lo anterior trae consigo diferentes beneficios tales como: administrar solo un stack TCP/IP, simplicidad, seguridad e incluso ahorro de direcciones IPv4.


Referencias



ortodoncia invisible madrid

viernes, 26 de mayo de 2023

Comportamiento extraño de ssh en MAC - Problemas de copiar / Pegar

 Situación:

  Comportamiento extraño de SSH en MAC, problemas para copiar / pegar en el terminal durante el ssh. Funciona el portapapeles en otras aplicaciones


Solución:

  Al menos en "vi" la solución es muy sencilla. Edita el archivo: ~/.vimrc y pega el siguiente contenido:

if !has("gui_running")

  set mouse=

endif


Suerte!


viernes, 2 de diciembre de 2022

4 posibles soluciones en Python3 a: UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 503: ordinal not in range(128)

Problema: 
 Al ejecutar un script en python se recibe un mensaje similar a: 

return codecs.ascii_decode(input, self.errors)[0] UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 503: ordinal not in range(128) 

Causa:
  Por defecto python intenta utilizar ASCII como encoding, en caso de que el archivo a leer, la variable a declarar tenga otro codec debe ser especificado, sin embargo, en líneas generales UTF-8 es capaz de solucionar la mayoría de las situaciones

Soluciones

1) Especifar el encoding al momento de leer un archivo:
 with open(os.path.expanduser(path), encoding='utf-8') as f:

2) Asignar una variable e indicar la forma de decodificarla:
s = s.decode('utf-8')

3) Declarar variables de entorno (Linux). Por ejemplo

 export LANG=en_US.UTF-8 

export LC_ALL=en_US.UTF-8 export 

export PYTHONIOENCODING=utf8

4) Indicar al comienzo del script el coding. Por ejemplo

#!/usr/bin/python
# coding: utf-8



Suerte, espero haya sido de tu ayuda.





jueves, 14 de julio de 2022

Solución "Unable to parse package file " luego de apt

 Problema:

    Obtenemos un error después de ejecutar cualquier comando apt en Linux


Solución:

    La solución es muy fácil, les comento que pasé muchas horas arreglándolo.

    Solo tiene que eliminar el archivo mencionado en el error, en mi caso obtuve: "E: Unable to parse package file /var/lib/apt/extended_states (1)"

    Acabo de borrar el archivo /var/lib/apt/extended_states


  Ejemplo:

    #sudo rm /var/lib/apt/extended_states


  Eso es todo, suerte!

domingo, 26 de septiembre de 2021

Solución: VBoxGuestAdditions.iso (VERR_PDM_MEDIA_LOCKED)

Situación: 

   Cuando intentando insertar los Guest Addition en una VM Debian recibes: VERR_PDM_MEDIA_LOCKED 

Solución: 
   Hay varias soluciones, por ejemplo: 
1) Ejecutar: 
   sudo apt-get upgrade 
   sudo apt-get install virtualbox-guest-additions-iso
2) Remover e insertal el CD dentro de la configuración de la máquina virtual
3) Dejando una unidad óptica en blanco

y una cuarta solución que justo la acabo de hacer y quise publicar este post:

a) Arranca la VM
b) Abre un terminal
c) Ejecuta:
  sudo su
  cd /media
  mkdir cdrom
  mount /dev/cdrom /media/cdrom
  cd cdrom
  sh VBoxLinuxAdditions.run

Espero sea de utilidad.

Alejandro,


Global spending on public cloud services is expected to grow 18.4% in 2021 to total $304.9 billion (Gartner).

miércoles, 19 de mayo de 2021

Solución: libnsock mksock_bind_addr(): Bind to 2001:db8:1::1:0 failed (IOD #1): Cannot assign requested address (99)

Problema:

  Al usar nping (que viene con nmap) recibimos un error similar a:

libnsock mksock_bind_addr(): Bind to 2001:db8:1::1:0 failed (IOD #1): Cannot assign requested address (99)


Situación:
  La situación es que nping no consigue como utilizar la dirección IPv6 fuente 2001:db8:1::1


Solución:
  Pueden haber muchas soluciones. La que yo utilicé fue crear una interfaz tipo tunnel -una interfaz lógica- con la dirección IPv6 deseada. Te dejo los comandos:

ip tuntap add mode tun dev tun1
ip -6 addr add 2001:db8:1::1 dev tun1
ifconfig tun1 up

Finalmente podrías ejecutar algo similar a esto:

nping -6 -S 2001:db8:1::1 --tcp-connect -c 2 -p 53 <ipv6_dest> --source-mac 00:50:XX:XX:XX:35  --dest-mac 2c:XX:XX:XX:44:20


Espero haya sido útil.

martes, 23 de marzo de 2021

RFC 7911- BGP Add-path en acción



En el video se realiza un demo de la capacidad de BGP llamada Add-Path definida en el RFC 7911 utilizando FRR sobre Ubuntu. Para la realización del video se utilizó únicamente prefijos IPv6 a pesar de que la capacidad es agnóstica al prefijo transportado

lunes, 25 de enero de 2021

Roles en BGP - Reduciendo fugas de redes/prefijos en BGP con mensajes OPEN y UPDATE

El video muestra una característica muy novedosa aún discutida dentro de IETF de como prevenir routing leaks utilizando un nuevo concepto llamado: "Roles BGP"


viernes, 4 de septiembre de 2020

Solucion: Closing connection because of an I/O error en FRR

 Hola,

  Si recibes el siguiente error en FRR:

Closing connection because of an I/O error

  la solución que yo tuve fue compilar de nuevo agregando el flag:

--enable-systemd

  Sería algo como:


./configure \
    --prefix=/usr \
    --includedir=\${prefix}/include \
    --enable-exampledir=\${prefix}/share/doc/frr/examples \
    --bindir=\${prefix}/bin \
    --sbindir=\${prefix}/lib/frr \
    --libdir=\${prefix}/lib/frr \
    --libexecdir=\${prefix}/lib/frr \
    --localstatedir=/var/run/frr \
    --sysconfdir=/etc/frr \
    --with-moduledir=\${prefix}/lib/frr/modules \
    --with-libyang-pluginsdir=\${prefix}/lib/frr/libyang_plugins \
    --enable-configfile-mask=0640 \
    --enable-logfile-mask=0640 \
    --enable-snmp=agentx \
    --enable-multipath=64 \
    --enable-user=frr \
    --enable-group=frr \
    --enable-vty-group=frrvty \
    --enable-systemd \
    --with-pkg-git-version \
    --with-pkg-extra-version=-MyOwnFRRVersion

  Puedes seguir las las instrucciones en: http://docs.frrouting.org/projects/dev-guide/en/latest/building-frr-for-ubuntu2004.html  y agregar mi propuesta.

Suerte.


miércoles, 11 de marzo de 2020

Tunel GRE entre Linux y Cisco IOS

Lado del linux:

[root@server]# ip tunnel add tun0 mode gre remote $public_ip_cisco local $public_ip_linux ttl 255
[root@server]# ip link set tun0 up

[root@server]# ip addr add 172.20.0.2/30 dev tun0


Del lado del Cisco

interface Tunnel0
 description Tunel hacia sitio remoto
 ip address 172.20.0.1 255.255.255.252
 tunnel source $public_ip_cisco
 tunnel destination $public_ip_linux

end

  Para enrutar cierta red desde el Cisco hacia el linux via el tunel: 

ip route $prefix $mask 172.20.0.2 


Espero sea útil.

Saludos





miércoles, 4 de diciembre de 2019

Python3: Una solucion a UnicodeEncodeError: 'ascii' codec can't encode character '\xe1' in position 26: ordinal not in range(128)

Situación:

  Al ejecutar un script en python3 se recibe un error similar a:


UnicodeEncodeError: 'ascii' codec can't encode character '\xe1' in position 26: ordinal not in range(128)


Solución:

  El problema viene dado (tal como lo explica el mensaje) por manejo de strings y unicode, muy seguramente el código contiene algún tipo de carácteres en  
español, portugués, árabe u otro idioma no cubierto por ASCII

  Si lees en Internet hay DECENAS de maneras de solucionar esto, yo solo voy a mencionar una que funciona y es MUY sencilla.

  Si te encuentras en Linux o MAC es tan sencillo como colocar esto antes de ejecutar tu script (dentro de bash):




export PYTHONIOENCODING=utf8


  Lo que se esta haciendo es declarar la variable de entorno PYTHONIOENCODING a utf8, python3 al ser ejecutado utilizará esta variable como encoding y tu problema será resuelto.

  Claro, pudieses colocar dicha variable al entrar a tu sesión, o dentro de un script en bash que posteriormente llame a tu .py, etc, etc.

Suerte, espero haya sido útil.

 

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...