• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
Linux Routing
 

Linux Routing

on

  • 4,856 views

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

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

Statistics

Views

Total Views
4,856
Views on SlideShare
4,830
Embed Views
26

Actions

Likes
1
Downloads
98
Comments
0

2 Embeds 26

http://www.slideshare.net 25
https://www.linkedin.com 1

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    Linux Routing Linux Routing Presentation Transcript

    • Linux Networking Routing Policy Data Base RPDB Teoría y Ejemplos Juan Sánchez jsancheznav@gmail.com Diciembre 2009
    • Índice • Arquitectura • Conceptos básicos • ip link • ip address • ip route • ip rule • Implementaciones jsancheznav@gmail.com
    • Arquitectura jsancheznav@gmail.com
    • 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
    • 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
    • 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
    • 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
    • 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
    • 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
    • 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
    • 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
    • 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
    • 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
    • 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
    • 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.
    • 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
    • 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
    • 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
    • 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
    • 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
    • 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
    • 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
    • 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
    • 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
    • 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
    • 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
    • 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
    • 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
    • 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
    • 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
    • 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
    • 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
    • Implementaciones Flujo paquetes jsancheznav@gmail.com
    • 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
    • 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
    • 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
    • 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
    • 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
    • Implementaciones QoS Cola pfifo_fast • Para establecer el tamaño de la cosa utilizar txqueuelen con “ip link” o “ifconfig” jsancheznav@gmail.com
    • 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
    • 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
    • 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
    • Implementaciones Gestión Caso 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 • ifconfig jsancheznav@gmail.com
    • 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
    • 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
    • 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
    • Implementaciones Gestión Caso 4 • ip route add blackhole 192.168.20.0/24 jsancheznav@gmail.com
    • 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
    • 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
    • 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
    • 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
    • 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
    • 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
    • Implementaciones Gestión Caso 8 • Redirigir todo el tráfico marcado como 1 al router_adsl y su tabla trouter_adsl jsancheznav@gmail.com
    • 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
    • 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
    • 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