welcome: please sign in
location: VPN_mit_Linux

1. Worum geht's?

Konfiguration einer VPN Verbindung zu einem M$ Server, der MPPE (Microsoft Point-To-Point Encryption) verwendet. Ich habe dieses Problem beim Konfigurieren der WLan-Verbindung in der Uni gehabt und es dann nach einigem Gefummel hinbekommen. Dort (in der Uni) werden dadurch die WLan-Verbindung verschlüsselt.

2. Was ist zu tun?

2.1. Kernel patchen

Damit MPPE geht, muß man es dem Kernel beibringen. Dafür benötigt man einen Patch für den verwendeten Kernel:

Danach muß man sich die aktuellen Kernel-Sourcen besorgen. Da ich Gentoo verwende, ist der entsprechende Befehl (für einen 2.6er Kernel):

emerge gentoo-dev-sources

Benutzer anderer Distributionen möchten bitte mit ihrem Paketmanager entsprechend verfahren.
Nebenbei: Debian-User sollten den Patch mittels  apt-get install kernel-patch-mppe  installieren können.
Nun kopieren wir den Patch in das Kernel-Sourcen-Verzeichnis (Ich zeige die folgenden Schritte für den 2.6er Kernel, Benutzer von 2.4 verfahren bitte analog.):

cp linux-2.6.4-mppe-20040216.patch /usr/src/linux

Dann wenden wir ihn auf die Sourcen an:

cd /usr/src/linux
patch -p1 < linux-2.6.4-mppe-20040216.patch

Jetzt wird der Kernel neu konfiguriert:

make menuconfig 

Wichtig sind jetzt folgende Optionen:

Device Drivers  --->
  Networking support  --->
    <M> PPP (point-to-point protocol) support
    [ ]   PPP multilink support (EXPERIMENTAL)
    [*]   PPP filtering
    <M>   PPP support for async serial ports
    <M>   PPP support for sync tty ports
    <M>   PPP Deflate compression
    <M>   PPP BSD-Compress compression
    <M>   PPP MPPE compression (encryption)

Wenn das erledigt ist, wird der Kernel neu gebaut (Kernel 2.6):

make && make modules_install
cp arch/i386/boot/bzImage /boot/kernel (Durch den eigenen Kernelnamen ersetzen!)
cp System.map /boot/System.map (Durch den Namen der eigenen System.map ersetzen!)

Kernel 2.4:

make dep && make bzImage modules modules_install
cp arch/i386/boot/bzImage /boot/kernel (Durch den eigenen Kernelnamen ersetzen!)
cp System.map /boot/System.map (Durch den Namen der eigenen System.map ersetzen!)

Jetzt wäre ein Neustart angebracht.
Nun sollte  modprobe -l | grep ppp  ungefähr so aussehen:

/lib/modules/2.6.5-gentoo-r1/kernel/drivers/net/pppox.ko
/lib/modules/2.6.5-gentoo-r1/kernel/drivers/net/pppoe.ko
/lib/modules/2.6.5-gentoo-r1/kernel/drivers/net/ppp_synctty.ko
/lib/modules/2.6.5-gentoo-r1/kernel/drivers/net/ppp_mppe.ko
/lib/modules/2.6.5-gentoo-r1/kernel/drivers/net/ppp_generic.ko
/lib/modules/2.6.5-gentoo-r1/kernel/drivers/net/ppp_deflate.ko
/lib/modules/2.6.5-gentoo-r1/kernel/drivers/net/ppp_async.ko

(Eventuell heißen die Module bei 2.4er Kerneln anders.)BRWir versuchen mal, daß Modul zu laden:

modprobe ppp_mppe

Wenn das klappt, ist der Kernel erfolgreich gepatcht.

2.2. pppd installieren

Als nächstes muß der pppd installiert werden. Wichtig ist, daß er die Versionsnummer hat, für die der Patch vorgesehen ist (Bei den Dateien auf dieser Seite ist das 2.4.2) (Wieder Gentoo, alle andern konsultieren die Dokumentation ihres Paketmanagers):

emerge /usr/portage/net-dialup/ppp/ppp-2.4.2.ebuild

Eventuell muß bei anderen Distrubutionen der pppd auch noch gepatcht werden, bei Gentoo passiert das automatisch beim emergen.
Nun geht's ans Konfigurieren des pppd. Man nehme den Editor der Wahl und öffne  /etc/ppp/options.pptp :

lock
noauth
nobsdcomp
nodeflate
mtu 1000
mru 1000
lcp-echo-failure 10
lcp-echo-interval 10

Das war's schon, jetzt noch den pptpclient.

2.3. Installieren des pptpclient

emerge pptpclient

installiert den Client unter Gentoo. Nun noch konfigurieren. Erstelle eine neue Datei in  /etc/ppp/peers/  die den Namen trägt, den die Verbindung später haben soll. Dann öffne diese mit einem Editor:

pty "pptp vpn.server.irgendwo --nolaunchpppd"
noauth
remotename lokaler_Benutzer
name remote_Benutzer
require-mppe
nomppe-stateful
require-mschap-v2
file /etc/ppp/options.pptp
ipparam Verbindungsname

Jetzt noch schnell die  /etc/ppp/chap-secrets  editieren:

lokaler_Benutzer     remote_Benutzer    "Passwort"       *
remote_Benutzer      lokaler_Benutzer   "Passwort"       *

Und jetzt sollte  pon Verbindungsname  eine Verbindung mit dem VPN aufbauen. (Nach einer kurzen Weile taucht

ppp0      Link encap:Point-to-Point Protocol 

o.ä. in der Ausgabe von  ifconfig  auf. Wenn nicht, kann man mit

pon Verbindungsname debug dump logfd 2 nodetach 

beobachten, was schief geht.  poff Verbindungsname  unterbricht die Vebindung wieder.

2.4. Routing einstellen

Zu guter letzt müssen wir unserem Rechner noch sagen, daß der Verkehr über die neue VPN-Verbindung gehen soll. Da ich unterschiedliche Routes brauche, je nachdem, ob ich zu hause oder in der Uni bin, habe ich ein Skript, daß mit Hilfe eines Parameters entscheidet, welche Route genommen wird. Dieses Skript muß ich von Hand aufrufen, nachdem die Verbindung aufgebaut wurde:

 
# home or uni
MODE=$1
if [ "${MODE}" == "" ]; then
        echo "You need to specify wether home or uni"
        exit
fi

# network interface
PRIMARY=eth1
 
# address of tunnel server
SERVER=vpn.server.irgendwo
 
# ppp interface name
TUNNEL=ppp0
 
GW=""
if [ "${MODE}" == "home" ]; then GW="gw my_home_gateway"; fi
# All traffic to the vpn-server goes through the network interface
route add -host ${SERVER} dev ${PRIMARY} ${GW}
# Everything else through the vpn
route add default dev ${TUNNEL}

Wenn man das nicht braucht, kann man das Routing auch in  /etc/ppp/ip-up  einstellen, dieses Skript wird vom pppd automatisch nach Aufbau der Verbindung aufgerufen.

3. Fragen, Sorgen, Nöte, Feedback

VPN_mit_Linux (last edited 2008-07-14 09:55:44 by localhost)