Skip to content

109 Fundamentos de red

Protocolos de red

Modelo OSI

Num Capa Unidad Función
7 Aplicación Datos Apis de alto nivel
6 Prestación Datos Traducción de datos entre un servicio de red y una aplicación
5 Sesión Datos Manejo de sesiones de comunicación, por ejemplo el continuo intercambio de información en forma de múltiples transmisiones hacia ambos lados entre dos nodos
4 Transporte Segmento, Datagrama Transmisión de segmentos de datos confiable entre puntos de red PUERTOS (TCP/UDP, ...)
3 Red Paquete Estructura y manejo de una red multinodo (IP)
2 Enlace de datos Trama transmisión de datos entre dos nodos (Ethernet)
1 Física Bit Transmisión y recepción de flujos de bits (el cable)

Modelo TCP/IP

Capa Protocol Dades Funció
Acces a la xarxa Ethernet (MAC) Trama transmisión de datos entre dos nodos
Internet IP Paquet Estructura y manejo de una red multinodo
Transport TCP/UDP (PUERTO) Segment, Datagrama Transmisión de segmentos de datos confiable entre puntos de red
Aplicació http/s, ftp... Datos Traducción de datos entre un servicio de red y una aplicación

Algunos Protocolos:

IP (internet Protocol) Su principal función es transmitir datos entre un origen y un destino que tendrán un identificador asignado (dirección IP).

TCP (Transmissión Control Protocol) Garantiza que los paquetes lleguen correctamente sin errores y en orden. También dispone de control de flujo.

UDP (User Datagram Protocol) Permite el envió de paquetes sin establecer antes una conexión. No proporciona ninguna de las garantías de funcionamiento de TCP. Al ser más lijero, aumenta su velocidad.

ICMP Se utiliza para transmitir datos de estado y mensajes de error. (ej: Ping)

IPv4

Una dirección IPv4 está formada por un conjunto de 32 bits separados en 4 grupos de 8 bits, representados en forma decimal, denominados “cuadrícula de puntos”. Por ejemplo:

Formato binario (4 grupos de 8 bits) 11000000.10101000.00001010.00010100

Formato decimal 192.168.10.20

Clases de direcciones

Teóricamente, las direcciones IP están separadas por clases, que se definen por el rango del primer octeto.

Clase A 1.0.0.0 - 126.255.255.255 sus primeros 3 bit son 000

Clase B 128.0.0.0 - 191.255.255.255 sus primeros tres bit son 100

Clase C 192.0.0.0 - 223.255.255.255 sus primeros 3 bit son 110

Clase Primer octeto ip publica ip privadas
A 1-126 1.0.0.0 - 126.255.255.255 10.0.0.0 - 10.255.255.255
B 128-191 128.0.0.0 - 191.255.255.255 172.16.0.0 - 172.31.255.255
C 192-223 192.0.0.0 - 223.255.255.255 192.168.0.0 - 192.168.255.255

Conversiones

Es importante saber cómo convertir direcciones IP entre formatos binarios y decimales.

La conversión de formato decimal a binario se realiza mediante divisiones consecutivas entre 2 hasta que el cociente sea igual a 1.

105/2 = 52 resto = 1
52/2  = 26 resto = 0
26/2  = 13 resto = 0
13/2  = 6  resto = 1
6/2   = 3  resto = 0
3/2   = 1  resto = 1

Agrupamos todos los restos mas el último cociente, y completamos con 0 a la izquierda hasta llegar a 8 bits.

1101001 # agrupacion de divisiones
01101001    # Añadir 0 izquierda hasta tener 8 bits

En este ejemplo, usaremos el valor binario 10110000 para convertirlo a decimal.

128 64 32 16 8 4 2 1
2**7 2**6 2**5 2**4 2**3 2**2 2**1 2**0
1 0 1 1 0 0 0 0

Ahora solo queda sumar los bits activos 128 + 32 + 16 = 176 por lo tanto el binario 10110000 es igual a 176 en decimal.

