很久以前在公司被上司要求,使用 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。
開啟 網路連線,選擇 建立一個新連線
選擇 連線到我工作的地方的網路
選擇 虛擬私人網路連線
測試用的 VPN Server 的 IP
還沒完,還有項目要確認。
先點 內容
選擇 安全性 並點選 進階(自訂的設定)
確認跟以下設定一樣後結束跳回到連線畫面
輸入設定在 chap-secrets 中的帳號及密碼,如無意外,應可連線上,在連線前可以在 VPN Server 上下 tail -f /var/log/messages 來監看連線登入的訊息。
到此,第一階段算是完工。
留言列表