Linux Do Zero Aula 023 Roteamento e PBR
Linux Do Zero Aula 023 Roteamento e PBR
Linux Do Zero Aula 023 Roteamento e PBR
Roteamento
Roteamento
● Roteamento é o ato de mover pacotes IPs entre interfaces de rede (buffers);
● Um pacote IP é uma mensagem (pacote) contendo informações objetivas para sua distribuição:
○ IP de destino: apenas o IP de destino é relevante para o ato de roteamento;
○ IP de origem: contém o IP do remetente, não é usado no roteamento, a menos que haja PBR;
○ Protocolo: contém o código do protocolo que descreve o conteúdo (payload) do pacote IP, só é
relevante quando o pacote chega ao destino, para determinar qual software irá processar o
payload;
● Todo pacote IP é criado por um software no host emissor (IP de origem);
○ Todos os softwares criando e recebendo pacotes moram na "loopback";
○ Os softwares podem escolher qualquer IP local como ip de origem, independente de em qual
interface ele foi adicionado, afinal, todos os IPs configurados nas interfaces de rede pertencem ao
host local, que significa loopback, interfaces de rede sem associações físicas ou sem buffer de
saida remoto são consideradas interfaces loopbacks naturais, exemplo: interface lo, interfaces
dummy;
○ Pacotes criados por aplicações que abrem sockets (tomadas) com as camadas de baixo (tcp, udp,
sctp, icmp, ospf, …);
○ Pacotes criados pelo kernel: softwares rodando em kernel-mode (módulos do kernel), pacotes de
resposta das camadas geridas pelo kernel (tcp-reset, tcp-fin, icmp time-to-live-expired,
icmp-timestamp, ipv6-neighbor-discovery, etc…);
Hardware
APPs Sockets
tcp/udp/sctp ports, icmp, ...
Kernel Sockets
Loopback lo icmp time-to-live, icmp
redirects, arp, ipv6-nd, ...
Routing
Interfaces Interfaces
eth0 eth1
Rede local Rede local
da eth0 da eth1
Nuva Soluções em TIC - http://www.nuva.com.br Página 6
Roteamento
● forward: quando um pacote entra em uma interface de rede para sair em outra interface de rede;
● Input: quando um pacote entra em uma interface com destino a um IP do próprio Linux (loopback);
● output: quando um pacote é criado no Linux para ser entregue no próprio Linux (input) ou entregue
por uma interface de rede a algum host remoto;
Loopback lo
Routing
Interfaces Interfaces
eth0 eth1
Interface Softwares
PREROUTING
de entrada
Loopback
INPUT
tabela
Routing local
Routing
outras
tabelas
OUTPUT
Interface
FORWARD POSTROUTING
de saída
Interface tabela
Routing local
Softwares
de entrada
outras
tabelas
tabela
Routing
local
outras
tabelas
Interface
de saída
# - Roteamento IPv6:
ip -6 rule show
0: from all lookup local
32766: from all lookup main
CGN-Prefix 45.255.129.128/25
198.18.0.1/30 45.255.128.6/30
BNG
100.64.0.2 BGP
198.18.0.2/30
100.64.0.3 Clientes 45.255.128.5/30
100.64.0.4 PPPoE/IPOE
45.255.130.14 10.111.0.2/30 10.111.0.1/30
# Exibir regras:
ip -4 rule show
0: from all lookup local
32101: from 100.64.0.0/10 lookup cgnat
32766: from all lookup main
32767: from all lookup default
# Desativando RP-FILTER:
# - padrão:
echo net.ipv4.conf.default.rp_filter=0 > /etc/sysctl.d/90-disable-rp-filter.conf
# - todas as interfaces:
echo net.ipv4.conf.all.rp_filter=0 >> /etc/sysctl.d/90-disable-rp-filter.conf
# - interfaces conhecidas:
echo net.ipv4.conf.eth0.rp_filter=0 >> /etc/sysctl.d/90-disable-rp-filter.conf
echo net.ipv4.conf.eth1.rp_filter=0 >> /etc/sysctl.d/90-disable-rp-filter.conf
echo net.ipv4.conf.eth2.rp_filter=0 >> /etc/sysctl.d/90-disable-rp-filter.conf
# Aplicar e conferir:
sysctl -p /etc/sysctl.d/90-disable-rp-filter.conf
sysctl -a | egrep rp_filter
CGNAT
CGN-Prefix 45.255.129.128/25
198.18.0.1/30 45.255.128.6/30
BNG
100.64.0.2 BGP
198.18.0.2/30
100.64.0.3 Clientes 45.255.128.5/30
100.64.0.4 PPPoE/IPOE
45.255.130.14 10.111.0.2/30 10.111.0.1/30
ip -4 rule show
0: from all lookup local
32766: from all lookup main
32770: from 100.64.0.0/10 lookup cgnat
32780: from all lookup default
Nuva Soluções em TIC - http://www.nuva.com.br Página 18
Roteamento - BNG - PBR e CGNAT
● Há casos que nem ainda assim estaria resolvido, caso haja demanda de uma política mais complexa,
segue alguns exemplo:
○ Consultes detalhes em: https://man7.org/linux/man-pages/man8/ip-rule.8.html
ip -4 rule add prio 24000 from 100.64.0.0/10 not to 45.255.128.0/22 lookup cgnat
# - Destinos públicos na rede do provedor que podem ser localizados na tabela main:
ip -4 rule add prio 21006 from 100.64.0.0/10 to 45.255.128.0/22 goto 32766
# Exibir regras:
ip -4 rule show
0: from all lookup local
21000: from 100.64.0.0/10 to 100.64.0.0/10 goto 32766
21001: from 100.64.0.0/10 to 10.0.0.0/8 goto 32766
21002: from 100.64.0.0/10 to 172.16.0.0/12 goto 32766
21003: from 100.64.0.0/10 to 192.168.0.0/16 goto 32766
21004: from 100.64.0.0/10 to 45.255.130.0/25 goto 21999
21004: from 100.64.0.0/10 to 45.255.131.128/26 goto 21999
21006: from 100.64.0.0/10 to 45.255.128.0/22 goto 32766
21999: from 100.64.0.0/10 lookup cgnat
32766: from all lookup main
32767: from all lookup default
/etc/init.d/pbr
#!/sbin/openrc-run
description="PBR"
extra_started_commands="reload"
# - Destinos públicos na rede do provedor que podem ser localizados na tabela main:
ip -4 rule add prio 21006 from 100.64.0.0/10 to 45.255.128.0/22 goto 32766
interface eth1
description CGNAT-Uplink
ip address 198.18.0.2/30
interface eth2
description BGP-Uplink
ip address 10.111.0.2/30
router ospf
redistribute connected
redistribute static
network 10.111.0.0/30 area 0.0.0.0
network 198.18.0.0/30 area 0.0.0.0
# Teste
service iptables stop
service iptables start
service iptables restart
# Conferir:
iptables -t nat -L POSTROUTING