Multivan et routage sur Mikrotik RouterOS

introduction

La reprise de l'article, en plus de la vanité, a été motivée par la fréquence déprimante des questions sur ce sujet dans les groupes de profil de la communauté des télégrammes russophones. L'article s'adresse aux administrateurs novices de Mikrotik RouterOS (ci-après dénommés ROS). Il ne traite que du multivan, en mettant l'accent sur le routage. En prime, il y a un minimum de réglages suffisants pour assurer un fonctionnement sûr et pratique. Ceux qui recherchent la divulgation des sujets des files d'attente, de l'équilibrage de charge, des vlans, des ponts, de l'analyse approfondie en plusieurs étapes de l'état du canal, etc., ne peuvent pas perdre de temps et d'efforts à lire.

Données initiales

En tant que sujet de test, un routeur Mikrotik à cinq ports avec ROS version 6.45.3 a été sélectionné. Il acheminera le trafic entre deux réseaux locaux (LAN1 et LAN2) et trois fournisseurs (ISP1, ISP2, ISP3). Le canal vers ISP1 a une adresse "grise" statique, ISP2 - "blanc", obtenu via DHCP, ISP3 - "blanc" avec autorisation PPPoE. Le schéma de connexion est représenté sur la figure :

Multivan et routage sur Mikrotik RouterOS

La tâche consiste à configurer le routeur MTK en fonction du schéma afin que :

  1. Fournir un basculement automatique vers un fournisseur de secours. Le fournisseur principal est ISP2, la première réserve est ISP1, la deuxième réserve est ISP3.
  2. Organisez l'accès réseau LAN1 à Internet uniquement via ISP1.
  3. Fournir la possibilité d'acheminer le trafic des réseaux locaux vers Internet via le fournisseur sélectionné en fonction de la liste d'adresses.
  4. Prévoir la possibilité de publier des services du réseau local vers Internet (DSTNAT)
  5. Configurez un filtre de pare-feu pour fournir le minimum de sécurité suffisant à partir d'Internet.
  6. Le routeur peut émettre son propre trafic via l'un des trois fournisseurs, en fonction de l'adresse source sélectionnée.
  7. Assurez-vous que les paquets de réponse sont acheminés vers le canal d'où ils proviennent (y compris le réseau local).

REMARQUE Nous configurerons le routeur "from scratch" afin de garantir l'absence de surprises dans les configurations de départ "out of the box" qui changent de version en version. Winbox a été choisi comme outil de configuration, où les modifications seront affichées visuellement. Les paramètres eux-mêmes seront définis par des commandes dans le terminal Winbox. La connexion physique pour la configuration se fait par une connexion directe à l'interface Ether5.

Un peu de raisonnement sur ce qu'est un multivan, est-ce un problème ou est-ce que des gens intelligents et rusés tissent des réseaux de complot

Un administrateur curieux et attentif, mettant en place tel ou tel système par lui-même, se rend soudain compte qu'il fonctionne déjà normalement. Oui, oui, sans vos tables de routage personnalisées et autres règles de routage, dont la plupart des articles sur ce sujet regorgent. Allons vérifier?

Peut-on configurer l'adressage sur les interfaces et les passerelles par défaut ? Oui:

Sur ISP1, l'adresse et la passerelle ont été enregistrées avec distance=2 и vérifier-passerelle=ping.
Sur ISP2, le paramètre client DHCP par défaut - en conséquence, la distance sera égale à un.
Sur ISP3 dans les paramètres du client pppoe lorsque add-default-route=oui mettre distance-route-par défaut = 3.

N'oubliez pas d'enregistrer NAT sur la sortie :

/ip pare-feu nat add action=masquerade chain=srcnat out-interface-list=WAN

En conséquence, les utilisateurs de sites locaux s'amusent à télécharger des chats via le principal fournisseur ISP2 et il y a une réservation de canal utilisant le mécanisme vérifier la passerelle Voir remarque 1

Le point 1 de la tâche est mis en œuvre. Où est le multivan avec ses marques ? Non…

Plus loin. Vous devez libérer des clients spécifiques du réseau local via ISP1 :

/ip pare-feu mangle add action=route chain=prerouting dst-address-list=!BOGONS
passthrough=oui route-dst=100.66.66.1 src-address-list=Via_ISP1
/ip pare-feu mangle add action=route chain=prerouting dst-address-list=!BOGONS
passthrough = pas de route-dst = 100.66.66.1 adresse src = 192.168.88.0/24

Les points 2 et 3 de la tâche ont été mis en œuvre. Etiquettes, tampons, règles de route, où en es-tu ?!

