Linux Routing

57
Linux Networking Routing Routing Policy Policy Data Base Data Base RPDB RPDB Teoría y Ejemplos Juan Sánchez Diciembre 2009 [email protected]

description

Gestión Redes con ip y Routing Policy Database (routing)

Transcript of Linux Routing

Page 1: Linux Routing

Linux NetworkingRoutingRouting PolicyPolicy Data BaseData Base

RPDBRPDBTeoría y Ejemplos

Juan Sánchez

Diciembre [email protected]

Page 2: Linux Routing

Índice

• Arquitectura

• Conceptos básicos

• ip link

• ip address

• ip route

• ip rule

• Implementaciones

[email protected]

Page 3: Linux Routing

ArquitecturaArquitectura

[email protected]

Page 4: Linux Routing

Conceptos básicos

TCP/IP

¿¿QuQuéé representa una direccirepresenta una direccióón IP?n IP?

•• Un conjunto de serviciosUn conjunto de servicios

=> NO =>=> NO =>

=> S=> SÍÍ

• Un host

• Una NIC

• Un router

• Bounding

• Balanceo

• Multi IP

[email protected]

Page 5: Linux Routing

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/[email protected]

Page 6: Linux Routing

Conceptos básicos

Partes de RPDB

AddressIdentificación de un Conjunto de servicios

RouteIdentificación de Conjunto de Direcciones

RuleConjunto de ACL aplicadas a las rutas

Usa

do

+

-

An

tiguo

Nu

evo

[email protected]

Page 7: Linux Routing

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 values255 local254 main253 default0 unspec# local#1 inr.ruhep

[email protected]

Page 8: Linux Routing

Conceptos básicos

Tablas

Tabla de alta prioridad de control de rutas de direcciones locales o broadcast

Esta ruta no se puede borrar ni sobreescribir

LOCAL (255)LOCAL (255)

Tabla de enrutado normal de rutas non-policy.

Esta ruta puede ser borrada y sobreescrita

MAIN (254)MAIN (254)

Tabla vacia y reservada para post-proceso si no existen reglas que procesen el paquete.

Esta ruta puede ser borrada.

DEFAULT (253)DEFAULT (253)

DescripciónTabla

Una regla (rule) pertenece a una tabla

Una tabla puede contener 1 o mas reglas

Una tabla desaparece si no contiene [email protected]

Page 9: Linux Routing

Conceptos básicos

iproute2 commands

Rule

Route

Address

Parte RPDB

ip rule

ip tunnel

ip monitor

AplicaciAplicacióónn

ip routeTransportTransport

ip neighbour

ip address

Red / InternetRed / Internet

ip linkEnlace de datos / NALEnlace de datos / NAL

ComandoCapa

[email protected]

Page 10: Linux Routing

Conceptos básicos

iproute2 – Ficheros configuración

Lista de protocolos utilizados por protocol

rc_protos

Ámbitos de actuación. Utilizado por scope

rc_scopes

Tablas creadas y definidasrc_tables

ContenidoFichero

