什麼是PPTP
PPTP VPN 本質上是點對點隧道協議(PPTP,Point to Point Tunneling Protocol)是一種主要用於VPN的數據鏈路層網路協議。PPTP的協定規範本身並未描述加密或身份驗證的特性,PPTP使用用於封裝PPP數據包的TCP及GRE隧道控制通道。通過該協議,遠程用戶能夠通過 UNIX、LINUX、Microsoft Windows 2003、2008、Windows 7 …等系統以及其它裝有點對點協議的系統安全訪問公司網絡,並能撥號連入本地 ISP ,通過 Internet 安全鏈接到公司網絡。PPTP 可以用於在 IP 網絡上建立 PPP 會話隧道。建立 VPN 連線有多種方式,包括L2TP、IPSEC、PPTP、GRE、SSL 其中PPTP 是VPN設定中最為簡單、方便的方式之一。
更多詳細介紹可以參考以下連結
環境 :
Centos 5.8 64位元
ppp-2.4.4-2.el5.x86_64
dkms-2.0.17.5-1
kernel_ppp_mppe-1.0.2-3dkms.noarch.rpm
pptpd-1.3.4-2.rhel5.x86_64.rpm
內網 : 192.168.100.123
外網 : 114.45.128.65
設定
一、 Server 端設定
1. 檢查伺服器是否有支持
在開始設定 PPTP 之前,需要先檢查以下三項,必須要都通過後才可設定 PPTP,否則的話就要考慮設定別種 VPN。
1.1 檢查內核版本
要使用 MPPE 加密,且提供完整的PPTP支援,內核必需要在Linux 2.6.14以上。已現在Centos 5.7來說內核都會在2.6.14以上。
1 2 |
[root@localhost ~]# uname -r 2.6.18-274.el5<span style="font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif;font-size: 13px;line-height: 19px"> </span> |
1.2 檢查內核是否有安裝且支持 MPPE 模組
內核的 MPPE 模組用於支持 Microsoft Point-to-Point Encryption。Windows 自帶的 VPN 客戶端就是使用這種加密方式。 Linux Desktop 也都有 MPPE 支持。其實現在的內核版本,預設就已經安裝支持 MPPE,只是使用下面命令驗證一下,顯示 MPPE is ok 即可
1 2 |
[root@localhost ~]# modprobe ppp-compress-18 && echo MPPE is ok MPPE is ok |
1.3 檢查 TUN/TAP 設備是否正確
如果顯示 cat: /dev/net/tun: File descriptor in bad state 就表示沒問題。
1 2 |
[root@localhost ~]# cat /dev/net/tun cat: /dev/net/tun: File descriptor in bad state |
2. 安裝套件
2.1 安裝主要套件 (ppp iptables)
1 |
[root@localhost ~]# yum -y install ppp iptables iptables-devel |
2.2 安裝相關套件 (以避免安裝系統時沒安裝)
1 |
[root@localhost ~]# yum -y install wget perl gcc gcc-c++ |
2.3 安裝DKMS模組
DKMS(Dynamic Kernel Module Support)動態內核模組。
有關此模組的說明可參考「DKMS(Dynamic Kernel Module Support)」
dkms-2.2.0.3-1.noarch.rpm 下載可參考 Dell 下載點 或 本站下載點
1 2 3 4 5 6 |
[root@localhost ~]# cd /tmp [root@localhost ~]# wget http://linux.dell.com/dkms/permalink/dkms-2.2.0.3-1.noarch.rpm [root@localhost ~]# rpm -ivh dkms-2.2.0.3-1.noarch.rpm warning: dkms-2.0.17.5-1.noarch.rpm: Header V3 DSA signature: NOKEY, key ID 862acc42 Preparing... ########################################### [100%] 1:dkms ########################################### [100%] |
2.4 安裝 kernel_ppp_mppe (若在1.1測試MPPE有通過的話,此步驟可略過)
kernel_ppp_mppe-1.0.2-3dkms.noarch.rpm 下載可 參考此頁 或 本站下載點
1 2 3 4 5 6 |
[root@localhost ~]# cd /tmp [root@localhost ~]# wget http://poptop.sourceforge.net/yum/stable/packages/kernel_ppp_mppe-1.0.2-3dkms.noarch.rpm [root@localhost ~]# rpm -ivh kernel_ppp_mppe-1.0.2-3dkms.noarch.rpm warning: kernel_ppp_mppe-1.0.2-3dkms.noarch.rpm: Header V3 DSA signature: NOKEY, key ID 862acc42 Preparing... ########################################### [100%] 1:dkms ########################################### [100%] |
2.5 安裝 ppp
pptp需要有ppp的支持,雖說系統本身有ppp-2.4.4-2.el5.x86_64。為了確保有支持MPPE加密,因此手動更新一下。rpm -Uvh 參數U是表示更新的意思 下載請 參考此頁 或 本站下載點
32位元 ppp-2.4.4-14.1.rhel5.i386.rpm
1 2 3 4 5 6 |
[root@localhost ~]# cd /tmp [root@localhost ~]# wget http://poptop.sourceforge.net/yum/stable/packages/ppp-2.4.4-14.1.rhel5.i386.rpm [root@localhost ~]# rpm -Uvh ppp-2.4.4-14.1.rhel5.i386.rpm warning: ppp-2.4.4-14.1.rhel5.i386.rpm : Header V3 DSA signature: NOKEY, key ID 862acc42 Preparing... ########################################### [100%] 1:ppp ########################################### [100%] |
64位元 ppp-2.4.4-14.1.rhel5.x86_64.rpm
1 2 3 4 5 6 |
[root@localhost ~]# cd /tmp [root@localhost ~]# wget http://poptop.sourceforge.net/yum/stable/packages/ppp-2.4.4-14.1.rhel5.x86_64.rpm [root@localhost ~]# rpm -Uvh ppp-2.4.4-14.1.rhel5.x86_64.rpm warning: ppp-2.4.4-14.1.rhel5.x86_64.rpm: Header V3 DSA signature: NOKEY, key ID 862acc42 Preparing... ########################################### [100%] 1:ppp ########################################### [100%] |
2.5 安裝pptp
ppp-2.4.4-14的版本,只能安裝pptp-1.3.4的版本。因此安裝pptpd-1.3.4-2.rhel5的版本。若有版本更新可 參考此頁 或 本站下載點,請記得連同ppp也要更新。
32 位元 pptpd-1.3.4-2.rhel5.i386.rpm
1 2 3 4 5 6 |
[root@localhost ~]# cd /tmp [root@localhost ~]# wget http://poptop.sourceforge.net/yum/stable/packages/pptpd-1.3.4-2.rhel5.i386.rpm [root@localhost ~]# rpm -ivh pptpd-1.3.4-2.rhel5.i386.rpm warning: pptpd-1.3.4-2.rhel5.i386.rpm: Header V3 DSA signature: NOKEY, key ID 862acc42 Preparing... ########################################### [100%] 1:pptpd ########################################### [100%] |
64位元 pptpd-1.3.4-2.rhel5.x86_64.rpm
1 2 3 4 5 6 |
[root@localhost ~]# cd /tmp [root@localhost ~]# wget http://poptop.sourceforge.net/yum/stable/packages/pptpd-1.3.4-2.rhel5.x86_64.rpm [root@localhost ~]# rpm -ivh pptpd-1.3.4-2.rhel5.x86_64.rpm warning: pptpd-1.3.4-2.rhel5.x86_64.rpm: Header V3 DSA signature: NOKEY, key ID 862acc42 Preparing... ########################################### [100%] 1:pptpd ########################################### [100%] |
3. 修改配置文件
3.1 修改 options.pptpd
只需修改 DNS 和 debug 的部份,將其註解拿掉,其他參數部份使用預設值就可以。
若是有問題想查看LOG可查看 /var/log/messages
修改前
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
[root@localhost ~]# vim /etc/ppp/options.pptpd # Network and Routing # If pppd is acting as a server for Microsoft Windows clients, this # option allows pppd to supply one or two DNS (Domain Name Server) # addresses to the clients. The first instance of this option # specifies the primary DNS address; the second instance (if given) # specifies the secondary DNS address. #ms-dns 10.0.0.1 #ms-dns 10.0.0.2 # Logging # Enable connection debugging facilities. # (see your syslog configuration for where pppd sends to) #debug |
修改後
1 2 3 4 5 6 7 8 9 10 11 12 13 |
[root@localhost ~]# vim /etc/ppp/options.pptpd # If pppd is acting as a server for Microsoft Windows clients, this # option allows pppd to supply one or two DNS (Domain Name Server) # addresses to the clients. The first instance of this option # specifies the primary DNS address; the second instance (if given) # specifies the secondary DNS address. ms-dns 8.8.8.8 ms-dns 8.8.4.4 # Logging # Enable connection debugging facilities. # (see your syslog configuration for where pppd sends to) debug |
options.pptpd參數說明:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
name pptpd : pptpd server 的名稱。 驗證模式 refuse-pap : 拒絕使用 pap 模式來身份驗證。 refuse-chap : 拒絕使用 chap 模式來身份驗證。 refuse-mschap : 拒絕使用 mschap 模式來身份驗證。 require-mschap-v2 : 在端點進行連接時需要使用微軟的 mschap-v2 進行自身驗證。 require-mppe-128 : MPPE 模組使用 128 位加密。 DNS 設定 ppp 為 Windows 客戶端提供DNS 服務器IP 地址,第一個 ms-dns 為 DNS Master ,第二個為 DNS Slave 。由於 google 為國際化公司,因此使用 google 的 DNS ms-dns 8.8.8.8 ms-dns 8.8.4.4 proxyarp : 建立 ARP 代理。 debug : 開啟測試模式,相關訊息會記錄在 /var/logs/message 中。 lock : 鎖定客戶端 PTY 設備文件。 nobsdcomp : 禁用 BSD 壓縮模式。 novj novjccomp 禁用 Van Jacobson 壓縮模式。 nologfd : 禁止將錯誤訊息記錄到標準錯誤輸出設備(stderr) |
3.2 修改 pptp.conf
到pptp.conf最下面修改或是直接添加localip和remoteip也行。
localip和remoteip的IP網段可自行設定,但其中所包涵的不能和實際網卡的IP有所衝突。一般來說,使用pptp.conf預設的就可以了。不過在這邊會建議修改一下設定localip 設定為該台主機的內網IP,remoteip則設定為該網段沒在使用的區間。
修改前
1 2 3 4 5 6 7 |
[root@localhost ~]# vim /etc/pptpd.conf # (Recommended) #localip 192.168.0.1 #remoteip 192.168.0.234-238,192.168.0.245 # or #localip 192.168.0.234-238,192.168.0.245 #remoteip 192.168.1.234-238,192.168.1.245 |
修改後
1 2 3 4 5 6 7 |
[root@localhost ~]# vim /etc/pptpd.conf # (Recommended) localip 192.168.100.123 remoteip 192.168.100.234-238 # or #localip 192.168.0.234-238,192.168.0.245 #remoteip 192.168.1.234-238,192.168.1.245 |
3.3 修改 chap-secrets
chap-secrets 主要是用來設定 PPTP 連線的帳密管理
client : 登入PPTP的使用者帳號
server : 指的是PPTP服務器名稱,這邊請輸入 pptpd 別做修改。
secret : 登入PPTP的使用者密碼
IP addresses : 設定當客戶端連入時所配發的IP,「*」則表示由PPTP自行分配IP(而自行分配IP的範圍為pptp.conf內remoteip所設定的範圍)。
1 2 3 4 |
[root@localhost ~]# vim /etc/ppp/chap-secrets # Secrets for authentication using CHAP # client server secret IP addresses test pptpd 123456 * |
4. 開啟NAT服務
開啟NAT服務主要是要讓當客戶端連入PPTP後,還可訪問到外網。(若連入PPTP後不想訪問外網的話可略過此步驟)
修改前
1 2 3 |
[root@localhost ~]# vim /etc/sysctl.conf # Controls IP packet forwarding net.ipv4.ip_forward = 0 |
修改後
1 2 3 |
[root@localhost ~]# vim /etc/sysctl.conf # Controls IP packet forwarding net.ipv4.ip_forward = 1 |
4.2 立即生效
基本上修改內核設定需重開機才會生效,但有時無法當下馬上重開機的話可下此指令。
1 |
[root@localhost ~]# sysctl -p |
5. 防火牆設定
5.1 設定NAT
如果在 [4. 開啟NAT服務] 沒開啟NAT服務的話,防火牆的此步驟可略過
1 2 3 |
[root@localhost ~]# iptables -t nat -A POSTROUTING -s 192.168.100.0/24 -o eth0 -j SNAT --to-source 114.45.128.65 [root@localhost ~]# /etc/init.d/iptables save #保存規則 [root@localhost ~]# /etc/init.d/iptables restart #重啟iptables |
參數說明 :
192.168.100.0/24 請依pptp.conf內的localip網段來設定
-o eth0 在這邊如果外網網卡不是eth0的話請修改為對應的外網網卡
-j SNAT –to-source 114.45.128.65 在這邊如果有固定的外網ip請直接設外網 ip,若是沒有再設為 -j MASQUERADE 。因設定為MASQUERADE效率上會比直接設ip來的差一點。
5.2 其他防火牆設定
請在以下 防火牆規則 中,新增紅色或是自行缺少的規則。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
[root@localhost ~]# vim /etc/sysconfig/iptables # Completed on Wed May 2 22:21:53 2012 # Generated by iptables-save v1.3.5 on Wed May 2 22:21:53 2012 *nat :PREROUTING ACCEPT [1430:210853] :POSTROUTING ACCEPT [26:1852] :OUTPUT ACCEPT [22:1612] -A POSTROUTING -s 192.168.100.0/255.255.255.0 -o eth0 -j SNAT --to-source 114.45.128.65 COMMIT # Generated by iptables-save v1.3.5 on Wed May 2 22:21:53 2012 *filter :INPUT ACCEPT [0:0] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [2148:484166] :RH-Firewall-1-INPUT - [0:0 -A INPUT -j RH-Firewall-1-INPUT -A FORWARD -o eth0 -j ACCEPT -A FORWARD -o ppp+ -j ACCEPT -A FORWARD -j RH-Firewall-1-INPUT -A RH-Firewall-1-INPUT -i lo -j ACCEPT -A RH-Firewall-1-INPUT -p icmp -m icmp --icmp-type any -j ACCEPT -A RH-Firewall-1-INPUT -p gre -j ACCEPT -A RH-Firewall-1-INPUT -p esp -j ACCEPT -A RH-Firewall-1-INPUT -p ah -j ACCEPT -A RH-Firewall-1-INPUT -d 224.0.0.251 -p udp -m udp --dport 5353 -j ACCEPT -A RH-Firewall-1-INPUT -p udp -m udp --dport 53 -j ACCEPT -A RH-Firewall-1-INPUT -p udp -m udp --dport 631 -j ACCEPT -A RH-Firewall-1-INPUT -p tcp -m tcp --dport 631 -j ACCEPT -A RH-Firewall-1-INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT -A RH-Firewall-1-INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT -A RH-Firewall-1-INPUT -p tcp -m state --state NEW -m tcp --dport 1723 -j ACCEPT -A RH-Firewall-1-INPUT -p tcp -m state --state NEW -m tcp --dport 47 -j ACCEPT -A RH-Firewall-1-INPUT -j REJECT --reject-with icmp-host-prohibited COMMIT |
規則說明 :
-A FORWARD -o eth0 -j ACCEPT 和 -A FORWARD -o ppp+ -j ACCEPT : 允許封包從eth0和ppp+通過。
-A RH-Firewall-1-INPUT -p gre -j ACCEPT : 允許GRE(Generic Route Encapsulation)協議,PPTP使用GRE協議封裝PPP數據包,然後封裝成IP
-A RH-Firewall-1-INPUT -p udp -m udp –dport 53 -j ACCEPT : 53 port 為dns 解析使用,若沒開通此port 有可能會造成無法開啟網頁
-A RH-Firewall-1-INPUT -p tcp -m state –state NEW -m tcp –dport 1723 -j ACCEPT 和 47 : 允許 PPTP 服務1723 port通過。允許 gre服務 47 port通過。
5.3 重啟服務 和設定開機啟動
1 2 3 4 5 |
[root@localhost ~]# /etc/init.d/iptables restart #重啟iptables [root@localhost ~]# /etc/init.d/pptpd restart-kill #關掉PPTP [root@localhost ~]# /etc/init.d/pptpd start #啟動PPTP [root@localhost ~]# chkconfig pptpd on #開機啟動PPTP [root@localhost ~]# chkconfig iptables on #開機啟動iptables |
二、 Client 端設定
在Client 端設定,可分為是否勾選使用「遠端網路的預設閘道」
「遠端網路的預設閘道」勾選最大的差別在於,如果勾選的話在連上VPN後網路是走 VPN Server的網路,沒勾選的話在連上VPN後網路走自己本地端的網路。
優缺點比較
勾選
優點 : 不用添加靜態路由,就可以訪問PPTP VPN 內網的區域網路
缺點 : PPTP VPN 撥號後,若沒設定NAT服務的話,會無法訪問到外網。因網路的部份是使用 PPTP VPN Server的,所以上網的速度會比較慢一些。
不勾選
優點 : 不用改變本地端的預設閘道,PPTP VPN 撥號後本地端上網不受影響,因網路是走本地端的網路。只會當要連接遠端內網的區域網路時才會走VPN 線路。
缺點 : 有時在訪問遠端內網的區域網路時會有問題,需要手動添加靜態路由
以下範例皆採用windows 7 為設定範例
勾選「遠端網路的預設閘道」
由於在設定VPN撥號時,預設就是勾選的情況,因此不須要特地在去勾選。
1. 開啟網路和共用中心
路徑為: 控制台\所有控制台項目\網路和共用中心
開啟網路和共用中心後,請點選「設定新的連線或網路」
2. 點選「連線到工作地點」設定VPN連線
3. 選「使用我的網繼網路連線(VPN)」
4. 設定VPN連線IP
網際網路位址 : 請輸入VPN Server 的IP。
目的地名稱 : 請輸入好記憶的名稱就行了。
在下方的「不要立即連線;先設定好,我稍後在連線」請打勾
5. 輸入VPN連線帳號密碼
請把記住這個密碼打勾,而網域的部份可不用輸入
6. 連線設定完成
請先不要連線,點選關閉。因為後面還有要設定的
7. VPN細部設定
反回「網路和共用中心」,然後點選「變更介面卡設定」
8. 點選「VPN連線右鍵」→「內容」
9. 點選「安全性」
把VPN類型選擇成「點對點通到通訊協定(PPTP)」。
10. 連線
11. 測試
11.1 開啟命令提示字元,下指令ipconfig
會在VPN連線這邊看到一組由SERVER配出來的IP
11.2 PING 內外網是否有通
11.3 其他測試
開啟網頁看是否正常,若有安裝MSN、即時通或QQ的話都可開啟測試。
不勾選「遠端網路的預設閘道」
由於在設定VPN撥號時,預設就是勾選的情況,因此要把勾選取消。
設定方式和勾選「遠端網路的預設閘道」的都一樣,只有以下幾個地方要修改設定。
1. 「控制台\網路和網際網路\網路連線」→ 「VPN連線 右鍵」→ 「內容」
2. 「網路功能」 → 「TCP/IPv4」 → 「內容」
3. 點選 進階
4. 將「使用遠端網路的預設閘道」的勾取消。後按下確定
就可以連線VPN了。
如此一來 PPTP VPN 就設定完成了
三、 常見錯誤及問題
PPTP 常見的錯誤,由於網路上也有不少說明了。所以在這邊就挑幾個比較常見的來說明一下。
錯誤 619: 端口已斷開連接
無法建立VPN連線,出線619錯誤有兩種可能
1. TCP 1723埠沒開啟,請檢查自己的設備的被防火牆是否有阻檔或沒開通1723埠。
2. 此問題大多是因為使用者用來連接到PPTP VPN Server的設備 (如:中華電信小烏龜、公司設備的路由器或防火牆) NAT-T功能關閉或對VPN支持性不好,主要是對GRE 及PPTP 協議的NAT-T 不支持,或是ISP業者禁用了GRE協定,造成VPN無法連接。可以先開啟路由器或是小烏龜等的NAT-T服務,或打去詢問ISP業者是否有禁用此協定。若是ISP業者無禁用此協定,可考慮更換設備試試。
錯誤691: 使用者帳號密碼錯誤
1. 請檢查PPTP VPN連線的帳密是否有錯。或看PPTP Server所設定的帳號密碼是否有誤。
2. 同一帳號在同一時間內,只能一個人使用,查看是否有重覆。
3. IP分享器和VPN Server 連線衝突,建議不經分享器。
錯誤733: 不支援當前的網路協定
1. VPN 通道只支援TCP/IP協定,不支持其他協定(如 IPX/SPX)
2. 客戶端連入到VPN 伺服器後,無法獲取IP。可查看VPN Server 的IP設定是否有錯。
參考資料 :
評論
此文章尚無評論。