Máscara de red (CIDR)

CIDR (Clasless Inter-Domain Routing) Para separar la parte de la IP que hace referencia a la red y la parte destinada al host se utiliza la máscara de red.

La mascara es un filtro de bits que indica con un 1 lo que pertenece a la red y con un 0 la parte de host

Ejemplo: Dirección privada tipo C 192.168.1.55 con mascara 255.255.255.0 , que también se puede representar como 192.168.1.55/24 . En binario seria:

11000000.10101000.00000001.00110111 # ip
11111111.11111111.11111111.00000000 # máscara

Subneting

Es la división de una red en varias subredes usando una máscara de red destinada para ello.

Si tengo una red madre 192.168.0.0/24 y dentro de esta red quiero 4 subredes, aumento la máscara /26

descripción:

11111111.11111111.11111111.00000000 # máscara original
11111111.11111111.11111111.11000000 # máscara nueva
# subredes nuevas
11111111.11111111.11111111.00000000
11111111.11111111.11111111.01000000
11111111.11111111.11111111.10000000
11111111.11111111.11111111.11000000

Esto me asigna 2**2 = 4 nuevas subredes

Identificar dirección de red y broadcast

Suponiendo que tenemos la ip 192.168.8.12 y la mascara 255.255.255.192 y queremos saber la dirección de red y de broadcast.

Para identificar la dirección de red hay que superponer la ip y la mascara, entonces miramos los bits coincidentes por debajo de la máscara, es decir a partir del bit /26 en este caso

11000000.10101000.00001000.00001100 (192.168.8.12)
11111111.11111111.11111111.11000000 (255.255.255.192)
# dirección de red
11000000.10101000.00001000.00000000 (192.168.8.0)

Ahora para obtener la dirección de broadcast "debemos usar la dirección de red donde todos los bits relacionados con la dirección del host son 1:

11000000.10101000.00001000.00000000 (192.168.8.0)
11111111.11111111.11111111.11000000 (255.255.255.192)
# dirección broadcast
11000000.10101000.00001000.00111111 (192.168.8.63)

IPv6

Utiliza 128 bits divididos en 8 grupos de 16 bits: admite 350 sextillones de IP's distintas

Notación Hexadecimal: Esta representado por ocho grupos de cuatro dígitos en hexadecimal.

  • Los grupos se separan por :
  • Si hay varios ceros seguidos se pueden quitar (pero solo una vez) :0000:0000: = ::
  • Los ceros a la izquierda se pueden quitar :0001:000F: = :1:F:

Autoconfigurable: Puede asignarse un valor basándose en la MAC

Sin máscara de red: la parte de red siempre son los cuatro primeros grupos y el resto es el host

Más seguro: Incorpora opciones sobre seguridad. IPsec está integrado y permite autenticar y cifrar los paquetes.

Tipo de direcciones

Unidifusión: Identifica una única interfaz de red. De forma predeterminada, los 64 bits de la izquierda identifican la red y los 64 bits de la derecha identifican la interfaz.

Multidifusión : Identifica un conjunto de interfaces de red. Un paquete enviado a una dirección de multidifusión se enviará a todas las interfaces que pertenecen a ese grupo. Aunque es similar, no debe confundirse con la transmisión, que no existe en el protocolo IPv6.

Anycast: Esto también identifica un conjunto de interfaces en la red, pero el paquete reenviado a una dirección anycast se entregará a una sola dirección en ese conjunto, no a todos.

Puertos de servicios

El puerto se identifica mediante un campo de 16 bits, lo que proporciona un límite de 65535 puertos posibles. Los servicios (destino) utilizan los puertos del 1 al 1023, que se denominan puertos privilegiados porque tienen acceso de root al sistema. El origen de la conexión utilizará el rango de puertos de 1024 a 65,535, llamados puertos no privilegiados o puertos de socket.

