Noções básicas de roteamento estático no Mikrotik RouterOS

O roteamento é o processo de encontrar o caminho ideal para a transmissão de pacotes nas redes TCP / IP. Qualquer dispositivo conectado a uma rede IPv4 contém um processo e tabelas de roteamento.


Este artigo não é um HOWTO, descreve o roteamento estático no RouterOS como exemplo, omiti intencionalmente o restante das configurações (por exemplo, srcnat para acessar a Internet), portanto, entender esse material requer um certo nível de conhecimento de redes e do RouterOS.


Comutação e Roteamento



A comutação é o processo de troca de pacotes dentro de um segmento da Camada2 (Ethernet, ppp, ...). Se o dispositivo perceber que o destinatário do pacote está na mesma sub-rede Ethernet, reconhece o endereço mac usando o protocolo arp e envia o pacote diretamente, ignorando o roteador. Uma conexão ppp (ponto a ponto) pode ter apenas dois participantes e o pacote é sempre enviado para o mesmo endereço 0xff.


O roteamento é o processo de transmissão de pacotes entre os segmentos da camada2. Se o dispositivo deseja enviar um pacote, cujo destinatário está fora do segmento Ethernet, ele analisa sua tabela de roteamento e passa o pacote para um gateway que sabe para onde enviar o pacote ainda mais (ou talvez não saiba, o remetente original do pacote não está ciente disso).


A maneira mais fácil de considerar um roteador é como um dispositivo conectado a dois ou mais segmentos da Camada 2 e capaz de transferir pacotes entre eles, determinando a rota ideal da tabela de roteamento.


Se tudo estiver claro para você ou você já sabia, continue lendo. Eu recomendo fortemente que outras pessoas leiam um artigo pequeno, mas muito abrangente.


Roteamento no RouterOS e PacketFlow


Quase toda a funcionalidade relacionada ao roteamento estático está no pacote do sistema . O pacote de roteamento adiciona suporte para algoritmos de roteamento dinâmico (RIP, OSPF, BGP, MME), filtros de roteamento e BFD.


O menu principal para configurar o roteamento: [IP]->[Route] . Esquemas complexos podem exigir uma rotulagem preliminar de pacotes com uma etiqueta de roteamento em: [IP]->[Firewall]->[Mangle] (cadeias de PREROUTING e OUTPUT ).


Há três lugares no PacketFlow em que são tomadas decisões sobre o roteamento de pacotes IP:


  1. Pacotes de roteamento recebidos pelo roteador. Nesta fase, é decidido que o pacote irá para o processo local ou será enviado ainda para a rede. Pacotes de trânsito recebem uma interface de saída
  2. Roteando pacotes de saída locais. Pacotes de saída recebem uma interface de saída
  3. Uma etapa de roteamento adicional para pacotes de saída permite alterar a decisão de roteamento em [Output|Mangle]

  • O caminho do pacote nos blocos 1, 2 depende das regras em [IP]->[Route]
  • O caminho do pacote nas etapas 1, 2 e 3 depende das regras em [IP]->[Route]->[Rules]
  • O caminho do pacote nos blocos 1, 3 pode ser afetado usando [IP]->[Firewall]->[Mangle]

RIB, FIB, cache de roteamento



Base de informações de roteamento
A base na qual as rotas dos protocolos de roteamento dinâmico são coletadas, rotas do ppp e dhcp, rotas estáticas e conectadas. Este banco de dados contém todas as rotas, exceto aquelas filtradas pelo administrador.


Por convenção , podemos assumir que [IP]->[Route] exibe RIB.


Base de informações de encaminhamento


A base para onde estão indo as melhores rotas da RIB. Todas as rotas no FIB estão ativas e são usadas para encaminhar pacotes. Se a rota se tornar inativa (desativada pelo administrador (sistema) ou a interface através da qual o pacote deve ser enviado estiver inativa), a rota será excluída do FIB.


Para tomar uma decisão sobre o roteamento, os seguintes dados do pacote IP são usados ​​na tabela FIB:


  • Endereço de origem
  • Endereço de destino
  • Interface de origem
  • Marca de roteamento
  • ToS (DSCP)

A entrada no pacote FIB passa pelos seguintes estágios:


  • O pacote foi projetado para o processo do roteador local?
  • O pacote se enquadra no sistema PBR ou nas regras do usuário?
    • Nesse caso, o pacote é enviado para a tabela de roteamento especificada.
  • O pacote é enviado para a tabela principal

Por convenção , podemos assumir que [IP]->[Route Active=yes] exibe FIB.


