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:
Für Kernel 2.6.4, geht aber auch mit meinem 2.6.5: linux-2.6.4-mppe-20040216.patch
Für Kernel 2.4.25, habe ich aber nicht ausprobiert: linux-2.4.25-mppe-20040216.patch
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.