En un sistema Linux, los puertos de servicio estándar se enumeran en el /etc/servicesarchivo.

La siguiente tabla contiene los principales servicios y sus respectivos puertos.

Puerto Servicio
20 FTP (datos)
21 FTP (control)
22 SSH (Secure Socket Shell)
23 Telnet (conexión remota sin cifrado)
25 SMTP (Protocolo simple de transferencia de correo), envío de correos
53 DNS (sistema de nombres de dominio)
80 HTTP (Protocolo de transferencia de hipertexto)
110 POP3 (Protocolo de oficina postal), recepción de correos
123 NTP (Protocolo de tiempo de red)
139 Netbios
143 IMAP (Protocolo de acceso a mensajes de Internet), acceso a correos
161 SNMP (Protocolo simple de administración de redes)
162 SNMPTRAP, notificaciones SNMP
389 LDAP (Protocolo ligero de acceso a directorios)
443 HTTPS (HTTP seguro)
465 SMTPS (SMTP seguro)
514 RSH (Shell remoto)
636 LDAPS (LDAP seguro)
993 IMAPS (IMAP seguro)
995 POP3S (POP3 seguro)

Configuración de red persistente

Las interfaces de red se pueden visualizar con:

ip link show
nmcli device

De mayor a menor prioridad, el sistema operativo utiliza las siguientes reglas para nombrar y numerar las interfaces de red:

  1. Nombra la interfaz según el índice proporcionado por el BIOS o por el firmware de los dispositivos integrados, por ejemplo eno1.
  2. Nombra la interfaz después del índice de la ranura PCI Express, como lo indica el BIOS o el firmware, por ejemplo ens1.
  3. Asigne un nombre a la interfaz según su dirección en el bus correspondiente, enp3s5. Ej lspci -s 03:05.0
  4. Nombre la interfaz después de la dirección MAC de la interfaz, por ejemplo enx78e7d1ea46da.
  5. Nombra la interfaz usando la convención heredada, por ejemplo eth0.

Ficheros principales:

/etc/hostname fichero que guarda el nombre de host. Se puede editar o utilizar el comando hostname

hostname nuevo_nombre
-s  # consulta nombre
-f  # consulta nombre y dominio

/etc/hosts Fichero para asociar nombres a IP's. Cada linea contiene una IP seguida de uno o mas nombres asociados a dicha ip.

hostnamectl comando del ecosistema Systemd para modificar el nombre de host y otros valores.

hostnamectl # consultar hostname, kerner, arquitectura, ...
hostnamectl status # idem anterior
hostnamectl set-hostname nuevo_nombre

/etc/resolv.conf Fichero en el que tradicionalmente se han configurado las Ip de los servidores DNS

nameserver 1.1.1.1  # dns de salida a buscar
domain mydomain.org # dominio local
search mydominio.net mydominio.com  # idem anterior pero en lista

los dominios locales se asignan automáticamente al utilizar nombres cortos Ej ping server sera resuelto como ping server.mydomain.org

/etc/nsswitch.conf especifica el orden en el que se buscará información en una serie de datos.

Por ejemplo la resolución de nombres de IP, consultara antes el archivo hosts que el resolv.conf

...
hosts: files dns
...

Networking

/etc/network/interfaces fichero de configuración en distribuciones derivadas debian.

# ip dinamica
auto enp3s0 # activar tarjeta de red en el arranque
iface enp3s0 inet dhcp  # config con dhcp

# ip statica
iface enp2s1 inet static
address 192.168.0.5/24
gateway 192.168.0.1

/etc/sysconfig/network-script/ifcfg-nombre-interfaz fichero de configuración en distribuciones derivadas Red Had.

