Tabla de Contenidos

19. Otros protocolos

DNS

Hasta hora estamos haciendo siempre las pruebas usando las IPs, pero una IP es poco cómoda para que un humano lo recuerde. Por ello se creo el nombre de dominio de un Host, que no es mas que un nombre de recordar sencillo para un ser humano. Y que asocia un nombre de dominio a una IP.

Ejemplos de nombre de dominio son:

Un nombre de dominio solo puede tener una IP ya que si tuviera varias , no sabríamos cual usar pero la misma IP puede tener varios dominios. Es decir que un mismo Host puede tener varios nombre de dominio. Eso es normal ya que en un mismo Ordenador se ponen páginas de distintos dominios para ahorrar costes económicos.

A consecuencia de ello se crearon los "procesos" 1) servidores de DNS. Un servidor DNS es un servidor al que le enviamos el nombre de dominio y nos devuelve su IP.

Mas información:

El protocolo DNS es muy sencillo, se envía por UDP al puerto 53 de nuestro servidor DNS un nombre de dominio y el nos retorna la la IP. No vamos a entrar en el formato del protocolo DNS. Un detalle es que lo primero que necesitamos a saber la IP de nuestro servidor de DNS. Así que hay que establecerla manualmente 2) al igual que hacíamos con la puerta de enlace.

Para saber los servidores DNS que está usando Linux debemos lanzar la orden systemd-resolve --status:

logongas@beren:~$ systemd-resolve --status
Global
          DNSSEC NTA: 10.in-addr.arpa
                      16.172.in-addr.arpa
                      168.192.in-addr.arpa
                      17.172.in-addr.arpa
                      18.172.in-addr.arpa
                      19.172.in-addr.arpa
                      20.172.in-addr.arpa
                      21.172.in-addr.arpa
                      22.172.in-addr.arpa
                      23.172.in-addr.arpa
                      24.172.in-addr.arpa
                      25.172.in-addr.arpa
                      26.172.in-addr.arpa
                      27.172.in-addr.arpa
                      28.172.in-addr.arpa
                      29.172.in-addr.arpa
                      30.172.in-addr.arpa
                      31.172.in-addr.arpa
                      corp
                      d.f.ip6.arpa
                      home
                      internal
                      intranet
                      lan
                      local
                      private
                      test

Link 3 (docker0)
      Current Scopes: none
       LLMNR setting: yes
MulticastDNS setting: no
      DNSSEC setting: no
    DNSSEC supported: no

Link 2 (enp2s0)
      Current Scopes: DNS
       LLMNR setting: yes
MulticastDNS setting: no
      DNSSEC setting: no
    DNSSEC supported: no
         DNS Servers: 8.8.8.8
                      8.8.4.4
          DNS Domain: ~.

Vemos que en las últimas lineas aparece "DNS Servers" y vemos que hay dos DNS cuyas IPs son "8.8.8.8" y "8.8.4.4".

No vamos a ver como establecer los servidores DNS en Ubuntu pero si alguna ver os hace falta, recordar que se usa una herramienta llamada netplan

Para nosotros hacer una petición DNS se usa la orden "dig" con el nombre de dominio.

logongas@beren:~$ dig www.fpmislata.com +short
87.98.231.18

Podemos pensar que no es muy útil la orden "dig" pero a veces hay problemas de red y para saber si funcionan los DNS podemos usar esta orden.

A veces nos interesa tener un servidor DNS en nuestro ordenador si por ejemplo nos conectamos a la IP de nuestra XBox , o la SmartTV, etc. De esa forma en vez de acceder por IP podríamos acceder por el nombre. Montar todo un servidor DNS, aunque no es complejo está mas allá del objetivo de la asignatura. Pero hay una forma muy sencilla de asociar una IP con un nombre de dominio. Es simplemente rellenar un fichero llamado "/etc/hosts" con la IP y el nombre de dominio.

logongas@beren:~$ cat /etc/hosts
127.0.0.1	localhost
192.168.1.110	beren

# The following lines are desirable for IPv6 capable hosts
::1     ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters

Ahí vemos que en vez de usar "127.0.0.1" se puede usar el nombre de domino "localhost" y también el nombre de domino de "beren" asociado a la IP 192.168.1.106.

