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

  1. /etc/racoon/psk.txt
    ##################################################
    # Linux - Fritz
    ##################################################
    a.b.c.d topsecret
  2. /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;
    }
  3. /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

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.

Powered by WordPress. Designed by elogi.