Linux Routing
-
Upload
juan-sanchez -
Category
Technology
-
view
4.229 -
download
1
description
Transcript of Linux Routing
Linux NetworkingRoutingRouting PolicyPolicy Data BaseData Base
RPDBRPDBTeoría y Ejemplos
Juan Sánchez
Diciembre [email protected]
Índice
• Arquitectura
• Conceptos básicos
• ip link
• ip address
• ip route
• ip rule
• Implementaciones
ArquitecturaArquitectura
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
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]
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
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
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]
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
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/*
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
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
Comandos iproute2
ip link
EjemplosEjemplos
• ip link set dummy address 000000000001
• ip link set dummy up
• ip link show
• ip –s link show eth0
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
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
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
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
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
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
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
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*“
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]
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
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
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
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
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
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
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
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
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
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
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
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]
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
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
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
Implementaciones
QoS
Cola pfifo_fastCola pfifo_fast
• Para establecer el tamaño de la cosa utilizartxqueuelen con “ip link” o “ifconfig”
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
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
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
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
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
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
Implementaciones
Gestión
Caso 4Caso 4
• Crear un ruta que descarte todos los paquetesque se redirijan a 192.168.20.0/24
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
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
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
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
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
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
Implementaciones
Gestión
Caso 8Caso 8
• Redirigir todo el tráfico marcado como 1 al router_adsl y sutabla trouter_adsl
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
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
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..