エンジニアブログ

エンジニアブログ

CentOS 5.5 で PPTP Client を利用してVPN接続を行う

logo2.gif やまかわ 2011年02月16日

CentOS 5.5 にPPTP Clientを導入してVPN接続がうまくいきましたので、ここにメモ代わりに残しておきます。

接続先がMicrosoftのサーバなため、案外苦労しました。pppdに与える起動パラメータの少しの違いが絶妙に効いてきます。

必要なソフトは以下のものです。

手順:

1. yumで入れられるものの導入

$ sudo yum install pppd pptp

2. pptp-clientの導入

$ wget http://sourceforge.net/projects/pptpclient/files/pptp/pptp-1.7.2/pptp-1.7.2.tar.gz/download
$ tar xzf pptp-1.7.2.tar.gz 
$ cd pptp-1.7.2
$ make
$ sudo make install

3. pptp-client起動スクリプト作成

$ sudo vim /usr/bin/pptp-client
#!/bin/sh
# chkconfig: 3456 98 20
# description: PPTP client for VPN 

SERVER="11.xxx.xxx.xxx"       # 接続先のIPアドレス or ホスト名
USER="n-yamakawa"             # PPTP用 ユーザー名
PASSWORD="xxxxxxxxx"       # PPTP用 パスワード
HOSTNET="192.168.0.0"       # 接続先のネットワークアドレス
HOSTMASK="255.255.255.0"    # 接続先のネットマスク

RESOLVCONF="/etc/resolv.conf"
RESOLVCONFBAK="/tmp/resolv.conf.bak"

DEBUG="debug"
LOGLEVEL="2"

case "$1" in
start)
  if [ -z $(/sbin/pidof pptp) ];  then
        echo -n "Starting pptp-client"

    if [ -f $RESOLVCONF ] ;then
      cp -p $RESOLVCONF $RESOLVCONFBAK
    fi

    /usr/sbin/pppd \
    $DEBUG lock noauth nodeflate nobsdcomp refuse-eap \
    name $USER \
    password $PASSWORD 
    require-mppe-128 \
    pty "/usr/sbin/pptp $SERVER --nolaunchpppd --loglevel $LOGLEVEL" 

    sleep 10

    /sbin/route add -net $HOSTNET netmask $HOSTMASK dev ppp0
    echo
  else
    echo "pptp-client is already started" 
  fi

;;

stop)
  if [ ! -z 1$(/sbin/pidof pptp) ];  then
    echo -n "Shutting down pptp-client" 
    /usr/bin/killall pptp
    if [ -f $RESOLVCONFBAK ] ;then
      cp -p $RESOLVCONFBAK $RESOLVCONF
    fi
    echo
  else
    echo "pptp-client is not running" 
  fi
;;

restart)
  if [ ! -z $(/sbin/pidof pptp) ];  then
    echo -n "Shutting down pptp-client" 
    /usr/bin/killall pptp
    if [ -f $RESOLVCONFBAK ] ;then
      cp -p $RESOLVCONFBAK $RESOLVCONF
    fi
    echo
  else
    echo "pptp-client is not running" 
  fi
  if [ -z $(/sbin/pidof pptp) ];  then
    echo -n "Starting pptp-client" 
    if [ -f $RESOLVCONF ] ;then
      cp -p $RESOLVCONF $RESOLVCONFBAK
    fi

    /usr/sbin/pppd \
    $DEBUG lock noauth nodeflate nobsdcomp noccp \
    name $USER \
    password $PASSWORD \
    require-mppe \
    pty "/usr/sbin/pptp $SERVER --nolaunchpppd --loglevel $LOGLEVEL"

    sleep 10

    /sbin/route add -net $HOSTNET netmask $HOSTMASK dev ppp0
    echo
  else
    echo "pptp-client is already started"
  fi
;;

status)
        if [ ! -z $(/sbin/pidof pptp) ] ;  then
            echo -n "pptp-client (pid"
            echo -n " `/sbin/pidof pptp`"
            echo ") is running..."
        else
            echo "pptp-client is stopped"
        fi
;;

*)
echo "Usage: $0 {start|stop|restart|status}"
exit 1
;;

esac

exit 0

4. 動作確認


 $ sudo /usr/bin/pptp-client start
 $  /sbin/ifconfig | grep ppp
# ppp0 が出てくればOK

 $ ping [VPN接続先内ホスト]

5. 起動設定

$ sudo ln -s   /usr/bin/pptp-client /etc/init.d/pptp-client
$ sudo chkconfig --add pptp-client
$ sudo chkconfig --level 3 pptp-client on

remote(PPP先での) IP address を固定する方法を現在探していますが、今のところ不明です。