IPSec zwischen Linux und der NetScreen

Ein VPN an sich ist eine feine Sache wenn man mal nicht Zuhause ist und trotzdem an seine Rechner kommen will. Seit ich die Pfsense laufen hatte, habe ich diese Funktion schätzen gelernt. Meine damalige Implementation war eine simple OpenVPN Lösung.

Da ich nun aber inzwischen eine NetScreen/Juniper SSG5 mein Eigen nenne, muss ich mich den Gegebenheiten anpassen und ein IPSec VPN aufbauen. Da ich mit meinem Laptop auf Reisen bin, habe ich mich für die ‚DialUp‘ Variante entschieden, was im eigentlich nichts mit einem Modem zu tun hat, sondern nur mit dem Fakt, dass der Client die Verbindung zur Firewall initiiert.

Die aktuelle Situation sieht wie folgt aus:

  • Netscreen: 1.2.3.4
  • Roadwarrioir: 172.16.1.2
  • Netz hinter Netscreen: 192.168.10.0/24

User & Keys:

  • User: myuser
  • IKE ID: user@host.com
  • Group: dialupusers
  • Preshared Key: secret

Als erstes muss das VPN auf der NetScreen eingerichtet werden. Da ich es gerne kurz und Bündig habe, verwende ich dazu die Commandline via SSH. Der Einfachheit halber, unterteile ich es für die Anleitung hier in mehrere Schritte.

Benutzer und Gruppe

Zuallererst benötigen wir einen Benutzer, der sich einwählen darf und durch seine IKE ID eindeutig identifiziert wird. Um die Sache einfach zu halten, weise ich diesem User auch noch eine Gruppe zu, über welche ich alle Berechtigungen verwalten werde:

set user "myuser" ike-id u-fqdn "user@host.com" share-limit 1
set user "myuser" type ike
set user "myuser" "enable"
set user-group "dialupusers" user "myuser"

Auto-IKE VPN und Policy

Um auch hinter Firewalls klar zu kommen konfiguriere ich hier NAT-Traversal. Sollte unser Roadwarrior jedoch nicht hinter einer Firewall sitzen, ist uns das auch egal. Unsere NetScreen wird diese Funktion in dem Fall nicht benutzen.

set ike gateway "dialupvpn" dialup "dialupusers" Aggr outgoing-interface "ethernet0/0" preshare "secret" proposal "pre-g2-3des-sha"
set ike gateway "dialupvpn" nat-traversal
set ike gateway "dialupvpn" udp-checksum
set vpn "dialupvpn" gateway "dialupvpn" no-replay tunnel idletime 0 proposal "g2-esp-3des-sha"
set address "Trust" "192.168.10.0/24" 192.168.10.0 255.255.255.0
set policy top from "Untrust" to "Trust" "Dial-Up VPN" "192.168.10.0/24" "ANY" Tunnel vpn "dialupvpn" log

Das war’s dann aber auch schon auf der NetScreen. Mit den Kommandos ’save‘ und ‚exit‘ loggen wir uns schließlich aus und schreiten zur Linux-Box, wo bereits die IPSec-Tools installiert wurden. Bei Gentoo sind diese als net-firewall/ipsec-tools verfügbar. Was den Kernel betrifft, sollten folgende Dinge entweder fix eingebaut oder zumindest als Modul verfügbar sein:

  • PF_KEY sockets (CONFIG_NET_KEY)
  • AH transformation (CONFIG_INET_AH)
  • ESP transformation (CONFIG_INET_ESP)
  • IPCOMP transformation (CONFIG_INET_IPCOMP)
  • DES, SHA1, (etc) from Crypto API

Die Preshared Keys (PSK) der einzelnen Verbindungen werden in der Datei /etc/racoon/psk.txt eingetragen und zugeordnet.
/etc/racoon/psk.txt:

# ipv4/ipv6 adresses
1.2.3.4        abc123

In der racoon.conf Datei legen wir die Ziele fest
/etc/racoon/racoon.conf:

# Pre-shared key
path pre_shared_key "/etc/racoon/psk.txt";

# Remote host
remote 1.2.3.4
{
exchange_mode aggressive;
my_identifier user_fqdn "user@host.com";
proposal {
encryption_algorithm 3des;
hash_algorithm sha1;
authentication_method pre_shared_key;
dh_group modp1024;
}
}

# A sample sainfo section
# Create one for each subnet you want to access, etc.
sainfo address 172.16.1.2 any address 192.168.10.0/24 any
{
pfs_group modp1024;
encryption_algorithm 3des;
authentication_algorithm hmac_sha1;
compression_algorithm deflate;
}

… welche wir dann schliesslich in der ipsec.conf Datei verwenden.
/etc/ipsec.conf:

#!/usr/sbin/setkey -f

flush;
spdflush;

# outbound
spdadd 192.168.2.0/24 192.168.10.0/24 any
    -P out ipsec esp/tunnel/172.16.1.2-1.2.3.4/require;

# inbound
spdadd 192.168.10.0/24 192.168.2.0/24 any
    -P in ipsec esp/tunnel/1.2.3.4-172.16.1.2/require;

Wenn das erledigt ist, kann die Verbindung gestartet werden. Achtung: Die Verbindung wird nicht gleich beim ersten Paket funktionieren, da zuerst die Authentifizierung erfolgen muss. Ist die Verbindung nach 15 Sekunden noch immer nicht aufgebaut, lohnt sich ein Blick in die Logfiles.

Author:

6 thoughts on “IPSec zwischen Linux und der NetScreen”

  • for the lines with spdadd, can I use fqdn like example.domain.com instead of ip addresses, because i have a dynamic IP setup and i use dyndns to update the hostnameIP mapping. everytime the router resets or line drops, i have to redo the configuration. I have searched a lot on the web, but there’s no documentation telling whether it is possible or not.

    Thank you in advance for your time and efforts.

    Diabolic Preacher
    As Is

  • I don’t think that hostnames will work. I had the same problem with different networks I am in – but I solved it with a little script that writes the spdadd lines for me.

    In your case it could be a script that writes /etc/ipsec.conf using a template.

  • helo,

    I did everything you teach on this page, but I am receiving a message on racoon.log

    eth1[500] (Address already in use).

    do you known what is it?

    thanks anyway

  • thanks for the quick reposnse, but I dont have another ipsec running, I have only on another site with a nat, but I have openvpn on the same server is that a problem?

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

Notify me of followup comments via e-mail. You can also subscribe without commenting.