Como ya sabes, la dirección IP de una interfaz de red (tarjeta o adaptador de red) puede ser establecida de forma manual, o de forma automática utilizando un servidor DHCP (acrónimo en inglés de Dynamic Host Configuration Protocol protocolo de configuración dinámica de máquina). El servicio DHCP asigna la dirección IP a la interfaz así como toda la configuración necesaria: máscara, puerta de enlace, servidores de dns a utilizar, etc.
Por defecto, la configuración de la interfaz está establecida de forma automática, para facilitar la conexión del equipo con un router para salir a Internet. Pero, si por algún motivo, necesitas establecer la configuración de red de forma manual, también es posible hacerlo en Linux modo gráfico. Te invito a que veas los primeros 10 minutos del siguiente vídeo para aprender a hacerlo de manera gráfica:
|
Lo normal cuando vemos las conexiones del equipo por comando (ip addr o ifconfig) es que te encuentres con dos dispositivos de red:
- Interfaz de bucle local (lo).
- Interfaz Ethernet (ens# o eno# o enp#s# o eth# dependiendo del hardware y de la versión de Ubuntu).
La interfaz de bucle local está referida a nuestra propia máquina, y su dirección IP siempre es 127.0.0.1; es una dirección IP reservada que tienen todos los equipos que se utiliza para establecer conexiones entre los propios programas de los mismos.
La interfaz Ethernet es realmente la que se corresponde con la tarjeta de red instalada físicamente en tu equipo y a través de la cual, tienes conexión a la red cableada mediante el correspondiente cable de red.
Ficheros de configuración y reinicio del servicio de red
Los ficheros de configuración de red en las distribuciones basadas en Debian se guardan en /etc/netplan/. Hay que editarlos como root y guardar los cambios.
Después hay que reiniciar el servicio de red con el comando:
$ sudo netplan apply #Para ver información de dicho reinicio recomiendo añadir la opción --debug
o también
$ sudo systemctl restart NetworkManager #Puedes cambiar la palabra restart por stop o start o status para ver el estado del servicio
Configuración por defecto con NetworkManager en Ubuntu Desktop
En Ubuntu Desktop el fichero que viene por defecto es /etc/netplan/01-network-manager-all.yaml y utiliza NetworkManager como gestor de red o renderer por defecto; no obstante si por cualquier circunstancia no estuviese podríamos copiar la plantilla que incorpora el programa para estos casos:
$ sudo cp /usr/share/doc/netplan.io/network_manager.yaml /etc/netplan/
o también
$ sudo netplan generate
que generaría automáticamente la configuración requerida. La ventaja de NetworkManager es que administra todos los dispositivos de red automáticamente, de manera que cualquier dispositivo Ethernet que añadamos en caliente, será reconocido y tendrá DHCP una vez que se detecte que hay señal en la tarjeta. Networkd, renderer por defecto en Ubuntu Server/Cloud no tiene esta cualidad por lo que seguiremos utilizando NetworkManager como renderer aunque aprenderemos a configurarlo editando el fichero con la terminal.
Configurar la red en modo terminal (por defecto en Ubuntu Server/Cloud)
Configuración con networkd
En Ubuntu Server y Cloud los ficheros que vienen por defecto son 01-netcfg.yaml y 50-cloud-init.yaml respectivamente. Ambos utilizan el demonio systemd-networkd como gestor de red o renderer por defecto y al no disponer de gráficos deberemos configurar los parámetros de red en dichos ficheros. Vamos a aprender cómo se haría pero utilizando
renderer: NetworkManager
en vez de
renderer: networkd
Dirección IP dinámica (cliente de DHCP también llamado dhclient)
Si queremos utilizar DHCP (configuración de red automática) para una interfaz ethernet identificada como ens33, una configuración podría ser:
network:
version: 2
renderer: NetworkManager
ethernets:
ens33:
dhcp4: true
Nota: Presta especial atención a los espacios: barra espaciadora o tabulador, no os recomiendo mezclarlos dado que la edición de ficheros yaml tiene la peculiaridad que no es lo mismo un espacio+tabulador que 2 espacios, y si un cierto parámetro debe estar a la altura de otro/s puede que netplan no lo coja. Por ejemplo esta configuración nos daría un error en línea 4 y la que está movida es la 6:
network:
version: 2
renderer: NetworkManager
ethernets:
ens33:
dhcp4: true
Es por ello que vuelvo a recomendar utilizar la plantilla antes de editar
$ sudo cp /usr/share/doc/netplan.io/dhcp.yaml /etc/netplan/
Dirección IP estática
Si queremos configurar IP estática en ens33 y dinámica en ens38 por ejemplo:
network:
version: 2
renderer: NetworkManager
ethernets:
ens33:
dhcp4: true
ens38:
dhcp4: no
dhcp6: no
addresses: [192.168.1.110/24, ]
gateway4: 192.168.1.1
nameservers:
addresses: [8.8.4.4, 208.67.222.222]
$ sudo netplan --debug apply #Aplicar configuración
$ sudo ip addr #Ver configuración de las tarjetas
$ sudo ip route #Ver tabla de enrutamiento
$ sudo systemd-resolve --status #Ver configuración de servidores DNS utilizados
$ netplan ip leases ens33 #Ver concesiones hechas a la interfaz ens33
Cliente de DNS
El archivo de configuración de los servidores de nombres es /etc/resolv.conf, un contenido de ejemplo podría ser:
nameserver 8.8.4.4
nameserver 208.67.222.222
Un cliente DNS irá preguntando a los servidores de nombres por orden de aparición en el fichero. Esto no ha cambiado, pero como desde versión 17.10 Ubuntu incorpora un servidor interno de DNS con caché llamado systemd-resolved (también lo llaman DNSStub o nameserver 127.0.0.53 y para terminar de liarlo corre con el usuario "systemd-resolve"), encontraréis que por defecto el fichero resolv.conf es un acceso directo a los DNS que este programa mantiene en /run/systemd/resolve/stub-resolv.conf. En la cabecera de dicho fichero podéis ver el comando:
$ systemd-resolve --status
muy útil para ver qué configuración de cliente DNS se está aplicando a nivel general y por tarjeta: ésta es la principal ventaja de dejarlo como está (uso particularizado de servidores de DNS por tarjeta):
nameserver 127.0.0.53
search localdomain
Comando ip
Este comando permite la gestión de la red en tiempo real en el equipo, si queremos que nos muestre las interfaces:
$ ip addr
$ ip a
Si queremos ver la tabla de rutas o rutas hacia una IP concreta:
$ ip route
$ ip r
$ sudo ip route get 8.8.8.8
Asimismo con ip podemos configurar una ip con dirección de broadcast directamente:
$ sudo ip addr add 192.168.1.110/24 brd + dev ens33
eliminar dicha configuración
$ sudo ip addr del 192.168.0.110/24 dev ens33
deshabilitar interfaz
$ sudo ip link set dev ens33 down
establecer una ruta de conexión por defecto
$ sudo ip route add default via 192.168.1.1
y ver estadísticas de la red
$ ip -s link
Para más info: https://ayudalinux.com/comando-ip/
route (necesario instalar paquete net-tools)
Imprime la tabla de rutas del sistema. Donde ponga la ruta default o 0.0.0.0, tendrá que aparecer la puerta de enlace G, es decir la dirección IP del router. Se pueden añadir manualmente con route add, y borrar con route delete (Ejemplos: route add default gw 10.0.0.1, route add -host 192.168.10.12 gw 10.0.0.1, route add -net 80.0.0.0 netmask 255.0.0.0 dev ens33)
$ route
$ route -n // este funciona más rápido porque obligamos a que no haga resolución de nombres
Comprobar funcionamiento de red
ping
Para comprobar que tenemos red, lo mejor es hacer un ping a un sitio de internet. Si falla, probaremos a poner una dirección IP en lugar de un nombre.
$ ping 8.8.8.8 #en Linux está enviado paquetes hasta que no se para con Ctrl+C
$ ping -c5 google.es #envía 5 paquetes al destino
traceroute
Para observar los saltos que hay hasta un determinado lugar. Por defecto no viene instalado en muchas distribuciones, habrá que instalarlo (apt install traceroute).
$ traceroute google.es
netstat
netstat muestra las conexiones que se están usando en la tarjeta de red. Para saber los puertos abiertos en el sistema:
$ netstat –lant
-l muestra conexiones que están escuchando
-a muestra todas las conexiones
-n muestra ips en lugar del nombre
-t sólo muestra conexiones tcp
-p muestra el identificador del proceso que está usando el puerto
arp
Muestra la tabla caché de arp. Las direcciones mac aprendidas. Con –d podemos borrarla, con –s añadir entradas estáticas
$ arp
Cambiar el nombre del equipo en Ubuntu en 2 pasos sin reiniciar
Tal y como explico en este vídeo: https://www.youtube.com/watch?v=SeYkx8cQMMk para cambiar el nombre de un host en Ubuntu vamos a modificar el fichero /etc/hosts, en la línea donde asocia 127.0.1.1 al nombre del equipo, hay que sustituir el antiguo por el nuevo-nombre-del-host. Posteriormente hay que ejecutar
$ sudo hostnamectl set-hostname nuevo-nombre-host
Búsquedas estáticas con /etc/hosts y /etc/resolv.conf
Hemos hablado del fichero /etc/hosts porque este fichero se utiliza para resolver nombres por IPs de manera fija o estática. Si nuestro host pertenece a una red con dominio habría que copiar el FQDN o nombre completo de nuestro servidor en dicho fichero, por ejemplo, si nuestra máquina se llama ubuntu-vm, tiene la IP 192.168.13.128 y además pertenece a la red/dominio delarioja.org habría que copiar en el /etc/hosts la siguiente línea:
192.168.13.128 ubuntu-vm.delarioja.org ubuntu-vm
De esta manera tanto un ping a ubuntu-vm como a ubuntu-vm.delarioja.org haría que se emitiesen paquetes con IP destino 192.168.13.128.
Ya sabemos que si queremos hacer que la máquina consulte nombres con un servidor en particular, simplemente se agrega la dirección al archivo /etc/resolv.conf. Por ejemplo si se desea realizar búsquedas con el servidor DNS 192.168.13.1, se debe tener un archivo resolv.conf de esta manera:
nameserver 192.168.13.1
search delarioja.org
En este caso el search delarioja.org causa que las búsquedas de nombres de host (hostnames) que no tengan dominio tengan delarioja.org por defecto añadido. Por eso si hacemos ping al host fernando-pc el sistema intentará resolver el nombre fernando-pc y si no da con él, probará con fernando-pc.delarioja.org para dar con su IP.