Qualche giorno fa l’azienda nella quale lavoro ha deciso di sostituire una vpn OpenVpn con una PPTP, di seguito cerco di descrivere brevemente i passi seguiti per far funzionare il pc di casa con questo protocollo.

Livello:
Medio

Per chi:
Ha la necessita di connettersi in VPN ma non ha precompilati i moduli necessari

Scenario:
Instaurare una connessione vpn PPTP da una macchina Linux 2.4.31

Il mio pc di casa usa come SO una Slackware 10.2 con kernel 2.4.31 e dato che funziona tutto perfettamente non ho mai sentito la necessita’ di passare al 2.6.
Con l’introduzione in ufficio della nuova vpn ho avuto qualche problemino nel connettermi dato che non avevo i moduli compilati MPPE/MPPC rispettivamente Microsoft Point-to-Point Encryption e Microsoft Point-to-Point Compression.

Infatti dopo aver installato il client pptp prelevato da pptpclient.sourceforge.net , aver configurato a dovere i file necessari e dopo aver aggiunto la voce “debug” nel file /etc/ppp/options.pptp ho verificato che comparivano i seguenti messaggi in /var/log/debug:

Aug 29 00:01:57 crx pppd[5174]: sent [LCP TermReq id=0xb 
"MPPE required but not available"]

Di conseguenza ho dovuto compilare il kernel.

Logicamente prima di effettuare questa operazione fatevi tutte le copie necessarie per un eventuale ripristino del sistema nel caso in cui qualche cosa dovesse andare storto!

Come prima cosa ho scaricato la patch per il mio kernel:

wget -c http://mppe-mppc.alphacron.de/linux-2.4.31-mppe-mppc-1.3.patch.gz

Ho applicato la patch:

# cd /usr/src/linux-2.4.31
# cp ~crx/linux-2.4.31-mppe-mppc-1.3.patch.gz
# zcat linux-2.4.31-mppe-mppc-1.3.patch.gz | patch -p1

Ho configurato il kernel aggiungendo i moduli necessari:

# make menuconfig

in Network device support ho selezionato la voce “Microsoft PPP compression/encryption (MPPC/MPPE)

<M>   PPP support for async serial ports 
<M>   PPP support for sync tty ports
<M>   PPP Deflate compression
<M>   PPP BSD-Compress compression 
<M>   Microsoft PPP compression/encryption (MPPC/MPPE) 
<M>   PPP over Ethernet (EXPERIMENTAL)

e in “Cryptographic options” ho verificato che fossero presenti gli algoritmi SHA1 e RC4

Dopo di che ho dato il via alla compilazione con questa sequenza:

# init 1
# make clean \
	&& make dep \ 
	&& make bzImage \
	&& make modules \
	&& make modules_install \
	&& make install
# make clean

Ho aggiunto le seguenti rige a /etc/modules.conf

alias ppp-compress-18 ppp_mppe_mppc
alias char-major-108 ppp_generic
alias tty-ldisc-3 ppp_async
alias tty-ldisc-14 ppp_synctty
alias ppp-compress-21 bsd_comp
alias ppp-compress-24 ppp_deflate
alias ppp-compress-26 ppp_deflate
alias net-pf-47 ip_gre

e riavviato.

Tutto e’ andato bene, ho riprovato ad eseguire la connessione vpn e anche questa ha funzionato correttamente.

Ah, un piccolo sguardo ai file da toccare per una configurazione base:

/etc/ppp/options.pptp
Utile per aumentare il livello di logging dell’applicazione, come ho fatto spora e per configurare alcuni parametri per i quali e’ meglio fare riferimento alla documentazione del client

/etc/ppp/chap-secrets
Necessario per inserire i parametri di autenticazione alla VPN:

# Secrets for authentication using CHAP
# client        server  secret                  IP addresses
USERNAME  pptpd   PASSWORD      *

/etc/ppp/peers/NOMEPERLAVPN
Questo file, da creare, dove sostituire il NOMEPERLAVPN con un nome identificativo per la vostra vpn e’ necessario al client per eseguire il processo di connession ed autenticazione

pty "pptp HOSTVPNSERVER --nolaunchpppd"
name USERNAME
mtu 1490
mru 1490
remotename pptpd
require-mschap
require-mschap-v2
require-mppe-128
file /etc/ppp/options.pptp
ipparam NOMEPERLAVPN
persist

/etc/ppp/ip-up
Questo file e’ molto utile per eseguire comandi dopo che l’interfaccia di rete e’ andata “su”, nel mio caso aggiungo la rotta alla macchina del mio ufficio dato che posso passare solo da li.

#!/bin/sh
/sbin/route add -net 172.16.16.13 netmask 255.255.255.255 dev ppp0

dove ppp0 e’ l’interfaccia di rete che viene attivata appena effettuo la connessione.

Come far partire la vpn?

# pppd call NOMEPERLAVPN

Al solito! Spero di essere stato d’aiuto :)

Ciao,
Cristian.