PPtP mit Linux

Für PPtP unter Linux werden separat die Kernel und Userspace-Unterstützung für PPtP, MS Chap V2 und die MPPE-Encryption für PPP benötigt, anschließend muss der pppd enstsprechend konfiguriert werden.

Da es viele verschiedene Linux-Distributionen und 100 Wege zum Ziel gibt, hier erstmal nur eine exemplarische Anleitung für Debian, wir würden uns über weitere Anleitungen für andere Distributionen und/oder Ergänzungen freuen.

Hinweis: Nach Aufbau der VPN-Verbindung, wie hier im Detail besschrieben, geht der komplette Internettraffic über die VPN-Verbindung. Ob man dies wirklich möchte oder man das Standardgateway nicht auf die VPN-Verbindung setzen möchte, sondern nur einzelne Netze über die VPN-Verbindung geroutet werden sollen, muss man selbst entscheiden. Letzteres erfordert das Setzen von statischen Routen in der Kommandozeile mit "route add", welches erweitere Kenntnisse voraussetzt.

Debian

Kernel ≥ 2.6.15

Kernel ≥ 2.6.15 enthalten die nötige MPPE-Encryption bereits, die muss unter Device Drivers / Network / PPP (point-to-point protocol) support / PPP MPPE compression (encryption) aktiviert sein.

Kernel < 2.6.14 (für Kernel-Selbstbauer)

Zuerst ist es nötig einen eigenen Kernel mit MPPE-Encryption für PPP zu bauen, den nötigen Patch erhält man am einfachste mit apt-get install kernel-patch-mppe

Wer seine Kernel selbst baut applied nun den patch unter /usr/src/kernel-patches/diffs/mppe/linux-2.6.xx-mppe-200xxxxx.patch.gz, (x natürlich durch entspr. zahlen ersetzen) und aktiviert unter Device Drivers / Network / PPP (point-to-point protocol) support / PPP MPPE compression (encryption) und baut den Kernel wie gewohnt.

Kernel < 2.6.14 (für Anfänger)

  1. Nötige pakete installieren: apt-get install kernel-package kernel-patch-mppe
  2. aktuellen Kernel von ftp.kernel.org herunterlagen und unter /usr/src entpacken
  3. in das Verzeichnis mit dem Kernel-Source (/usr/src/linux-2.6.xx)hineinwechseln
  4. export PATCH_THE_KERNEL=YES
  5. make-kpkg --config=menuconfig --initrd --revision=custom.1.0 kernal-image
  6. In der Kernel-Config Device Drivers / Network / PPP (point-to-point protocol) support / PPP MPPE compression (encryption) aktivieren.
  7. mit dpkg -i ../kernel-image-X.XXX_1.0_.deb den kernel installieren
  8. mit neuem Kernel rebooten.

Userspace

Zunächst einmal werden folgende Debian-Pakete benötigt: ppp pptp-linux iproute bash sed, sofern sie nicht schon längst installiert sind...

Es ist am einfachsten für IN-VPN ein Callfile für den pppd unter /etc/ppp/peers/in-vpn mit einem Editor der Wahl folgenden Inhalts anzulegen:
# benutze ppp10 für IN-VPN, und nenne es in-vpn
unit 10
ipparam in-vpn
# usernamen setzen
user sitename@in-vpn.de
password pptp-password
# pptp für verbindung verwenden
pty "pptp pptp.in-berlin.de --nolaunchpppd"
# mppe verschlüsselung
refuse-pap
refuse-chap
refuse-mschap
require-mschap-v2
require-mppe-128
nomppe-stateful
nodeflate
nobsdcomp
# remote Seite muss sich nicht autentisieren
noauth
# mtu/mru für pptp über pppoe 
# ggf streichen oder auf eigene MTU anpassen
# 16byte für gre +20byte für ip +8byte für pppoe
# dazu noch etwas luft für extensions
# dass macht eine um 48 byte kleine mtr/mru 
mtu 1452
mru 1452
# bei einem reconnect 90sc warten
holdoff 90
# nach 40 Versuchen (1h) aufgeben
maxfail 40
# nicht alles über das vpn routen 
nodefaultroute

Der Tunnel kann nun einfach mit pppd persist call in-vpn aufgebaut werden, es wird jedoch kein Traffic darüber geroutet. Von der Benutzung der defaultroute pppd option ist abzuraten, da diese leider die bestehende defaultroute auch für den Tunnel durch den Tunnel leitet (und das kann nicht funktionieren...). Stattdessen sollten die Routen im ip-up Script (z.B. /etc/ppp/ip-up.d/in-vpn) entsprechend gesetzt werden, z.B.
#!/bin/bash
PPP_IFACE="$1"
PPP_REMOTE="$5"
PPP_IPPARAM="$6"
OLDDEFAULT=$(ip route list | grep default | sed 's/.*default[\ \t]*\([dv][ei][va][\ \t][a-zA-Z0-9\.]*\).*/\1/')
PPTP_REMOTE=$(host -t A pptp.in-berlin.de | sed 's/^.*[\ \t]\([0-9\.]*\)$/\1/')

if [ "in-vpn" == "$PPP_IPPARAM" ] 
then
  ip route add $PPTP_REMOTE via $OLDDEFAULT
  ip route change default via $PPP_REMOTE dev $PPP_IFACE
fi
#last line intentionally left blank

SuSE

Aktuelle SuSE-Kernel sollten bereits alle nötigen Patches enthalten, wie das mit YAST geth - keine Ahnung

Changelog

  • Anleitung für Debian -- Main.PhiLs - 07 Oct 2005
  • Ergänzungen zur Defaultroute und Debian Userspace -- Main.PhiLs - 02 Nov 2005
  • Linux ab 2.6.14 hat MPPE eingebaut -- Main.PhiLs - 17 Dec 2005

Userdoc.DocumentationForm edit

Title PPtp mit Linux
Type HowTo
Classification VPN
QuickFind yes
Keywords VPN PPP Linux Debian
Topic revision: 2009-04-04, UnknownUser

  • QuickFind



 
This site is powered by FoswikiCopyright © by the contributing authors. All material on this collaboration platform is the property of the contributing authors.
Ideas, requests, problems regarding IN-Berlin Public Wiki? Send feedback