Netwerken en cyberbeveiliging 17 min. leestijd

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.

ElementRolDuur
connection-mark=from-ispIdentificeert de stroom die via de ISP binnenkwam, in beide richtingenDe volledige duur van de gevolgde verbinding
routing-mark=via-ispVraagt een routezoekopdracht in de tabel via-ispHet verwerkte pakket
Tabel via-ispBevat het opgelegde uitgaande pad naar de ISPZolang de route actief is
Schema van symmetrische routering tussen internet, een router, een lokale server en een VPN
De verbinding die van de ISP is ontvangen, wordt gemarkeerd; het antwoord volgt de ISP, terwijl het afzonderlijk geselecteerde verkeer via de VPN kan blijven lopen.

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 gidsBetekenisVoorbeeld om te vervangen
ether1Fysieke interface verbonden met de ISPWAN, SFP of modem
LANLijst van interne interfacesbridge, VLAN of bestaande lijst
from-ispMerk van de verbindingen die via de ISP zijn ontvangenVrije en unieke naam
via-ispRouteringstabel gereserveerd voor de terugkeer via de ISPVrije en unieke naam
192.0.2.1Gateway van de ISP in het statische voorbeeldWerkelijk 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:

  1. de regel mark-connection stijgt bij de externe opening;
  2. de verbinding verschijnt met connection-mark=from-isp;
  3. de mark-routing-regel van het LAN stijgt wanneer de server antwoordt;
  4. de standaardroute van via-isp is actief;
  5. 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

SymptoomWaarschijnlijke oorzaakControle
Er is geen verbinding gemarkeerdVerkeerde WAN-interface of regel geplaatst na een regel die de verwerking stoptVergelijk in-interface en de mangle-tellers
Het merk bestaat, maar het antwoord gaat via de VPNVPN-regel heeft prioriteit of LAN-interfaces ontbreken in de lijstControleer de volgorde en /interface list member print
De tabel via-isp is inactiefGateway verkeerd of niet opgelostControleer het achtervoegsel @main en de DHCP-lease
Het eerste pakket werkt en dan breekt de stroomFastTrack neemt de verbinding overPlaats de gemarkeerde acceptatie voor FastTrack
De router antwoordt slecht, maar de server werktoutput-regel ontbreektVoeg het routeermerk toe voor lokale antwoorden
IPv4 werkt, IPv6 nietDe configuratie dekt alleen de IPv4-firewallBouw 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.

Technische referenties

Over de auteur

Jeremy Kraft beheert de infrastructuur en de zelfgehoste diensten van het IBCSC. Deze gidsen beschrijven configuraties die echt zijn uitgerold en voor publicatie opnieuw zijn nagekeken.

Discussie

Reacties

0

Nog geen reacties. U kunt de discussie openen met een vraag of uw eigen ervaring.

Hebt u een account? Aanmelden

Platte tekst, maximaal 2 000 tekens. Nieuwe reacties worden gemodereerd. Uw naam wordt bij de reactie getoond. Er wordt geen e-mailadres gevraagd; alleen een onomkeerbare vingerafdruk van uw IP-adres wordt bewaard tegen spam.