Besoin de donner accès à votre serveur OpenVPN préféré avec l'adresse 172.17.17.17 pour les clients depuis Internet ? S'il te plaît:

/ip cloud défini ddns-enabled=oui

En tant que pair, nous donnons au client le résultat de sortie : ":put [ip cloud get nom-dns] »

Nous enregistrons la redirection de port depuis Internet :

/ip pare-feu nat add action=dst-nat chain=dstnat dst-port=1194
in-interface-list=protocole WAN=udp to-addresses=172.17.17.17

L'article 4 est prêt.

Nous avons mis en place un pare-feu et d'autres sécurités pour le point 5, en même temps nous sommes heureux que tout fonctionne déjà pour les utilisateurs et recherchons un récipient avec une boisson préférée ...
UN! Les tunnels sont oubliés.

l2tp-client, configuré par l'article google, est devenu votre VDS néerlandais préféré ? Oui.
l2tp-server avec IPsec a augmenté et les clients par nom DNS de IP Cloud (voir ci-dessus.) s'accrochent ? Oui.
Adossés à notre chaise, en sirotant un verre, nous considérons paresseusement les points 6 et 7 de la tâche. Nous pensons - en avons-nous besoin? Tout de même, ça marche comme ça (c)... Donc, si ce n'est toujours pas nécessaire, alors c'est tout. Multivan mis en œuvre.

Qu'est-ce qu'un multivan ? Il s'agit de la connexion de plusieurs canaux Internet à un routeur.

Vous n'avez pas besoin de lire l'article plus loin, car que peut-il y avoir d'autre qu'une démonstration d'applicabilité douteuse ?

Pour ceux qui restent, qui s'intéressent aux points 6 et 7 de la tâche, et ressentent aussi la démangeaison du perfectionnisme, on plonge plus profondément.

La tâche la plus importante de la mise en œuvre d'un multivan est le routage correct du trafic. A savoir : peu importe qui (ou qui) Voir. note 3 le ou les canaux du FAI regardent la route par défaut sur notre routeur, il devrait renvoyer une réponse au canal exact d'où provient le paquet. La tâche est claire. Où est le problème? En effet, dans un simple réseau local, la tâche est la même, mais personne ne se soucie de paramètres supplémentaires et ne ressent aucun problème. La différence est que tout nœud routable sur Internet est accessible par chacun de nos canaux, et non par un canal strictement spécifique, comme dans un simple LAN. Et le «problème» est que si une demande nous est parvenue pour l'adresse IP de ISP3, alors dans notre cas, la réponse passera par le canal ISP2, puisque la passerelle par défaut y est dirigée. Les feuilles et seront rejetées par le fournisseur comme étant incorrectes. Le problème a été identifié. Comment le résoudre?

La solution se décompose en trois étapes :

  1. Préréglage. À ce stade, les paramètres de base du routeur seront définis : réseau local, pare-feu, listes d'adresses, NAT en épingle à cheveux, etc.
  2. Multivan. À ce stade, les connexions nécessaires seront marquées et triées dans des tables de routage.
  3. Connexion à un FAI. A ce stade, les interfaces qui assurent la connexion à Internet seront configurées, le routage et le mécanisme de réservation de canaux Internet seront activés.

1. Préréglage

1.1. Nous effaçons la configuration du routeur avec la commande :

/system reset-configuration skip-backup=yes no-defaults=yes

d'accord avec "Dangereux! Réinitialiser quand même ? [o/N] :” et, après le redémarrage, nous nous connectons avec Winbox via MAC. A ce stade, la configuration et la base d'utilisateurs sont effacées.

1.2. Créez un nouvel utilisateur :

/user add group=full name=knight password=ultrasecret comment=”Not horse”

connectez-vous sous celui-ci et supprimez celui par défaut :

/user remove admin

REMARQUE C'est la suppression et non la désactivation de l'utilisateur par défaut que l'auteur considère comme plus sûre et recommande son utilisation.

1.3. Nous créons des listes d'interfaces de base pour la commodité de fonctionner dans un pare-feu, des paramètres de découverte et d'autres serveurs MAC :

/interface list add name=WAN comment="For Internet"
/interface list add name=LAN comment="For Local Area"

Signature des interfaces avec commentaires

/interface ethernet set ether1 comment="to ISP1"
/interface ethernet set ether2 comment="to ISP2"
/interface ethernet set ether3 comment="to ISP3"
/interface ethernet set ether4 comment="to LAN1"
/interface ethernet set ether5 comment="to LAN2"

et remplissez les listes d'interface :

