Configuración de la red en Linux

Cada distribución de Linux puede ser diferente a la hora de configurar la red. Personalmente, estoy muy acostumbrado a administrar RedHat desde hace años y configuro la red de la siguiente manera:

Configuración del hostname y el default gateway en Linux

En el fichero /etc/sysconfig/network configuro el hostname del servidor y el default gateway:

# cat network
NETWORKING=yes
HOSTNAME=srv1ws1
GATEWAY=10.49.0.1
NOZEROCONF=yes
PEERDNS=no
NETWORKING_IPV6=no
#

Si queremos eliminar el uso del default gateway para una tarjeta de red, añadiremos la directiva: DEFROUTE=no

Añadir y eliminar el default gateway por la línea de comandos de Linux

Si queremos hacer una prueba, podemos añadir o eliminar el default gateway a través de la línea de comandos de Linux, pero el cambio no quedará guardado cuando se rebote el servidor. Para que quede guardado, hay que modificar los ficheros de red.

ip route add default via 192.0.2.2 dev eth0
ip route del

En el caso del comando «del», el comando ya asume que se va a eliminar la ruta por defecto sin necesidad de añadir ningún parámetro más.

Configuración de una IP con NetworkManager

Con el comando nmcli de NetworkManager podemos configurar, modificar o deshabilitar tarjetas de red en Linux.

A continuación, vamos a asignar una IP estática a una interfaz de red:

[root@localhost ~]# nmcli con add type ethernet con-name static ifname ens37 ip4 192.168.248.131/24 gw4 192.168.248.2
Connection 'static' (5eaf5779-5b0a-45c1-ba74-798f9798fd90) successfully added.
[root@localhost ~]# 

[root@localhost ~]# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    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: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 00:0c:29:89:20:57 brd ff:ff:ff:ff:ff:ff
    inet 192.168.248.130/24 brd 192.168.248.255 scope global dynamic noprefixroute ens33
       valid_lft 1048sec preferred_lft 1048sec
    inet6 fe80::66b8:8815:aa0d:dc80/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever
3: ens37: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 00:0c:29:89:20:61 brd ff:ff:ff:ff:ff:ff
    inet 192.168.248.131/24 brd 192.168.248.255 scope global dynamic noprefixroute ens37
       valid_lft 1048sec preferred_lft 1048sec
    inet6 fe80::1868:64db:502e:d86a/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever
4: ens38: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 00:0c:29:89:20:6b brd ff:ff:ff:ff:ff:ff
    inet 192.168.248.132/24 brd 192.168.248.255 scope global dynamic noprefixroute ens38
       valid_lft 1048sec preferred_lft 1048sec
    inet6 fe80::e3e0:a76e:a3be:a01b/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever
5: virbr0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default qlen 1000
    link/ether 52:54:00:7f:cc:e0 brd ff:ff:ff:ff:ff:ff
    inet 192.168.122.1/24 brd 192.168.122.255 scope global virbr0
       valid_lft forever preferred_lft forever
6: virbr0-nic: <BROADCAST,MULTICAST> mtu 1500 qdisc fq_codel master virbr0 state DOWN group default qlen 1000
    link/ether 52:54:00:7f:cc:e0 brd ff:ff:ff:ff:ff:ff
[root@localhost ~]# 

[root@localhost ~]# cat /etc/sysconfig/network-scripts/ifcfg-static
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=none
IPADDR=192.168.248.131
PREFIX=24
GATEWAY=192.168.248.2
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=static
UUID=5eaf5779-5b0a-45c1-ba74-798f9798fd90
DEVICE=ens37
ONBOOT=yes
[root@localhost ~]# 

Si quisiéramos configurar una interfaz de red con DHCP, utilizaríamos el parámetro «auto» de nmcli. Ejemplo:

nmcli con mod ens160 ipv4.method auto
nmcli con down ens160
nmcli con up ens160

Eliminación de la configuración de una tarjeta de red con NetworkManager

