很久以前在公司被上司要求,使用 Linux 來架設一個可以讓同事遠端連線回公司的 VPN Server,並且希望可以用 LDAP 來做認證,在當時花了不少時間研究,雖然最後達成任務,但也僅止於堪用,同時整個過程及設定在最後上線前因太過混亂,似乎並沒有完整的記錄下來,故這次全部重來,希望能一步一步的記錄下來,當下次再有需要時,至少可以使用的步驟己經記錄下來可參考,可以將時間留給再深入的需求。

  依照自己無聊龜毛的慣例,還是先安裝一個最簡單乾淨的 Linux 來當 Server,不使用太新的作業系統,故使用 CentOS 5.8 (若是整個完成後,會再用 6 版的再試一次),安裝過程一樣,將 Package 安裝選擇數降到最低,以確認實際需使用到的軟體或是 Package,並且在系統安裝好後先執行一次 update,以確定所有的 Package 都是最新的。

  因為 CentOS 5.8 的 kernel 版本是 2.6.18,而網路上找得到修改 kernel 以支援 mppc 的 patch 支援版本只到 2.6.13,故此次安裝將不包含 kernel 的 patch 及 Compiler,只使用現成的 kernel。

  由於是選擇自己 Compiler 軟體來安裝,所以要先確認系統上沒有安裝這些 Package,若是有則先把安裝好的 Package 給移除掉,若是以最少 Package 的安裝方式,以下的 Package 應該都沒有裝進來。

   # rpm -e ppp -rp-pppoe wvdial NetworkManager NetworkManager-glib

  並且把會用到的 Package 裝上,因為使用 yum 來安裝,故只需要指明安裝 gcc、make 跟 wget 就可以了,若是用 rpm 來安裝的話,其他的 Package 需要一併指明外。

   gcc
   make
   wget
   cpp
   glibc-devel
   glibc-headers
   kernel-headers

   # yum -y install gcc make wget

  下載必須的軟體 ppp 及 pptpd,目前使用的分別是 pptpd-1.4.3 以及 ppp-2.4.5因為 pptpd-1.4.3 所配合的 ppp 的版本是 2.4.3 版,所以在 Compiler pptpd 時,需要先去修改一下東西,如果不想執行 logwtmp,則可以不用去修改

  下載回來後分別解壓縮,並進行 Compiler 的動作,Compiler 時圴採用預設值,不加任何額外的設定,預設會安裝在 /usr/local 的目錄下。

   # tar zxvf ppp-2.4.5.tar.gz
   # cd ppp-2.4.5
   # /.configure
   # make
   # make install
   # cd ..
   # tar zxvf pptpd-1.3.4.tar.gz
   # cd pptpd-1.3.4/plugins
   # vi patchlevel.h

    #define VERSION         "2.4.3" (原本昰2.4.3)
    #define VERSION         "2.4.5" (改成 2.4.5)

   # ./configure
   # make
   # make install
   # cp sample/pptpd.conf /etc/.
   # cp samples/options.pptpd /etc/ppp/.
   # cp samples/chap-secrets /etc/ppp/.

  安裝並把相關設定檔拷貝好後,開始編輯設定檔

   # vi /etc/pptpd.conf

    ppp /usr/local/sbin/pppd
    option /etc/ppp/options.pptpd
    #debug
    logwtmp (若不想啟用 logwtmp 功能,可以不加此參數,或是在前方加上 # 符號)
    #connections 100
    localip 192.168.0.1
    remoteip 192.168.0.234-238,192.168.0.245

  ppp 及 option 分別指定檔案位置,debug 及 connections (連線數限制) 被停用,remoteip 是遠端連線進來可取得的 IP 位址,兩種格式寫法,大致如此就可以。

  因為有啟動 logwtmp 機制,而所使用到的 pptpd-logwtmp.so 實際位置是在 /usr/local/lib 下,但程式似乎會到 /usr/lib/pptpd 的目錄下去找,所以要多一道手續

   # mkdir /usr/lib/pptpd
   
# ln -s /usr/local/lib/pptpd/pptpd-logwtmp.so /usr/lib/pptpd/pptpd-logwtmp.so (若不想啟用 logwtmp 功能,此步驟可以省略)

   # vi /etc/ppp/chap-secrets

    vpn  *  1234  *

  四個欄位分別是 帳號 pptp server 密碼 IP 位址(不從 pptpd.conf 中取得,有點像是固定 IP )

   # vi /etc/ppp/options.pptpd

    lock
    debug
    proxyarp
    #-----MPPE/MPPC------
    refuse-pap
    refuse-chap
    refuse-mschap
    require-mschap-v2
    require-mppe-128

  增加系統啟動檔,要記得將權限設定為 755 (chmod 755 /etc/init.d/pptpd)

   # vi /etc/init.d/pptpd

    #!/bin/sh
    #
    # Startup script for pptpd
    #
    # chkconfig: - 85 15
    # description: PPTP server
    # processname: pptpd
    # config: /etc/pptpd.conf


    # Source function library.
    . /etc/rc.d/init.d/functions
    # See how we were called.
    case "$1" in
      start)
            echo -n "Starting pptpd: "
            if [ -f /var/lock/subsys/pptpd ] ; then
                    echo
                    exit 1
            fi
            daemon /usr/local/sbin/pptpd
            echo
            touch /var/lock/subsys/pptpd
            ;;
      stop)
            echo -n "Shutting down pptpd: "
            killproc pptpd
            echo
            rm -f /var/lock/subsys/pptpd
            ;;
      status)
            status pptpd
            ;;
      condrestart)
            if [ -f /var/lock/subsys/pptpd ]; then
                    $0 stop
                    $0 start
            fi
            ;;
      reload|restart)
            $0 stop
            $0 start
            echo "Warning: a pptpd restart does not terminate existing "
            echo "connections, so new connections may be assigned the same IP "
            echo "address and cause unexpected results.  Use restart-kill to "
            echo "destroy existing connections during a restart."
            ;;
      restart-kill)
            $0 stop
            ps -ef | grep pptpd | grep -v grep | grep -v rc.d | awk '{print $2}' | uniq | xargs kill 1> /dev/null 2>&1
            $0 start
            ;;
      *)
            echo "Usage: $0 {start|stop|restart|restart-kill|status}"
            exit 1
    esac

    exit 0

  到此,整個基本設定己完成,接下來可以設定 Windows 的 VPN 連線,目前使用的是 XP。

  開啟 網路連線,選擇 建立一個新連線

0001
0002

  選擇 連線到我工作的地方的網路
0003

  選擇 虛擬私人網路連線
0004
0005

  測試用的 VPN Server 的 IP
0006

  還沒完,還有項目要確認。
0007

  先點 內容
0008

  選擇 安全性 並點選 進階(自訂的設定)
0009

  確認跟以下設定一樣後結束跳回到連線畫面
0010

  輸入設定在 chap-secrets 中的帳號及密碼,如無意外,應可連線上,在連線前可以在 VPN Server 上下 tail -f /var/log/messages 來監看連線登入的訊息。
0011  

  到此,第一階段算是完工。

創作者介紹
創作者 金鋼芭比 的頭像
金鋼芭比

深深的海底

金鋼芭比 發表在 痞客邦 留言(0) 人氣()