Cache de roteamento
O mecanismo para o cache de rotas. O roteador lembra para onde os pacotes foram enviados e, se houver outros semelhantes (presumivelmente da mesma conexão), inicia-os na mesma rota, sem fazer check-in no FIB. O cache da rota é limpo periodicamente.


Para os administradores, o RouterOS não tinha como visualizar e gerenciar o cache de roteamento, mas com ele você pode desativá-lo em [IP]->[Settings] .


Este mecanismo foi removido do kernel do linux 3.6, mas o kernel 3.3.5 ainda é usado no RouterOS, possivelmente o cache de roteamento é um dos motivos.


Caixa de diálogo Adicionar rota


[IP]->[Route]->[+]


  1. A sub-rede para a qual você deseja criar uma rota (padrão: 0.0.0.0/0)
  2. IP do gateway ou interface para a qual o pacote será enviado (pode haver vários, consulte ECMP abaixo)
  3. Verificando a disponibilidade do gateway
  4. Tipo de registro
  5. Distância (métrica) da rota
  6. Tabela de roteamento
  7. IP para pacotes de saída locais por esta rota
  8. O objetivo do Escopo e do Escopo do Destino está escrito no final do artigo.

Sinalizadores de rota


  • X - A rota está desabilitada pelo administrador ( disabled=yes )
  • A - A rota é usada para transmitir pacotes.
  • D - Rota adicionada dinamicamente (BGP, OSPF, RIP, MME, PPP, DHCP, Conectado)
  • C - A sub-rede está conectada diretamente ao roteador
  • S - Rota estática
  • r, b, o, m - A rota foi adicionada por um dos protocolos de roteamento dinâmico
  • B, U, P - Rota de filtragem (descarta pacotes em vez de transmitir)

O que especificar no gateway: endereço IP ou interface?


O sistema permite que você especifique os dois, enquanto não jura e não dá dicas se você fez algo errado.


Endereço IP
O endereço do gateway deve estar acessível via Layer2. Para Ethernet, isso significa que o roteador deve ter um endereço IP da mesma sub-rede em uma das interfaces ativas, para ppp - que o endereço do gateway esteja listado em uma das interfaces ativas como o endereço de sub-rede.
Se a condição de disponibilidade da Camada2 não for cumprida, a rota é considerada inativa e não cai no FIB.


Interface
Tudo é mais complicado e o comportamento do roteador depende do tipo de interface:


  • PPP (Async, PPTP, L2TP, SSTP, PPPoE, OpenVPN *), a conexão assume que há apenas dois participantes e o pacote será sempre enviado ao gateway para transmissão, se o gateway detectar que é o próprio destinatário, transferirá o pacote para o processo local.
  • A Ethernet assume que há muitos participantes e enviará solicitações para a interface arp com o endereço do receptor de pacotes, esse é o comportamento esperado e bastante normal para as rotas conectadas.
    Mas quando você tenta usar a interface como uma rota para uma sub-rede remota, você obtém a seguinte situação: a rota está ativa, o ping passa para o gateway, mas não atinge o destinatário da sub-rede especificada. Se você olhar a interface através de um sniffer, verá solicitações arp com endereços de uma sub-rede remota.


Tente especificar o endereço IP como gateway sempre que possível. As exceções são rotas conectadas (criadas automaticamente) e interfaces PPP (Async, PPTP, L2TP, SSTP, PPPoE, OpenVPN *).


O OpenVPN não contém um cabeçalho PPP, mas você pode usar o nome da interface OpenVPN para criar a rota.


Rota mais específica


A regra básica de roteamento. Uma rota que descreve uma sub-rede menor (com a maior máscara de sub-rede) tem uma prioridade mais alta ao decidir sobre o roteamento de pacotes. A posição das entradas na tabela de roteamento não está relacionada à seleção - a regra básica é Mais Específica.



Todas as rotas do esquema especificado estão ativas (localizadas no FIB), porque apontam para sub-redes diferentes e não entram em conflito.


Se um dos gateways ficar indisponível, a rota associada será considerada inativa (removida do FIB) e os pacotes serão pesquisados ​​nas rotas restantes.


Às vezes, uma rota com uma sub-rede 0.0.0.0/0 recebe um significado especial e é chamada de “Rota padrão” ou “Gateway de último recurso”. De fato, não há nada de mágico nele e ele simplesmente inclui todos os endereços IPv4 possíveis, mas esses nomes descrevem bem seu objetivo - indica um gateway para onde encaminhar pacotes para os quais não há outras rotas mais precisas.


A máscara de sub-rede máxima possível para IPv4 é / 32; essa rota aponta para um host específico e pode ser usada na tabela de roteamento.