[root@localhost ~]# nmcli conn
NAME                UUID                                  TYPE      DEVICE 
ens33               c93d7d4c-7532-464e-8e20-47adc410e507  ethernet  ens33  
Wired connection 1  913fa7a9-9a91-3bfc-b549-722f630b633f  ethernet  ens37  
Wired connection 2  2c32c84e-7ecd-3d2b-96d3-d07c0df54dac  ethernet  ens38  
virbr0              5fadfe2f-a2f5-4ccc-8fd6-afaed9a15212  bridge    virbr0 
static              5eaf5779-5b0a-45c1-ba74-798f9798fd90  ethernet  --     
static2             d05c911f-c470-436d-ab27-1aea5d98e7d3  ethernet  --     
[root@localhost ~]#

[root@localhost ~]# nmcli con delete uuid 5eaf5779-5b0a-45c1-ba74-798f9798fd90
Connection 'static' (5eaf5779-5b0a-45c1-ba74-798f9798fd90) successfully deleted.
[root@localhost ~]#

También podemos eliminar una conexión por su nombre en vez de por su UID:

[root@localhost network-scripts]# nmcli connection delete bond0
Connection 'bond0' (fe8ea19b-cee8-4105-8cc3-ad2e4f535e1f) successfully deleted.
[root@localhost network-scripts]# 

Si queremos eliminar más de una conexión al mismo tiempo, escribiremos cada una de ellas en la misma línea de comandos:

[root@localhost network-scripts]# nmcli connection delete f3928576-e4f2-458e-aa7b-5e3d440fbc3b 461855e0-1a6a-458e-bd74-0a268cf22df1 f4b10d6b-409e-44a0-ac72-cfd36372a864 d54adad4-5fbf-4862-8b1f-d27d0b0dc62a
Connection 'bond-slave-ens37' (f3928576-e4f2-458e-aa7b-5e3d440fbc3b) successfully deleted.
Connection 'bond-slave-ens37-1' (461855e0-1a6a-458e-bd74-0a268cf22df1) successfully deleted.
Connection 'bond-slave-ens38' (f4b10d6b-409e-44a0-ac72-cfd36372a864) successfully deleted.
Connection 'bond-slave-ens38-1' (d54adad4-5fbf-4862-8b1f-d27d0b0dc62a) successfully deleted.
[root@localhost network-scripts]#

Configuración de IPs y rutas en RedHat 8 con NetworkManager

El mecanismo es prácticamente idéntico al que hemos visto. Una vez que hemos configurado los ficheros de las tarjetas de red y rutas, aplicaremos la nueva configuración con los siguientes comandos:

systemctl restart NetworkManager
nmcli networking off; nmcli networking on

Veamos un ejemplo:

[root@localhost ~]# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    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: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 00:50:56:10:08:eb brd ff:ff:ff:ff:ff:ff
    inet 30.34.169.33/24 brd 30.34.169.255 scope global noprefixroute eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::250:56ff:fe10:8eb/64 scope link
       valid_lft forever preferred_lft forever
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 00:50:56:16:59:46 brd ff:ff:ff:ff:ff:ff
[root@localhost ~]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         30.34.169.1     0.0.0.0         UG    100    0        0 eth0
10.100.0.209    30.34.169.1     255.255.255.255 UGH   100    0        0 eth0
15.0.0.0        30.34.169.1     255.0.0.0       UG    100    0        0 eth0
15.131.216.0    30.34.169.1     255.255.254.0   UG    100    0        0 eth0
15.131.253.128  30.34.169.1     255.255.255.128 UG    100    0        0 eth0
15.131.254.0    30.34.169.1     255.255.255.128 UG    100    0        0 eth0
28.1.0.0        30.34.169.1     255.255.0.0     UG    100    0        0 eth0
30.0.0.0        30.34.169.1     255.0.0.0       UG    100    0        0 eth0
30.34.169.0     0.0.0.0         255.255.255.0   U     100    0        0 eth0
138.35.0.0      30.34.169.1     255.255.0.0     UG    100    0        0 eth0
155.61.0.0      30.34.169.1     255.255.0.0     UG    100    0        0 eth0
192.151.16.0    30.34.169.1     255.255.255.0   UG    100    0        0 eth0
192.151.66.0    30.34.169.1     255.255.255.0   UG    100    0        0 eth0
[root@localhost ~]# cd /etc/sysconfig/network-scripts/
[root@localhost network-scripts]# cp -p ifcfg-eth0 ifcfg-eth0:1
[root@localhost network-scripts]# vi ifcfg-eth0:1
[root@localhost network-scripts]# grep -i ipaddr ifcfg-eth0* |grep -v "#"
ifcfg-eth0:IPADDR=10.49.40.103
ifcfg-eth0:1:IPADDR=30.34.169.33
[root@localhost network-scripts]# systemctl restart NetworkManager
[root@localhost network-scripts]# nmcli networking off; nmcli networking on
[root@localhost network-scripts]# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    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: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 00:50:56:10:08:eb brd ff:ff:ff:ff:ff:ff
    inet 10.49.40.103/24 brd 10.49.40.255 scope global noprefixroute eth0
       valid_lft forever preferred_lft forever
    inet 30.34.169.33/24 brd 30.34.169.255 scope global noprefixroute eth0:1
       valid_lft forever preferred_lft forever
    inet6 fe80::250:56ff:fe10:8eb/64 scope link tentative
       valid_lft forever preferred_lft forever
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 00:50:56:16:59:46 brd ff:ff:ff:ff:ff:ff
[root@localhost network-scripts]# cd ..
[root@localhost sysconfig]# vi network
[root@localhost sysconfig]# cat network
NETWORKING=yes
GATEWAY=10.49.40.1
NOZEROCONF=yes
PEERDNS=no
NETWORKING_IPV6=no
[root@localhost sysconfig]# systemctl restart NetworkManager
[root@localhost sysconfig]# nmcli networking off; nmcli networking on
[root@localhost sysconfig]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         10.49.40.1      0.0.0.0         UG    100    0        0 eth0
10.49.40.0      0.0.0.0         255.255.255.0   U     100    0        0 eth0
10.100.0.209    30.34.169.1     255.255.255.255 UGH   100    0        0 eth0
15.0.0.0        30.34.169.1     255.0.0.0       UG    100    0        0 eth0
15.131.216.0    30.34.169.1     255.255.254.0   UG    100    0        0 eth0
15.131.253.128  30.34.169.1     255.255.255.128 UG    100    0        0 eth0
15.131.254.0    30.34.169.1     255.255.255.128 UG    100    0        0 eth0
28.1.0.0        30.34.169.1     255.255.0.0     UG    100    0        0 eth0
30.0.0.0        30.34.169.1     255.0.0.0       UG    100    0        0 eth0
30.34.169.0     0.0.0.0         255.255.255.0   U     100    0        0 eth0
138.35.0.0      30.34.169.1     255.255.0.0     UG    100    0        0 eth0
155.61.0.0      30.34.169.1     255.255.0.0     UG    100    0        0 eth0
192.151.16.0    30.34.169.1     255.255.255.0   UG    100    0        0 eth0
192.151.66.0    30.34.169.1     255.255.255.0   UG    100    0        0 eth0
[root@localhost sysconfig]#

¿Necesitas un cable de red Ethernet?

Configuración del DNS que va a utilizar el sistema Linux

En /etc/resolv.conf, configuro los DNSs:

cat /etc/resolv.conf
domain 7143.1286.ecs.hp.com
search 7143.1286.ecs.hp.com 3804.1319.ecs.hp.com
nameserver 30.34.129.11 # wadslax0.8798.1286.ecs.hp.com
nameserver 30.34.129.12 # wadslax1.8798.1286.ecs.hp.com
#

En /etc/sysconfig/network-script configuro las IPs, máscaras de red y bondings de todas las tarjeas de red, además de las rutas:

NetworkManager sobreescibe el fichero resolv.conf en cada reboot

Que el fichero /etc/resolv.conf se sobreescriba en cada reboot es un problema frecuente que nos encontramos con NetworkManager, pero que también es de fácil solución. Simplemente, editaremos el fichero /etc/NetworkManager/NetworkManager.conf y añadiremos la siguiente entrada:

[main]
dns=none

Configuración del Bonding

La configuración del bonding es, básicamente, la alta disponibilidad a nivel de tarjetas de red o, dicho de otra manera, dos o más tarjetas de red proporcionan una IP de servicio. Si se estropear una de las tarjetas de red, la IP configurada a nivel de bonding sigue siendo accesible.

