安裝
sudo apt-get install pptpd ppp
.準備工作
strings `which pppd` | grep -i mppe | wc --lines
若結果為 0 則表示 PPP 不支援 MPPE,若是 30 或更大的數字則表示支援
modprobe ppp-compress-18
載入 mppc 壓縮模組
lsmod | grep mppe
檢查是否有載入 mppe 模組,應該是 ppp_mppe_mppc 模組
.設定檔
(1)Modules
/etc/modules.conf
alias tty-ldisc-3 ppp_async
alias tty-ldisc-14 ppp_synctty
alias ppp-compress-18 ppp_mppe_mppc
alias ppp-compress-21 bsd_comp
alias ppp-compress-24 ppp_deflate
alias ppp-compress-26 ppp_deflate
alias net-pf-47 ip_gre
(2)PPTP
/etc/pptpd.conf
debug:記錄 debugging 訊息
logwtmp:用 wtmp 來記錄 VPN Client 端的連線及中斷連線
localip:VPN Server 端的 IP
remoteip:配給 VPN Client 端的 IP 範圍
程式碼:
ppp /usr/sbin/pppd
option /etc/ppp/pptpd-options
debug
logwtmp
#listen <IP>
localip 192.168.1.12
remoteip 192.168.1.51-60
(3)PPP
/etc/ppp/pptpd-options
require-mschap-v2:微軟 MSCHAPv2 認證 (Microsoft Challenge Handshake Authentication Protocol, Version 2)
require-mppe-128:微軟 MPPE 128-bit 加密 (Microsoft Point-to-Point Encryption)
ms-dns:配給 VPN Client 的 DNS Server 設定
ms-wins:配給 VPN Client 的 WINS Server 設定
nodefaultroute:不要取代預設的系統路由
dump:在 log 裡會秀出使用的設定值
logfile:指定記錄檔檔名
程式碼:
name pptpd
refuse-pap
refuse-chap
refuse-mschap
require-mschap-v2
require-mppe-128
mppe required,stateless,no56,no40
ms-dns 168.95.1.1
proxyarp
nodefaultroute
debug
dump
lock
nobsdcomp
logfile /var/log/pptpd.log
/etc/ppp/chap-secrets
client:VPN Client 的帳號
server:VPN Server 的名稱,用「*」 表示自動偵測
secret:VPN Client 的密碼
IP addresses:VPN Client 端允許的 IP,用「*」表示不做限制
/proc/sys/net/ipv4/ip_forward
將 /proc/sys/net/ipv4/ip_forward 設為 1,透過 VPN 連上來的遠端電腦才能和區網的電腦互相 ping 得到
sudo -s -H
echo 1 > /proc/sys/net/ipv4/ip_forward
[注意] 在 Ubuntu 一定要用 sudo -s -H 切換成 root 身份後,再將 ip_forward 的內容改為 1,若直接用 sudo echo 來做的話會失敗
.注意事項
一般要做到 MPPE 的話,需要重新編譯 kernel,將 MPPE 的模組加入;但是 Ubuntu 5.10 的核心,預設已經做了這個動作,所以不需要重新編譯核心;另外如果是 Red Hat 類的 Linux,可以試著下載 kernel-mppe 的 RPM 套件回來安裝,可免去重新編譯核心的麻煩
.防火牆的設定
這裡指的是 Linux 的 iptables 所建構成的防火牆,假設 VPN Server 是在區網內的另一部機器,我們必須在 NAT 的機器上做如下的設定 (不確定)
iptables -t nat -A PREROUTING -i <WAN_IF> -p tcp --dport 1723 -j DNAT --to <VPN_SERVER_IP>
iptables -A FORWARD -i <WAN_IF> -o <LAN_IF> -p tcp -d <VPN_SERVER_IP> --dport 1723 -j ACCEPT
iptables -A FORWARD -i <WAN_IF> -o <LAN_IF> -p 47 -d <VPN_SERVER_IP> -j ACCEPT
iptables -A FORWARD -i <WAN_IF> -o <LAN_IF> -p gre -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
# VPN Pass Through Test
${IPTABLES} -A INPUT -p tcp --dport 47 -j ACCEPT
${IPTABLES} -A FORWARD -p 47 -s 0/0 -j ACCEPT
${IPTABLES} -t nat -A PREROUTING -p 47 -i ${OUT_DEV} -j DNAT --to 192.168.1.12
${IPTABLES} -t nat -A PREROUTING -i ${OUT_DEV} -p TCP --dport 1723 -j DNAT --to 192.168.1.12
${IPTABLES} -A FORWARD -p TCP -d 192.168.1.12 --dport 1723 -i ${OUT_DEV} -o ${INT_DEV} -j ACCEPT
.參考資料
資安論壇 :: 觀看文章 - 教您如何30分鐘打造基於Linux的VPN伺服器
http://forum.icst.org.tw/phpBB2/viewtopic.php?t=7847
鳥哥的 Linux 新手討論區 :: 觀看文章 - 請問 : iptables 如何讓 PPTP 通過呢 ?
http://phorum.vbird.org/viewtopic.php?p ... a4e3df4fb7
PPTP Client
http://pptpclient.sourceforge.net/howto ... ppe_kernel
[Ubuntu 5.10] 使用 PPTP 和 PPP 架設 VPN Server
誰在線上
正在瀏覽這個版面的使用者:沒有註冊會員 和 1 位訪客