Compreender a rota mais específica é fundamental para qualquer dispositivo TCP / IP.


Distância


Distâncias (ou métricas) são necessárias para a filtragem administrativa de rotas para uma sub-rede acessível através de vários gateways. Uma rota com uma métrica mais baixa é considerada uma prioridade e estará no FIB. Se uma rota com uma métrica mais baixa deixar de estar ativa, no FIB será substituída por uma rota com uma métrica mais alta.


Se houver várias rotas para a mesma sub-rede com a mesma métrica, o roteador adicionará apenas uma delas à tabela FIB, guiada por sua lógica interna.


A métrica pode assumir um valor de 0 a 255:


  • 0 - Métrico para rotas conectadas. A distância 0 não pode ser definida pelo administrador
  • 1-254 - Métricas disponíveis para o administrador para definir rotas. Métricas com um valor menor têm precedência.
  • 255 - Métrica disponível para o administrador para definir rotas. Diferentemente de 1-254, uma rota com uma métrica de 255 sempre permanece inativa e não cai no FIB
  • Métricas especiais. As rotas recebidas dos protocolos de roteamento dinâmico têm valores métricos padrão

Verificar gateway


Verificar gateway - extensão MikroTik RoutesOS para verificar a disponibilidade do gateway via icmp ou arp. Uma vez a cada 10 segundos (não pode ser alterado), uma solicitação é enviada ao gateway; se a resposta não vier duas vezes, a rota é considerada indisponível e é removida do FIB. Se o gateway de verificação desativou a rota de verificação, continua e a rota se torna ativa novamente após uma verificação bem-sucedida.


Verificar gateway desativa a entrada na qual está configurado e todas as outras entradas (em todas as tabelas de roteamento e rotas ecmp) com o gateway especificado.


Em geral, o gateway de verificação funciona bem se não houver problemas com a perda de pacotes para o gateway. O gateway de verificação não sabe o que acontece com a comunicação fora do gateway verificado, pois essas ferramentas adicionais são necessárias: scripts, roteamento recursivo, protocolos de roteamento dinâmico.


A maioria das VPNs e protocolos de encapsulamento contém ferramentas internas para verificar a atividade da conexão, permitindo que os gateways de verificação sejam uma carga adicional (mas muito pequena) no desempenho da rede e do dispositivo.


Rotas ECMP


Caminho múltiplo de custo igual - enviando pacotes para o destinatário usando vários gateways ao mesmo tempo com o algoritmo Round Robin.


Uma rota ECMP é criada pelo administrador especificando vários gateways para uma sub-rede (ou automática, se houver duas rotas equivalentes ao OSPF).


O ECMP é usado para equilibrar a carga entre dois canais, em teoria, se houver dois canais em uma rota ecmp, então para cada pacote o canal de saída deve ser diferente. Mas o mecanismo de cache de roteamento envia pacotes da conexão ao longo da rota para a qual o primeiro pacote foi, como resultado, obtemos um tipo de balanceamento de carga por conexão.


Se você desabilitar o cache de roteamento, os pacotes na rota ECMP serão divididos corretamente, mas há um problema com o NAT. A regra NAT processa apenas o primeiro pacote da conexão (o restante é processado automaticamente) e a situação é que os pacotes com um endereço de origem vão de interfaces diferentes.


O gateway de verificação (bug do RouterOS) não funciona nas rotas ECMP. Mas você pode contornar essa limitação se criar rotas adicionais para verificação, o que desativará as entradas no ECMP.


Filtragem de roteamento


A opção Tipo determina o que fazer com o pacote:


  • unicast - envia para o gateway especificado (interface)
  • blackhole - solte o pacote
  • proibir, inacessível - solte o pacote e envie a mensagem icmp ao remetente

A filtragem geralmente é usada quando você precisa proteger o envio de pacotes da maneira errada; é claro que você pode filtrar isso através de um firewall.


Alguns exemplos


Para corrigir coisas básicas sobre roteamento.


Roteador doméstico típico


 /ip route add dst-address=0.0.0.0/0 gateway=10.10.10.1 

  1. Rota estática para 0.0.0.0/0 (rota padrão)
  2. Rota conectada na interface com o provedor
  3. Rota conectada na interface da LAN

Roteador doméstico PPPoE típico


  1. Rota estática para a rota padrão, adicionada automaticamente desde isso é indicado nas propriedades da conexão
  2. Rota conectada para conexão PPP
  3. Rota conectada na interface da LAN