Modos de bonding:

Modos de configurar un bonding
Configuración de la red en Linux 4
# cat ifcfg-eth0
DEVICE=eth0
MASTER=bond0
SLAVE=yes
BOOTPROTO=none
TYPE=Ethernet
ONBOOT=yes
# cat ifcfg-eth1
DEVICE=eth1
MASTER=bond0
SLAVE=yes
BOOTPROTO=none
TYPE=Ethernet
ONBOOT=yes
# cat ifcfg-bond0
DEVICE=bond0
ONBOOT=yes
TYPE=Ethernet
BOOTPROTO=none
IPADDR=30.32.0.80
NETMASK=255.255.255.0
BONDING_OPTS="mode=active-backup miimon=100"
#

Configurando el bonding con NetworkManager

[root@localhost ~]# nmcli con add type bond con-name bond0 ifname bond0 mode active-backup ip4 192.168.248.131/24
Connection 'bond0' (94255f7e-d281-493e-837a-485d8b4abc5b) successfully added.
[root@localhost ~]# nmcli con add type bond-slave ifname ens37 master bond0
Connection 'bond-slave-ens37' (f3928576-e4f2-458e-aa7b-5e3d440fbc3b) successfully added.
[root@localhost ~]# nmcli con add type bond-slave ifname ens38 master bond0
Connection 'bond-slave-ens38' (f4b10d6b-409e-44a0-ac72-cfd36372a864) successfully added.
[root@localhost ~]# 

Configuración de las rutas en Linux

Una vez configurado el bonding, el fichero de tabla de rutas a configurar está en /etc/sysconfig/network-scripts/route-bond0, si usas RedHat o CentOs, por ejemplo.

Configuración de las rutas permanentemente

Lo podemos configurar de dos maneras:

  • Método via:
#cat route-bond0 
15.131.0.0/16 via 30.32.0.1
15.163.0.0/16 via 30.32.0.1
15.163.192.0/18 via 30.32.0.1 dev bond0
15.131.192.0/18 via 30.32.0.1 dev bond0
#
  • Método tradicional:
# cat route-bond0
 ADDRESS0=10.100.0.209
 NETMASK0=255.255.255.255
 GATEWAY0=30.34.229.1

Añadir o eliminar una ruta de manera dinámica

Si queremos hacer una prueba, añadir o eliminar una ruta sin tener que reiniciar el servicio de red, lo haremos de la siguiente manera:

  • Añadir una ruta
[root@liocsux3 ~]# ip route add 15.131.192.0 via 30.34.84.1 dev eth0
[root@liocsux3 ~]# route -n |grep 15.131.192.0
15.131.192.0    30.34.84.1      255.255.255.255 UGH   0      0        0 eth0
[root@liocsux3 ~]#
  • Eliminar una ruta
[root@liocsux3 ~]# ip route del 15.131.192.0/18
[root@liocsux3 ~]# route -n |grep 15.131.192.0
[root@liocsux3 ~]#

Debemos tener en cuenta de que si reiniciamos el servidor o los servicios de red, se desconfigurarán las rutas dinámicas añadidas o eliminadas.

Podrías necesitar echar un vistazo a la tabla de máscaras de red.

IPs virtuales

Una IP virtual es una nueva IP configurada en una misma interfaz física. Por ejemplo, la interfaz bond0 tiene dos IPs configuradas:

# ip addr |grep bond0
2: eth0: <BROADCAST,MULTICAST,SLAVE,UP,LOWER_UP> mtu 1500 qdisc mq master bond0 state UP qlen 1000
3: eth1: <BROADCAST,MULTICAST,SLAVE,UP,LOWER_UP> mtu 1500 qdisc mq master bond0 state UP qlen 1000
6: bond0: <BROADCAST,MULTICAST,MASTER,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP
inet 30.32.0.80/24 brd 30.32.0.255 scope global bond0
inet 30.32.0.82/24 brd 30.32.0.255 scope global secondary bond0:1
#

Para hacer este montaje, simplemente, crearemos el fichero /etc/sysconfig/network-scripts/ifcfg-bond0:1.

Configuración del enrutamiento de los paquetes de salida

