IPsec Site-to-Site VPN FortiGate <-> FRITZ!Box

Hier kommt ein kurzer Guide wie man ein Site-to-Site VPN zwischen einer FortiGate Firewall und einer AVM FRITZ!Box aufbaut. Anhand von Screenshots zeige ich die Einrichtung der FortiGate, während ich für die FRITZ!Box ein Template der *.cfg Konfigurationsdatei bereitstelle.

This is one of many VPN tutorials on my blog. –> Have a look at this full list. <–

Labor

Mein Labor sah wie folgt aus:

S2S VPN FortiGate - FritzBox Laboratory

Die FRITZ!Box ist eine 7390 mit FRITZ!OS 06.30, während die Fortinet Firewall eine FortiWiFi 90D mit Version 5.2.2 ist. Wie im Internet üblich ist die FortiGate mit einer statischen IP-Adresse versehen (obgleich 1 zu 1 geNATet), während sich die FRITZ!Box hinter einer dynamischen IP verbirgt. Mit einem dynamischen DNS Dienst ist immerhin ein FQDN für die FRITZ!Box verfügbar.

Sehr praktisch bei FortiOS ist ja, dass bei IKE auch dann der Main Mode verwendet werden kann, wenn die Gegenstelle lediglich über eine dynamische IP (mit einem DynDNS Namen) verfügt. Sprich: Es ist nicht der Aggressive Mode nötig, um ein VPN zu bauen, und vorallem kann der Tunnelaufbau auch von der FortiGate selbst initiiert werden. (Exakt vergleichbar mit der Juniper SSG, die das genau so kann, siehe hier.)

FortiGate

Folgende Schritte sind seitens der FortiGate nötig. In den Beschriftungen unterhalb der Screenshots stehen weitere Details:

FRITZ!Box

Für die FRITZ!Box muss folgendes Template angepasst werden. Gelb markiert sind all die Zeilen, die zwingend angepasst werden müssen. Die Proposals für Phase 1 und 2 können natürlich auch anders gewählt werden, solange das Pendant bei der FortiGate stimmt (siehe hier für mehr Details bezüglich der Proposals der FRITZ!Box).

Hinweis: Dieses Template unterscheidet sich in einer Kleinigkeit von quasi allen anderen Templates, die hier auf meinem Blog sind: Es ist sowohl die localid als auch die remoteid vom Typ “fqdn”. In vielen anderen Beispielen habe ich hier bei der remoteid den Typ “ipaddr” gehabt. Dieser lässt sich auf der FortiGate leider nicht einstellen, da dort unter Verwendung einer IP-Adresse trotzdem ein String versendet wird. Daher ist hier bei der FRITZ!Box zwingend der fqdn nötig.

Es läuft …

wenn es grün leuchtet. ;)

Wer mehr Infos zur VPN-Verbindung möchte, kann auf der FortiGate zum Beispiel mit den folgenden Befehlen Details herausfinden:

 