Roteador doméstico típico com dois provedores e redundância


 /ip route add dst-address=0.0.0.0/0 gateway=10.10.10.1 distance=1 check-gateway=ping add dst-address=0.0.0.0/0 gateway=10.20.20.1 distance=2 

  1. Rota estática para rota padrão através do primeiro provedor com métrica 1 e verificação da disponibilidade do gateway
  2. Rota estática para rota padrão através do segundo provedor com métrica 2
  3. Rotas conectadas

O tráfego para 0.0.0.0/0 passa pela 10.10.10.1, enquanto esse gateway está disponível, caso contrário, alterna para 10.20.20.1


Esse esquema pode ser considerado reserva de canal, mas não é sem inconvenientes. Se ocorrer uma interrupção fora do gateway do provedor (por exemplo, dentro da rede da operadora), seu roteador não saberá e continuará a considerar a rota ativa.


Roteador doméstico típico com dois provedores, redundância e ECMP


 /ip route add dst-address=0.0.0.0/0 gateway=10.10.10.1 check-gateway=ping add dst-address=0.0.0.0/0 gateway=10.20.20.1 check-gateway=ping add dst-address=0.0.0.0/0 gateway=10.10.10.1,10.20.20.1 distance=1 

  1. Rotas estáticas para verificação do chack gateway
  2. Rota do ECMP
  3. Rotas conectadas

Rotas para verificar o azul (a cor das rotas inativas), mas isso não interfere na operação do gateway de verificação. Na versão atual (6.44) RoS, a prioridade automática é dada à rota ECMP, mas é melhor adicionar rotas de teste a outras tabelas de roteamento (opção routing-mark )


Não haverá aumento de velocidade no Speedtest e em outros sites similares (o ECMP divide o tráfego por conexões, não por pacotes), mas os aplicativos p2p devem carregar mais rapidamente.


Filtrando pelo roteamento


 /ip route add dst-address=0.0.0.0/0 gateway=10.10.10.1 add dst-address=192.168.200.0/24 gateway=10.30.30.1 distance=1 add dst-address=192.168.200.0/24 gateway=10.10.10.1 distance=2 type=blackhole 

  1. Rota estática para a rota padrão
  2. Rota estática para 192.168.200.0/24 via túnel ipip
  3. Proibindo rota estática para 192.168.200.0/24 através do roteador do provedor

Uma opção de filtragem na qual o tráfego do túnel não vai para o roteador do provedor quando a interface ipip está desativada. Tais esquemas raramente são necessários, porque é possível implementar o bloqueio através do firewall.


Loop de roteamento
Um loop de roteamento é uma situação em que um pacote é executado entre roteadores antes que o ttl expire. Geralmente é uma conseqüência de um erro de configuração, em grandes redes é tratado pela implementação de protocolos de roteamento dinâmico, em pequenas redes - com cuidado.


Parece algo como isto:


Exemplo (mais simples) de como obter um resultado semelhante:


O exemplo do loop de roteamento não tem uso prático, mas mostra que os roteadores não têm idéia da tabela de roteamento de seus vizinhos.


Tabelas de roteamento de base de política e roteamento adicionais


Ao escolher uma rota, o roteador usa apenas um campo do cabeçalho do pacote (endereço de destino) - esse é o roteamento básico. O roteamento com base em outras condições, como endereço de origem, tipo de tráfego (ToS), balanceamento sem ECMP, refere-se ao Policy Base Routing (PBR) e usa tabelas de roteamento adicionais.



Rota mais específica é a regra básica para escolher uma rota em uma tabela de roteamento.


Por padrão, todas as regras de roteamento são adicionadas à tabela principal. Um administrador pode criar um número arbitrário de tabelas de roteamento adicionais e pacotes de roteamento para elas. Regras em tabelas diferentes não entram em conflito. Se o pacote não encontrar uma regra adequada na tabela especificada, irá para a tabela principal.


Exemplo de distribuição através do Firewall:


  • 192.168.100.10 -> 8.8.8.8
    1. O tráfego de 192.168.100.10 recebe o rótulo via-isp1 em [Prerouting|Mangle]
    2. No estágio de roteamento, na tabela via-isp1, uma rota é pesquisada até 8.8.8.8
    3. A rota é encontrada, o tráfego é enviado para o gateway 10.10.10.1
  • 192.168.200.20 -> 8.8.8.8
    1. O tráfego de 192.168.200.20 recebe o rótulo via-isp2 em [Prerouting|Mangle]
    2. No estágio de roteamento, a tabela via-isp2 procura uma rota até 8.8.8.8
    3. A rota é encontrada, o tráfego é enviado para o gateway 10.20.20.1
  • Se um dos gateways (10.10.10.1 ou 10.20.20.1) ficar indisponível, o pacote irá para a tabela principal e procurará uma rota adequada lá

