Diese kurze Anleitung zeigt, wie man einen VPN-Server auf Basis von IPSEC/OpenSwan und Preshared-Keys via PPTP aufbaut.

Der Server hat folgendes Netzwerk-Setup:

  • eine Netzwerkkarte richtung WAN: IP, bspw. 1.1.1.1
  • eine Netzwerkkarte richtung LAN: IP, bspw. 10.0.1.1, der VPN-Server wird später auf einer anderen, freien LAN-IP laufen.

Benötigte Einstellungen im Kernel

Loadable module support --->
Networking --->
Networking options --->
<*> Packet socket
<*> Unix domain sockets
<M> IPsec user configuration interface
<M> PF_KEY sockets
[*] TCP/IP networking
[*] IP: multicasting
[*] IP: advanced router
[*] IP: TCP syncookie support (disabled per default)
<M> IP: ESP transformation
<M> IP: IPComp transformation
<M> IP: tunnel transformation
<M> INET: socket monitoring interface
[*] Network packet filtering (replaces ipchains) --->
Device Drivers --->
Network device support --->
[*] Network device support
<M> PPP (point-to-point protocol) support
<M> PPP support for async serial ports
<M> PPP support for sync tty ports
<M> PPP Deflate compression
<M> PPP BSD-Compress compression
Cryptographic options --->
--- Cryptographic API
--- HMAC support
<M> MD5 digest algorithm
<M> DES and Triple DES EDE cipher algorithms
<M> AES cipher algorithms
<M> AES cipher algorithms (i586)
<M> SHA1 digest algorithm

Benötigte Pakete

  • net-misc/openswan
  • net-firewall/ipsec-tools
  • net-dialup/xl2tpd

Konfiguration

Zunächst konfigurieren wir IPSEC mittels der /etc/ipsec/ipsec.conf:

# /etc/ipsec/ipsec.conf - Openswan IPsec configuration file
# RCSID $Id: ipsec.conf.in,v 1.15.2.6 2006/10/19 03:49:46 paul Exp $

# This file: /usr/share/doc/openswan-2.4.15/ipsec.conf-sample
#
# Manual: ipsec.conf.5


version 2.0 # conforms to second version of ipsec.conf specification

# basic configuration
config setup
# plutodebug / klipsdebug = "all", "none" or a combation from below:
# "raw crypt parsing emitting control klips pfkey natt x509 private"
# eg: plutodebug="control parsing"
#
# ONLY enable plutodebug=all or klipsdebug=all if you are a developer !!
#
# NAT-TRAVERSAL support, see README.NAT-Traversal
nat_traversal=yes
# virtual_private=%v4:10.0.0.0/8,%v4:192.168.0.0/16,%v4:172.16.0.0/12
#
# enable this if you see "failed to find any available worker"
nhelpers=0
## added
interfaces=%defaultroute
klipsdebug=none
plutodebug=none
overridemtu=1410
virtual_private=%v4:10.0.0.0/8,%v4:172.16.0.0/12,%v4:192.168.0.0/16,%v4:!10.0.1.0/24

conn %default
keyingtries=3
compress=no
disablearrivalcheck=no
keyexchange=ike
ikelifetime=240m
keylife=60m

conn VPN-Clients
leftprotoport=17/1701
rightprotoport=17/%any
rekey=no
authby=secret
pfs=no
type=tunnel
left=<EXTERNE-IP-DES-SERVERS>
leftnexthop=<GATEWAY-DES-SERVERS>
right=%any
rightsubnet=vhost:%no,%priv
auto=add

# Add connections here

# sample VPN connections, see /etc/ipsec.d/examples/

#Disable Opportunistic Encryption
include /etc/ipsec/ipsec.d/examples/no_oe.conf

Die letze Angabe in der Option virtual_private im Abschnitt setup muss auf das LAN-Netz des Servers zeigen, sprich das Netz aus dem die Clients nachher ihre IPs beziehen.

Als nächstes konfigurieren die Preshared-Keys (PSK) für die IPSEC-Ebene ind /etc/ipsec/ipsec.secrets.

<externe-ip-des-servers> %any: PSK "testpsk123"

Das hier eingegebene Password wird für die IPSEC-Konfiguration beim Client benötigt, und ist hier der Einfachheit halt für alle Clients gleich. Alternativ kann man für jeden Client einen eigenen Key anlegen, indem man das %any durch den Client ersetzt.

Im nächsten Schritt werden wir den Tunnel konfigurieren. Zuerst passen wir dafür die /etc/xl2tpd/xl2tpd.conf an:

; l2tpd.conf
;
[global]
port = 1701

[lns default]
ip range = 10.0.1.200-10.0.1.210
local ip = 10.0.1.123
require chap = yes
refuse pap = yes
require authentication = yes
name = MyVPN
ppp debug = yes
pppoptfile = /etc/ppp/options
length bit = yes

Wichtig sind hier die Einstellungen ip range welche die von den Clients zu verwendende IP-Range festlegt (sollte sich nicht mit bestehenden IP-Adressen oder DHCP-Ranges überschneiden!), sowie local ip welche die IP des VPN-Servers festlegt. Letztere ist nicht die LAN-IP unseres Servers, sondern eine weitere, freie IP im LAN!

Die Datei /etc/ppp/options:

ipcp-accept-local
ipcp-accept-remote
ms-dns 1.1.1.2
noccp
auth
crtscts
mtu 1400
mru 1400
+mschap-v2
nodefaultroute
debug
lock
proxyarp
connect-delay 5000
 

Die Option ms-dns sollte auf euren DNS-Server zeigen.

In der Datei /etc/ppp/chap-secrets werden nun noch abschliessend die Benutzer konfiguriert:

# Secrets for authentication using CHAP
# client server secret IP addresses

user1 * "pass1" 10.0.1.0/24
* user1 "pass1" 10.0.1.0/24

Die Angabe 10.0.1.0/24 legt fest, das der Client eine IP aus dem Bereich, den wir oben konfiguriert haben, bekommen soll. Die Angabe eine IP an dieser Stelle legt fest, das der Client immer die gleich IP bekommt.

Abschliessend noch die Daemons xl2tpd und ipsec starten.

Konfiguration der Clients

Unter Windows

  • Über die Netzwerkumgebung eine neue VPN-Verbindung anlegen
  • Eigenschaften der Verbindung -> Security -> IPSec Settings
  • Use pre-shared key for authentication. Hier den PSK aus der ipsec.secrets angeben
  • Unter Networking jetzt noch den Typ auf L2TP IPSec VPN stellen

     

Anschliessend kann man sich dann mit den Benutzern aus der chap-secrets am VPN anmelden.

Links