34 thoughts on “IPsec Site-to-Site VPN FortiGate <-> FRITZ!Box

  1. wäre es möglich die Zeilen der Fortigate Konfiguration zusätzlich zu publisieren?
    show vpn ipsec ……

    1. Das wäre auf jeden Fall eine gute Idee gewesen. ;) Leider habe ich diesen Laboraufbau aktuell nicht mehr am laufen, so dass ich die CLI Befehle nur irgendwie zusammenbasteln könnte, was mir aber zu wage wäre. Daher kann ich sie dir leider gerade nicht liefern.
      (Aber es sollte ja auch nicht so das Problem sein, die Schose 1x durch die GUI zu konfigurieren und sie dann selber rauszuziehen…)
      Lieben Gruß, Johannes

      1. Hallo Johannes,
        ich habe die Verbindung Fritz-Box FortiGate mal konfiguriert und getestet. Hat funktioniert mit FortiOS 5.2.10 :-)
        Ich habe versucht meine Konfiguration an dein Bespiel anzupassen und hoffe, nichts übersehen zu haben.
        Bitte die Kommentare beachten und die in ** eingeschlossenen Informationen anpassen, die ** dabei entfernen ;-)
        Grüsse,Ulrich

        config vpn ipsec phase1-interface
        edit “fritzbox”
        set type ddns
        set interface “wan1” # oder das genutzte Interface
        set keylife 3600
        set proposal aes256-sha1
        set localid “blubb”
        set comments “VPN Test zur FritzBox ”
        set dhgrp 14
        set remotegw-ddns “**public_DNS-Name_der_FritzBox” #darf ein dyndns-Name sein
        set psksecret RX-2RUz2UKpFiPXi6B6DJss5TWbW-DzvTMwc
        next
        end

        config vpn ipsec phase2-interface
        edit “fritzbox”
        set phase1name “fritzbox”
        set proposal aes256-sha1
        set dhgrp 14
        set keylifeseconds 3600
        set src-subnet **192.168.161.0 255.255.255.0**
        set dst-subnet **192.168.29.0 255.255.255.0**
        next
        end

    2. Hey

      Wie sieht die Konfig aus für die Fritz.box wenn die Fortigate auch nur über Dyndns erreichbar ist ?

      vielen Dank für die Tolle Anleitung !

  2. Wenn man in der Fritzbox die remoteid auf “ipaddr = ” aendert dann funktioniert das Setup auch als ‘Dialup’ auf der Fortigate, man braucht
    also kein Dyndns fuer die Fritzbox …

    Ein Problem hab ich allerdings mit dem Setup:

    Der Tunnel ist gruen und alles laeuft, ich seh auch Traffic durch den Tunnel durchgehen, aber irgendwie kommt vom Traffic von der Fortigate in Richtung dem Subnet hinter der Fritzbox nichts an, auch wenn es definitiv die Fortigate verlaesst …

    1. Das gleiche Problem habe ich auch. Auch wenn es schon eine Weile her ist, hast du hinter der FritzBox zufällig den Standardbereich 192.178.168.0/24? Ich meine irgendwo mal gelesen zu haben, dass die FBs das grundsätzlich bei VPNs nicht unterstützen. Bevor ich aber die alle Adressen hinter der FB ändere, wäre es gut zu wissen, ob es tatsächlich daran liegt.

      1. Hi Schoo !

        Ja, ich hab das ‘halb’ geloest :) …
        Also das Subnet hinter der Fritzbox ist nicht die default Range …
        Zwei Sachen die im Weg waren:

        Die Fritzbox haelt ein /24 Subnet einer /16 Range die hinter der Fortigate sitzt.
        Nun, normalerweise wenn ich die Routing Table und Ethernet connectivity mit statischen Routen benutze kann ich die /16 Range woanders hin routen auch wenn das lokale /24 ein Teil davon ist. Mit Ipsec funktioniert das nicht, ich geh davon aus dass die Ipsec Route eine hoehere oder gleichwertige Metrik hat wie das lokale Netz.
        Da die letzten Versionen der FB keine Telnet session mehr haben kann ich hier nur raten. Auf anderen Linux Kisten hab ich das so am laufen ohne Probleme …

        Das Problem hab ich geloest indem ich die remote Subnets in kleinere /24 subnets aufgeteilt und damit das lokale subnet uebersprungen habe.

        Danach hatte ich ein Problem das war noch weniger greifbar:
        Benutzer hatten mir berichtet das einige Intranet tools und websites nicht mehr funktionierten, andere aber schon noch und das obwohl die alle im selben subnet sitzen. An einem Punkt sah dass so aus das alle IIS sites ok waren und alles Linux Apache nicht :( …

        Ich hab traces gemacht von den verschluesselten und unverschluesselten Paketen ohne wirklich irgendwas auffaelliges zu sehen ausser das meine Internet Provider alle wirklich schlecht sind (jede Menge Jitter und Retransmits).

        Ich bin dann spaeter mit nem anderen Setup darauf gekommen die Tunnel alle als tcp
        Verbindungen zu konfigurieren und ohne dass das jetzt merklich den Durchsatz verringert haette.

        Da ich die Tunnel bei den Fritzboxen nicht auf tcp umstellen konnte (die option ist da, aber funktioniert hat es nicht) und von AVM’s Seite da auch kein Interesse war hab ich alle 20+ Fritzboxen rausgeschmissen und mit Mikrotik Routern ersetzt und alles funktioniert super !

        Schade dass da nicht mehr kommt von AVM :( …

  3. Hallo

    Mit einer FB 7390 und einer FGT 100D genau nach anleitung eingerichtet.
    Klappt nicht. IKEx2027x Error

  4. Hallo xris,
    mit dieser sehr knappen Fehlermeldung kann dir vermutlich nur jemand helfen, der genau den Fehler auch gehabt hat.
    Hast du den Hinweis von Schoo beachtet dass die FritzBox einen anderen IP-Bereich als 192.168.178.0/24 haben muss? Welche Adressbereich nutzt du? Welchen für das Gäste-WLAN, auch wenn es nicht aktiv ist?
    Wenn nach Beachtung der Hinweise noch immer nicht funktioniert und du noch mehr Informationen lieferst und auch ein bisschen Geduld mitbringst, kann ich dir eventuell helfen.
    Fragen:
    – OS Version der FritzBox
    – OS Version der FGT100D
    – gibt es auf der FortiGate eine statische IP-Route zum Zielnetz, das auf das IPsec-Interface zeigt?
    – gibt es auf der FortiGate eine Firewall-Policy mit In- und Outgoing Interface (oder Zone) für die IPsec Verbindung?
    – Sind die WAN-Adressen von FritzBox und FortiGate dynamische (dyndns?) oder statische Adressen (mit DNS-Name)?
    – Kannst du prinzipiell mit ‘diag’ befehlen auf der FortiGate umgehen? Das wäre der nächste Schritt…

  5. Ist zwar etwa lang eher, aber falls es jemandem was nützt:
    Fehler 0x2027 (timeout) kommt bei der FritzBox (u.a.) wenn Phase1 klappt, aber Phase2 wegen nicht passender phase2ss fehlschlägt.
    Wenn bereits phase1ss nicht passt, kommt stattdessen Fehler 0x2026 (no proposal chosen). Nicht sehr intuitiv.

    1. Hey Peter, ja, danke für den Hinweis. Ich habe ähnliche Erfahrungen gemacht. Der Fehler 0x2027 (timeout) kommt immer dann, wenn die Gegenstelle einfach nicht antwortet, egal aus welchem Grund. Aus Sicht der FRITZ!Box sieht es also wie ein Timeout aus, obgleich das Problem ein ganz anderes sein kann. Ich hatte beispielsweise den Fall, dass die localid nicht gestimmt hat und die Gegenstelle dann einfach nicht geantwortet hat.

  6. Hat schon jemand die Option “Bestimmte DNS-Anfragen immer über den VPN-Tunnel auflösen” in der GUI bzw. in der config “dns_domains = ..” zum Laufen gebracht?

    Ich nehme an daß die Fritzbox hiermit DNS Anfrage für eine lokale Domain von einem Firmennetz über die VPN forwarden kann was äußerst hilfreich wäre ;) – mir fehlt hier allerdings die Möglichkeit, den Nameserver auf der anderen Seite des VPN Tunnels anzugeben

    1. Hallo Thomas,
      mir sagt diese Option ehrlich gesagt gar nichts. Gibt es die bei der FRITZ!Box oder bei der FortiGate?

      Für DNS könntest du sonst auch einen Raspberry Pi nehmen und einen eigenen DNS Resolver aufsetzen, beispielsweise Unbound. Siehe hier: https://weberblog.net/2016/10/11/dnssec-validation-with-unbound-on-a-raspberry/
      Da müsstest du dann das forwarding für deine Domains halt entsprechend einrichten. (Ist bei mir nicht dokumentiert – Google ist dein Freund.) Damit würdest du einen Teil der Domains dann an den DNS Server im Firmennetz schicken, während alle anderen ins Internet gehen.
      Ciao,
      Johannes

      1. Hallo Johannes,

        die Einstellung existiert auf Fritzbox Seite und soll lt. AVM Support genau das tun was ich will – der DNS für die lokalen Domains wird automatisch erkannt – funktioniert aber leider für mich nicht…

        Danke für den Tip mit dem Raspberry Pi, werde ich mal ausprobieren – oder eine Synology NAS aufstellen, die kann split DNS…

  7. Hallo,

    so…. nun hab ich es mit der Forti Firmware 5.4.5 hinbekommen. Beide Seiten sind grün.
    Leider kein Traffic möglich. Wenn ich seitens Fortigate die Fitzbox die das Default Subnetz 192.168.178.0\24 hat anpinge geht kein Ping.

    Firmware AVM 7490 ist aktuell, liegt das an dem Default Subnet? Wie kann ich das umgehen?

    VG

  8. Das Gastnetz hat die 192.168.179.1 \24
    Fritzbox 192.168.178.0\24

    Reicht es wenn ich der Box die 192.168.0.0 \16 gebe? Wäre ja ohnehin besser da viele die default Subnetze lassen denke ich…

    VG

    1. Hallo xris,
      ich verstehe dein Anliegen jetzt nicht ganz genau. Welches Subnetz verwendet wird ist eigentlich total wurscht, solange es keine Dopplungen innerhalb deiner eigenen Netze gibt.
      Du kannst es aber auch einfach ändern, wie du willst. ;) Allerdings würde ich NICHT ein /16, sondern weiterhin ein /24 nehmen. Außerdem würde ich den “192.168.0.0/24” Bereich ebenfalls meiden, weil dieser auch von vielen anderen Routern per Default verwendet wird. Nimm lieber irgendetwas anderes aus dem 192.168.x.0 Bereich.
      Ciao,
      Johannes

  9. Hallo,

    danke für deine schnelle Antwort.

    Also ich habe jetzt die Fbox folgendes Subnetz gegeben: 192.168.20.0
    In der Fortigate die jeweiligen IPs geändert. VPN Tunnel steht wieder.
    Jedoch funktioniert ein Ping oder Tracert nicht. Ich versuche von der Firma aus die Box zu Pingen, geht leider nicht. Was aber komischt ist…das Destination ist der Fortigate ja bekannt. Sollte doch möglich sein die Box via Ping zu erreichen.
    Wenn sich erstmal die Box pingen lässt, sollte ich ja die Hosts dahinter auch errerichen…..in der Therorie :-)

    Das mit dem Subnetz hab ich nur gefragt, weil ja “schoo” geschrieben hat das ja das Standart Netz nicht geht.

    Vg

    1. Ah, den Kommentar von “schoo” hatte ich nicht mehr im Blick. Mir ist das ohnehin noch nie passiert, dass die FB einen Bereich nicht erlaubt. Hm.

      Aus der Firma solltest du die 192.168.20.1 deiner Fritzbox auf jeden Fall pingen dürfen. In der Tat mache ich das per Default auch über all so, wo ich ein VPN zur Fritzbox einsetze. Das sollte auch gehen, insofern die Route in der FortiGate ebenfalls stimmt.

      Ansonsten musst du selber versuchen, das zu troubleshooten. Viel Erfolg. ;) Wireshark anschmeißen bzw. auf der FortiGate auf der CLI den Verbindungsaufbau der einzelnen Sessions anzeigen lassen. (Siehe hier: https://weberblog.net/cli-commands-for-troubleshooting-fortigate-firewalls/ in dem Absatz “Flow”.) Evtl. hängt es an einer Policy oder so?

  10. Servus, ich habe Ihren Beitrag gelesen und gleich ausprobiert.
    Leider bekomm ich immer wieder lediglich den Fehler “IKE-Error 0x2026”.
    Leider bin ich nicht so tief drin in der Materie, sodass ich wohl auf Hilfe angewiesen bin. Es handelt sich um eine Fritz!Box 7490 mit Fritz!OS 7.01.
    Die Gegenstelle ist eine FortiGate 30E auf Firmware Version 5.4.8 build 1183.
    Hier präsentiere ich noch schnell den Inhalt meiner VPN Config für die FB (FQDN’s entfernt):

    vpncfg {
    connections {
    enabled = yes;
    conn_type = conntype_lan;
    name = “foobar”;
    always_renew = yes;
    reject_not_encrypted = no;
    dont_filter_netbios = yes;
    localip = 0.0.0.0;
    local_virtualip = 0.0.0.0;
    remoteip = 198.51.100.23;
    remote_virtualip = 0.0.0.0;
    localid {
    fqdn = “”;
    }
    remoteid {
    fqdn = “”;
    }
    mode = phase1_mode_idp;
    phase1ss = “dh14/aes/sha”;
    keytype = connkeytype_pre_shared;
    key = “p4<t>-R”;
    cert_do_server_auth = no;
    use_nat_t = no;
    use_xauth = no;
    use_cfgmode = no;
    phase2localid {
    ipnet {
    ipaddr = 192.168.1.0;
    mask = 255.255.255.0;
    }
    }
    phase2remoteid {
    ipnet {
    ipaddr = 192.168.0.0;
    mask = 255.255.255.0;
    }
    }
    phase2ss = “esp-aes256-3des-sha/ah-no/comp-lzs-no/pfs”;
    accesslist = “permit ip any 192.168.0.0 255.255.255.0”;
    } ike_forward_rules = “udp 0.0.0.0:500 0.0.0.0:500”,
    “udp 0.0.0.0:4500 0.0.0.0:4500”;
    }

    Vielen Dank bereits im voraus!

    Mit freundlichen Grüßen

    1. Hey Herman,

      puh, so ohne weitere Details kann ich da nur orakeln. Und das bringt dir auch nicht viel.

      Ist dein Szenario wirklich *genau* gleich wie meins, also statische IPv4 Adresse an der FortiGate und eine dynamische Adresse der FRITZ!Box? Hast du *wirklich* alle Einstellungen sowohl am Template der Fritzbox als auch in der FortiGate so übernommen wie hier dokumentiert? Siehst du irgendwelche aussagekräftigeren Error-Meldungen in der FortiGate? (Die Fritzbox ist nicht sonderlich hilfreich wenn es um die Fehlermeldungen geht.)

      Ciao,
      Johannes

      1. Servus,
        vielen Dank für die Antwort.
        Ja, das Szenario ist das selbe, daher dachte ich auch, es klappt sofort wunderbar ;)
        Wie dem auch sei, leider ist dem nicht so. Ich habe mal im VPN Event Log der FortiGate nachgeschaut, dort steht nichts zu dem Verbindungsversuch drin. Seltsam… Öffentliche Adresse stimmt aber überein. Die Fritzbox sagt auch nicht Timeout, sondern IKE-Error 0x2026, also “no proposal chosen”.
        Ich habe hier noch ein paar Fotos zur Konfig der FortiGate, vll habe ich ja doch irgendetwas falsch eingerichtet.
        Hier die Links:
        https://www.bilder-upload.eu/bild-651800-1540290141.png.html
        https://www.bilder-upload.eu/bild-0a134b-1540290162.png.html
        https://www.bilder-upload.eu/bild-35bf0d-1540290176.png.html
        https://www.bilder-upload.eu/bild-3f0fe0-1540290188.png.html

        Vielen Dank schon einmal vorab!

        Mit freundlichen Grüßen,
        Herman Wert

        1. Hm, also ich entdecke jetzt auch keinen offensichtlichen Fehler. Die “Local ID” im Screenshot hattest du nur geschwärzt, richtig? Es ist definitiv wichtig, dass die “Local ID” der FortiGate dem 3-Zeiler der FRITZ!Box entspricht:

          remoteid {
          fqdn = “blubb”;
          }

          Ebenso muss der “Dynamic DNS” Eintrag der FortiGate dem anderen 3-Zeiler der FRITZ!Box entsprechen:

          localid {
          fqdn = “fritzbox.webernetz.net”;
          }

          Ansonsten kannst du mal austesten, den PSK alphanumerisch (also ohne Sonderzeichen) zu setzen. Evtl. kommt da eines der Geräte durcheinander. Die Verwendung von rein alphanumerischen Zeichen empfehle ich übrigens generell: https://weberblog.net/considerations-about-ipsec-pre-shared-keys-psks/

          Wenn bei der FortiGate gar nichts im Log steht, ist das sehr komisch. Zumindest die eintreffenden Pakete sollte sie ja empfangen. Dort müsstest du sonst mal tiefer in die Logfiles einsteigen, siehe: https://weberblog.net/cli-commands-for-troubleshooting-fortigate-firewalls/ in der Section “VPN”.

          Viel Erfolg,
          Johannes

  11. Hallo Herman Wert,
    welchen IP-Bereich nutzt die FritzBox und welchen die FortiGate?
    Grüsse
    Ulrich

    PS: ist etwa so wie “haben Winterreifen für meine Auto, aber die passen nicht. Was mache ich falsch?” :-)

    1. Hallo und Danke für die Antwort.
      die FortiGate nutzt den Adressbereich 192.168.0.0/24 und die Fritzbox 192.168.1.0/24.
      Die IP Adressbereiche sind als unterschiedlich, darauf habe ich bereits geachtet ;)

      Mit freundlichen Grüßen, Herman Wert

  12. Hallo,

    hat jeamand das Ganze schon mit FirtzOS 7 probiert?

    mein trauriges Ergebnis: no SA proposal chosen

    lg
    Thomas

  13. Das würde mich auch interessieren ob hier jemand bereits mit OS7 ein positives Ergebnis produzieren konnte. Vielen Dank füs sharen.

    lg
    Dennis

  14. Hallo, ich möchte auf der Seite der Fortigate 2 Subnetze erreichen.
    Wie muss ich die Konfiguration abändern?
    Bei der Fortigate wäre das ja ein zweiter Eintrag unter Phase 2 Selctors. Hier würde ein Name und die Local- und remoteAdresse vergeben werden.
    Bei AVM habe ich gelesen, das bei einer Fritzbox zu Fritzbox-Verbindung unter accesslist ein zweiter Eintrag erfolgen muss. z.B.:
    accesslist = “permit ip any 10.10.1.0 255.255.255.0”,
    “permit ip any 10.100.0.0 255.255.255.0”;
    Es muss aber bestimmt auch der Rest der zweiten Phase2 Beschreibung im Skript eingetragen werden.

    1. Hallo Berthold,

      ich selbst habe es nie eingerichtet, mehrere Netze über den Tunnel zu jagen. Also über eine Fritzbox meine ich. (Bei Enterprise Firewalls kann man das ja einfach eintragen, so wie du es auch bei der FortiGate getan hast.) Daher kann ich dir leider nicht helfen.

      Ich meine mich aber zu erinnern, dass ich irgendwo mal was gegoogelt hatte, wo genau so was getan wurde. Evtl. findest du wo anders was?

      Was ich immer gemacht habe: Einfach das Netz vergrößert. Das geht halt dann, wenn die beiden Netze hinter der FortiGate ein bisschen zusammenhängend sind. Beispiel:
      192.168.100.0/24 und
      192.168.110.0/24 sollen hinter der FortiGate getunnelt werden.
      Dann könntest du 1x Phase 2 Selectors setzen und zwar:
      192.168.96.0/19

      Auf Seite der FortiGate stören die Phase 2 Selectors ja nicht, weil sie nur für den Tunnelaufbau gebraucht werden. Solange du auf der Fritzbox also *keine* weiteren VPNs zu Netzen, die ebenfalls in diesem großen Range liegen, routest, läuft das super. ;)

      Ciao,
      Johannes

  15. i have latest fritzbox firmware and latest fortigate firmware and I just cant get phase 1 to connect I have used exactly the same settings. its so frustrating I’m loosing hair lol

Leave a Reply

Your email address will not be published. Required fields are marked *