Así que si que por ejemplo si nuestra XBox tiene la IP 192.168.1.67 no habría mas que añadir lo siguiente al fichero "/etc/hosts"

192.168.1.67 xbox

Y ya podríamos usar el nombre xbox. Lo malo de ésta técnica es que solo funciona desde le ordenador en el que hemos modificado el fichero "/etc/hosts", por lo que desde un movil no podríamos usar el nombre "xbox". Así que no es una maravilla pero para salir de algún problema , puede valer.

Por último decir que una nueva nueva forma de conectarse a un servidor DNS, que no es por UDP al puerto 53 , sino que es por HTTPS. Es decir usando el puerto 443 3) por TCP. ¿Y para que usarlo? Pues por privacidad. Para que nadie pueda saber que nombre dominio estamos resolviendo, ya que si resolvemos por ejemplo el dominio "www.podemos.info" o "www.pp.es" se puede empezar a saber información privada nuestra. Además que si por ejemplo un país ordena bloquear un nombre de dominio por razones políticas, con DNS sobre https ya no podría.

Mas información:

DHCP

Para poder comunicarnos por internet hemos visto que necesitamos de la siguiente información 4):

Obviamente poner todo ésto manualmente es inviable, así que se creo el protocolo DHCP que permite obtener toda esa información al iniciarse el sistema operativo. Para ello debe haber un servidor de DHCP en nuestra red. En nuestras casa ese servidor se encuentra dentro de nuestro router. El protocolo DHCP funciona sobre Ethernet y no sobre IP ni sobre TCP o UDP ya que es justamente lo que queremos configurar.

Mas información:

¿Porque es importante el servidor de DHCP? Porque podemos entrar en el router de nuestra casa y cambiar la configuración.

En las siguiente pantalla se ve la configuración de la IP de la red interna de un router:

La configuración de la LAN indica como será la red interna del router , datos que luego limitarán el rango de IPs que puede dar el servidor de DHCP.

Aquí indicamos los valores de los datos que va a retornar el servidor de DHCP

Un servidor DHCP intentará dar siempre la misma IP al mismo Host (sabe que es el mismo Hosts por su dirección MAC) pero no tiene obligación de ello.Por ello se dice que los host por DHCP tiene una IP dinámica , ya que puede cambiar en cualquier momento.Por otro lado si en un Host establecemos la IP de forma manual se dice que tiene una IP estática ya que no cambiará a no ser que el usuario la modifique.

En la siguiente imagen de un router se ve la tabla que tiene el servidor de DHCP con las MAC y las IPs que ha dado a cada MAC, de esa forma puede intentar dar la misma IP a la misma MAC la próxima vez que el ordenador arranque y pida una IP.

Por último tenemos la cuadratura del círculo, que es poder tener una IP fija con DHCP. ¿Como se hace? Pues es muy sencillo , reservamos la IP diciendo que esa IP solo se la demos a cierta MAC. En la siguiente imagen de un router , podemos ver como la IP 192.168.1.110 siempre se dará a la MAC 38-2C-4A-E7-D7-BB.

Despues de ver como funciona DHCP,¿Que utilidad tiene poder modificar todo ésto? Las utilidades son varias.

Mas información:

Cortafuegos

Pasemos ahora a explicar lo que es un cortafuegos. Hemos visto que cualquier proceso puede abrir un puerto 7) y ponerse a escuchar. Esta acción que parece tan inocua realmente tiene mucho peligro. Es un hecho que los programas de ordenador acaban teniendo problemas de seguridad , así que abrir un puerto para que cualquier Host de internet nos pueda enviar datos es un agujero por el que nos pueden hackear el ordenador.

Puede pasar por ejemplo que un programa lector de PDFs abriera un puerto para que se le envíe un documento Word y este programa retorne un PDF. Algo tan inofensivo como eso y hecho de buena fe, puede significar tener un agujero de seguridad. Aunque el ejemplo puede parecer un poco absurdo , el servidor de Windows que permitía compartir carpetas , durante mucho tiempo, tuvo fallos de seguridad.

Por ello los usuarios deberíamos poder decidir en que puertos se escucha y en cuales no. Para ello los sistemas operativos crearon los cortafuegos. Un cortafuego es un programa del sistema operativo que

