IPSec VPN zwischen Fritz!Box und Linux
IPSec VPN LAN:LAN Verbindung zwischen:
AVM Fritz!Box <-> Linux
Es kamen zum Einsatz:
- AVM Fritz!Box 6360 cable
- SuSE Linux Enterprise Server 11 SP1
- ipsec-tools (racoon)
Bei einer FRITZ!Box wird das VPN mit einer Konfigurationsdatei eingerichtet, die über das Webinterface eingespielt wird (Achtung das Einspielen löst einen Neustart der FRITZ!Box aus).Nähere Informationen zu dem Thema FRITZ!Box und VPN können im AVM VPN Service-Portal gefunden werden.
Um eine Konfiguration zu erstellen nimmt man am Besten die Software von AVM. Diese kann über das AVM VPN Service-Portal heruntergeladen werden. FRITZ!Box-Fernzugang einrichten
Falls man kein Windows zur Hand haben sollte, dann kann man auch das Beispiel weiter unten verwenden. Jedoch sollte man darauf achten, das die config Datei im „DOS-Format“ (\r\n) formatiert ist. Falls die Datei im Unix-Format (\n) formatiert ist, sollte man diese erst konvertieren, sonst funktioniert der VPN tunnel nicht.
Bei mir hat der VPN tunnel erst funktioniert, als ich meine config von unix nach DOS konvertierte.
Dies kann ganz einfach mittels perl gemacht werden.
perl -p -i -e 's|\n|\r\n|' VPN.cfg
Parameter der .cfg Datei
Parameter | Beschreibung |
---|---|
reject_not_encrypted = no; | Internetzugang während VPN verbieten, kann auch die DynDNS Verbindung behinden, daher nur mit fester IP nutzen |
dont_filter_netbios = yes; | NetBIOS filtern, auf no gesetzt kann NetBIOS nicht genutzt werden |
mode = phase1_mode_aggressive; | Modus der IKE-Phase1 (Agressive Mode) |
mode = phase1_mode_idp; | Modus der IKE-Phase1 (Main Mode) |
phase1ss = "all/all/all"; | Sicherheitsstrategie IKE-Phase 1, auf automatisch gesetzt |
phase2ss = "esp-all-all/ah-none/comp-all/pfs"; | Sicherheitsstrategie IKE-Phase 2 (IPSec) |
accesslist = "permit ip any 192.168.10.0 255.255.255.0"; | erlaubte Netzwerke oder Hosts |
pppoefw | Router läuft im PPPOE Mode (nur als Modem) |
dslifaces | Router läuft im Router-Mode (NAT-Funktionalität) |
dsldpconfig | … |
Parameter für phase1ss | |
def/3des/sha | Zugriff auf WatchGuard Firebox |
alt/aes/sha | Zugriff auf AVM Access Server |
def/all/all | alle Algorithmen, DH-Gruppe default |
alt/all/all | alle Algorithmen, DH-Gruppe alternativ |
def/all-no-aes/all | alle Algorithmen ohne AES, DH-Gruppe default |
alt/all-no-aes/all | alle Algorithmen ohne AES, DH-Gruppe alternativ |
alt/aes-3des/sha | AES 256 Bit oder 3DES, DH-Gruppe alternativ |
all/all/all | alle Algorithmen, DH-Gruppe alternativ |
Parameter für phase2ss | |
esp-aes-sha/ah-sha/comp-lzjh/pfs | Zugriff auf AVM Access Server, hohe Sicherheit |
esp-aes-sha/ah-all/comp-lzjh-no/pfs | Zugriff auf AVM Access Server, Standardsicherheit |
esp-aes-sha/ah-no/comp-lzjh/pfs | Zugriff auf AVM Access Server, ohne AH |
esp-3des-md5/ah-no/comp-lzjh/pfs | Zugriff auf AVM Access Server, mittlere Sicherheit |
esp-3des-sha/ah-no/comp-no/no-pfs | Zugriff auf WatchGuard Firebox |
esp-all-all/ah-all/comp-all/pfs | alle Algorithmen, mit PFS |
esp-all-all/ah-all/comp-all/no-pfs | alle Algorithmen, ohne PFS |
esp-des|3des-all/ah-all/comp-all/pfs | alle von Cisco unterstützten Algorithmen, mit PFS |
esp-des|3des-all/ah-all/comp-all/no-pfs | alle von Cisco unterstützten Algorithmen, ohne PFS |
esp-des|3des-all/ah-all/comp-no/pfs | MD5/SHA1/DES/3DES Algorithmen, mit PFS |
esp-des|3des-all/ah-all/comp-no/no-pfs | MD5/SHA1/DES/3DES Algorithmen, ohne PFS |
esp-3des-shal/ah-no/comp-no/pfs | Linux FreeS/WAN mit 3DES und PFS |
esp-3des-shal/ah-no/comp-deflate/no-pfs | Linux FreeS/WAN mit 3DES ohne Kompression |
esp-all-all/ah-none/comp-all/pfs | alle Algorithmen, ohne AH, mit PFS |
esp-all-all/ah-none/comp-all/no-pfs | alle Algorithmen, ohne AH, ohne PFS |
esp-aes256-3des-sha/ah-all-sha/comp-lzs-no/pfs | AES 256 Bit oder 3DES, AH optional, SHA, PFS |
esp-aes256-3des-sha/ah-no/comp-lzs-no/pfs | AES 256 Bit oder 3DES, kein AH, SHA, PFS |
Die config der Fritz!Box: (erstellt mit FRITZ!Box-Fernzugang einrichten)
/* * vpn.cfg */ vpncfg { connections { enabled = yes; conn_type = conntype_lan; name = "racoon"; always_renew = no; reject_not_encrypted = no; dont_filter_netbios = yes; localip = 0.0.0.0; local_virtualip = 0.0.0.0; remoteip = a.b.c.d; remote_virtualip = 0.0.0.0; localid { ipaddr = e.f.g.h; } remoteid { ipaddr = a.b.c.d.; } mode = phase1_mode_aggressive; phase1ss = "all/all/all"; keytype = connkeytype_pre_shared; key = "topsecret"; cert_do_server_auth = no; use_nat_t = yes; use_xauth = no; use_cfgmode = no; phase2localid { ipnet { ipaddr = 192.168.178.0; mask = 255.255.255.0; } } phase2remoteid { ipnet { ipaddr = 192.168.44.0; mask = 255.255.255.0; } } phase2ss = "esp-all-all/ah-none/comp-all/pfs"; accesslist = "permit ip any 192.168.44.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"; } // EOF
Die „racoon“ config auf der Linux Seite
- /etc/racoon/psk.txt
################################################## # Linux - Fritz ################################################## a.b.c.d topsecret
- /etc/racoon/racoon.conf
# $KAME: racoon.conf.in,v 1.18 2001/08/16 06:33:40 itojun Exp $ # "path" must be placed before it should be used. # You can overwrite which you defined, but it should not use due to confusing. #path include "@sysconfdir_x@/racoon"; path include "/etc/racoon"; #include "remote.conf"; # search this file for pre_shared_key with various ID key. #path pre_shared_key "@sysconfdir_x@/racoon/psk.txt"; path pre_shared_key "/etc/racoon/psk.txt"; # racoon will look for certificate file in the directory, # if the certificate/certificate request payload is received. #path certificate "@sysconfdir_x@/cert"; path certificate "/etc/racoon/cert"; # "log" specifies logging level. It is followed by either "notify", "debug" # or "debug2". #log debug; # "padding" defines some parameter of padding. You should not touch these. padding { maximum_length 20; # maximum padding length. randomize off; # enable randomize length. strict_check off; # enable strict check. exclusive_tail off; # extract last one octet. } # if no listen directive is specified, racoon will listen to all # available interface addresses. listen { #isakmp ::1 [7000]; #isakmp 202.249.11.124 [500]; #admin [7002]; # administrative's port by kmpstat. #strict_address; # required all addresses must be bound. } # Specification of default various timer. timer { # These value can be changed per remote node. counter 5; # maximum trying count to send. interval 20 sec; # maximum interval to resend. persend 1; # the number of packets per a send. # timer for waiting to complete each phase. phase1 30 sec; phase2 15 sec; # shrew.net natt_keepalive 15 seconds; } ################################################## # Fritz ################################################## remote a.b.c.d { exchange_mode aggressive; #exchange_mode main; lifetime time 1 hour; proposal { encryption_algorithm 3des; hash_algorithm md5; authentication_method pre_shared_key; dh_group 2; } } # Linux - Fritz sainfo address 192.168.44.0/24 any address 192.168.178.0/24 any { pfs_group 2; # !! default lifetime on Fritz!Box side !! lifetime time 1 hour; #encryption_algorithm 3des; #authentication_algorithm hmac_md5; encryption_algorithm aes; authentication_algorithm hmac_sha1; compression_algorithm deflate; }
- /etc/racoon/setkey.conf
#!/usr/sbin/setkey -f # # This is /etc/stekey.conf # # delete SAD flush; # delete SPD spdflush; ################################################## # Linux - Fritz ################################################## ## Policy for using SA's: Linux - Fritz # Linux-NET: 192.168.44.0/24 # Linux-GW: a.b.c.d # # Fritz-NET: 192.168.178.0/24 # Fritz-GW: e.f.g.h spdadd 192.168.44.0/24 192.168.178.0/24 any -P out ipsec esp/tunnel/e.f.g.h-a.b.c.d/require; spdadd 192.168.178.0/24 192.168.44.0/24 any -P in ipsec esp/tunnel/a.b.c.d-e.f.g.h/require;
8 Responses to “IPSec VPN zwischen Fritz!Box und Linux”
Schreibe einen Kommentar
Du musst angemeldet sein, um einen Kommentar abzugeben.
hallo, netter artikel, nur leider finde ich hier keinen hinweis wie ich es machen wenn ich auf beiden seiten nur mit dyndns arbeiten kann.
kannst du mal dafür auch eine konfiguration posten?
Könnt ich schon, mal sehen, aber AVM liefert ein Tool, mit dem man eine Konfiguration für die Fritz!Box erzeugen kann. Diese ist auch in der Lage eine Konfiguration zu erzeugen, welche mit dynIPs funktioniert. Weiterhin sind im VPN Portal etliche Beispiele zu finden.
soll heisen du hast einfach die konfig mit dem avm tool für LAN-LAN erstellt?
also könnte ich die nehmen die ich schon erstellt habe und nur noch die informationen aus der konfig der fritzbox in die linux kiste hacken.
ja, genau das heißt es. Und mit dem Tool von AVM liegt die Datei auch gleich im richtigen Format (DOS aka rn) vor.
danke… werde ich warscheinlich mal die tage testen.
hm… mit dyndns adressen bekomme ich in meiner log den fehler:
ERROR: getaddrinfo(waffe,500): Name or service not known
was mache ich falsch?
hier die meldung bekomme ich immer:
root@server:/etc/racoon# racoon -F
Foreground mode.
2012-04-03 13:09:40: INFO: @(#)ipsec-tools 0.7.3 (http://ipsec-tools.sourceforge.net)
2012-04-03 13:09:40: INFO: @(#)This product linked OpenSSL 0.9.8o 01 Jun 2010 (http://www.openssl.org/)
2012-04-03 13:09:40: INFO: Reading configuration from „/etc/racoon/racoon.conf“
2012-04-03 13:09:40: ERROR: getaddrinfo(waffe,500): Name or service not known
2012-04-03 13:09:40: ERROR: fatal parse failure.
racoon: failed to parse configuration file.
IPsec Site-to-Site VPN Juniper ScreenOS AVM FRITZ!Box
[…] 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 […]