/interface list member add interface=ether1 list=WAN comment=ISP1
/interface list member add interface=ether2 list=WAN comment=ISP2 
/interface list member add interface=ether3 list=WAN comment="to ISP3"
/interface list member add interface=ether4 list=LAN  comment="LAN1"
/interface list member add interface=ether5 list=LAN  comment="LAN2"

REMARQUE La rédaction de commentaires compréhensibles vaut le temps passé dessus, et cela facilite grandement le dépannage et la compréhension de la configuration.

L'auteur estime nécessaire, pour des raisons de sécurité, d'ajouter l'interface ether3 à la liste des interfaces « WAN », malgré le fait que le protocole ip ne passera pas par là.

N'oubliez pas qu'après la montée de l'interface PPP sur ether3, il faudra également l'ajouter à la liste des interfaces "WAN"

1.4. Nous masquons le routeur de la détection et du contrôle du voisinage des réseaux des fournisseurs via MAC :

/ip neighbor discovery-settings set discover-interface-list=!WAN
/tool mac-server set allowed-interface-list=LAN
/tool mac-server mac-winbox set allowed-interface-list=LAN

1.5. Nous créons l'ensemble minimum suffisant de règles de filtrage de pare-feu pour protéger le routeur :

/ip firewall filter add action=accept chain=input comment="Related Established Untracked Allow" 
connection-state=established,related,untracked

(la règle autorise les connexions établies et associées qui sont initiées à partir des réseaux connectés et du routeur lui-même)

/ip firewall filter add action=accept chain=input comment="ICMP from ALL" protocol=icmp

(ping et pas seulement ping. Tous les icmp sont autorisés. Très utile pour trouver des problèmes de MTU)

/ip firewall filter add action=drop chain=input comment="All other WAN Drop" in-interface-list=WAN

(la règle qui ferme la chaîne d'entrée interdit tout ce qui vient d'Internet)

/ip firewall filter add action=accept chain=forward 
comment="Established, Related, Untracked allow" 
connection-state=established,related,untracked

(la règle autorise les connexions établies et associées qui passent par le routeur)

/ip firewall filter add action=drop chain=forward comment="Invalid drop" connection-state=invalid

(la règle réinitialise les connexions avec connection-state=invalid passant par le routeur. Elle est fortement recommandée par Mikrotik, mais dans de rares situations elle peut bloquer le trafic utile)

/ip firewall filter add action=drop chain=forward comment="Drop all from WAN not DSTNATed"  
connection-nat-state=!dstnat connection-state=new in-interface-list=WAN