TYPE=Ethernet           # tipo de interfaz
DEVICE=enp3s0           # nombre de interfaz
NM_CONTROLLED="no"      # ignorado por NetwoerkManager
ONBOOT=yes              # iniciar al arrancar el sistema
BOOTPROTO=none          # usar config statica (dhcp)
HWADDR=01:0A:03:1F:67:10    # direccion MAC
IPADDR=192.168.0.5      
NETMASK=255.255.255.0
NETWORK=192.168.0.0
GATEWAY=192.168.0.1

El kernel ejecutas en el arranque ifup -a y levanta todas las interfaces configuradas en /etc/network/interfaces

ifup "interface"    # activar
ifdown "interface"  # desactivar
-a  # todas las interfaces

NetworkManager

Este programa para gestionar la red creado por Red Had se popularizó por su integración en l entorno gráfico y la fácil gestión de redes inalámbricas.

nmcli es su comando principal para gestionar la red desde la shell. Este separa todas las propiedades relacionadas con la red controladas por NetworkManager en categorías llamadas objetos :

general Estado y operaciones generales

networking control general de red

radio Conmutadores de radio

connection conexiones

device dispositivos gestionados

agent agente secreto de networkmanager o agente polkit

monitor supervise los cambios de networkmanager

nmcli
dev status                  # muestra el stado de las interfaces
dev show "interface"        # opciones de la interfaz
con edit "interface"        # editar propiedades conexion
con modify "interface" propiedad valor # cambiar una opción de la interfaz
dev connect "interface"     # activar interfaz
dev disconect "interface"   # desactivar interfaz

radio wifi [on|off]     # apagar o encender adaptador wifi
dev wifi list           # muestra conexiones posibles de wifi
dev wifi connect SSID password contraseña   # conectar a wifi seleccionada
dev wifi connect SSID password contraseña hidden yes    # conectar a wifi oculta
connection down SSID # desconectar wifi seleccionada
connection up SSID # volver a conectar de nuevo a wifi

nmtui tiene una interfaz basada en curses. Es una interfaz semi gráfica para terminal muy fácil de utilizar.

Systemd-networkd

Los sistemas que ejecutan systemd pueden usar opcionalmente sus demonios integrados para administrar la conectividad de la red: systemd-networkd controla las interfaces de red y systemd-resolved administra la resolución de nombres local.

Los archivos de configuración utilizados por systemd-networkd para configurar las interfaces de red se pueden encontrar en cualquiera de los siguientes tres directorios:

/etc/systemd/network El directorio de la red de administración local.

/run/systemd/network El directorio de red de tiempo de ejecución volátil.

/lib/systemd/network El directorio de red del sistema.

los directorios nombrados tienen prioridad entre ellos donde /etc es tiene la más alta y /lib la más baja. El proposito de los archivos de configuración dentro de estos directorios dependen de su .sufijo:

.netdev son utilizados por systemd-networkd para crear dispositivos de red virtual

.link configuraciones establecidas de bajo nivel para la interfaz de red correspondiente.

.network Los archivos que utilizan este sufijo se pueden utilizar para configurar direcciones y rutas de red

Ejemplo /etc/systemd/network/30-lan.network

[Match]
MACAddress=00:16:3e:8d:2b:5b
#Name=enp3s5
#Name=enp3s5 enp3s4
#Name=enp*

[Network]
Address=192.168.0.100/24
Gateway=192.168.0.1

Una misma configuración se puede utilizar para diferentes interfaces pero siempre es mejor especificar la MAC

Configuración con dhcp

[Match]
MACAddress=00:16:3e:8d:2b:5b

[Network]
DHCP=yes

La opción DHCP acepta valores de ipv4 o ipv6 si se quiere especificar un dhcp concreto

redes inalámbricas

Las interficies wifi son muy similares el único cambio es que además de crear el archivo .network se a de crear uno adicional con las credenciales.

/etc/systemd/network/20-wifi.network

[Match]
Name=wlo1

[Network]
DHCP=yes

Crear archivo con las credenciales MyWifi es el SSID y la contraseña se introduce en el stdin generado

wpa_passphrase MyWifi > /etc/wpa_supplicant/wpa_supplicant-wlo1.conf

