MikroTik: asymmetrische routering tussen de ISP en de VPN vermijden
Inkomende verbindingen markeren, hun antwoorden via dezelfde internetverbinding forceren en de VPN policy routing behouden zonder de gepubliceerde diensten te verstoren.
Een VPN-tunnel en een klassieke internetverbinding kunnen perfect naast elkaar bestaan op een MikroTik. De moeilijkheid duikt op wanneer een server van het lokale netwerk wordt gepubliceerd op het adres van de internetprovider terwijl een policy routing-regel een deel van het uitgaande verkeer via de VPN stuurt. Het verzoek komt wel binnen via de ISP, maar het antwoord kan via de tunnel vertrekken. De client ziet dan twee verschillende paden, en de verbinding mislukt.
Het symptoom is misleidend: de website, de mailserver, de camera of de NAS antwoordt sommige clients, maar andere niet. De dst-nat lijkt correct, de poorten zijn open en de service luistert. Toch komt het eerste SYN-pakket binnen via het openbare WAN, terwijl de SYN-ACK via de VPN gaat. De remedie bestaat erin de herkomst van de verbinding te onthouden en vervolgens dezelfde internetverbinding op te leggen voor alle retourpakketten.
Waarom een standaardroute niet volstaat
RouterOS kiest een route voor elk pakket. Als de router een regel heeft die een server, een VLAN of bepaalde bestemmingen naar een VPN-tabel leidt, kan die regel ook van toepassing zijn op het antwoord van een gepubliceerde service. Een geldige standaardroute in main voorkomt dus niet dat een meer specifieke mangle-regel het pakket ergens anders naartoe stuurt.
Het volgen van verbindingen, of conntrack, biedt het benodigde geheugen. Het eerste pakket dat op de WAN is ontvangen, wordt geassocieerd met een verbinding. Een connectiemerk blijft verbonden aan beide richtingen van deze stroom. Wanneer de server antwoordt, vindt RouterOS dit merk terug en kan een routeermerk toepassen dat een tabel selecteert die aan de ISP is gewijd.
| Element | Rol | Duur |
|---|---|---|
connection-mark=from-isp | Identificeert de stroom die via de ISP binnenkwam, in beide richtingen | De volledige duur van de gevolgde verbinding |
routing-mark=via-isp | Vraagt een routezoekopdracht in de tabel via-isp | Het verwerkte pakket |
Tabel via-isp | Bevat het opgelegde uitgaande pad naar de ISP | Zolang de route actief is |
Scenario en gebruikte namen
De volgende opdrachten zijn gericht op RouterOS 7. Pas de namen aan voordat u ze plakt. De adressen 192.0.2.0/24 behoren tot een blok dat is gereserveerd voor documentatie en mogen niet als echte configuratie worden gebruikt.
| Naam in de gids | Betekenis | Voorbeeld om te vervangen |
|---|---|---|
ether1 | Fysieke interface verbonden met de ISP | WAN, SFP of modem |
LAN | Lijst van interne interfaces | bridge, VLAN of bestaande lijst |
from-isp | Merk van de verbindingen die via de ISP zijn ontvangen | Vrije en unieke naam |
via-isp | Routeringstabel gereserveerd voor de terugkeer via de ISP | Vrije en unieke naam |
192.0.2.1 | Gateway van de ISP in het statische voorbeeld | Werkelijk geleverde gateway |
De gepubliceerde server moet al werken met een dst-nat-regel. De gids wijzigt noch deze vertaling, noch de regels die het verkeer selecteren dat via de VPN mag lopen.
Voor u begint: back-up en observatie
Een verkeerd routeermerk kan de toegang tot de router onderbreken. Werk vanaf het LAN, activeer de Safe Mode in WinBox of met Ctrl+X, en exporteer vervolgens de configuratie.
/export file=avant-routage-symetrique
/system backup save name=avant-routage-symetrique
Identificeer vervolgens de routes, de mangle-regels en de volgorde van de firewall. Een algemene regel die vóór de nieuwe regels wordt geplaatst, kan het pakket als eerste onderscheppen.
/ip route print detail
/routing rule print detail
/ip firewall mangle print detail
/ip firewall filter print detail
/interface list member print
Controleer met name of ether1 inderdaad de WAN van de ISP is en of de interne interfaces tot de lijst LAN behoren. Als u al merken met de naam from-isp of via-isp gebruikt, kies dan andere namen.
1. De routeringstabel van de ISP aanmaken
In RouterOS 7 moet een aangepaste tabel worden gedeclareerd voordat deze als new-routing-mark wordt gebruikt. De optie fib maakt het gebruik ervan mogelijk voor de effectieve doorsturing van pakketten.
/routing table
add fib name=via-isp
Met een statische gateway voegt u een standaardroute toe in deze tabel. Het achtervoegsel @main geeft aan dat de gateway moet worden opgelost met behulp van de hoofdtabel.
/ip route
add dst-address=0.0.0.0/0 gateway=192.0.2.1@main \
routing-table=via-isp distance=1 \
comment="Symmetrie: retour via provider"
Behoud 192.0.2.1 niet: vervang het door de gateway die daadwerkelijk zichtbaar is in /ip route print detail. Als de WAN zijn gateway via DHCP krijgt, gebruik dan liever het script dat verderop wordt gepresenteerd.
2. Binnenkomende verbindingen markeren
De eerste regel is alleen van toepassing op een nieuwe verbinding die nog niet is gemarkeerd en die binnenkomt via de WAN van de ISP. Ze stelt from-isp in op de hele verbinding. Ze beslist nog niet over de route.
/ip firewall mangle
add chain=prerouting action=mark-connection \
in-interface=ether1 connection-state=new connection-mark=no-mark \
new-connection-mark=from-isp passthrough=yes \
comment="Symmetrie: verbindingen ontvangen van provider"
Als er meerdere internetverbindingen actief zijn, maak dan een afzonderlijk merk per verbinding aan. Vermijd een te brede regel die alleen op in-interface-list=WAN is gebaseerd: dit zou niet meer toelaten te weten welke WAN het antwoord moet dragen.
3. Antwoorden van het LAN via de ISP terugsturen
De tweede regel komt alleen overeen met pakketten die terugkomen van het LAN en behoren tot een gemarkeerde verbinding. Het eerste binnenkomende pakket, aangekomen op ether1, kan dus niet per ongeluk naar de retourtabel worden gestuurd. De uitsluiting dst-address-type=!local voorkomt ook dat verkeer dat bestemd is voor de router zelf wordt gemarkeerd.
/ip firewall mangle
add chain=prerouting action=mark-routing \
in-interface-list=LAN connection-mark=from-isp \
dst-address-type=!local new-routing-mark=via-isp passthrough=no \
comment="Symmetrie: LAN-antwoorden via provider"
Deze regel dekt de antwoorden van een server achter dst-nat. De mangle-regels voor policy routing naar de VPN moeten na deze uitzondering komen of connection-mark=from-isp expliciet uitsluiten.
4. Services dekken die op de router worden gehost
Een service die op de MikroTik zelf wordt beëindigd — bijvoorbeeld een VPN-server — gaat bij de terugkeer niet door prerouting. Het pakket wordt lokaal aangemaakt en passeert de output-keten. Voeg daarom deze regel toe als de router zelf antwoordt op verbindingen die via de ISP zijn ontvangen.
/ip firewall mangle
add chain=output action=mark-routing \
connection-mark=from-isp dst-address-type=!local \
new-routing-mark=via-isp passthrough=no \
comment="Symmetrie: routerantwoorden via provider"
Deze regel staat geen nieuwe service toe. De input-firewall blijft verantwoordelijk voor de toegang tot de router, en het beheer zou niet direct op internet blootgesteld moeten worden.
5. Voorkomen dat FastTrack de aangepaste tabel negeert
In RouterOS verwerkt FastTrack pakketten met de tabel main. Een verbinding die via-isp moet gebruiken, mag dus niet in de algemene FastTrack-regel terechtkomen. Voeg een gerichte acceptatie van de gemarkeerde verbindingen toe en plaats deze onmiddellijk voor de eerste fasttrack-connection-regel.
/ip firewall filter
add chain=forward action=accept connection-mark=from-isp \
connection-state=established,related \
comment="Symmetrie: deze verbindingen uitsluiten van FastTrack"
Verplaats in WinBox deze regel boven FastTrack. Op de opdrachtregel toont u eerst de nummers, en gebruikt u vervolgens move met de zichtbare nummers in plaats van een locatie te veronderstellen.
/ip firewall filter print where action=fasttrack-connection
/ip firewall filter print where comment~"Symmetrie"
WAN met gateway toegewezen door DHCP
Een aangepaste route volgt niet altijd automatisch de verandering van gateway van de DHCP-client. RouterOS stelt echter de variabelen bound en gateway-address beschikbaar in het gebeurtenisscript van de client. Het volgende script maakt of actualiseert uitsluitend de route met de opmerking via-isp-dhcp: het raakt de andere routes niet.
Open IP → DHCP Client, bewerk de client van ether1, en plak deze code in het veld Script van het tabblad Geavanceerd.
:local routeComment "via-isp-dhcp"
:local routeId [/ip route find where comment=$routeComment]
:if ($bound = 1) do={
:local nextHop ($"gateway-address" . "@main")
:if ([:len $routeId] = 0) do={
/ip route add dst-address=0.0.0.0/0 gateway=$nextHop \
routing-table=via-isp distance=1 comment=$routeComment
} else={
/ip route set $routeId gateway=$nextHop disabled=no
}
:log info ("Route via-isp bijgewerkt: " . $nextHop)
} else={
:if ([:len $routeId] > 0) do={
/ip route disable $routeId
}
:log warning "Route via-isp desactivee: bail DHCP absent"
}
Na het opslaan vernieuwt u de lease tijdens een onderhoudsvenster of voert u het script opnieuw uit vanuit de interface. Controleer of de route actief verschijnt in de tabel via-isp. Het script schakelt deze route uit als de lease verdwijnt, in plaats van in stilte een oude gateway te behouden.
Geval van een PPPoE-verbinding
Met PPPoE kan de gateway van de route de logische interface zelf zijn. Er is dan geen DHCP-script nodig.
/ip route
add dst-address=0.0.0.0/0 gateway=pppoe-out1 \
routing-table=via-isp distance=1 \
comment="Symmetrie: PPPoE-retour via provider"
Vervang pppoe-out1 door de werkelijke naam van de interface. Als de VPN ook PPPoE of een dynamische interface gebruikt, identificeer dan elke invoer met een unieke opmerking.
Het resultaat controleren
Test vanaf een werkelijk extern netwerk: mobiele verbinding, externe site of bewakingssonde. Een verzoek dat vanaf hetzelfde LAN wordt gestart, kan gebruikmaken van hairpin NAT en valideert het volledige internetpad niet.
/routing table print
/ip route print detail where routing-table=via-isp
/ip firewall mangle print stats
/ip firewall filter print stats
/ip firewall connection print detail where connection-mark=from-isp
/log print where message~"via-isp"
Voor een geslaagde binnenkomende verbinding moeten de tellers een coherent verhaal vertellen:
- de regel
mark-connectionstijgt bij de externe opening; - de verbinding verschijnt met
connection-mark=from-isp; - de
mark-routing-regel van het LAN stijgt wanneer de server antwoordt; - de standaardroute van
via-ispis actief; - de opgezette verbinding wordt niet door FastTrack onderschept.
Een beperkte capture op de interface van de ISP en die van de VPN maakt het mogelijk om het resultaat ondubbelzinnig te bevestigen. Het antwoordpakket van de server moet via de ISP naar buiten gaan, niet via de tunnel.
/tool sniffer quick interface=ether1 ip-protocol=tcp
/tool torch interface=ether1
Filter indien mogelijk op het adres of de poort van de geteste service om een te volumineuze capture te vermijden. Laat geen permanente sniffer achter op een router in productie.
Probleemoplossing: de meest voorkomende oorzaken
| Symptoom | Waarschijnlijke oorzaak | Controle |
|---|---|---|
| Er is geen verbinding gemarkeerd | Verkeerde WAN-interface of regel geplaatst na een regel die de verwerking stopt | Vergelijk in-interface en de mangle-tellers |
| Het merk bestaat, maar het antwoord gaat via de VPN | VPN-regel heeft prioriteit of LAN-interfaces ontbreken in de lijst | Controleer de volgorde en /interface list member print |
De tabel via-isp is inactief | Gateway verkeerd of niet opgelost | Controleer het achtervoegsel @main en de DHCP-lease |
| Het eerste pakket werkt en dan breekt de stroom | FastTrack neemt de verbinding over | Plaats de gemarkeerde acceptatie voor FastTrack |
| De router antwoordt slecht, maar de server werkt | output-regel ontbreekt | Voeg het routeermerk toe voor lokale antwoorden |
| IPv4 werkt, IPv6 niet | De configuratie dekt alleen de IPv4-firewall | Bouw een afzonderlijk IPv6-beleid met eigen routes en regels |
Vermijd ook een rp-filter=strict-instelling in een architectuur die opzettelijk meerdere paden gebruikt. Een strikte omgekeerde padfiltering kan geldige pakketten afwijzen wanneer meerdere tabellen en meerdere uitgangen naast elkaar bestaan. Evalueer deze parameter in de volledige context van de firewall voordat u deze wijzigt.
De configuratie netjes verwijderen
Als het resultaat niet conform is, kan de Safe Mode de wijzigingen van de sessie annuleren. Voor een handmatige verwijdering gebruikt u de opmerkingen en de unieke namen in plaats van regelnummers die mogelijk zijn gewijzigd.
/ip firewall filter remove [find where comment="Symmetrie: deze verbindingen uitsluiten van FastTrack"]
/ip firewall mangle remove [find where comment~"Symmetrie:"]
/ip route remove [find where comment="Symmetrie: retour via provider"]
/ip route remove [find where comment="Symmetrie: PPPoE-retour via provider"]
/ip route remove [find where comment="via-isp-dhcp"]
/routing table remove [find where name=via-isp]
Als u het script aan de DHCP-client had toegevoegd, maak dan ook het veld Script leeg. Verwijder de tabel niet zolang er nog een regel of route naar verwijst.
Conclusie
De naastbestaan van een ISP en een VPN vormt geen probleem zolang elke verbinding een voorspelbaar retourpad behoudt. In RouterOS is de juiste combinatie eenvoudig: een connectiemerk onthoudt de ingang-WAN, een routeermerk behandelt de antwoorden, en een specifieke tabel bevat het uitgaande pad.
De betrouwbaarheid hangt vooral af van de details: de tabel aanmaken voordat deze wordt gebruikt, de dynamische gateway oplossen, de uitzondering voor de VPN policy routing plaatsen, deze stromen uit FastTrack weren en de tellers vanaf een extern netwerk controleren. Zodra deze punten zijn gecontroleerd, antwoorden de gepubliceerde services via de ISP zonder de rest van het netwerk van zijn VPN-tunnel te beroven.
Discussie
Reacties
Nog geen reacties. U kunt de discussie openen met een vraag of uw eigen ervaring.