Problemas de terminologia


O RouterOS tem certos problemas de terminologia.
Ao trabalhar com regras em [IP]->[Routes] tabela de roteamento é indicada, embora diga que o rótulo:


Em [IP]->[Routes]->[Rule] tudo está correto, no rótulo da condição na ação da tabela:


Como enviar um pacote para uma tabela de roteamento específica


O RouterOS fornece várias ferramentas:


  • Regras em [IP]->[Routes]->[Rules]
  • Rótulos de rota ( action=mark-routing ) em [IP]->[Firewall]->[Mangle]
  • VRF

Regras [IP]->[Route]->[Rules]
As regras são processadas sequencialmente; se o pacote corresponder às condições da regra, ele não irá mais longe.


As regras de roteamento permitem expandir os recursos de roteamento, contando não apenas com o endereço do destinatário, mas também com o endereço de origem e a interface para a qual o pacote foi recebido.



Regras consistem em condições e ações:


  • Condições. Eles praticamente repetem a lista de sinais pelos quais o pacote é verificado no FIB, apenas o ToS está ausente.
  • Acções
    • lookup - envia um pacote para uma tabela
    • pesquisa apenas na tabela - bloqueie o pacote na tabela; se a rota não for encontrada, o pacote não irá para a tabela principal
    • soltar - soltar o pacote
    • inacessível - solte o pacote de notificação do remetente

No FIB, o tráfego para processos locais é processado ignorando as regras [IP]->[Route]->[Rules] :


Marcando [IP]->[Firewall]->[Mangle]
Os rótulos de rota permitem definir o gateway para o pacote usando quase todas as condições do Firewall:


Praticamente, porque nem todos fazem sentido, e alguns podem funcionar de maneira instável.



Existem duas maneiras de marcar um pacote:


  • Defina a marca de roteamento imediatamente
  • Primeiro defina a marca de conexão e , em seguida, com base na marca de conexão

Em um artigo sobre firewall, escrevi que a segunda opção é preferível porque reduz a carga na CPU, no caso de marcar rotas - isso não é totalmente verdade. Esses métodos de marcação nem sempre são equivalentes e geralmente são usados ​​para resolver vários problemas.


Exemplos de uso


Passamos a exemplos de uso do roteamento de base de políticas; é muito mais fácil mostrar a eles por que tudo isso é necessário.


Tráfego MultiWAN e de saída de resposta (saída)
Um problema comum na configuração do MultiWAN: o Mikrotik só pode ser acessado da Internet através do provedor "ativo".


Não importa para o roteador qual IP o pedido chegou; ao gerar uma resposta, ele procurará uma rota na tabela de roteamento, onde a rota através do isp1 está ativa. Além disso, esse pacote provavelmente será filtrado no caminho para o destinatário.


Outro ponto interessante. Se a fonte "simples" nat estiver configurada na interface ether1: /ip fi nat add out-interface=ether1 action=masquerade pacote irá para a rede com src. endereço = 10.10.10.100, o que agravará ainda mais a situação.


Existem várias maneiras de corrigir o problema, mas qualquer uma delas exigirá tabelas de roteamento adicionais:


 /ip route add dst-address=0.0.0.0/0 gateway=10.10.10.1 check-gateway=ping distance=1 add dst-address=0.0.0.0/0 gateway=10.20.20.1 check-gateway=ping distance=2 add dst-address=0.0.0.0/0 gateway=10.10.10.1 routing-mark=over-isp1 add dst-address=0.0.0.0/0 gateway=10.20.20.1 routing-mark=over-isp2 

Usando [IP]->[Route]->[Rules]
Especifique a tabela de roteamento que será usada para pacotes com o IP de origem especificado.


 /ip route rule add src-address=10.10.10.100/32 action=lookup-only-in-table table=over-isp1 add src-address=10.20.20.200/32 action=lookup-only-in-table table=over-isp2 

Você pode usar action=lookup , mas para o tráfego de saída local, essa opção exclui completamente as conexões da interface incorreta.


  • O sistema gera um pacote de resposta com Src. Endereço: 10.20.20.200
  • No estágio Routing Decision (2), [IP]->[Routes]->[Rules] é verificado e o pacote é enviado para a tabela de roteamento over-isp2
  • De acordo com a tabela de roteamento, o pacote deve ser enviado ao gateway 10.20.20.1 através da interface ether2


Esse método não requer um Connection Tracker funcional, ao contrário da tabela Mangle.