Para acabar habilitamos la conexión inalámbrica en el arranque

systemctl start wpa_supplicant@wlo1.service
systemctl enable wpa_supplicant@wlo1.service

Resolución de problemas básicos de red

Obsoletos

El paquete de comandos de net-tools se considera su obsoleto pero se puede seguir utilizando si descargas el paquete de los repositorios, algunos de sus comandos son:

ifconfig

administra interfaces de red

ifconfig
ifconfig "interfaz"
ifconfig "interfaz" [up|down]
ifconfig "interfaz" 192.168.0.6/24
ifconfig "interfaz" netmask 255.255.255.0
ifconfig enp3s0 add 2001:db8::10/64 # con ipv6 se utiliza add

netstat

muestra las conexiones de red, tablas de enrutamiento y estadísticas de tráfico.

netstat
-t  # conexiones tcp
-u  # conexiones udp
-6|-4   # ipv4 o ipv6
-l  # puestos a la escucha
-p  # nombre del programa
-n  # no hacer resolucion de nombres
-r  # ver tabla de enrutamiento

route

administra las tablas de enrutamiento ip.

route
route add default gw 192.168.1.1    # ruta predeterminada
route -n    # traza ruta con ip's, no haxce resolución de nombres

La tabla de las versiones nuevas a estos comandos son:

Comandos Obsoletos actuales equivalentes
arp ip n (ip neighbor)
ifconfig ip a (ip addr), ip link, ip -s (ip -stats)
netstat ss, ip route, ip -s link, ip maddr
route ip r (ip route)

Rastreo de rutas

para rastrear una ruta existen diferentes herramientas como:

tracepath/tracepath6 muestra el camino recorrido hasta llegar al destino indicado

traceroute/traceroute6 parecido a tracepath pero con más opciones. este por defecto envía paquetes UDP basura al puerto 33434

traceroute learning.lpi.org
sudo traceroute -I learning.lpi.org # trazar ruta con ICMP (ping)
sudo traceroute -T -p 80 learning.lpi.org # trazar ruta con TCP al puerto 80
traceroute -i enp2s0 learning.lpi.org   # utilizar interfaz diferente
sudo traceroute -I --mtu learning.lpi.org # informar del MTU (unidad transmision máxima)

ping/ping6 Envía un paquete icmp para comprobar que el destino responde.

ip

Remplaza los comandos ifconfig, route y arp. Además aporta otras muchas funciones.

Sintaxis: ip [OPCIONES] OBJETO [comando [argumentos]]

Objetos:

  • link: para configurar los objetos físicos o lógicos de la red
  • address: manejo de direcciones asociadas a los diferentes dispositivos
  • neighbour: administrar los enlaces de vecindad (ARP) las resoluciones MAC a IP
  • rule: ver las políticas de enrutado y cambiarlas
  • route: ver las tablas de enrutado y cambiar las reglas de las tablas.
  • tunnel: administrar los túneles ip
  • maddr: ver las direcciones multienlace, sus propiedades y cambiarlas
  • mroute: establecer, cambiar o borrar el enrutado multienlace.
  • monitor: monitorizar continuamente el estado de los dispositivos, direcciones y rutas.
ip addr show    # mostrar interfaces
ip -c a         # mostrar interfaces con colorines
ip link set enp3s0 up/down  # des/activar interfaz
ip link set dev enp3s0 arp on/of    # des/activar arp
ip addr add 192.168.0.10/24 dev enp3s0  # añadir dirección ip
ip addr del 192.168.0.10/24 dev enp3s0  # eliminar dirección ip

ip route show   # ver tabla enrutamiento
ip route add default via 192.168.1.1    # añadir puerta de enlace
ip route add 10.10.50/24 via 192.168.1.1 dev enp3s0 # añadir ruta
ip route del 10.10.50/24        # eliminar ruta
ip route save > ./route_backup  # hacer backup de tabla enrutamieno
ip route restore < ./route_backup   # resaurar bckup