Obviamente lo mas peligro son las conexiones de entrada pero también podemos desear impedir alguna conexión de salida.

Hay que destacar que cuando impedimos las conexiones de entrada a un puerto abierto, para el proceso de nuestro Host, el puerto está abierto. Es decir que el Sistema operativo permite que el proceso se ponga a escuchar en el puerto pero si lo hemos bloqueado con el cortafuego, simplemente nunca le llegará ningún dato.

Pasemos ahora a ver como usar el cortafuegos de Linux. El comando a usar es ufw, que significa "Uncomplicated Firewall". No voy a explicar como hacerlo ya que está perfectamente explicado en los siguientes tutoriales, por lo que deberéis leerlos:

Ahora que ya sabemos como usar el cortafuegos de Linux, resulta que tiene un problema.El problema es que en cada ordenador de nuestra red, debemos tener un cortafuego. Y puede pasar que:

Por lo tanto lo que se hace es poner una cortafuego en el router de entrada a nuestra red. De esa forma solo tenemos que preocuparnos de un único cortafuegos en toda nuestra casa o empresa. Así que en nuestra casa, el router tambien hace de cortafuegos.

En la imagen el dibujo del muro significa el router que hace de cortafuegos. De esa forma con un único cortafuegos evitamos conexiones entrantes a todos los ordenadores de nuestra red de nuestra empresa o de nuestra casa.

Los cortafuego de los routers por defecto están configurados de la siguiente forma:

Por lo tanto los ordenadores de la red interna se pueden conectar a servidores de Internet pero nadie se puede conectar a servidores internos de nuestra red, evitando así lo problemas de seguridad.

Después de ver los cortafuegos en los router, resulta que ahora los routers tiene una parte interna (la que queremos proteger) y una parte externa. Estas dos redes tienen también los siguientes nombres

Recordar que el problema que tenemos es que los procesos abren puertos que son un problema de seguridad y no queremos que desde cualquier Host de Internet se puedan conectar.

Ya hemos visto el ejemplo del smart TV, que tiene abierto un puerto para permitir que lo controlemos desde el móvil pero no queremos que cualquiera lo pueda hacer desde "china". Y lo mismo con nuestra XBox, etc, etc etc. Es decir , ahora casi todos los cacharros tienen una dirección IP y están esperando a que les enviemos ordenes para manejarlos , así que son potenciales agujeros de seguridad.

No vamos a explicar ahora como configurar el cortafuegos de un router ya que depende de NAT , que es un concepto que vamos a ver posteriormente.

DMZ

Seguimos con los cortafuegos pero ahora vamos a ver el caso en el que queramos que desde Internet se puedan conectar a algún servidor nuestro. El caso mas común es que en nuestra empresa queramos tener un servidor Web. El problema de permitir conexiones a nuestro servidor Web es que hay posibilidad de que sea Hackeado. Y una vez hayan entrado en el servidor Web , desde ahí pueden entrar al resto de ordenadores de nuestra red. Para evitar eso, la red se organiza creando la Zona desmilitarizada o DMZ.

Mas información:

Para explicar la DMZ, veamos los ordenadores que tenemos en nuestra empresa:

Servidor Uso Acceso desde
Servidor web público Es un servidor donde está alojada la información pública de nuestra empresa.
Es el típica página web de cualquier emrpesa.
Internet
Servidor web privado Es un servidor donde está alojada la información privada de nuestra empresa.
Es una web donde están todos los cliente, ventas, comprar ,contabilidad ,etc de nuestra emrpesa
Interior de la empresa
Ordenadores de la propia empresa Son los ordenadores que usan los trabajadores Interior de la empresa

¿Como organizamos la red para que se cumpla lo que hemos puesto en la anterior tabla? Pues en la siguiente imagen se ve como queda todo:

Lo importante es que ahora hay dos cortafuegos:

Es decir, que el cortafuegos interno , no permite ninguna conexión de fuera. Por lo que lo pueden hackear desde el exterior ni a los ordenadores de la empresa ni al servidor web privado. Pero como todos ellos están en la misma red, pueden comunicarse entre ellos sin ningún problema. Por otro lado el cortafuegos externo solo permite las conexiones para el servidor web público. Esto hace que el servidor web público si que pueda ser hackeado pero si eso ocurriera, no pondría en peligro ni al servidor web privado ni a los ordenadores de la empresa. Por otro lado , desde los ordenadores de la empresa , siempre es posible acceder a el servidor público (y obviamente también a internet) ya que el cortafuegos interno permite las conexiones de salida.