(la règle interdit aux paquets provenant d'Internet et n'ayant pas passé la procédure dstnat de passer par le routeur. Cela protégera les réseaux locaux des intrus qui, étant dans le même domaine de diffusion que nos réseaux externes, enregistreront nos IP externes comme passerelle et, par conséquent, essayez « d'explorer » nos réseaux locaux.)

REMARQUE Supposons que les réseaux LAN1 et LAN2 sont fiables et que le trafic entre eux et en provenance d'eux n'est pas filtré.

1.6. Créez une liste avec une liste de réseaux non routables :

/ip firewall address-list
add address=0.0.0.0/8 comment=""This" Network" list=BOGONS
add address=10.0.0.0/8 comment="Private-Use Networks" list=BOGONS
add address=100.64.0.0/10 comment="Shared Address Space. RFC 6598" list=BOGONS
add address=127.0.0.0/8 comment=Loopback list=BOGONS
add address=169.254.0.0/16 comment="Link Local" list=BOGONS
add address=172.16.0.0/12 comment="Private-Use Networks" list=BOGONS
add address=192.0.0.0/24 comment="IETF Protocol Assignments" list=BOGONS
add address=192.0.2.0/24 comment=TEST-NET-1 list=BOGONS
add address=192.168.0.0/16 comment="Private-Use Networks" list=BOGONS
add address=198.18.0.0/15 comment="Network Interconnect Device Benchmark Testing"
 list=BOGONS
add address=198.51.100.0/24 comment=TEST-NET-2 list=BOGONS
add address=203.0.113.0/24 comment=TEST-NET-3 list=BOGONS
add address=224.0.0.0/4 comment=Multicast list=BOGONS
add address=192.88.99.0/24 comment="6to4 Relay Anycast" list=BOGONS
add address=240.0.0.0/4 comment="Reserved for Future Use" list=BOGONS
add address=255.255.255.255 comment="Limited Broadcast" list=BOGONS

(Il s'agit d'une liste d'adresses et de réseaux qui ne sont pas routables sur Internet et qui seront suivies en conséquence.)

REMARQUE La liste est susceptible d'évoluer, je vous conseille donc de vérifier périodiquement la pertinence.

1.7. Configurez DNS pour le routeur lui-même :

/ip dns set servers=1.1.1.1,8.8.8.8

REMARQUE Dans la version actuelle de ROS, les serveurs dynamiques ont priorité sur les serveurs statiques. La demande de résolution de nom est envoyée au premier serveur dans l'ordre de la liste. Le passage au serveur suivant s'effectue lorsque celui en cours est indisponible. Le délai d'attente est long - plus de 5 secondes. Le retour en arrière, lorsque le "serveur tombé" est repris, ne se produit pas automatiquement. Compte tenu de cet algorithme et de la présence d'un multivan, l'auteur recommande de ne pas utiliser de serveurs fournis par des fournisseurs.

1.8. Configurez un réseau local.
1.8.1. Nous configurons des adresses IP statiques sur les interfaces LAN :

/ip address add interface=ether4 address=192.168.88.254/24 comment="LAN1 IP"
/ip address add interface=ether5 address=172.16.1.0/23 comment="LAN2 IP"

1.8.2. Nous définissons les règles pour les routes vers nos réseaux locaux via la table de routage principale :

/ip route rule add dst-address=192.168.88.0/24 table=main comment=”to LAN1”
/ip route rule add dst-address=172.16.0.0/23 table=main comment="to LAN2"

REMARQUE C'est l'un des moyens rapides et faciles d'accéder aux adresses LAN avec des sources d'adresses IP externes d'interfaces de routeur qui ne passent pas par la route par défaut.

1.8.3. Activez Hairpin NAT pour LAN1 et LAN2 :

/ip firewall nat add action=src-nat chain=srcnat comment="Hairpin to LAN1" 
out-interface=ether4 src-address=192.168.88.0/24 to-addresses=192.168.88.254
/ip firewall nat add action=src-nat chain=srcnat comment="Hairpin to LAN2" 
out-interface=ether5 src-address=172.16.0.0/23 to-addresses=172.16.1.0

REMARQUE Cela vous permet d'accéder à vos ressources (dstnat) via une IP externe tout en étant à l'intérieur du réseau.

2. En fait, la mise en œuvre du multivan très correct

Pour résoudre le problème de "répondre d'où ils ont demandé", nous utiliserons deux outils ROS : marque de connexion и marque de routage. marque de connexion vous permet de marquer la connexion souhaitée, puis de travailler avec cette étiquette comme condition d'application marque de routage. Et déjà avec marque de routage possible de travailler dans route ip и règles d'itinéraire. Nous avons compris les outils, maintenant vous devez décider quelles connexions marquer - une fois, exactement où marquer - deux.

Avec le premier, tout est simple - nous devons marquer toutes les connexions qui arrivent au routeur depuis Internet via le canal approprié. Dans notre cas, ce seront trois labels (par le nombre de canaux) : « conn_isp1 », « conn_isp2 » et « conn_isp3 ».

La nuance avec la seconde est que les connexions entrantes seront de deux types : transit et celles qui sont destinées au routeur lui-même. Le mécanisme de marque de connexion fonctionne dans le tableau mangle. Considérez le mouvement du package sur un schéma simplifié, gentiment compilé par les spécialistes de la ressource mikrotik-trainings.com (non publicitaire) :

Multivan et routage sur Mikrotik RouterOS

En suivant les flèches, on voit que le paquet arrivant à «interface d'entrée», passe par la chaîne »Pré-acheminement" et alors seulement il est divisé en transit et local dans le bloc "Décision de routage". Par conséquent, pour faire d'une pierre deux coups, nous utilisons Marque de connexion dans la table Mangle Préroutage chaînes Pré-acheminement.

Note:. Dans ROS, les étiquettes « Marque de routage » sont répertoriées comme « Table » dans la section Ip/Routes/Rules, et comme « Marque de routage » dans les autres sections. Cela peut introduire une certaine confusion dans la compréhension, mais, en fait, c'est la même chose, et c'est un analogue de rt_tables dans iproute2 sous Linux.

2.1. Nous marquons les connexions entrantes de chacun des fournisseurs :

/ip firewall mangle add action=mark-connection chain=prerouting 
comment="Connmark in from ISP1" connection-mark=no-mark in-interface=ether1  new-connection-mark=conn_isp1 passthrough=no

/ip firewall mangle add action=mark-connection chain=prerouting 
comment="Connmark in from ISP2" connection-mark=no-mark in-interface=ether2  new-connection-mark=conn_isp2 passthrough=no

/ip firewall mangle add action=mark-connection chain=prerouting 
comment="Connmark in from ISP3" connection-mark=no-mark in-interface=pppoe-isp3  new-connection-mark=conn_isp3 passthrough=no

REMARQUE Afin de ne pas marquer les connexions déjà marquées, j'utilise la condition connection-mark=no-mark au lieu de connection-state=new car je pense que c'est plus correct, ainsi que le rejet des connexions invalides dans le filtre d'entrée.


passthrough=no - car dans cette méthode d'implémentation, le re-marquage est exclu et, pour accélérer, vous pouvez interrompre l'énumération des règles après la première correspondance.

Il convient de garder à l'esprit que nous n'interférons en aucune façon avec le routage pour le moment. Maintenant, il n'y a que des étapes de préparation. La prochaine étape de la mise en œuvre sera le traitement du trafic de transit qui revient sur la connexion établie depuis la destination dans le réseau local. Ceux. les paquets qui (voir le diagramme) sont passés par le routeur en cours de route :

"Interface d'entrée"=>"Pré-routage"=>"Décision de routage"=>"Avant"=>"Post-routage"=>"Interface de sortie" et sont parvenus à leur destinataire dans le réseau local.

Important! Dans ROS, il n'y a pas de division logique en interfaces externes et internes. Si nous traçons le chemin du paquet de réponse selon le schéma ci-dessus, alors il suivra le même chemin logique que la requête :

"Interface d'entrée"=>"Pré-routage"=>"Décision de routage"=>"Avant"=>"Post-routage"=>"Interface de sortie" juste pour une demande"Interface d'entrée” était l'interface ISP, et pour la réponse - LAN

2.2. Nous dirigeons le trafic de transit de réponse vers les tables de routage correspondantes :

/ip firewall mangle add action=mark-routing chain=prerouting 
comment="Routemark transit out via ISP1" connection-mark=conn_isp1 
dst-address-type=!local in-interface-list=!WAN new-routing-mark=to_isp1 passthrough=no

/ip firewall mangle add action=mark-routing chain=prerouting 
comment="Routemark transit out via ISP2" connection-mark=conn_isp2 
dst-address-type=!local in-interface-list=!WAN new-routing-mark=to_isp2 passthrough=no

/ip firewall mangle add action=mark-routing chain=prerouting 
comment="Routemark transit out via ISP3" connection-mark=conn_isp3 
dst-address-type=!local in-interface-list=!WAN new-routing-mark=to_isp3 passthrough=no

Commentaire. in-interface-list=!WAN - nous travaillons uniquement avec le trafic du réseau local et dst-address-type=!local qui n'a pas l'adresse de destination de l'adresse des interfaces du routeur lui-même.

Il en va de même pour les paquets locaux qui sont arrivés au routeur en cours de route :

"Interface d'entrée"=>"Pré-routage"=>"Décision de routage"=>"Entrée"=>"Processus local"

Important! La réponse ira de la manière suivante :

”Processus local”=>”Décision de routage”=>”Sortie”=>”Post-routage”=>”Interface de sortie”

2.3. Nous dirigeons le trafic local de réponse vers les tables de routage correspondantes :

/ip firewall mangle add action=mark-routing chain=output 
comment="Routemark local out via ISP1" connection-mark=conn_isp1 dst-address-type=!local 
new-routing-mark=to_isp1 passthrough=no

/ip firewall mangle add action=mark-routing chain=output 
comment="Routemark local out via ISP2" connection-mark=conn_isp2 dst-address-type=!local 
new-routing-mark=to_isp2 passthrough=no

/ip firewall mangle add action=mark-routing chain=output 
comment="Routemark local out via ISP3" connection-mark=conn_isp3 dst-address-type=!local 
new-routing-mark=to_isp3 passthrough=no

À ce stade, la tâche de préparation de l'envoi d'une réponse au canal Internet d'où provient la demande peut être considérée comme résolue. Tout est marqué, étiqueté et prêt à être acheminé.
Un excellent effet "secondaire" de cette configuration est la possibilité de travailler avec le transfert de port DSNAT des deux fournisseurs (ISP2, ISP3) en même temps. Pas du tout, puisque sur ISP1 nous avons une adresse non routable. Cet effet est important, par exemple, pour un serveur de messagerie avec deux MX qui examinent différents canaux Internet.

Pour éliminer les nuances du fonctionnement des réseaux locaux avec des routeurs IP externes, nous utilisons les solutions des paragraphes. 1.8.2 et 3.1.2.6.

De plus, vous pouvez utiliser un outil avec des marques pour résoudre le paragraphe 3 du problème. Nous l'implémentons comme ceci :

2.4. Nous dirigeons le trafic des clients locaux depuis les listes de routage vers les tables appropriées :

/ip firewall mangle add action=mark-routing chain=prerouting 
comment="Address List via ISP1" dst-address-list=!BOGONS new-routing-mark=to_isp1 
passthrough=no src-address-list=Via_ISP1

/ip firewall mangle add action=mark-routing chain=prerouting 
comment="Address List via ISP2" dst-address-list=!BOGONS new-routing-mark=to_isp2 
passthrough=no src-address-list=Via_ISP2

/ip firewall mangle add action=mark-routing chain=prerouting 
comment="Address List via ISP3" dst-address-list=!BOGONS new-routing-mark=to_isp3 
passthrough=no src-address-list=Via_ISP3

En conséquence, cela ressemble à ceci :

Multivan et routage sur Mikrotik RouterOS

3. Configurez une connexion au FAI et activez le routage personnalisé

3.1. Configurez une connexion à ISP1 :
3.1.1. Configurez une adresse IP statique :

/ip address add interface=ether1 address=100.66.66.2/30 comment="ISP1 IP"

3.1.2. Configurez le routage statique :
3.1.2.1. Ajoutez une route "d'urgence" par défaut :

/ip route add comment="Emergency route" distance=254 type=blackhole

REMARQUE Cette route permet au trafic des processus locaux de passer l'étape de décision de route, quel que soit l'état des liaisons de l'un des fournisseurs. La nuance du trafic local sortant est que pour que le paquet se déplace au moins quelque part, la table de routage principale doit avoir une route active vers la passerelle par défaut. Sinon, le colis sera simplement détruit.

En tant qu'extension d'outil vérifier la passerelle Pour une analyse plus approfondie de l'état du canal, je suggère d'utiliser la méthode de routage récursif. L'essence de la méthode est que nous disons au routeur de rechercher un chemin vers sa passerelle non pas directement, mais via une passerelle intermédiaire. Les passerelles 4.2.2.1, 4.2.2.2 et 4.2.2.3 seront choisies comme passerelles de "test" pour ISP1, ISP2 et ISP3 respectivement.

3.1.2.2. Route vers l'adresse "vérification":

/ip route add check-gateway=ping comment="For recursion via ISP1"  
distance=1 dst-address=4.2.2.1 gateway=100.66.66.1 scope=10

REMARQUE Nous abaissons la valeur de portée à la valeur par défaut dans la portée cible ROS afin d'utiliser 4.2.2.1 comme passerelle récursive à l'avenir. J'insiste : la portée de la route vers l'adresse « test » doit être inférieure ou égale à la portée cible de la route qui fera référence à celle de test.

3.1.2.3. Route par défaut récursive pour le trafic sans marque de routage :

/ip route add comment="Unmarked via ISP1" distance=2 gateway=4.2.2.1

REMARQUE La valeur distance=2 est utilisée car ISP1 est déclaré comme premier secours selon les conditions de la tâche.

3.1.2.4. Route par défaut récursive pour le trafic avec la marque de routage « to_isp1 » :

/ip route add comment="Marked via ISP1 Main" distance=1 gateway=4.2.2.1 
routing-mark=to_isp1

REMARQUE En fait, nous voici enfin en train de profiter des fruits du travail préparatoire qui a été effectué au paragraphe 2.


Sur cette route, tout le trafic portant la marque route "to_isp1" sera dirigé vers la passerelle du premier fournisseur, quelle que soit la passerelle par défaut actuellement active pour la table principale.

3.1.2.5. Première route par défaut récursive de secours pour le trafic balisé ISP2 et ISP3 :

/ip route add comment="Marked via ISP2 Backup1" distance=2 gateway=4.2.2.1 
routing-mark=to_isp2
/ip route add comment="Marked via ISP3 Backup1" distance=2 gateway=4.2.2.1 
routing-mark=to_isp3

REMARQUE Ces routes sont nécessaires, entre autres, pour réserver le trafic des réseaux locaux qui sont membres de la liste d'adresses "to_isp*"'

3.1.2.6. Nous enregistrons la route pour le trafic local du routeur vers Internet via ISP1 :

/ip route rule add comment="From ISP1 IP to Inet" src-address=100.66.66.2 table=to_isp1

REMARQUE En combinaison avec les règles du paragraphe 1.8.2, il permet d'accéder au canal souhaité avec une source donnée. Ceci est essentiel pour la construction de tunnels qui spécifient l'adresse IP côté local (EoIP, IP-IP, GRE). Étant donné que les règles des règles de route ip sont exécutées de haut en bas, jusqu'à la première correspondance des conditions, cette règle doit être après les règles de la clause 1.8.2.

3.1.3. Nous enregistrons la règle NAT pour le trafic sortant :

/ip firewall nat add action=src-nat chain=srcnat comment="NAT via ISP1"  
ipsec-policy=out,none out-interface=ether1 to-addresses=100.66.66.2

REMARQUE NATim tout ce qui sort, sauf ce qui entre dans les politiques IPsec. J'essaie de ne pas utiliser action=masquerade à moins que cela ne soit absolument nécessaire. Il est plus lent et plus gourmand en ressources que src-nat car il calcule l'adresse NAT pour chaque nouvelle connexion.

3.1.4. Nous envoyons les clients de la liste auxquels il est interdit d'accéder via d'autres fournisseurs directement à la passerelle du fournisseur ISP1.

/ip firewall mangle add action=route chain=prerouting comment="Address List via ISP1 only" 
dst-address-list=!BOGONS passthrough=no route-dst=100.66.66.1 
src-address-list=Via_only_ISP1 place-before=0

REMARQUE action=route a une priorité plus élevée et est appliquée avant les autres règles de routage.


place-before=0 - place notre règle en premier dans la liste.

3.2. Établissez une connexion à ISP2.

Étant donné que le fournisseur ISP2 nous donne les paramètres via DHCP, il est raisonnable d'effectuer les modifications nécessaires avec un script qui démarre au déclenchement du client DHCP :

/ip dhcp-client
add add-default-route=no disabled=no interface=ether2 script=":if ($bound=1) do={r
    n    /ip route add check-gateway=ping comment="For recursion via ISP2" distance=1 
           dst-address=4.2.2.2/32 gateway=$"gateway-address" scope=10r
    n    /ip route add comment="Unmarked via ISP2" distance=1 gateway=4.2.2.2;r
    n    /ip route add comment="Marked via ISP2 Main" distance=1 gateway=4.2.2.2 
           routing-mark=to_isp2;r
    n    /ip route add comment="Marked via ISP1 Backup1" distance=2 gateway=4.2.2.2 
           routing-mark=to_isp1;r
    n    /ip route add comment="Marked via ISP3 Backup2" distance=3 gateway=4.2.2.2 
           routing-mark=to_isp3;r
    n    /ip firewall nat add action=src-nat chain=srcnat ipsec-policy=out,none 
           out-interface=$"interface" to-addresses=$"lease-address" comment="NAT via ISP2" 
           place-before=1;r
    n    if ([/ip route rule find comment="From ISP2 IP to Inet"] ="") do={r
    n        /ip route rule add comment="From ISP2 IP to Inet" 
               src-address=$"lease-address" table=to_isp2 r
    n    } else={r
    n       /ip route rule set [find comment="From ISP2 IP to Inet"] disabled=no 
              src-address=$"lease-address"r
    n    }      r
    n} else={r
    n   /ip firewall nat remove  [find comment="NAT via ISP2"];r
    n   /ip route remove [find comment="For recursion via ISP2"];r
    n   /ip route remove [find comment="Unmarked via ISP2"];r
    n   /ip route remove [find comment="Marked via ISP2 Main"];r
    n   /ip route remove [find comment="Marked via ISP1 Backup1"];r
    n   /ip route remove [find comment="Marked via ISP3 Backup2"];r
    n   /ip route rule set [find comment="From ISP2 IP to Inet"] disabled=yesr
    n}r
    n" use-peer-dns=no use-peer-ntp=no

Le script lui-même dans la fenêtre Winbox :

Multivan et routage sur Mikrotik RouterOS
REMARQUE La première partie du script est déclenchée lorsque le bail est obtenu avec succès, la seconde - après la publication du bail.Voir remarque 2

3.3. Nous établissons une connexion avec le fournisseur ISP3.

Étant donné que le fournisseur de paramètres nous donne de la dynamique, il est raisonnable d'apporter les modifications nécessaires avec des scripts qui démarrent après la montée de l'interface ppp et après la chute.

3.3.1. Nous configurons d'abord le profil :

/ppp profile
add comment="for PPPoE to ISP3" interface-list=WAN name=isp3_client 
on-down="/ip firewall nat remove  [find comment="NAT via ISP3"];r
    n/ip route remove [find comment="For recursion via ISP3"];r
    n/ip route remove [find comment="Unmarked via ISP3"];r
    n/ip route remove [find comment="Marked via ISP3 Main"];r
    n/ip route remove [find comment="Marked via ISP1 Backup2"];r
    n/ip route remove [find comment="Marked via ISP2 Backup2"];r
    n/ip route rule set [find comment="From ISP3 IP to Inet"] disabled=yes;" 
on-up="/ip route add check-gateway=ping comment="For recursion via ISP3" distance=1 
    dst-address=4.2.2.3/32 gateway=$"remote-address" scope=10r
    n/ip route add comment="Unmarked via ISP3" distance=3 gateway=4.2.2.3;r
    n/ip route add comment="Marked via ISP3 Main" distance=1 gateway=4.2.2.3 
    routing-mark=to_isp3;r
    n/ip route add comment="Marked via ISP1 Backup2" distance=3 gateway=4.2.2.3 
    routing-mark=to_isp1;r
    n/ip route add comment="Marked via ISP2 Backup2" distance=3 gateway=4.2.2.3 
    routing-mark=to_isp2;r
    n/ip firewall mangle set [find comment="Connmark in from ISP3"] 
    in-interface=$"interface";r
    n/ip firewall nat add action=src-nat chain=srcnat ipsec-policy=out,none 
    out-interface=$"interface" to-addresses=$"local-address" comment="NAT via ISP3" 
    place-before=1;r
    nif ([/ip route rule find comment="From ISP3 IP to Inet"] ="") do={r
    n   /ip route rule add comment="From ISP3 IP to Inet" src-address=$"local-address" 
    table=to_isp3 r
    n} else={r
    n   /ip route rule set [find comment="From ISP3 IP to Inet"] disabled=no 
    src-address=$"local-address"r
    n};r
    n"

Le script lui-même dans la fenêtre Winbox :

Multivan et routage sur Mikrotik RouterOS
REMARQUE Rangée
/ip firewall mangle set [find comment="Connmark in from ISP3"] in-interface=$"interface" ;
permet de gérer correctement le renommage de l'interface, puisqu'elle fonctionne avec son code et non le nom d'affichage.

3.3.2. Maintenant, en utilisant le profil, créez une connexion ppp :

/interface pppoe-client add allow=mschap2 comment="to ISP3" disabled=no 
interface=ether3 name=pppoe-isp3 password=isp3_pass profile=isp3_client user=isp3_client

Comme touche finale, réglons l'horloge :

/system ntp client set enabled=yes server-dns-names=0.pool.ntp.org,1.pool.ntp.org,2.pool.ntp.org

Pour ceux qui ont lu jusqu'au bout

La manière proposée d'implémenter un multivan est la préférence personnelle de l'auteur et n'est pas la seule possible. La boîte à outils ROS est vaste et flexible, ce qui, d'une part, cause des difficultés aux débutants et, d'autre part, est la raison de sa popularité. Apprenez, essayez, découvrez de nouveaux outils et solutions. Par exemple, comme application des connaissances acquises, il est possible de remplacer l'outil dans cette implémentation du multivan check-passerelle avec des routes récursives vers netwatch.

notes

  1. check-passerelle - un mécanisme qui permet de désactiver la route après deux vérifications infructueuses consécutives de la disponibilité de la passerelle. La vérification est effectuée une fois toutes les 10 secondes, plus le délai de réponse. Au total, le temps de commutation réel se situe dans la plage de 20 à 30 secondes. Si un tel moment de commutation n'est pas suffisant, il est possible d'utiliser l'outil netwatch, où la minuterie de vérification peut être réglée manuellement. check-passerelle ne se déclenche pas en cas de perte de paquets intermittente sur le lien.

    Important! La désactivation d'une route principale désactivera toutes les autres routes qui s'y réfèrent. Par conséquent, pour eux d'indiquer vérifier-passerelle=ping pas nécessaire.

  2. Il arrive qu'une défaillance se produise dans le mécanisme DHCP, qui ressemble à un client bloqué dans l'état de renouvellement. Dans ce cas, la deuxième partie du script ne fonctionnera pas, mais elle n'empêchera pas le trafic de marcher correctement, puisque l'état suit l'itinéraire récursif correspondant.
  3. ECMP (multi-chemins à coût égal) - dans ROS, il est possible de définir un itinéraire avec plusieurs passerelles et la même distance. Dans ce cas, les connexions seront réparties sur les canaux à l'aide de l'algorithme round robin, proportionnellement au nombre de passerelles spécifiées.

Pour l'impulsion d'écrire l'article, aidez à façonner sa structure et le placement des accents - gratitude personnelle à Evgeny @jscar

Source: habr.com