4. Conceptos básicos
TCP/IP
¿Qué representa una dirección IP?
• Un host • Bounding
• Una NIC => NO => • Balanceo
• Multi IP
• Un router
• Un conjunto de servicios => SÍ
jsancheznav@gmail.com
5. Conceptos básicos
CIDR – Classless Inter-Domain Routing
• Permite agrupar direcciones para routing
• Mejora performance routing
• Minimizan tamaño tablas de routing
• Supernetting
Wikipedia
192.168.96.0/20
jsancheznav@gmail.com
6. Conceptos básicos
Partes de RPDB
Address
Antiguo
+
Identificación de un Conjunto de servicios
Usado
Route
Identificación de Conjunto de Direcciones
Nuevo
Rule
- Conjunto de ACL aplicadas a las rutas
jsancheznav@gmail.com
7. Conceptos básicos
Tablas
• Conjunto de reglas
• Máximo 255 tablas
• El sistema crea por defecto y las usa
• Los antiguos comandos las utizan de forma
transparente
• /etc/iproute2/rt_tables # reserved values
255 local
254 main
253 default
0 unspec
# local
#1 inr.ruhep
jsancheznav@gmail.com
8. Conceptos básicos
Tablas
Tabla Descripción
DEFAULT (253) Tabla vacia y reservada para post-proceso si no
existen reglas que procesen el paquete.
Esta ruta puede ser borrada.
MAIN (254) Tabla de enrutado normal de rutas non-policy.
Esta ruta puede ser borrada y sobreescrita
LOCAL (255) Tabla de alta prioridad de control de rutas de
direcciones locales o broadcast
Esta ruta no se puede borrar ni sobreescribir
Una regla (rule) pertenece a una tabla
Una tabla puede contener 1 o mas reglas
Una tabla desaparece si no contiene reglas
jsancheznav@gmail.com
9. Conceptos básicos
iproute2 commands
Capa Parte RPDB Comando
Enlace de datos / NAL ip link
Red / Internet Address ip neighbour
ip address
Transport Route ip route
Aplicación Rule ip rule
ip tunnel
ip monitor
jsancheznav@gmail.com
10. Conceptos básicos
iproute2 – Ficheros configuración
/etc/iproute2/*
Fichero Contenido
rc_tables Tablas creadas y definidas
rc_scopes Ámbitos de actuación. Utilizado por
scope
rc_protos Lista de protocolos utilizados por
protocol
jsancheznav@gmail.com
11. Comandos iproute2
ip link
Comando
ip link set DEVICE { up | down | arp {
on | off } | dynamic { on | off } |
multicast { on | off } | txqueuelen
PACKETS | name NEWNAME | address
LLADDR | broadcast LLADDR |
mtu MTU }
ip link show [ DEVICE ]
jsancheznav@gmail.com
12. Comandos iproute2
ip link
Comando
• dev NAME => Nombre del dispositivo
• arp on|off => Cambia flag NOARP
• multicast on|off => Cambia flag MULTICAST
• dynamic on|off => Cambia flag DYNAMIC
• txqueuelen <num> => Tamaño cola TX
• mtu <num> => Conf tamaño unidad transf
• address <dir> => Cambia MAC
• broadcast <dir> => Cambia broadcast MAC
• peer <dir> => Cambia MAC peer para POINTOPOINT
jsancheznav@gmail.com
13. Comandos iproute2
ip link
Ejemplos
• ip link set dummy address 000000000001
• ip link set dummy up
• ip link show
• ip –s link show eth0
jsancheznav@gmail.com
14. Comandos iproute2
ip link
Ejemplos – ip –s link show eth0
Flags MTU T.Cola
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN qlen 1000
link/ether 00:0c:29:69:b5:97 brd ff:ff:ff:ff:ff:ff
RX: bytes packets errors dropped overrun mcast
0 0 0 0 0 0
TX: bytes packets errors dropped carrier collsns
1674 21 0 0 0 0
Campos a vigilar
jsancheznav@gmail.com
15. Comandos iproute2
ip link show
Flags
Etiqueta Descripción
UP / DOWN Dispositivo activado o no para recibir
LOWER_UP Activado pero cable desconectado
LOOPBACK Dispositivo de loopback, que por lo tanto no
se comunica con otros hosts.
BROADCAST Dispositivo puede enviar a otros hosts
POINTOPOINT Comunicación punto a punto entre
dispositivos
NOARP No se necesita resolución ARP ya que se
jsancheznav@gmail.com
conoce.
16. Comandos iproute2
ip link show
Flags
Etiqueta Descripción
PROMISC Se reciben todos los paquetes. Usado en
broadcast links, monitorización y bridging.
DYNAMIC Dispositivo creado y borrado dinamicamente
MULTICAST Envío a mas de un destinatario. Broadcast es
un
SLAVE Dispositivo es parte de un dispositivo
bounded (ver)
jsancheznav@gmail.com
17. Comandos iproute2
ip link
Equivalencias
Antiguo Nuevo
ifconfig eth0 up ip link set eth0 up
ifup eth0
ifconfig eth0 down ip link set eth0 down
ifdown eth0
ifconfig eth0 mtu 1450 ip link set eth0 mtu 1450
---- ip link set ppp0 dynamic on
---- ip link set eth0 name ethADSL
ifconfig eth0 txqueuelen 1000 ip link set eth0 txqueuelen 1000
jsancheznav@gmail.com
18. Comandos iproute2
ip address
Comando
ip addr { add|del} IFADDR dev STRING
ip addr { show|flush} [ dev STRING ]
[ scope SCOPE-ID ][ to PREFIX ]
[ FLAG-LIST ] [ label PATTERN ]
IFADDR := PREFIX | ADDR peer PREFIX
[ broadcast ADDR ] [ anycast ADDR ]
[ label STRING ] [ scope SCOPE-ID ]
SCOPE-ID := [ host | link | global | NUMBER ]
FLAG-LIST := [ FLAG-LIST ] FLAG
FLAG := [ permanent | dynamic | secondary | primary |
tentative | deprecated ]
jsancheznav@gmail.com
19. Comandos iproute2
ip address
Broadcast address
+ => Broadcast add igual a poner 1 en parte host
- => Broadcast add igual a poner 0 en parte host
jsancheznav@gmail.com
20. Comandos iproute2
ip address
Scope
Etiqueta Descripción
global La dirección es válida globalmente
link La dirección es válida en la LAN
host La dirección es válida solo dentro del host, por ejemplo
127.0.0.1
ip addr add 127.0.0.1/8 dev lo brd + scope host
jsancheznav@gmail.com
21. Comandos iproute2
ip address
Ejemplos
• ip addr add 127.0.0.1/8 dev lo brd + scope host
• ip addr add 10.0.0.1/24 brd + dev eth0
• ip addr del 127.0.0.1/8 dev lo
• ip –s addr show
• ip -4 addr flush label "eth*“
jsancheznav@gmail.com
22. Comandos iproute2
ip address
Ejemplos de multidirección
• ip addr add 10.1.1.1/24 dev eth0
• ip addr add 10.1.1.64/32 dev eth0
• ip addr add 10.1.1.200/16 dev eth0
• ip addr list dev eth0
CUIDADO: No es lo mismo que
ifconfig eth0 10.1.1.1/24
ifconfig eth0:1 10.1.1.64/32
ifconfig eth0:2 10.1.1.200/16
jsancheznav@gmail.com
23. Comandos iproute2
ip address
Equivalencias
Antiguo Nuevo
ifconfig eth0 192.168.1.12/24 ip address add 192.168.1.12/24 dev eth0
--- ip address add 192.168.1.12/24 dev eth0
--- ip address add 192.168.2.12/24 dev eth0
jsancheznav@gmail.com
24. Comandos iproute2
ip route
Comando
ip route { list | flush } SELECTOR
ip route get ADDRESS [ from ADDRESS iif STRING ]
[ oif STRING ] [ tos TOS ]
ip route { add | del | change | append | replace | monitor } ROUTE
SELECTOR := [ root PREFIX ] [ match PREFIX ] [ exact PREFIX ]
[ table TABLE_ID ] [ proto RTPROTO ]
[ type TYPE ] [ scope SCOPE ]
ROUTE := NODE_SPEC [ INFO_SPEC ]
NODE_SPEC := [ TYPE ] PREFIX [ tos TOS ]
[ table TABLE_ID ] [ proto RTPROTO ]
[ scope SCOPE ] [ metric METRIC ]
INFO_SPEC := NH OPTIONS FLAGS [ nexthop NH ]...
NH := [ via ADDRESS ] [ dev STRING ] [ weight NUMBER ] NHFLAGS
OPTIONS := FLAGS [ mtu NUMBER ] [ advmss NUMBER ]
[ rtt NUMBER ] [ rttvar NUMBER ]
[ window NUMBER] [ cwnd NUMBER ] [ ssthresh REALM ]
[ realms REALM ]
TYPE := [ unicast | local | broadcast | multicast | throw |
unreachable | prohibit | blackhole | nat ]
TABLE_ID := [ local | main | default | all | NUMBER ]
SCOPE := [ host | link | global | NUMBER ]
FLAGS := [ equalize ]
NHFLAGS := [ onlink | pervasive ]
RTPROTO := [ kernel | boot | static | NUMBER ]
jsancheznav@gmail.com
25. Comandos iproute2
ip route
Tipos de rutas
Etiqueta Descripción
unicast La ruta describe caminos buenos
unreachab El destino es inalcanzable y se devuelve mensaje ICMP “host unreachable -
le EHOSTUNREACH” (ICMP Tipo 3 Código 1)
blackhole El destino es inalcanzable y el paquete se descarta sin mensaje de error,
salvo para envíos locales que se devuelve EINVAL.
prohibit El destino es inalcanzable y se devuelve mensaje ICMP “communication
admin prohibited - EACCESS”(ICMP Tipo 3 Código 13)
local El destino es el propio host y son reenviados localmente
broadcast El destino son direcciones broadcast y enviados a la LAN como broadcast
throw Se rompe la busqueda de rutas y se devuelve mensaje ICMP “net
unreachable – ENETUNREACH” (ICMP Tipo 3 Código 0)
nat El destino son direcciones externas que requieren NAT antes de ser
enviadas
26. Comandos iproute2
ip route
Tipos de protocolo
Etiqueta Descripción
kernel Ruta creada por el kernel durante la autoconfiguración
boot Ruta creada en boot time. Si se arranca routed, estas rutas se borrarán
static Ruta añadida manualmente para reescribir rutas dinámicas
redirect Ruta añadida divido a una redirección ICMP
ra Ruta añadida por el protocolo Router Discovery
jsancheznav@gmail.com
27. Comandos iproute2
ip route
Multi camino
• nexthop
– Permite crear rutas alternativas
– nexthop via ROUTER dev DISP_SALIDA weigh PESO
• equalize
– Paquete a paquete se decide de forma aleatoria una ruta
– Necesario si bloqueo en una ruta
jsancheznav@gmail.com
28. Comandos iproute2
ip route
Ejemplos
• ip route add 192.168.20.0/24 via 192.168.20.1 dev eth0
• ip route delete default
• ip route show
• ip route flush
• ip route add default equalize scope global nexthop via
192.168.10.1 dev eth0 nexthop via 192.168.20.1 dev eth1
• ip route add nat 192.168.20.1 via 192.168.30.1
• ip -4 route flush scope global type unicast
jsancheznav@gmail.com
29. Comandos iproute2
ip route
Ejemplos
• ip route get 192.168.20.8
• ip route get 192.168.40.3 from 192.168.20.2 iif eth0
• ip route get 192.168.40.3 from 192.168.20.2 iif eth0 oif eth1
cache
– local => Destino Local (loopback)
– src-direct => Destino conectado directamente
– reject => La ruta es incorrecta
– equalize => Redirección de forma aleatoria
– src-nat, dst-nat => Nat de origen o destino
jsancheznav@gmail.com
30. Comandos iproute2
ip rule
Comando
ip rule [ list | add | del ] SELECTOR ACTION
SELECTOR := [ from PREFIX ] [ to PREFIX ]
[ tos TOS ] [ fwmark FWMARK ]
[ dev STRING ] [ pref NUMBER ]
ACTION := [ table TABLE_ID ] [ nat ADDRESS ]
[ prohibit | reject | unreachable ]
[ realms [SRCREALM/]DSTREALM ]
TABLE_ID := [ local | main | default | NUMBER ]
jsancheznav@gmail.com
31. Comandos iproute2
ip route
Ejemplos
• ip rule add from 192.168.20.0/24 table trouter_shdsl priority
100
• ip rule add from 192.168.20.3 nat 192.168.20.1 table 254 prio
120
• ip rule delete priority 32767
• ip rule show
jsancheznav@gmail.com
32. Implementaciones
Gestión de Direcciones
Consideraciones previas
• Un dispositivo puede tener más de una IP
• Un dispositivo puede estar fragmentado o no
• La primera IP de una red es la primaria del
dispositivo, la siguientes son secundarias y
dependientes
jsancheznav@gmail.com
34. Implementaciones
Marcado de paquetes
Consideraciones previas
• Marcado de nivel de preferencia
iptables –t mangle –A PREROUTING –p <prot> --
dport <dport> -j TOS --set-tos 0x00
• Marcado de tipo de paquete
iptables –t mangle –A PREROUTING –p <prot> --
dport <dport> -j MARK --set-mark 2
jsancheznav@gmail.com
35. Implementaciones
Marcado de paquetes
Consideraciones previas
• TOS vs MARK
– TOS => Se propaga
– MARKET => Kernel
• Valores TOS
– 0x10 => Retraso Mínimo => ssh, telnet
– 0x00 => Servicio Normal => resto
– 0x08 => Rendimiento Máximo => www, ftp 21
– 0x04 => Fiabilidad Máxima => dns
– 0x02 => Coste mínimo => smtp
jsancheznav@gmail.com
36. Implementaciones
Marcado de paquetes
Consideraciones previas
• Bits de TOS
– 1000 => Minimizar Retraso
– 0100 => Maximizar Transferencia
– 0010 => Maximizar Fiabilidad
– 0001 => Minimizar coste monetario
– 0000 => Servicio Normal
jsancheznav@gmail.com
37. Implementaciones
QoS
Cola pfifo_fast
• Utiliza técnica FIFO
• No realiza ningún cambio en los paquetes
• Tiene 3 repositorios o bandas (0, 1 y 2), siendo
el 0 el de mayor prioridad y el 2 el de menor.
• No se trata ningún paquete si existe un
paquete en la banda de mayor prioridad
• Basado en TOS
jsancheznav@gmail.com
38. Implementaciones
QoS
Cola pfifo_fast
Banda 1
Subnivel 0 Banda 2
0x00 Subnivel 1
Banda 0 0x04 0x02
Subnivel 0
0x06
0x10
0x12 Subnivel 2
0x08
0x14 Subnivel 4
0x0a
0x16 0x18
0x0c
0x1a
0x0e
0x1c
0x1e
jsancheznav@gmail.com
39. Implementaciones
QoS
Cola pfifo_fast
• Para establecer el tamaño de la cosa utilizar
txqueuelen con “ip link” o “ifconfig”
jsancheznav@gmail.com
40. Implementaciones
Gestión
Caso 1
• Asignar 3 IP de diferentes redes a eth0 con ip
• Extraer configuración eth0 con ifconfig y ip
• Borrar IP 2 asignada a eth0
• Extraer configuración eth0 usando ifconfig y ip
• Borrar IP primaria asignada a eth0
• Extraer configuración eth0 usando ifconfig y ip
jsancheznav@gmail.com
41. Implementaciones
Gestión
Caso 2
• ip address add 192.168.10.1/24 brd + dev eth0
• ip address add 192.168.20.1/24 brd + dev eth0
• ip address add 192.168.30.1/24 brd + dev eth0
• ip address show dev eth0
• ifconfig
• ip address delete 192.168.20.1 dev eth0
• ip address show dev eth0
• ifconfig
jsancheznav@gmail.com
42. Implementaciones
Gestión
Caso 2
• Asignar 3 IP de diferentes redes a eth0 usando
ifconfig
• Extraer configuración eth0 usando ip
• Borrar IP 2 asignada a eth0
• Extraer configuración eth0 usando ip
• Borrar IP primaria asignada a eth0
• Extraer configuración eth0 usando ip
jsancheznav@gmail.com
44. Implementaciones
Gestión
Caso 3
• Borrar todas las rutas de eth0
• Crear todas las rutas directas para
192.168.10.2, 192.168.20.2 y 192.168.30.2.
• Crear la ruta por defecto en 192.168.10.1 o
192.168.20.1 o 192.168.30.1
jsancheznav@gmail.com
45. Implementaciones
Gestión
Caso 3
• ip address flush dev eth0
• ip route flush dev eth0
• ip address add 192.168.10.2/24 brd + dev eth0
• ip address add 192.168.20.2/24 brd + dev eth0
• ip address add 192.168.30.2/24 brd + dev eth0
• ip route show
• ip route add 192.168.10.0/24 proto kernel scope link dev eth0 src 192.168.10.1
• ip route add 192.168.20.0/24 proto kernel scope link dev eth0 src 192.168.20.1
• ip route add 192.168.30.0/24 proto kernel scope link dev eth0 src 192.168.30.1
• ip route add default scope global nexthop via 192.168.10.1 nexthop via
192.168.20.1 nexthop via 192.168.30.1
jsancheznav@gmail.com
46. Implementaciones
Gestión
Caso 4
• Crear un ruta que descarte todos los paquetes
que se redirijan a 192.168.20.0/24
jsancheznav@gmail.com
47. Implementaciones
Gestión
Caso 4
• ip route add blackhole 192.168.20.0/24
jsancheznav@gmail.com
48. Implementaciones
Gestión
Caso 5
• Crear la ruta por defecto en 192.168.10.1 o
192.168.20.1 o 192.168.30.1 por paquetes
• Crear la ruta por defecto en 192.168.10.1 o
192.168.20.1 o 192.168.30.1 asignando
prioridad al primera ruta
jsancheznav@gmail.com
49. Implementaciones
Gestión
Caso 5
• ip route add default equalize scope global nexthop via 192.168.10.1 nexthop
via 192.168.20.1 nexthop via 192.168.30.1
• ip route add default scope global nexthop via 192.168.10.1 weight 100 nexthop
via 192.168.20.1 weight 10 nexthop via 192.168.30.1 weight 2
jsancheznav@gmail.com
50. Implementaciones
Gestión
Caso 6
• Crear una regla en tabla main para que
permita que:
– De 192.168.10.0/24 a 192.168.20.0/24 permitido
– De 192.168.10.0/24 a 0/0 descartado
– De 192.168.30.0/24 a 192.168.20.0/24 permitido
– De 192.168.30.0/24 a 192.168.40.0/24 permitido
– De 192.168.30.0/24 a 192.168.30.0/24 descartado
jsancheznav@gmail.com
51. Implementaciones
Gestión
Caso 6
• ip rule add from 192.168.10.0/24 to 192.168.20.0/24 priority 1600
• ip rule add from 192.168.10.0/24 to 0/0 priority 1601 blackhole
• ip rule add from 192.168.30.0/24 to 192.168.20.0/24 priority 1700
• ip rule add from 192.168.30.0/24 to 192.168.40.0/24 priority 1700
• ip rule add from 192.168.30.0/24 to 192.168.10.0/24 priority 1702 blackhole
jsancheznav@gmail.com
52. Implementaciones
Gestión
Caso 7
• Crear 2 tablas una para cada router
• Asignar el tráfico de 192.168.30.0/24 a la tabla del
router_adsl (192.168.10.1)
• Asignar el tráfico de 192.168.40.0/24 a la tabla del
router_shdsl (192.168.20.1)
• Asignar el resto de tráfico por router_adsl
• No permitir los paquetes de 192.168.10.5 a 192.168.30.0/24
• No permitir los paquetes de 192.168.20.5 a 192.168.40.0/24
jsancheznav@gmail.com
53. Implementaciones
Gestión
Caso 7
• echo 1 trouter_adsl >> /etc/iproute/rt_tables
• echo 2 trouter_shdsl >> /etc/iproute/rt_tables
• ip route add default via 192.168.10.1 proto static table trouter_adsl
• ip route add add 192.168.30.0/24 via 192.168.10.1 proto static table trouter-
adsl
• ip route add add 192.168.40.0/24 via 192.168.20.1 proto static table trouter-
shdsl
• ip rule add from 192.168.10.5/32 to 192.168.30.0/24 prio 1000 table trouter-
adsl blackhole
• ip rule add from 192.168.20.5/32 to 192.168.40.0/24 prio 1001 table trouter-
adsl blackhole
• ip route flush cache
jsancheznav@gmail.com
54. Implementaciones
Gestión
Caso 8
• Redirigir todo el tráfico marcado como 1 al router_adsl y su
tabla trouter_adsl
jsancheznav@gmail.com
55. Implementaciones
Gestión
Caso 8
• iptables –A PREROUTING –i eth0 –t mangle –j MARK --set-mark 1
• echo 1 trouter_adsl >> /etc/iproute/rt_tables
• ip route add default via 192.168.10.1 proto static table trouter_adsl
• ip rule add fwmark 1 table trouter_adsl
• ip route flush cache
jsancheznav@gmail.com
56. Implementaciones
Gestión de Direcciones
Caso 9
• Marcar con TOS todo tcp/25 para que salga con baja prioridad
• Marcar con TOS todo tcp/22 para que salga con alta prioridad
jsancheznav@gmail.com
57. Implementaciones
Gestión
Caso 9
• iptables –A POSTROUTING –p tcp --dport 25 –t mangle –j TOS --set-tos 0x0
• iptables –A POSTROUTING –p tcp --dport 25 –t mangle –j TOS --set-tos 0x16
La cola pfifo-fast está activada por defecto y
tiene 3 bandas siendo la 0 la de mayor
prioridad.
jsancheznav@gmail.com