Por lo tanto la DMZ es simplemente una red en la que hay uno o mas servidores en las cuales el cortafuegos permite las conexiones de entrada desde Internet pero que en caso de ser hackeada no compromete el resto de los ordenadores de la empresa. Ya que éstos últimos están protegidos con otro cortafuegos.

NAT

NAT se creo debido a que con $2^{32}$ direcciones IPs no son suficientes para todos los Host del mundo. Así que hicieron un "truco" para tener mas Hosts conectados a Internet que IP existen. Es decir que actualmente hay muchos mas de 4.294.967.296 Hosts en Internet.

Mas información:

Para explicar todo ésto vamos a usar como ejemplo nuestras casa. Cuando contratamos internet el operador le asigna a nuestra casa una única IP. Hace 20 años eso no era un problema ya que no había móviles con internet ni las consolas se contactaban a internet, etc. etc. Así que solo había un único ordenador que necesitaba acceso a internet. En aquella época, esa IP que nos asignaba nuestro operador de telecomunicaciones era la que tenía nuestro ordenador y no había un router ya que no tenía sentido al haber un único ordenador en nuestra casa.

Pero pasó el tiempo y empezamos a tener mas de un Host en nuestra casa conectado a Internet, pero debido a la escasez de IPs, nuestro operador de telecomunicaciones seguía dándonos una única IP. Esa IP es la que ahora llamamos la IP Pública. Podemos decir que es una IP "normal y corriente".

Pero entonces, ¿Que IPs tenían el resto de aparatos de nuestra casa?. En ese caso se hizo la siguiente transformación:

¿Que significa una IP Privada? Es una IP con la que no se puede navegar por internet ya que no es única. Cualquiera es su propia casa puede tener la misma IP que nosotros. Las IP privadas son las siguientes:

Normalmente en nuestra casa la red que tenemos es del tipo 192.168.1.0/24. Lo que significa que por ejemplo la IP 192.168.1.100 la pueden tener miles y miles de personas en sus ordenadores de casa. Así que si algún router enviara por error un datagrama con esa IP, el resto de routers no sabrían a cual de las miles y miles de casas habría que enviarlo , así que simplemente se descartan siempre esos datagramas.

Pero, ¿entonces como podemos navegar por internet todos los días aun teniendo una IP Privada?. Pues gracias a NAT. NAT es un truco que pusieron en los routers para permitir que un Host con una IP privada pueda navegar por internet.

Vamos a explicarlo con un ejemplo en el que el Host A inicia una conexión con el servidor del Host B pasando por el router.

En las siguientes imágenes veremos los segmentos que se envían desde el Host A hacia el Host B y luego al revés.

Al enviar los datos el Host A, podemos ver que el segmento TCP que envía el Host A es "normal" con las IPs y puertos que esperaríamos en el segmento TCP pero si vemos el segmento TCP que envía el router hacía el Host B, vemos que la IP origen ha cambiado, es la IP pública del router y el puerto tampoco es el mismo es otro distinto. ¿Porque ha ocurrido ésto? Era obvio que la IP privada de 192.168.100 no podía salir por el router, así que había que poner otra IP y la única posible es la IP pública del router. Vemos también que el puerto cambia ya que como hemos comentado no es importante el puerto origen.

Veamos ahora la respuesta desde el Host B. El segmento TCP que envía el Host B, es el que esperaríamos para lo que sabe el Host B. Es decir que el host B piensa que la respuesta va para la IP pública del Router, aunque realmente vaya para el Host A.

Pero ahora viene lo interesante, cuando le llega el segmento TCP al router , aunque la IP de destino sea la IP pública del propio router, él sabe que no es para él ese segmento sino que es para el Host A. Por lo tanto cuando reeenvía el segmento TCP al Host A , el router cambia la IP destino para que sea la del Host A.

Es decir que un router con NAT hace lo siguiente con las IPs 8):