/etc/iproute2/*/etc/iproute2/*

[email protected]

Page 11: Linux Routing

Comandos iproute2

ip link

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 ]

ComandoComando

[email protected]

Page 12: Linux Routing

Comandos iproute2

ip link

ComandoComando

• 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

[email protected]

Page 13: Linux Routing

Comandos iproute2

ip link

EjemplosEjemplos

• ip link set dummy address 000000000001

• ip link set dummy up

• ip link show

• ip –s link show eth0

[email protected]

Page 14: Linux Routing

T.ColaFlags

Comandos iproute2

ip link

Ejemplos Ejemplos –– ip ip ––s link show eth0s link show eth0

MTU

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 collsns1674 21 0 0 0 0

Campos a vigilar

[email protected]

Page 15: Linux Routing

Comandos iproute2

ip link show

FlagsFlags

Dispositivo puede enviar a otros hostsBROADCASTBROADCAST

Comunicación punto a punto entre dispositivos

POINTOPOINTPOINTOPOINT

No se necesita resolución ARP ya que se conoce.

NOARPNOARP

Dispositivo de loopback, que por lo tanto no se comunica con otros hosts.

LOOPBACKLOOPBACK

Activado pero cable desconectadoLOWER_UPLOWER_UP

Dispositivo activado o no para recibirUP / DOWNUP / DOWN

DescripciónEtiqueta

[email protected]

Page 16: Linux Routing

Comandos iproute2

ip link show

FlagsFlags

Envío a mas de un destinatario. Broadcast es un

MULTICASTMULTICAST

Dispositivo es parte de un dispositivo bounded (ver)

SLAVESLAVE

Dispositivo creado y borrado dinamicamenteDYNAMICDYNAMIC

Se reciben todos los paquetes. Usado en broadcast links, monitorización y bridging.

PROMISCPROMISC

DescripciónEtiqueta

[email protected]

Page 17: Linux Routing

Comandos iproute2

ip link

EquivalenciasEquivalencias

ip link set ppp0 dynamic on--------

ip link set eth0 name ethADSL--------

ip link set eth0 mtu 1450ifconfigifconfig eth0 eth0 mtumtu 14501450

ip link set eth0 txqueuelen 1000ifconfigifconfig eth0 eth0 txqueuelentxqueuelen 10001000

ip link set eth0 downifconfigifconfig eth0 eth0 downdown

ifdownifdown eth0eth0

ip link set eth0 upifconfigifconfig eth0 upeth0 up

ifupifup eth0eth0

NuevoAntiguo

[email protected]

Page 18: Linux Routing

Comandos iproute2

ip address

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 ]

ComandoComando

[email protected]

Page 19: Linux Routing

Comandos iproute2

ip address

Broadcast addressBroadcast address

+ => Broadcast add igual a poner 1 en parte host

- => Broadcast add igual a poner 0 en parte host

[email protected]

Page 20: Linux Routing

Comandos iproute2

ip address

ScopeScope

La dirección es válida en la LANlinklink

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

hosthost

La dirección es válida globalmenteglobalglobal

DescripciónEtiqueta

[email protected]

Page 21: Linux Routing

Comandos iproute2

ip address

EjemplosEjemplos

• 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*“

[email protected]

Page 22: Linux Routing

Comandos iproute2

ip address

Ejemplos de multidirecciEjemplos de multidireccióónn

• 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/[email protected]

Page 23: Linux Routing

Comandos iproute2

ip address

EquivalenciasEquivalencias

ip address add 192.168.1.12/24 dev eth0

ip address add 192.168.2.12/24 dev eth0

------

------

ip address add 192.168.1.12/24 dev eth0ifconfigifconfig eth0 192.168.1.12/24eth0 192.168.1.12/24

NuevoAntiguo

[email protected]

Page 24: Linux Routing

Comandos iproute2

ip route

ip route { list | flush } SELECTORip 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 ] NHFLAGSOPTIONS := 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 ]

ComandoComando

[email protected]

Page 25: Linux Routing

Comandos iproute2

ip route

Tipos de rutasTipos de rutas

Se rompe la busqueda de rutas y se devuelve mensaje ICMP “net unreachable – ENETUNREACH” (ICMP Tipo 3 Código 0)

throwthrow

El destino son direcciones externas que requieren NAT antes de ser enviadas

natnat

El destino es inalcanzable y se devuelve mensaje ICMP “host unreachable -EHOSTUNREACH” (ICMP Tipo 3 Código 1)

unreachabunreachablele

El destino es inalcanzable y el paquete se descarta sin mensaje de error, salvo para envíos locales que se devuelve EINVAL.

blackholeblackhole

El destino es inalcanzable y se devuelve mensaje ICMP “communicationadmin prohibited - EACCESS”(ICMP Tipo 3 Código 13)

prohibitprohibit

El destino es el propio host y son reenviados localmentelocallocal

El destino son direcciones broadcast y enviados a la LAN como broadcastbroadcastbroadcast

La ruta describe caminos buenosunicastunicast

DescripciónEtiqueta

Page 26: Linux Routing

Comandos iproute2

ip route

Tipos de protocoloTipos de protocolo

Ruta añadida divido a una redirección ICMPredirectredirect

Ruta creada por el kernel durante la autoconfiguraciónkernelkernel

Ruta creada en boot time. Si se arranca routed, estas rutas se borraránbootboot

Ruta añadida manualmente para reescribir rutas dinámicasstaticstatic

Ruta añadida por el protocolo Router Discoveryrara

DescripciónEtiqueta

[email protected]

Page 27: Linux Routing

Comandos iproute2

ip route

Multi caminoMulti 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

[email protected]

Page 28: Linux Routing

Comandos iproute2

ip route

EjemplosEjemplos

• 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

[email protected]

Page 29: Linux Routing

Comandos iproute2

ip route

EjemplosEjemplos

• 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

cachecache– 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

[email protected]

Page 30: Linux Routing

Comandos iproute2

ip rule

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 ]

ComandoComando

[email protected]

Page 31: Linux Routing

Comandos iproute2

ip route

EjemplosEjemplos

• 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 prio120

• ip rule delete priority 32767

• ip rule show

[email protected]

Page 32: Linux Routing

Implementaciones

Gestión de Direcciones

Consideraciones previasConsideraciones 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

[email protected]

Page 33: Linux Routing

Implementaciones

Flujo paquetes

[email protected]

Page 34: Linux Routing

Implementaciones

Marcado de paquetes

Consideraciones previasConsideraciones 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

[email protected]

Page 35: Linux Routing

Implementaciones

Marcado de paquetes

Consideraciones previasConsideraciones 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 => [email protected]

Page 36: Linux Routing

Implementaciones

Marcado de paquetes

Consideraciones previasConsideraciones previas

• Bits de TOS– 1000 => Minimizar Retraso

– 0100 => Maximizar Transferencia

– 0010 => Maximizar Fiabilidad

– 0001 => Minimizar coste monetario

– 0000 => Servicio Normal

[email protected]

Page 37: Linux Routing

Implementaciones

QoS

Cola pfifo_fastCola pfifo_fast

• Utiliza técnica FIFO

• No realiza ningún cambio en los paquetes

• Tiene 3 repositorios o bandas (0, 1 y 2), siendoel 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

[email protected]

Page 38: Linux Routing

Implementaciones

QoS

Cola pfifo_fastCola pfifo_fast

Banda 0Banda 0

Subnivel 0

0x10

0x12

0x14

0x16

Banda 1Banda 1

Subnivel 0

0x00

0x04

0x06

Subnivel 4

0x18

0x1a

0x1c

0x1e

Banda 2Banda 2

Subnivel 1

0x02

Subnivel 2

0x08

0x0a

0x0c

0x0e

[email protected]

Page 39: Linux Routing

Implementaciones

QoS

Cola pfifo_fastCola pfifo_fast

• Para establecer el tamaño de la cosa utilizartxqueuelen con “ip link” o “ifconfig”

[email protected]

Page 40: Linux Routing

Implementaciones

Gestión

Caso 1Caso 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

[email protected]

Page 41: Linux Routing

Implementaciones

Gestión

Caso 2Caso 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

[email protected]

Page 42: Linux Routing

Implementaciones

Gestión

Caso 2Caso 2

• Asignar 3 IP de diferentes redes a eth0 usandoifconfig

• 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

[email protected]

Page 43: Linux Routing

Implementaciones

Gestión

Caso 1Caso 1

• ifconfig eth0 192.168.10.1/24

• ifconfig eth0:1 192.168.20.1/24

• ifconfig eth0:2 192.168.30.1/24

• ifconfig eth0:2 delete 192.168.30.1

• ifconfig eth0

• ifconfig eth0 delete 192.168.10.1/24

[email protected]

Page 44: Linux Routing

Implementaciones

Gestión

Caso 3Caso 3

• Borrar todas las rutas de eth0

• Crear todas las rutas directas para192.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

[email protected]

Page 45: Linux Routing

Implementaciones

Gestión

Caso 3Caso 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

[email protected]

Page 46: Linux Routing

Implementaciones

Gestión

Caso 4Caso 4

• Crear un ruta que descarte todos los paquetesque se redirijan a 192.168.20.0/24

[email protected]

Page 47: Linux Routing

Implementaciones

Gestión

Caso 4Caso 4

• ip route add blackhole 192.168.20.0/24

[email protected]

Page 48: Linux Routing

Implementaciones

Gestión

Caso 5Caso 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 asignandoprioridad al primera ruta

[email protected]

Page 49: Linux Routing

Implementaciones

Gestión

Caso 5Caso 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 nexthopvia 192.168.20.1 weight 10 nexthop via 192.168.30.1 weight 2

[email protected]

Page 50: Linux Routing

Implementaciones

Gestión

Caso 6Caso 6

• Crear una regla en tabla main para quepermita 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

[email protected]

Page 51: Linux Routing

Implementaciones

Gestión

Caso 6Caso 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

[email protected]

Page 52: Linux Routing

Implementaciones

Gestión

Caso 7Caso 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

[email protected]

Page 53: Linux Routing

Implementaciones

Gestión

Caso 7Caso 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

[email protected]

Page 54: Linux Routing

Implementaciones

Gestión

Caso 8Caso 8

• Redirigir todo el tráfico marcado como 1 al router_adsl y sutabla trouter_adsl

[email protected]

Page 55: Linux Routing

Implementaciones

Gestión

Caso 8Caso 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

[email protected]

Page 56: Linux Routing

Implementaciones

Gestión de Direcciones

Caso 9Caso 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

[email protected]

Page 57: Linux Routing

Implementaciones

Gestión

Caso 9Caso 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 La cola pfifopfifo--fast fast estestáá activadaactivada porpor defectodefecto y y tienetiene 3 3 bandasbandas siendosiendo la 0 la de mayor la 0 la de mayor prioridadprioridad..

[email protected]