{"id":1237,"date":"2025-08-24T17:46:36","date_gmt":"2025-08-24T15:46:36","guid":{"rendered":"https:\/\/dyb.fr\/?p=1237"},"modified":"2025-08-24T17:46:36","modified_gmt":"2025-08-24T15:46:36","slug":"corriger-lasymetrie-de-routage-entre-ospf-wireguard-et-pfsense","status":"publish","type":"post","link":"https:\/\/dyb.eu\/blog\/corriger-lasymetrie-de-routage-entre-ospf-wireguard-et-pfsense\/","title":{"rendered":"Corriger l\u2019asym\u00e9trie de routage entre OSPF, WireGuard et pfSense"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Chez DYB, nous concevons et op\u00e9rons des infrastructures r\u00e9seau multi-sites pour nos clients. Dans beaucoup d\u2019environnements, on retrouve le m\u00eame triptyque :<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>plusieurs liens WAN<\/strong> (ex. fibre FTTH pour la bande passante, fibre d\u00e9di\u00e9e FTTO pour la stabilit\u00e9),<\/li>\n\n\n\n<li><strong>un routage dynamique (OSPF)<\/strong> pour \u00e9changer automatiquement les sous-r\u00e9seaux,<\/li>\n\n\n\n<li><strong>des tunnels WireGuard<\/strong> pour s\u00e9curiser le trafic inter-sites,<\/li>\n\n\n\n<li>et <strong>pfSense<\/strong> comme pare-feu et routeur principal.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">C\u2019est une architecture tr\u00e8s robuste, mais elle peut r\u00e9v\u00e9ler un \u00e9cueil subtil : le probl\u00e8me d\u2019<strong>asym\u00e9trie de routage<\/strong>, qui bloque certains flux applicatifs.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Le sympt\u00f4me<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Le r\u00e9seau semble fonctionner normalement :<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Les tunnels WireGuard montent,<\/li>\n\n\n\n<li>OSPF diffuse bien les routes,<\/li>\n\n\n\n<li>Les pings passent entre les sites.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Mais certaines applications \u00e9chouent, typiquement <strong>SMB (partages de fichiers)<\/strong> ou <strong>RDP<\/strong> :<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>On observe bien le paquet de d\u00e9part (SYN),<\/li>\n\n\n\n<li>mais la r\u00e9ponse (SYN-ACK) n\u2019arrive jamais au poste client.<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">L\u2019explication<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Le probl\u00e8me vient d\u2019une <strong>asym\u00e9trie<\/strong> entre l\u2019aller et le retour.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>\u00c0 l\u2019aller<\/strong>, une r\u00e8gle de Policy Based Routing (PBR) force le flux \u00e0 emprunter un lien sp\u00e9cifique (par ex. la fibre FTTH).<\/li>\n\n\n\n<li><strong>Au retour<\/strong>, OSPF choisit automatiquement le chemin le plus court\u2026 qui est souvent un autre lien (par ex. la FTTO).<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">R\u00e9sultat : pfSense consid\u00e8re la r\u00e9ponse comme <strong>hors-state<\/strong> (puisqu\u2019elle n\u2019arrive pas par la m\u00eame gateway que l\u2019aller) et la bloque.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">La solution<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">La cl\u00e9 consiste \u00e0 g\u00e9rer le <strong>reply-to<\/strong> directement sur les interfaces WireGuard, afin que pfSense force le retour \u00e0 utiliser le m\u00eame tunnel que l\u2019aller, m\u00eame si OSPF propose un autre chemin.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u00c9tapes pratiques :<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Sur le site \u00e9metteur<\/strong>\n<ul class=\"wp-block-list\">\n<li>Cr\u00e9er une r\u00e8gle sur le VLAN utilisateur pour forcer le trafic applicatif (ex. SMB, RDP) \u00e0 utiliser la gateway FTTH.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Sur le site r\u00e9cepteur<\/strong>\n<ul class=\"wp-block-list\">\n<li>Aller dans <strong>Firewall &gt; Rules &gt; [Interface WireGuard]<\/strong> correspondant au tunnel FTTH.<\/li>\n\n\n\n<li>Ajouter une r\u00e8gle <em>Pass<\/em> ciblant le sous-r\u00e9seau distant.<\/li>\n\n\n\n<li>Laisser le champ Gateway vide : pfSense y applique automatiquement un <strong>reply-to<\/strong>, ce qui garantit que la r\u00e9ponse repartira bien par le m\u00eame tunnel.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Conserver en dessous une r\u00e8gle \u201callow any\u201d<\/strong> sur l\u2019interface WireGuard pour le reste du trafic.<\/li>\n<\/ol>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Pourquoi c\u2019est important<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Cette approche permet de combiner <strong>routage dynamique (OSPF)<\/strong> et <strong>Policy Routing cibl\u00e9<\/strong> sans cr\u00e9er de conflits.<\/li>\n\n\n\n<li>Elle \u00e9vite de recourir \u00e0 des routes statiques ou \u00e0 du NAT forc\u00e9, qui rigidifient l\u2019architecture.<\/li>\n\n\n\n<li>Elle assure que certains flux sensibles (sauvegardes, impressions, VoIP\u2026) utilisent <strong>toujours le lien le plus adapt\u00e9<\/strong>, tout en maintenant la <strong>tol\u00e9rance de panne automatique<\/strong> gr\u00e2ce \u00e0 OSPF.<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Un point cl\u00e9 : les <strong>Floating States<\/strong><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Pour que cette solution fonctionne, il faut adapter un r\u00e9glage global dans pfSense : le <strong>Firewall State Policy<\/strong>.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Par d\u00e9faut, pfSense utilise les <strong>Interface Bound States<\/strong> : chaque connexion TCP\/UDP est li\u00e9e strictement \u00e0 l\u2019interface par laquelle elle a \u00e9t\u00e9 cr\u00e9\u00e9e.<br>\u2192 Si le trafic de retour emprunte une autre interface, pfSense le bloque.<\/li>\n\n\n\n<li>Dans un environnement <strong>multi-WAN + OSPF + VPN<\/strong>, cette approche trop stricte provoque des \u00e9checs (comme ceux observ\u00e9s sur SMB\/RDP).<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">La solution est de passer en <strong>Floating States<\/strong> :<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Les connexions ne sont plus limit\u00e9es \u00e0 une seule interface,<\/li>\n\n\n\n<li>pfSense autorise le retour si les IP\/ports correspondent, m\u00eame si l\u2019interface n\u2019est pas la m\u00eame,<\/li>\n\n\n\n<li>Cela supprime les blocages li\u00e9s \u00e0 l\u2019asym\u00e9trie.<\/li>\n<\/ul>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<h3 class=\"wp-block-heading has-vivid-red-color has-text-color has-link-color wp-elements-218d0d018c364a016f7fa1930675b63f\" style=\"font-style:normal;font-weight:700;text-transform:uppercase\">\u26a0\ufe0f Attention<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Ce mode est <strong>moins strict en s\u00e9curit\u00e9<\/strong> :<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Un paquet \u201cretour\u201d inattendu mais valide au niveau IP\/port pourrait, en th\u00e9orie, \u00eatre accept\u00e9 sur une autre interface.<\/li>\n\n\n\n<li>Dans la pratique, le risque est faible sur une infra bien cloisonn\u00e9e, mais il faut en avoir conscience.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">On vous recommande de changer en <strong>Floating States uniquement lorsqu\u2019un routage dynamique (ex. OSPF) est combin\u00e9 avec du multi-WAN\/VPN<\/strong>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">C\u2019est un compromis n\u00e9cessaire pour la r\u00e9silience, mais il doit s\u2019accompagner d\u2019un cloisonnement rigoureux des VLANs et d\u2019une politique de firewall stricte sur les interfaces LAN\/VPN.<\/p>\n<\/blockquote>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Conclusion<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">L\u2019asym\u00e9trie de routage est un ph\u00e9nom\u00e8ne classique dans les environnements <strong>multi-WAN + OSPF + VPN<\/strong>.<br>Comprendre la logique des \u00e9tats TCP dans pfSense, et savoir utiliser correctement le <strong>reply-to<\/strong> sur les interfaces VPN, permet de r\u00e9soudre ce probl\u00e8me sans casser la dynamique du routage.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\ud83d\udc49 En clair : <em>si vous forcez l\u2019aller, assurez-vous de forcer le retour au bon endroit.<\/em><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Chez DYB, nous concevons et op\u00e9rons des infrastructures r\u00e9seau multi-sites pour nos clients. Dans beaucoup d\u2019environnements, on retrouve le m\u00eame triptyque : C\u2019est une architecture tr\u00e8s robuste, mais elle peut r\u00e9v\u00e9ler un \u00e9cueil subtil : le probl\u00e8me d\u2019asym\u00e9trie de routage, qui bloque certains flux applicatifs. Le sympt\u00f4me Le r\u00e9seau semble fonctionner normalement : Mais certaines [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[26,24],"tags":[23],"class_list":["post-1237","post","type-post","status-publish","format-standard","hentry","category-adminsys","category-reseaux","tag-pfsense"],"_links":{"self":[{"href":"https:\/\/dyb.eu\/blog\/wp-json\/wp\/v2\/posts\/1237","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/dyb.eu\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/dyb.eu\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/dyb.eu\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/dyb.eu\/blog\/wp-json\/wp\/v2\/comments?post=1237"}],"version-history":[{"count":0,"href":"https:\/\/dyb.eu\/blog\/wp-json\/wp\/v2\/posts\/1237\/revisions"}],"wp:attachment":[{"href":"https:\/\/dyb.eu\/blog\/wp-json\/wp\/v2\/media?parent=1237"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/dyb.eu\/blog\/wp-json\/wp\/v2\/categories?post=1237"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/dyb.eu\/blog\/wp-json\/wp\/v2\/tags?post=1237"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}