Los cambios no parecen muy complicados, pero el problema está en los segmentos de entrada. ¿Como sabe el router a que ordenador de la casa va ese segmento si la IP destino es la pública del router? Este es el quid de la cuestión. Volvamos a explicar el problema. Cuando el Host B envía datos de vuelta, la IP destino es la IP pública del router. ¿Como sabe el router que no va para el propio router? ¿Y como sabe a cual de todos los ordenadores de su red interna va ese segmento?

La respuesta es sencilla, lo sabe porque primero ya envió un segmento hacia el Host B, que venía desde el Host A. Así que cuando vuelven datos, sabe que es para el Host A. Por lo tanto ésto es lo importante. El Host A , debe iniciar la conexión ya que de esa forma el router sabrá cuando lleguen los datos que van hacía el Host A. Esa información de quien inicia la petición para saber luego cuando se envían datos desde el Host destino a que Host entregarla de la red interna se guarda en lo que se llama "Tabla NAT".

Pero eso nos crea un problema, ¿Que pasa si alguien de fuera quiere conectarse a un servidor de nuestra red interna? Es decir si ahora la conexión se inicia desde el Host B hacía el Host A. ¡Pues por defecto no puede! y eso es bueno ya que no queríamos que dese cualquier punto de internet alguien se pueda conectar a nuestros servidores. Así que al tener NAT , hemos creado indirectamente un cortafuegos. Veamos un ejemplo de porque es un indirectamente cortafuegos.

Si llega una petición de conexión al router por el puerto 80, éste no puedo redirigirla a ningún ordenador de nuestra red ya que no sabe a cual de todos ellos debería redirigirla ,en el peor de los casos podría ir para el propio router pero éste no tiene abierto el puerto 80 en la red externa así que el router no hace nada y por lo tanto hemos creado un cortafuegos ya que no puede conectarse nadie desde fuera a un ordenador de la red interna.

El concepto de NAT se puede aplicar a nivel de una empresa de telecomunicaciones entera. Es decir , que un proveedor de internet para no tener tantas IP (pensar que hay pocas y valen caras) podría poner un router con NAT delante de todos sus clientes. Eso se llama CGNAT. La consecuencia obvia de ello es que la IP pública de nuestro router ahora tendría una IP privada.

Mas información:

Hasta aquí lo que es el NAT pero….

Abrir puertos

Acabamos de contar que si nuestro router hace NAT, nadie se puede conectar a un servidor que haya en la red interna, pero eso aunque es una ventaja , realmente podemos querer montar un servidor Web y permitir que desde cualquier ordenador podamos conectarnos a él. Es justamente lo que hicimos con el cortafuegos de la DMZ.

Así que los router con NAT tienen una solución para permitir que en nuestra red interna aceptemos conexiones desde fuera. ¡¡Esto es lo que llamamos abrir puertos!!. En el router aparece con el nombre de "Virtual Server".

Vamos a ver como hacer en el router lo siguiente: Queremos que cuando llegue una conexión desde internet a la IP pública de nuestro router al puerto 80 por TCP, se redirija todo al puerto 80 del Host 192.168.1.210.

La siguiente imagen muestra como abrir un puerto

Los datos son:

Hay que fijarse que hay dos puertos. Es así porque el puerto que se ve desde internet puede ser el que queramos pero internamente nuestro servidor puede estar escuchando en otro distinto. Es decir que si nuestro servidor está escuchando en el puerto 80, de cara al exterior podemos usar el puerto que queramos.

En la siguiente tabla se ven los puerto que tiene abierto el router (que son el 80,443,8080 y 1234):

Podemos ver que:

Por último decir que los routers que tenemos en casa realmente no implementan un cortafuegos sino que simplemente implementan NAT que implícitamente funciona similar a un cortafuegos. Y que lo que en un cortafuegos era "Permitir conexiones de entrada" es lo que en el router se llama "Virtual Server" o como nosotros lo llamamos "abrir puertos".

Para acabar diremos que realmente nuestro router tiene o puede tener las siguientes funciones:
  • Obviamente de Router
  • De servidor DNS
  • De servidor DHCP
  • De NAT y cortafuegos
  • De switch ya que permite conectar varios Host por Ethernet
  • De Wifi (ya hablaremos en el siguiente tema de la Wifi)