Si no se especifica lo contrario, todo el tráfico de salida se realizará por la tarjeta de red principal del servidor (eth0, por ejemplo), pero hay una manera de enrutar el tráfico de salida por tarjetas de red concretas.

ESCENARIO

  • Tengo un Linux RedHat 8 en Amazon AWS
  • Se le han asignado dos tarjetas de red al servidor
  • Cada tarjeta de red tiene una IP privada asignada del mismo rango de red
  • Cada tarjeta de red tiene asignada una IP pública
  • Los usuarios deben poder acceder al servicio SSH a través de las dos IPs públicas, por lo que el tráfico de vuelta tiene que ser enviado por cada tarjeta de red

CONFIGURACIÓN DE LAS TARJETAS DE RED

Supongamos que nuestras tarjeta de red se llaman eth0 y eth1. Cada una de ellas se configurará con el siguiente modelo:

DEVICE=eth0
BOOTPROTO=none
ONBOOT=yes
IPADDR=192.168.1.10
PREFIX=24
GATEWAY=192.168.1.1

CONFIGURACIÓN DE LA TABLA DE RUTAS

Para cada interfaz de red, necesitaremo una tabla de enrutamiento separada. Primero, agregamos dos nuevas tablas de enrutamiento a /etc/iproute2/rt_tables si aún no existen:

100     rt1
200     rt2

Luego, configuramos las rutas para cada interfaz. Reemplazamos 192.168.1.1 con la puerta de enlace predeterminada para cada interfaz.

Tabla de rutas

# Configura las rutas para eth0
ip route add 192.168.1.0/24 dev eth0 src 192.168.1.10 table rt1
ip route add default via 192.168.1.1 dev eth0 table rt1

# Configura las rutas para eth1
ip route add 192.168.1.0/24 dev eth1 src 192.168.1.11 table rt2
ip route add default via 192.168.1.1 dev eth1 table rt2

Tabla de enrutamiento

# Reglas para el tráfico originado de eth0
ip rule add from 192.168.1.10 table rt1

# Reglas para el tráfico originado de eth1
ip rule add from 192.168.1.11 table rt2

IMPORTANTE: Esta configuración no es persistente y se perderá al rebotar el servidor. Esto es lo que hicieron ellos creando un servicio que ejecute estos comandos.

El comando ip rule es parte del conjunto de herramientas ip en sistemas Linux y se utiliza para manipular las reglas de enrutamiento en la tabla de políticas de enrutamiento (RPDB, Routing Policy Database). Estas reglas determinan cómo se seleccionan las rutas para los paquetes salientes, permitiendo una gestión avanzada y flexible del tráfico de red más allá del enrutamiento basado simplemente en la tabla de enrutamiento principal.

Para que las rutas sean persistentes, simplemente hay que crear el fichero de la tabla de rutas para cada interfaz de red.

Tabla de rutas

Editamos el fichero /etc/sysconfig/network-scripts/route-eth0:

192.168.1.0/24 dev eth0
default via 192.168.1.1 dev eth0

Editamos el fichero /etc/sysconfig/network-scripts/route-eth1 añadiendo las rutas correspondientes.

Tabla de enrutamiento

Editamos el fichero /etc/sysconfig/network-scripts/rule-eth0:

from 192.168.1.10 table rt1

Editamos el fichero /etc/sysconfig/network-scripts/rule-eth1 configurando el enrutamiento correspondiente de la misma manera.

APLICAMOS LOS CAMBIOS

systemctl restart NetworkManager
systemctl restart network

Para que estos cambios sean persistentes deberemos crear un servicio que configure las rutas y reglas de enrutamiento con el boot del sistema:

  • Creamos el fichero de rutas:
/etc/sysconfig/network-scripts/route-eth0.sh
/etc/sysconfig/network-scripts/route-eth1.sh
chmod +x /etc/sysconfig/network-scripts/route-eth*.sh
chmod +x /etc/rc.d/rc.local
# tail -2 /etc/rc.d/rc.local
/etc/sysconfig/network-scripts/route-eth0.sh
/etc/sysconfig/network-scripts/route-eth1.sh
#

Dentro de los ficheros configuramos las rutas y reglas que nos interesen en cada caso:

# cat route-eth0.sh
#!/bin/bash
# Para eth0
ip route add default via 172.31.0.1 dev eth0 table rteth0
ip route add 172.31.0.0/20 dev eth0 scope link table rteth0
ip rule add from 172.31.6.43 table rteth0
[root@SSG-PSO-PRO network-scripts]# cat route-eth1.sh
#!/bin/bash
# Para eth1
ip route add default via 172.31.0.1 dev eth1 table rteth1
ip route add 172.31.0.0/20 dev eth1 scope link table rteth1
ip rule add from 172.31.8.145 table rteth1
#
  • Identificamos cada tabla de rutas con un nombre:
# cat /etc/iproute2/rt_tables
#
# reserved values
#
255     local
254     main
253     default
0       unspec
#
# local
#
#1      inr.ruhep
100     rteth0
101     rteth1
#
  • Configuramos el servicio del sistema:
/etc/systemd/system/custom-network-routes.service

[Unit]
Description=Apply Custom Network Routes
After=network.target


[Service]
Type=oneshot
ExecStart=/etc/sysconfig/network-scripts/route-eth0.sh
ExecStart=/etc/sysconfig/network-scripts/route-eth1.sh
RemainAfterExit=yes

[Install]
WantedBy=multi-user.target
systemctl enable custom-network-routes.service
systemctl start custom-network-routes.service
  • Habilitamos el servicio:
systemctl enable custom-network-routes
systemctl start custom-network-routes

Si las rutas las hemos aplicado dinámicamente, previamente, el servicio fallará al arrancar porque no se pueden aplicar rutas que ya existen en el sistema, pero sí se configurarán en el próximo reboot del servidor.

Comandos útiles de red

  • ping: Mediante el protocolo de comunicaciones ICMP, testea la conectividad hacia una IP destino.
[root@lremdox2 ~]# ping lremdox3
PING lremdox3 (30.32.0.81) 56(84) bytes of data.
64 bytes from lremdox3 (30.32.0.81): icmp_seq=1 ttl=64 time=0.535 ms
64 bytes from lremdox3 (30.32.0.81): icmp_seq=2 ttl=64 time=0.529 ms
64 bytes from lremdox3 (30.32.0.81): icmp_seq=3 ttl=64 time=0.546 ms
^C
--- lremdox3 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2619ms
rtt min/avg/max/mdev = 0.529/0.536/0.546/0.027 ms
[root@lremdox2 ~]#
  • traceroute: Vemos todas las IPs por las que pasamos desde una IP origen hacia una IP destino. Este comando es muy útil para averiguar qué elemento de red es el que está fallando cuando no llegamos al destino.
# traceroute www.google.com
traceroute to www.google.com (216.58.198.68), 30 hops max, 60 byte packets
 1 ec2-79-125-0-132.eu-west-1.compute.amazonaws.com (79.125.0.132) 1.175 ms ec2-79-125-0-134.eu-west-1.compute.amazonaws.com (79.125.0.134) 1.166 ms ec2-79-125-0-136.eu-west-1.compute.amazonaws.com (79.125.0.136) 1.161 ms
 2 178.236.1.18 (178.236.1.18) 1.337 ms 1.392 ms 1.415 ms
 3 52.93.7.98 (52.93.7.98) 3.806 ms 52.93.7.102 (52.93.7.102) 3.445 ms 52.93.7.96 (52.93.7.96) 6.046 ms
 4 52.93.7.35 (52.93.7.35) 1.735 ms 52.93.7.9 (52.93.7.9) 1.929 ms 52.93.7.33 (52.93.7.33) 1.816 ms
 5 72.14.215.85 (72.14.215.85) 1.868 ms 1.900 ms 72.14.204.244 (72.14.204.244) 1.878 ms
 6 209.85.252.198 (209.85.252.198) 16.416 ms 1.180 ms 1.187 ms
 7 64.233.174.27 (64.233.174.27) 1.242 ms 1.275 ms 1.260 ms
 8 dub08s02-in-f68.1e100.net (216.58.198.68) 1.252 ms 1.497 ms 1.490 ms
#
  • netstat: Vemos las conexiones activas en nuestro servidor.
