Hier kommen die Einstellungen die nötig sind, um ein Site-to-Site VPN zwischen einer AVM FRITZ!Box und einer Juniper ScreenOS Firewall herzustellen. Neben einigen Anleitungen im Netz habe ich selber ein paar Einstellungen getestet, um eine möglichst detaillierte *.cfg Datei zu haben. Außerdem ist erfreulicherweise anzumerken, dass die Juniper auch ein statisches VPN zu einer dynamischen Adresse erlaubt und somit sogar beide Seite einen Verbindungsaufbau initiieren können. Mit dem VPN Monitor von Juniper wird der Tunnel konstant “up” gehalten.
Aufbau und Infos
So sieht mein Aufbau aus. Anzumerken ist, dass ich meine öffentliche IP nicht direkt an der Juniper anliegen habe, sondern sie per statischem NAT auf die untrust aber private IP-Adresse der Juniper weiterleite.
Des Weiteren habe ich noch folgende Anmerkungen zur FRITZ!Box Konfiguration:
- mode = phase1_mode_idp: Ja, das ist der Main Mode. Und das funktioniert trotzdem, weil die Juniper ein “statisches” VPN zu einer FQDN Adresse erlaubt. Sprich: Obwohl die FRITZ!Box definitiv hinter einer dynamischen IP Adresse hängt (was eigentlich den Aggressive Mode erfordern würde), funktioniert hier der Main Mode, da die Juniper den FQDN einfach auflöst. Das hat folgenden großen Vorteil: VPN Verbindungen können von beiden Seiten initiiert werden, also auch von der Juniper aus. Das ist für mich sehr praktisch, da ich hinter der Juniper ein Monitoring-Server habe, der Geräte hinter der Fritz!Box abfragt. Könnte die Juniper nicht den Tunnel von sich aus aufbauen, würde es nur über Umwege funktionieren. Im Log der Juniper taucht dabei übrigens folgende Zeile auf:
IKE gateway fdorf.webernetz.net has been enabled. The peer address fdorf.webernetz.net has been resolved to 95.116.50.62.
- phases1ss: Viele andere Anleitungen haben hier schlichtweg “all/all/all” stehen. Ich wollte es aber etwas fester zurren, so dass ich es auf “alt/aes/sha” angepasst habe. Sprich: Diffie-Hellman group 2, AES-256 und SHA-1. Ich habe leider keine Einstellung gefunden, die DH group 5 erlaubt hätte. Gruppe 2 macht bei AES-256 ja eigentlich wenig Sinn, da das Security-Niveau von group 2 einfach zu niedrig ist um ein AES-256 zu rechtfertigen. Aber okay, es ist ja kein Hochsicherheitstrakt hinter meiner FRITZ!Box.
- ike_forward_rules: Obwohl es in meinem Szenario nicht nötig ist, habe ich das udp:4500 drin gelassen. Es wäre nötig für NAT-Traversal, bei welchem die ESP Pakete in UDP-4500 gepackt werden. Ich habe es drin gelassen, damit man diese *.cfg Datei auch für andere Szenarien später mal verwenden kann.
Zur Juniper ist noch folgendes zu sagen:
- Gateway Local ID: Diese ID muss ich hier spezifizieren, da sonst der Aufbau von der Juniper zur FRITZ!Box nicht geklappt hat. Das liegt allerdings an meinem spezifischen Aufbau, da nicht die Juniper selbst die öffentliche IP-Adresse hat, sondern sie noch mal geNATet ist.
Auf der SSG lief Version “6.3.0r15a.0″. Bei der FRITZ!Box habe ich es auf vier verschiedenen Hardwares getestet: 7240, 7270, 7312, 7390. Die Versionen waren alle aus dem 5.5x Tree, bis auf die 7390, die bereits FRITZ!OS 6 drauf hatte.
Juniper ScreenOS (SSG 5)
Als erstes wird ein neues Tunnel-Interface angelegt und in eine (vorher angelegte) Security Zone gesteckt. In meinem Fall heißt sie “vpn-s2s”. Es muss ein unnumbered Tunnel-Interface sein. Als “Interface” Angabe habe ich das untrust Interface gewählt:
Dann wird das Gateway angelegt:
Im Advanced Bereich muss man den PSK, die Local ID sowie das Custom P1 Proposal von “pre-g2-aes256-sha” auswählen. Da dieses standardmäßig nicht auf der Juniper installiert ist, muss man es vorher noch angelegen.
Nun folgt das AutoKey IKE Profil und die Advanced Einstellungen. Es wird das P2 Proposal “g2-esp-3des-sha” ausgewählt und weiter unten auf das eben erstellte Tunnel-Interface verwiesen. Wichtig ist außerdem der Proxy-ID Check. Den VPN Monitor aktiviert man, wählt als Source Interface jenes aus, das dem getunnelten IP-Bereich entspricht und wählt als Destination IP die der remote FRITZ!Box aus. Das Rekey Häkchen kann man anhaken. Es bewirkt, dass der VPN Tunnel automatisch aufgebaut wird, was bei der 24-Stunden Zwangstrennung von DSL-Anschlüssen in Deutschland durchaus praktisch ist.
Nun muss man noch die Proxy ID konfigurieren. In meinem Beispiel hier ein etwas größerer IP-Bereich als normal, da ich hinter der Juniper noch einige Netze route. Sehr oft dürfte hier ein “/24″ Bereich zur Verwendung kommen. Als Service wird ANY ausgewählt:
Zum Schluss wird noch das remote Netz in den Tunnel geroutet (ohne Gateway IP-Adresse):
(Natürlich muss noch eine Policy von “trust” nach “vpn-s2s”, oder wie auch immer sie heißt, eingerichtet werden, die den gewünschten Traffic erlaubt.)
FRITZ!Box
Für die FRITZ!Box ist folgende *.cfg Datei nötig, welche man über die GUI importieren kann. Kommentare sind entsprechend vermerkt. Überall wo ANPASSEN steht, muss man selber noch Hand anlegen:
vpncfg { connections { enabled = yes; conn_type = conntype_lan; name = "fd-wv-fw01"; //ANPASSEN Angezeigter Name in der FRITZ!Box always_renew = yes; reject_not_encrypted = no; dont_filter_netbios = yes; localip = 0.0.0.0; local_virtualip = 0.0.0.0; remoteip = 80.154.108.227; //ANPASSEN Externe IP-Adresse der Juniper remote_virtualip = 0.0.0.0; localid { fqdn = "darm.webernetz.net"; //ANPASSEN Dyn-DNS Eintrag der FRITZ!Box } remoteid { ipaddr = "80.154.108.227"; //ANPASSEN Externe IP-Adresse der Juniper } mode = phase1_mode_idp; phase1ss = "alt/aes/sha"; //Entspricht DH Gruppe 2, AES-256, SHA-1 keytype = connkeytype_pre_shared; key = "1iOOncL1T2TxJKqr7PBbDi6sr2lVKX"; //ANPASSEN Pre-Shared Key cert_do_server_auth = no; use_nat_t = no; //Da die Juniper über eine statische IP verfügt, ist kein NAT-T notwendig use_xauth = no; use_cfgmode = no; phase2localid { ipnet { ipaddr = 192.168.9.0; //ANPASSEN IP-Netz hinter der FRITZ!Box mask = 255.255.255.0; } } phase2remoteid { ipnet { ipaddr = 192.168.96.0; //ANPASSEN IP-Netz hinter der Juniper mask = 255.255.224.0; } } phase2ss = "esp-3des-sha/ah-no/comp-no/pfs"; accesslist = "permit ip any 192.168.96.0 255.255.224.0"; //ANPASSEN IP-Netz hinter der Juniper } 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"; }
Wenn es funktioniert
Dann sieht man im Monitor Status der Juniper in etwa so etwas:
Auf der FRITZ!Box sieht man im Bereich Freigaben -> VPN einen grünen Status-Bubble.
Links
Neben dem Testen von diversen Einstellungen hatte ich natürlich auch Google bemüht. Zum Beispiel gibt es hier eine Erklärung von den FRITZ!Box Attributen und hier eine längere Diskussion über die Einstellungen von einem VPN zwischen ScreenOS und der FB. Eine Auflistungen der IKE Fehlermeldungen der FRITZ!Box findet man hier.
AVM hat ebenfalls ein VPN Service-Portal, bei dem allerdings (noch) keine Rede von der Juniper Firewall ist.