Ejercicios

Ejercicio 1

Usando comandos de Linux, indica las direcciones IP de los siguientes dominios:

¿Hay algo extraño en alguna de las IPs?

Ejercicio 2

Muestra los servidores DNS que usa tu Linux

Modifica tu linux de forma que si haces ping a los siguientes nombres de dominio se haga ping a las siguientes IPs

Nombre de Dominio IP
dns1.google.com 8.8.8.8
dns2.google.com 8.8.4.4
router La IP de tu puerta de enlace , es decir del router de tu casa

Y luego prueba que funciona:

logongas@beren:~$ ping dns1.google.com
logongas@beren:~$ ping dns2.google.com
logongas@beren:~$ ping router

Ejercicio 3

Haz capturas de pantalla de tu router para mostar:

Ejercicio 4

Configura el cortafuego de tu linux para:

Ejercicio 5

Si tienes la siguiente red:

Indica como organizarías para ello rellena las siguientes tablas:

Nombre Host Dirección IP Mascara de red Puerta de enlace
Ordenador de empresa 1
Ordenador de empresa 2
Servidor Web Privado
Servidor Web Publico

Ordenes en Linux del cortafuego para configuralo en las siguientes ordenadores (suponemos que todos son linux)

Nombre Router Dirección IP Publica Mascara de red Publica Dirección IP Privada Mascara de red Privada Puerta de enlace Rango DHCP
Externo
Interno

Desde internet solo queremos que se pueda acceder por el puerto 80 y 443 al servidor de la DMZ ,así que rellena la siguiente tabla para ver como se abren los puertos.

Nombre Router Service Port Internal Port IP Adress Protocol

Ejercicio 5: Solución

Nombre Host Dirección IP Mascara de red Puerta de enlace
Ordenador de empresa 1 192.168.1.100 255.255.255.0 192.168.1.1
Ordenador de empresa 2 192.168.1.101 255.255.255.0 192.168.1.1
Servidor Web Privado 192.168.1.10 255.255.255.0 192.168.1.1
Servidor Web Publico 192.168.2.15 255.255.255.0 192.168.2.1
Nombre Router Dirección IP Publica Mascara de red Publica Dirección IP Privada Mascara de red Privada Puerta de enlace Rango DHCP
Externo 158.42.4.23 255.255.0.0 192.168.2.1 255.255.255.0 158.42.4.1 192.168.2.100-192.168.2.200
Interno 192.168.2.10 255.255.255.0 192.168.1.1 255.255.255.0 192.168.2.1 192.168.1.100-192.168.1.200
Nombre Router Service Port Internal Port IP Adress Protocol
Externo 80 8080 192.168.2.15 TCP
Externo 443 8443 192.168.2.15 TCP
#En todos los ordenadores
sudo ufw default allow  outgoing
sudo ufw default deny  outgoint
#Servidor web privado
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
#Servidor web público
sudo ufw allow 8080/tcp
sudo ufw allow 8443/tcp
sudo ufw allow from 192.168.2.10 to any port 22

Ejercicio 6

Ejercicio 7

NOTA: Este ejercicio es optativo

Indica como podrías hacer en tu router que a tu ordenador Linux se le de siempre la misma IP.

Ejercicio 8

NOTA: Este ejercicio es optativo

En virtulabox , donde pusiste la opción de "Adaptador puente" , pincha en "Avanzadas" y verás la dirección MAC de tu Linux. A la derecha esta un icono azul que permite cambiar la MAC de tu tarjeta de red.

Al cambiar la MAC , ¿El router ahora te dará la misma IP que antes? Explica porqué

1)
Incluimos la palabra proceso ya realmente son programas de ordenador
2)
Luego veremos que realmente no es manualmente sino por DHCP
3)
el de https
4)
Realmente hay mas información pero no es tan crítica como ésta
5)
La 192.168.1.1 no puede ser ya que está usada por el propio router
6)
La 192.168.1.255 no puede ser ya que es la dirección de broadcast
7)
En jerga de programación se dice abrir un socket
8)
también se cambia el puerto pero no lo hemos indicado aquí por no complicar mas la explicación
9)
usa netcat
10) , 11) , 12)
pero en el tipo de conexión pon RAW