# netstat -an |grep LISTEN |head -15
tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN
tcp 0 0 10.0.1.5:5000 0.0.0.0:* LISTEN
tcp 0 0 10.0.1.5:5001 0.0.0.0:* LISTEN
tcp6 0 0 :::111 :::* LISTEN
tcp6 0 0 :::22 :::* LISTEN
tcp6 0 0 ::1:25 :::* LISTEN
unix 2 [ ACC ] STREAM LISTENING 16720 private/bounce
unix 2 [ ACC ] STREAM LISTENING 16724 private/defer
unix 2 [ ACC ] STREAM LISTENING 16727 private/trace
unix 2 [ ACC ] STREAM LISTENING 16730 private/verify
unix 2 [ ACC ] STREAM LISTENING 16736 private/proxymap
unix 2 [ ACC ] STREAM LISTENING 16739 private/proxywrite
unix 2 [ ACC ] STREAM LISTENING 16742 private/smtp
#
  • route: Vemos la tabla de rutas.
# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
10.100.0.209 30.32.0.1 255.255.255.255 UGH 0 0 0 bond0
30.32.0.0 0.0.0.0 255.255.255.0 U 0 0 0 bond0
10.48.0.0 0.0.0.0 255.255.255.0 U 0 0 0 bond1
138.35.0.0 30.32.0.1 255.255.0.0 UG 0 0 0 bond0
155.61.0.0 30.32.0.1 255.255.0.0 UG 0 0 0 bond0
30.0.0.0 30.32.0.1 255.0.0.0 UG 0 0 0 bond0
15.0.0.0 30.32.0.1 255.0.0.0 UG 0 0 0 bond0
0.0.0.0 10.48.0.1 0.0.0.0 UG 0 0 0 bond1
# 
  • nslookup o dig: Obtenemos información de una IP desde el servidor de nombres (DNS).

# dig www.google.com

; <<>> DiG 9.9.4-RedHat-9.9.4-51.el7 <<>> www.google.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 10431
;; flags: qr rd ra; QUERY: 1, ANSWER: 6, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;www.google.com. IN A
;; ANSWER SECTION:
www.google.com. 60 IN A 209.85.202.147
www.google.com. 60 IN A 209.85.202.99
www.google.com. 60 IN A 209.85.202.103
www.google.com. 60 IN A 209.85.202.104
www.google.com. 60 IN A 209.85.202.105
www.google.com. 60 IN A 209.85.202.106
;; Query time: 2 msec
;; SERVER: 10.0.0.2#53(10.0.0.2)
;; WHEN: Mon Oct 23 11:49:16 CEST 2017
;; MSG SIZE rcvd: 139
#
  • nmap: Podemos testear si llegamos a un puerto destino. De esta manera, sabremos si tenemos que abrir el firewall.