Usando [IP]->[Firewall]->[Mangle]
A conexão começa com o pacote recebido, por isso a marcamos ( action=mark-connection ). Para pacotes de saída da conexão marcada, definimos o rótulo da rota ( action=mark-routing ).


 /ip firewall mangle #   add chain=input in-interface=ether1 connection-state=new action=mark-connection new-connection-mark=from-isp1 add chain=input in-interface=ether2 connection-state=new action=mark-connection new-connection-mark=from-isp2 #      add chain=output connection-mark=from-isp1 action=mark-routing new-routing-mark=over-isp1 passthrough=no add chain=output connection-mark=from-isp2 action=mark-routing new-routing-mark=over-isp2 passthrough=no 

ip, dst-address .


  • ether2 . [INPUT|Mangle] from-isp2
  • Src. Address: 10.20.20.200
  • Routing Decision(2) 10.20.20.1 ether1. [OUTPUT|Filter]
  • [OUTPUT|Mangle] from-isp2 over-isp2
  • Routing Adjusment(3)
  • 10.20.20.1 ether2


MultiWAN dst-nat


, ( web) .


 /ip firewall nat add chain=dstnat proto=tcp dst-port=80,443 in-interface=ether1 action=dst-nat to-address=192.168.100.100 add chain=dstnat proto=tcp dst-port=80,443 in-interface=ether2 action=dst-nat to-address=192.168.100.100 

, Firewall Mangle, :


 /ip firewall mangle add chain=prerouting connection-state=new in-interface=ether1 protocol=tcp dst-port=80,443 action=mark-connection new-connection-mark=web-input-isp1 add chain=prerouting connection-state=new in-interface=ether2 protocol=tcp dst-port=80,443 action=mark-connection new-connection-mark=web-input-isp2 add chain=prerouting connection-mark=web-input-isp1 in-interface=ether3 action=mark-routing new-routing-mark=over-isp1 passthrough=no add chain=prerouting connection-mark=web-input-isp2 in-interface=ether3 action=mark-routing new-routing-mark=over-isp2 passthrough=no 


NAT, .


MultiWAN


PBR vpn ( SSTP) .



:


 /ip route add dst-address=0.0.0.0/0 gateway=192.168.100.1 routing-mark=over-isp1 add dst-address=0.0.0.0/0 gateway=192.168.200.1 routing-mark=over-isp2 add dst-address=0.0.0.0/0 gateway=192.168.0.1 routing-mark=over-isp3 add dst-address=0.0.0.0/0 gateway=192.168.100.1 distance=1 add dst-address=0.0.0.0/0 gateway=192.168.200.1 distance=2 add dst-address=0.0.0.0/0 gateway=192.168.0.1 distance=3 

:


 /ip firewall mangle add chain=output dst-address=10.10.10.100 proto=tcp dst-port=443 action=mark-routing new-routing-mark=over-isp1 passtrough=no add chain=output dst-address=10.10.10.101 proto=tcp dst-port=443 action=mark-routing new-routing-mark=over-isp2 passtrough=no add chain=output dst-address=10.10.10.102 proto=tcp dst-port=443 action=mark-routing new-routing-mark=over-isp3 passtrough=no 

NAT, Src. Address:


 /ip firewall nat add chain=srcnat out-interface=ether1 action=masquerade add chain=srcnat out-interface=ether2 action=masquerade add chain=srcnat out-interface=ether3 action=masquerade 

:


  • SSTP
  • Routing Decision (2) , main. Src. Address ether1
  • [Output|Mangle]
  • Routing Adjusment
  • Src. Address ether1, [Nat|Srcnat]

, :


Connection Tracker [Mangle] [Srcnat] , , Replay Dst. Address NAT:


VPN ( ) :



, :


 /ip route add dst-address=10.10.10.100 gateway=192.168.100.1 add dst-address=10.10.10.101 gateway=192.168.200.1 add dst-address=10.10.10.102 gateway=192.168.0.1 

. , vpn , 6 [IP]->[Routes] type=blackhole . — 3 [IP]->[Route]->[Rules] .



, . :


 /ip route add dst-address=0.0.0.0/0 gateway=10.10.10.1 dist=1 check-gateway=ping add dst-address=0.0.0.0/0 gateway=10.20.20.1 dist=2 check-gateway=ping add dst-address=0.0.0.0/0 gateway=10.10.10.1 dist=1 routing-mark=over-isp1 add dst-address=0.0.0.0/0 gateway=10.20.20.1 dist=1 routing-mark=over-isp2 

[IP]->[Route]->[Rules]


 /ip route rules add src-address=192.168.100.0/25 action=lookup-only-in-table table=over-isp1 add src-address=192.168.100.128/25 action=lookup-only-in-table table=over-isp2 

action=lookup , main . — .


