Ir al contenido
Mgbu

Guía actualizada sobre networking desde la terminal (2017)

Recommended Posts

Hago esta guía así tengo todo lo relacionado a redes en un solo lugar, porque tenía el problema de que no sabía que herramienta usar, hay muchas alternativas y algunas están obsoletas. Pueden haber varias formas correctas de hacer las cosas, me parece que la forma más actualizada y fácil es:

 

  • Activar y desactivar interfaces. Direcciones IP, MAC, Gateway, fijas:
    • Temporalmente: ip link, ip address e ip route
    • Permanentemente: /etc/network/interfaces
  • DHCP:
    • Temporalmente: dhclient
    • Permanentemente: /etc/network/interfaces
  • DNS: /etc/resolv.conf
  • WiFi:
    • Conexión, información: iw
    • Autenticación con WPA: wpa_supplicant

 

A esto lo hice en el 2017, en unos años puede cambiar un poco, lo que veo que está por cambiar es lo de DNS. Para mí las otras cosas van a seguir igual.

 

También está NetworkManager, que es el programa gráfico que también hace todo eso. Todo esto lo escribí olvidandome de NetworkManager, si hay conflictos se puede deshabilitar con sudo service network-manager stop. Si se van a poner a jugar con la terminal recomendaría que lo hagan. Si van a hacer algo sobre wireless también deshabiliten otro servicio: sudo service wpa-supplicant stop, porque en las pruebas que hice hacía que se conecte automáticamente a mi WiFi.

 

Todo esto es pensando en Debian y derivadas (Ubuntu, Linux Mint, ...), no se si otras distros tendrán muchas diferencias. Yo voy a poner siempre ejemplos de comandos, obviamente hay que cambiar la interfaz/IP/MAC y poner la que quieran. Además uso sudo en los comandos que haga falta ser administrador.

 

Para las redes inalámbricas pongo todo al final, lo que tienen de distinto es que es difícil la conexión. Configurar las direcciones, DHCP, DNS es lo mismo que en una red cableada.

 

Sobre el comando ip

 

Como el comando ifconfig (de la suite net-tools) está obsoleto, hay que empezar a usar en su lugar el comando ip, que es parte de iproute2. Además es un comando que me parece más fácil de usar y de recordar, porque además incluye las cosas sobre rutas (gateway).

Este comando configura las interfaces temporalmente, al reiniciar se pierde todo.

 

  • El comando ip tiene varias secciones (que se llaman objetos en el manual), como ip address, ip route o ip link
  • Según el manual el comando es: ip [ OPTIONS ] OBJECT { COMMAND | help }
    • Las opciones son por ejemplo -c, que agrega color a la salida del comando
    • El objeto es algo como address o link
    • El comando es el resto de las cosas que se escriban
  • La ubicación de las opciones importa, siempre van antes del objeto
  • El comando help es útil. (ej: ip address help)
  • El objeto se puede abreviar, es lo mismo address, addr o simplemente a
  • Yo voy a usar siempre la opción -c que agrega color a la salida del comando (aunque el comando no tenga salida creo que conviene acostumbrarse), ayuda mucho a encontrar las partes más importantes
  • Otra opción útil es -s que agrega más información (estadísticas según veo)

 

Sobre /etc/network/interfaces

 

Es un archivo de configuración que es leído cada vez que se inicia el sistema o cada vez que se conecta un cable ethernet. Esto se usa para configuraciones permanentes.

 

Sobre la nueva nomenclatura de las interfaces

 

Antes las interfaces de red se llamaban eth0, eth1, eth2... para las cableadas, y wlan0, wlan1, wlan2 para las inalámbricas. Estaba el problema de que no eran nombres permanentes, entonces la interfaz que ahora es eth1 mañana podría bootear en eth0.

 

Entonces ahora las interfaces se nombran distinto. Primero van dos letras que dicen el tipo de interfaz y lo que viene después dice la ubicación.

 

Prefijo:

  • en: Ethernet
  • wl: WLAN

Ubicación (puede ser cualquiera de estas formas, lo que está entre <> es reemplazado por un número, lo que está entre [] es opcional):

  • b<number>
  • c<bus_id>
  • o<index>[n<phys_port_name>|d<dev_port>]
  • s<slot>[f<function>][n<phys_port_name>|d<dev_port>]
  • x<MAC>
  • [P<domain>]p<bus>s<slot>[f<function>][n<phys_port_name>|d<dev_port>]

 

La forma más común creo que es p<bus>s<slot>, por ejemplo p3s4, que junto con el prefijo sería enp3s4

 


 

 

ip link

 

Sirve para configurar las interfaces

 

ip -c link

Muestra información sobre las interfaces, por ejemplo:

Cita

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: enp4s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP mode DEFAULT group default qlen 1000
    link/ether 08:9e:01:43:f2:eb brd ff:ff:ff:ff:ff:ff
3: wlp9s0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc mq state DOWN mode DORMANT group default qlen 1000
    link/ether 76:bb:9f:94:a1:6e brd ff:ff:ff:ff:ff:ff

Lo importante está en color (yo lo puse acá en negrita).

Se puede ver si las interfaces están UP o DOWN donde está resaltado (el UP que está dentro de los <> no sé que significa). La otra cosa a ver es la MAC de la interfaz

 

sudo ip -c link set enp4s0 down

Para poner la interfaz en UP o DOWN

 

sudo ip -c link set enp4s0 address 12:34:56:78:90:ab

Esto cambia la MAC de la interfaz, la interfaz primero debe estar en DOWN

 

 


 

 

ip address

 

Sirve para manejar las direcciones

 

ip -c address

Muestra información sobre las direcciones MAC e IP. Por ejemplo:

Cita

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: enp4s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 12:34:56:78:90:ab brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.33/24 brd 192.168.1.255 scope global dynamic enp4s0
       valid_lft 862983sec preferred_lft 862983sec
    inet6 fe80::b8a9:1d32:6da6:a5e5/64 scope link
       valid_lft forever preferred_lft forever
3: wlp9s0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc mq state DOWN group default qlen 1000
    link/ether 5e:9a:87:df:3d:80 brd ff:ff:ff:ff:ff:ff

Ahí se puede ver lo mismo que con ip -c link pero además las direcciones IPv4 e IPv6

 

sudo ip -c address flush dev wlp9s0

Borra todas las IPs de una interfaz. Cuidado que suele borrar las rutas y uno debe configurar el gateway de nuevo.

 

sudo ip -c address del 192.168.0.103/24 dev wlp9s0

Borra una IP configurada. Cuidado que suele borrar las rutas y uno debe configurar el gateway de nuevo.

 

sudo ip -c address add 192.168.0.50/24 broadcast 192.168.0.255 dev wlp9s0

Agrega una dirección IP junto con su máscara de red

 

 


 

 

ip route

 

Configura las rutas. Lo más importante es el gateway

 

ip -c route

Muestra las rutas configuradas, por ejemplo:

Cita

default via 192.168.0.1 dev wlp9s0 proto static metric 600
169.254.0.0/16 dev wlp9s0 scope link metric 1000
192.168.0.0/24 dev wlp9s0 proto kernel scope link src 192.168.0.103 metric 600

La importante es la ruta "default" que es el gateway

 

sudo ip -c route flush dev wlp9s0

Borra todas rutas de una interfaz

 

sudo ip -c route del default

Borra el gateway

 

sudo ip -c route add default via 192.168.0.1

Configura el gateway

 

 


 

 

dhclient

 

Configura automáticamente usando DHCP

 

sudo dhclient wlp9s0

Configura la interfaz usando DHCP, previamente se deben borrar todas las rutas y direcciones asociadas a esa interfaz con:

sudo ip -c route flush dev wlp9s0
sudo ip -c address flush dev wlp9s0

 

 


 

 

/etc/network/interfaces

 

Este archivo configura las interfaces en el inicio del sistema o cuando se conecta un cable ethernet. Un ejemplo sería:

 

auto lo
iface lo inet loopback

allow-hotplug enp4s0
iface enp4s0 inet dhcp

Ahí hay dos interfaces, una es de loopback que no nos importa (aunque siempre habría que escribirla). La otra es una interfaz cableada que se configura automáticamente con DHCP al ser conectado el cable.

 

Para definir una interfaz primero usamos auto o allow-hotplug junto con el nombre de la interfaz. la palabra auto hace que se configure al inicio del sistema, en cambio allow-hotplug además configura la interfaz cuando se conecta un cable.

Las líneas siguientes dependen de si se quiere usar DHCP o IP fija.

 

# Para DHCP:
iface enp4s0 inet dhcp


# Para IP estática:
iface eth0 inet static
        address 192.168.0.50
        broadcast 192.168.0.255
        netmask 255.255.255.0
        gateway 192.168.0.1

 

 


 

 

/etc/resolv.conf

 

Esto está cambiando, en unos años supongo que va a ser distinto.

 

Para cambiar el DNS , hay que modificar el archivo /etc/resolv.conf con cualquier editor (como nano). Por ejemplo para usar los DNS de Google:

Cita

nameserver 8.8.8.8

nameserver 8.8.4.4

 

Puede que el archivo tenga una advertencia:

Cita

# Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8)
#     DO NOT EDIT THIS FILE BY HAND -- 
#     YOUR CHANGES WILL BE OVERWRITTEN

 