# nmap -Pn -p1238 30.248.242.17
Starting Nmap 5.51 ( http://nmap.org ) at 2017-10-20 09:54 CEST
Nmap scan report for gencat-qs1.3804.1319.ecs.hp.com (30.248.242.17)
Host is up.
PORT STATE SERVICE
1238/tcp filtered unknown
Nmap done: 1 IP address (1 host up) scanned in 2.12 seconds
#

Testear los puertos abiertos

Con nmap también podemos testear los puertos que tiene abiertos una determinada IP. Es una de las herramientas utilizadas por los piratas informáticos, así como por los responsables de seguridad informática, para detectar puertas de entrada a un servidor.

Veamos un ejemplo de test de los puertos que tenemos abiertos en nuestro servidor local, aunque, lo normal, es atacar a una IP de destino:

[root]# nmap localhost

Starting Nmap 6.40 ( http://nmap.org ) at 2019-01-22 16:38 CET
Nmap scan report for localhost (127.0.0.1)
Host is up (0.0000030s latency).
Other addresses for localhost (not scanned): 127.0.0.1
Not shown: 990 closed ports
PORT     STATE SERVICE
22/tcp   open  ssh
25/tcp   open  smtp
80/tcp   open  http
111/tcp  open  rpcbind
443/tcp  open  https
3306/tcp open  mysql
9000/tcp open  cslistener
9001/tcp open  tor-orport
9002/tcp open  dynamid
9003/tcp open  unknown

Nmap done: 1 IP address (1 host up) scanned in 0.06 seconds
[root]#

Levantar un puerto en local

Si queremos levantar un puerto manualmente, podremos hacerlo con el comando ncat:

[root@server ~]# ncat -m 30 -k -l 443

Si abrimos otra sesión, lo podemos comprobar:

[root@server1 ~]# nc -w 10 -zv localhost 443
Connection to localhost 443 port [tcp/https] succeeded!
[root@server1 ~]#+

También podemos comprobar un puerto remoto. En este caso, saliendo a través de un proxy:

[root@server1 ~]# nc -w 10 -X connect -zv -x 192.168.47.162:8080 www.google.com 80
Connection to www.google.com 80 port [tcp/http] succeeded!
[root@server1 ~]#

Probar la conectividad desde un puerto origen

Si queremos saber si se puede establecer conexión desde un puerto origen hacia una IP y puerto destino, utilizaremos el parámetro «-p» del comando nc para indicar el puerto origen (desde donde se inicia la comunicación).

Veamos dos ejemplos, uno con un puerto origen bloqueado otro con un puerto origen permitido:

[root@server1]# nc -p 831 10.49.40.107 2049 -zv -w 10
Ncat: Version 7.50 ( https://nmap.org/ncat )
Ncat: Connection timed out.
[root@server1]#

[root@server1]# nc -p 50781 10.49.40.107 2049 -zv -w 10
Ncat: Version 7.50 ( https://nmap.org/ncat )
Ncat: Connected to 10.49.40.107:2049.
Ncat: 0 bytes sent, 0 bytes received in 0.01 seconds.
[root@server1]#

¿Cuál es mi IP?

IPs internas

Si queremos averiguar cuáles son las IPs internas, lo podremos saber con el comando ip:

hostname # ip addr
1: lo: mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
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: eth0: mtu 1500 qdisc mq master bond0 state UP group default qlen 1000
link/ether f0:92:1c:13:9b:60 brd ff:ff:ff:ff:ff:ff
3: eth1: mtu 1500 qdisc mq master bond1 state UP group default qlen 1000
link/ether f0:92:1c:13:9b:64 brd ff:ff:ff:ff:ff:ff
4: eth2: mtu 1500 qdisc mq master bond0 state UP group default qlen 1000
link/ether 2c:44:fd:e0:1c:80 brd ff:ff:ff:ff:ff:ff
5: eth3: mtu 1500 qdisc mq master bond1 state UP group default qlen 1000
link/ether 2c:44:fd:e0:1c:84 brd ff:ff:ff:ff:ff:ff
6: bond0: mtu 1500 qdisc noqueue state UP group default qlen 1000
link/ether f0:92:1c:13:9b:60 brd ff:ff:ff:ff:ff:ff
inet 30.34.229.22/24 brd 30.34.229.255 scope global bond0
valid_lft forever preferred_lft forever
inet 30.34.229.24/24 brd 30.34.229.255 scope global secondary bond0:1
valid_lft forever preferred_lft forever
inet6 fe80::f292:1cff:fe13:9b60/64 scope link
valid_lft forever preferred_lft forever
7: bond1: mtu 1500 qdisc noqueue state UP group default qlen 1000
link/ether f0:92:1c:13:9b:64 brd ff:ff:ff:ff:ff:ff
inet 10.49.64.20/24 brd 10.49.64.255 scope global bond1
valid_lft forever preferred_lft forever
inet 10.49.64.21/24 brd 10.49.64.255 scope global secondary bond1:1
valid_lft forever preferred_lft forever
inet6 fe80::f292:1cff:fe13:9b64/64 scope link
valid_lft forever preferred_lft forever
hostname #

Averiguar la IP pública

Si estamos el servidor está conectado a la red DMZ con una IP pública asignada directamente al servidor o, bien, se conecta a través de un router con IP pública, podremos conocerla con el comando curl

hostname # curl ifconfig.me
 52.48.62.26
hostname #

o con servicios externos como cual es mi IP.

Cual es mi IP

Te puede interesar

COMPÁRTEME

Deja un comentario