ip neighbour    # ver tabla arp

ss

Socket statistics obtiene información sobre los sockets (internos y de red).

Sus opciones principales son muy similares a netstat

ss [options] [filter]
-t  # conexiones tcp
-u  # conexiones udp
-6|-4   # ipv4 o ipv6
-l  # puestos a la escucha
-p  # nombre del programa
-n  # no hacer resolucion de nombres
-r  # intentar hacer resolucion

Los filtros son muy potentes en ss y una vez dominados generan una gran ayuda para encontrar los sockets requeridos

filtro := [state ESTADO-TCP] [exclude ESTADO-TCP] [expresión]

Con state los sockets deben estar en: ESTABLISHED, LISTENNING, CLOSED, CONNECTED, TIME-WAIT, ...

Con exclude se excluirán los que estén en el estado indicado.

expresión se puede construir con:

  • los operadores and (por defecto), or y not
  • (origen y/o destino) {src|dst} [IP[/prefijo]][:puerto]
  • (puerto origen/destino) {dport|spor} {eq|neq|gt|ge|lt|le} [IP]:puerto
ss state establised '( sport = :http or sport = :https )' src 192.168.1.0/24
ss sport neq :21 and sport neq :https or not dst 192.168.1.10

Explicación segundo comando: no me muestres la ip destino 192.168.1.10 que tenga como puertos de salida de mi host 21 o 443

netcat

abre un puerto en un host (que hará de servidor) y recoge todo lo que envía un cliente.

nc
-l  # abre un puerto a la escucha, acepta un solo cliente
-p  # indica puerto
-k  # multiples conexiones
-u  # puerto udp en vez de tcp
-e  # indica ruta de fichro que se ejecutara al establcer la conexion
-v  # vervose
-z  # escanear puertos

nc -zv 192.168.0.4 10-500

Configuración DNS cliente

La configuración del cliente se refiere a conocer las herramientas que un cliente utiliza para administrar el funcionamiento del DNS como por ejemplo.

systemd-resolved El sistema de resolución de nombres systemd doc arch

host muestra el resultado de una resolución de nombres, pudiendo consultar a diferentes servidores.

host learning.lpi.org
host learning.lpi.org 1.1.1.1
host -t MX lpi.org # -t filtra por tipo d rejistro MX, SOA, Ns, A, ...

getent consulta diferentes fuentes de datos. En el caso de la resolución de nombres se puede poner el parámetro ahosts para que muestre la ip asociada.

getent ahosts learning.lpi.org
getent -s dns hosts learning.lpi.org    # busca url en dns configurados
getent -s files hosts learning.lpi.org  # busca url en archivo hosts

dig Es el más avanzado para consultar resoluciones de nombres. se encuentra en el paquete dnsutils. ademas se puede configurar el output desde el archivo ~/.digrc

dig [opciones] [@servidor] nombre

-t tipo # muestra solo el tipo de registro, ANY, MX, A, AAAA, CNAME
@ip     # servidor especifico
+short  # output reducido
+noshort # 
... # tiene muchas más opciones de + o +no

la salida de dig es muy extensa y por defecto muestra las siguientes secciones:

  • versión de dig
  • información de consulta y respuesta
  • info sobre extensiones EDNS utilizadas
  • resultado de la consulta
  • servidores de nombre de dominio

Archivos relacionados con la resolución de nombres

/etc/hosts Fichero para asociar nombres a IP's. Cada linea contiene una IP seguida de uno o mas nombres asociados a dicha ip.

/etc/nsswitch.conf especifica el orden en el que se buscará información en una serie de datos.

Por ejemplo la resolución de nombres de IP, consultara antes el archivo hosts que el resolv.conf

...
hosts: files dns
...

/etc/resolv.conf fichero donde el demonio de red irá a buscar los DNS configurados para ese host.