Si esa advertencia estaba presente en el archivo, los cambios que hagas van a ser sobreescritos. Lo que sigue es lo que hay que hacer en esos casos.

 

Cita

 

En Ubuntu (por ahora) hay un nuevo comando que se llama resolvconf que parece que va a manejar al archivo /etc/resolv.conf.

Como se puede ver en una advertencia ubicada en /etc/resolv.conf, cada vez que hagas una modificación tus cambios van a ser sobreescritos. Actualmente hay dos opciones:

 

Una es especificar los DNS en /etc/network/interfaces como se puede ver en este ejemplo:


iface eth0 inet static
        address 192.168.0.50
        broadcast 192.168.0.255
        netmask 255.255.255.0
        dns-nameservers 8.8.8.8 8.8.4.4
        gateway 192.168.0.1
wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

La otra es agregar  las líneas al archivo /etc/resolvconf/resolv.conf.d/base como si se tratara de /etc/resolv.conf. Hay una advertencia que dice que no hay que editar el archivo pero hay que ignorarla, este archivo es copiado a /etc/resolv.conf automáticamente y esa advertencia se aplica a /etc/resolv.conf.

Esta es una solución bastante mala pero por ahora es lo que hay. Finalmente hay que actualizar el archivo con:


sudo resolvconf -u
wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

 

 


 

 

iw

 

Maneja las conexiones WiFi. man iw muestra muy poca ayuda, usen en su lugar a iw help. Pongo en todos los comandos sudo porque Debian lo pide, pero sé que en Ubuntu algunos comandos no necesitan sudo.

iw vendría a reemplazar a iwconfig. Lo mismo que pasó con ip e ifconfig.

 

sudo iw dev wlp9s0 info

Ver información sobre la interfaz

 

sudo iw dev wlp9s0 link

Ver información sobre la conexión

 

sudo iw dev wlp9s0 disconnect

Desconectarse. Me pasó que se vuelve a conectar solo segundos después, tuve que deshabilitar el servicio wpa_supplicant

 

sudo iw dev wlp9s0 set type ibss

Configurar el modo a usar, puede ser managed (lo común) o ibss (para redes ad-hoc) No probé las redes ad-hoc, siempre usé managed

 

sudo iw dev wlp9s0 scan

Escanear AP disponibles. La salida es MUY larga y no sé si hay alguna opción para tener información resumida.

Si solamente se necesitan los nombres de las redes se puede usar sudo iw dev wlp9s0 scan | grep SSID.
 

sudo iw dev wlp9s0 connect WiFi_Pedrito

Conectarse a un AP sin seguridad.

Una vez me pasó que no se conectaba, se arregló cambiando el modo a ibss y a managed de vuelta. No se por qué.

 

sudo iw dev wlp9s0 connect WiFi_Pedrito key 0:password

Conectarse a un AP con seguridad WEP (la contraseña es password). Nunca probé este comando

 

Para conectarse a un AP con WPA ver wpa_supplicant abajo

 

 


 

 

wpa_supplicant

 

Sirve para conectarse a APs con WPA o WPA2. Reemplaza al comando iw dev wlp9s0 connect WiFi_Pedrito key 0:password que servía para WEP, para WPA es distinto.

 

wpa_passphrase "WiFi_Pedrito" "password" > temp_wpa
sudo wpa_supplicant -B -i wlp9s0 -c temp_wpa

El primer comando calcula unas claves a partir del SSID y la contraseña, al resultado lo guarda en el archivo temp_wpa. Este archivo es usado por el comando siguiente.

El segundo comando se conecta al AP especificado en el archivo recién creado. El comando queda corriendo para siempre, la opción -B hace que el comando corra en el fondo como un daemon.

Hay que acordarse de borrar el archivo temp_wpa después!

 

killall wpa_supplicant

Para matar a wpa_supplicant cuando éste haya sido iniciado como daemon usando -B. Esto corta la conexión.

Editado por Mgbu
Terminando...

Compartir este post


Enlace al post
Compartir en otros sitios

Ahí está terminado. Estaría bueno agregar al final "recetas" para conectarse que se puedan copiar y pegar una abajo de otra.

También estaría bueno pasar todo a un sitio en GitHub porque los posts largos en los foros me dan miedo. (BBCode también me da miedo)

Editado por Mgbu

Compartir este post


Enlace al post
Compartir en otros sitios

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Invitado
Responder en este tema...

×   Has incluido contenido con formato.   Eliminar formato

  Sólo se permiten 75 emoticonos como máximo.

×   Tu enlace ha sido insertado automáticamente.   Deshacer y mostrar como enlace

×   Su contenido anterior ha sido restaurado.   Limpiar editor

×   No puedes pegar imágenes directamente. Súbelas a algún hosting de imágenes y pega la dirección URL


×
×
  • Crear Nuevo...