[IP]->[Firewall]->[Mangle]
ip . . layer7, , , .


 /ip firewall mangle add chain=prerouting src-address-list=users-over-isp1 dst-address-type=!local action=mark-routing new-routing-mark=over-isp1 add chain=prerouting src-address-list=users-over-isp2 dst-address-type=!local action=mark-routing new-routing-mark=over-isp2 

"" [IP]->[Route]->[Rules] :


 /ip route rules add routing-mark=over-isp1 action=lookup-only-in-table table=over-isp1 add routing-mark=over-isp2 action=lookup-only-in-table table=over-isp2 

[IP]->[Firewall]->[Filter] :


 /ip firewall filter add chain=forward routing-mark=over-isp1 out-interface=!ether1 action=reject add chain=forward routing-mark=over-isp2 out-interface=!ether2 action=reject 

dst-address-type=!local
dst-address-type=!local (dns, winbox, ssh, ...). , , dst-address-table .


[IP]->[Route]->[Rules] , . , FIB [PREROUTING|Mangle] main, . Routing Rules, User PBR .


[IP]->[Firewall]->[Mangle action=route]
[Prerouting|Mangle] , :


 /ip firewall mangle add chain=prerouting src-address=192.168.100.0/25 action=route gateway=10.10.10.1 add chain=prerouting src-address=192.168.128.0/25 action=route gateway=10.20.20.1 

route ( [IP]->[Route]->[Rules] ). , action=route action=mark-route , ( passtrough ), .
wiki , .


PPC


Per Connection Classificator — ECMP. ECMP (ECMP , Routing Cache ).


PCC ip , 32- . , . . , .


:


 192.168.100.10: 192+168+100+10 = 470 % 3 = 2 192.168.100.11: 192+168+100+11 = 471 % 3 = 0 192.168.100.12: 192+168+100+12 = 472 % 3 = 1 

src.address :


 #  /ip route add dst-address=0.0.0.0/0 gateway=10.10.10.1 dist=1 check-gateway=ping add dst-address=0.0.0.0/0 gateway=10.20.20.1 dist=2 check-gateway=ping add dst-address=0.0.0.0/0 gateway=10.30.30.1 dist=3 check-gateway=ping add dst-address=0.0.0.0/0 gateway=10.10.10.1 dist=1 routing-mark=over-isp1 add dst-address=0.0.0.0/0 gateway=10.20.20.1 dist=1 routing-mark=over-isp2 add dst-address=0.0.0.0/0 gateway=10.30.30.1 dist=1 routing-mark=over-isp3 #    /ip firewall mangle add chain=prerouting in-interface=br-lan dst-address-type=!local connection-state=new per-connection-classifier=src-address:3/0 action=mark-connection new-connection-mark=conn-over-isp1 add chain=prerouting in-interface=br-lan dst-address-type=!local connection-state=new per-connection-classifier=src-address:3/1 action=mark-connection new-connection-mark=conn-over-isp2 add chain=prerouting in-interface=br-lan dst-address-type=!local connection-state=new per-connection-classifier=src-address:3/2 action=mark-connection new-connection-mark=conn-over-isp3 add chain=prerouting in-interface=br-lan connection-mark=conn-over-isp1 action=mark-routing new-routing-mark=over-isp1 add chain=prerouting in-interface=br-lan connection-mark=conn-over-isp2 action=mark-routing new-routing-mark=over-isp2 add chain=prerouting in-interface=br-lan connection-mark=conn-over-isp3 action=mark-routing new-routing-mark=over-isp3 

: in-interface=br-lan , action=mark-routing .



Check ping — , IP , , , check ping .
BGP, .


, ip , , google dns: 8.8.8.8. 8.8.4.4. Mikrotik .



Multihop BGP MikroTik, check gateway .


scope/target scope :


  1. scope main target scope
  2. ,
  3. connected

, :


  • 1-3 connected ,
  • 4-6 connected ""

RIB, FIB : 0.0.0.0/0 via 10.10.10.1 on ether1 .




:


 /ip route add dst-address=0.0.0.0/0 gateway=8.8.8.8 check-gateway=ping distance=1 target-scope=10 add dst-address=8.8.8.8 gateway=10.10.10.1 scope=10 add dst-address=0.0.0.0/0 gateway=10.20.20.1 distance=2 

, 10.10.10.1:


Check gateway ping' 8.8.8.8, ( main) 10.10.10.1.


10.10.10.1 8.8.8.8, , ( ping) 8.8.8.8 10.10.10.1:


ether1, , 8.8.8.8 :


, NetWatch 8.8.8.8. NetWatch . :


 /ip route add dst-address=8.8.8.8 gateway=10.20.20.1 distance=100 type=blackhole 


, NetWatch .


, 8.8.8.8 , dns .


Virtual Routing and Forwarding (VRF)


VRF , ( MPLS) L3VPN :


VRF Mikrotik , ip VRF, .


vrf:


 /ip route vrf add interfaces=ether1 routing-mark=vrf1 add interfaces=ether2 routing-mark=vrf2 /ip address add address=192.168.100.1/24 interface=ether1 network=192.168.100.0 add address=192.168.200.1/24 interface=ether2 network=192.168.200.0 

ether2 , ping vrf ( ), ping :


main ( vrf route leaking):


 /ip route add distance=1 gateway=172.17.0.1@main routing-mark=vrf1 add distance=1 gateway=172.17.0.1%wlan1 routing-mark=vrf2 

route leaking: : 172.17.0.1@main : 172.17.0.1%wlan1 .


[PREROUTING|Mangle] :


 /ip firewall mangle add chain=prerouting in-interface=ether1 action=mark-connection new-connection-mark=from-vrf1 passthrough=no add chain=prerouting connection-mark=from-vrf1 routing-mark=!vrf1 action=mark-routing new-routing-mark=vrf1 passthrough=no add chain=prerouting in-interface=ether2 action=mark-connection new-connection-mark=from-vrf2 passthrough=no add chain=prerouting connection-mark=from-vrf2 routing-mark=!vrf1 action=mark-routing new-routing-mark=vrf2 passthrough=no 



VRF netmap:


:


 /ip route vrf add interfaces=ether1 routing-mark=vrf1 add interfaces=ether2 routing-mark=vrf2 /ip address add address=192.168.100.1/24 interface=ether1 network=192.168.100.0 add address=192.168.100.1/24 interface=ether2 network=192.168.100.0 add address=192.168.0.1/24 interface=ether3 network=192.168.0.0 

firewall:


 #        /ip firewall mangle add chain=prerouting dst-address=192.168.101.0/24 in-interface=ether3 action=mark-routing new-routing-mark=vrf1 passthrough=no add chain=prerouting dst-address=192.168.102.0/24 in-interface=ether3 action=mark-routing new-routing-mark=vrf2 passthrough=no # netmap   ""     /ip firewall nat add chain=dstnat dst-address=192.168.101.0/24 in-interface=ether3 action=netmap to-addresses=192.168.100.0/24 add chain=dstnat dst-address=192.168.102.0/24 in-interface=ether3 action=netmap to-addresses=192.168.100.0/24 

:


 #      route leaking,       connected  /ip route add distance=1 dst-address=192.168.0.0/24 gateway=ether3 routing-mark=vrf1 add distance=1 dst-address=192.168.0.0/24 gateway=ether3 routing-mark=vrf2 

dhcp
VRF , ( dhcp client) .


vrf:


 /ip route vrf add interface=ether1 routing-mark=over-isp1 

( ) over-isp1 :


 /ip firewall mangle add chain=output out-interface=!br-lan action=mark-routing new-routing-mark=over-isp1 passthrough=no add chain=prerouting in-interface=br-lan dst-address-type=!local action=mark-routing new-routing-mark=over-isp1 passthrough=no 

, :


 /interface bridge add name=bare /ip route add dst-address=0.0.0.0/0 gateway=bare 

Routing decision (2) [OUTPUT|Mangle] , 0.0.0.0/0 main .


connected-in dynamic-in [Routing] -> [Filters]


( ) — ( routing ), :


  • connected-in — connected
  • dynamic-in — PPP DCHP

, : distance, routing-mark, comment, scope, target scope, ...


- Routing Filters ( ), Routing Filters, . Routing Filters .


Routing Mark
. VPN . - :


 #  vpn    default route    /interface pptp-client add connect-to=XXXX add-default-route=yes default-route-distance=101 ... add connect-to=YYYY add-default-route=yes default-route-distance=100 ... #             /routing filter add chain=dynamic-in distance=100 prefix=0.0.0.0/0 action=passthrough set-routing-mark=over-vpn1 add chain=dynamic-in distance=101 prefix=0.0.0.0/0 action=passthrough set-routing-mark=over-vpn2 

, , vrf ppp , 0.0.0.0/0 main. .


Connected
:


 /route filter add chain=connected-in prefix=192.168.100.0/24 action=reject 


RouterOS :


  • [Tool]->[Torch]
  • /ip route check — ,
  • /ping routing-table=<name> /tool traceroute routing-table=<name> — ping
  • action=log [IP]->[Firewall] — , packet flow,

Source: https://habr.com/ru/post/pt443788/


All Articles