對於沒有玩過博客的人來說,搭建自己的博客對我有着致命的誘惑,於是乎:
申請LinodeVPS:Dallas機房,Plan512,CentOS6.232位,啓動後,使用"yumupdate"命令,升級到最新的6.4Final版本,英文版
申請GoDaddy域名:www.caike.me,配置域名解析
爲了驗證×××搭建方法,本地VMwarevSphere下,新建了兩個虛擬機:CentOS6.232位中文版和英文版,並升級到最新的6.4Final版本
2搭建說明及知識普及
2.1×××
虛擬專用網絡(VirtualPrivateNetwork),指的是在公用網絡上建立專用網絡的技術。從某種意義上說,×××服務器可以理解爲網絡代理,其可以幫助用戶訪問原本無法訪問的資源,如PC_1可以利用Server_1的×××訪問到"PC_1不能訪問而Server_1可以訪問的資源"。常用於異地辦公的場景下,企業工作人員在異地辦公時,可以無障礙地訪問企業內部網絡和資源。在當前特殊的網絡環境下,×××可以很好地解決當前網絡無法訪問的資源的問題。
2.2×××技術
×××當前主要有如下幾種技術:
PPTP:點對點隧道協議,是一種實現虛擬專用網絡的方法。PPTP使用用於封裝PPP數據包的TCP及GRE隧道控制通道。
L2TP:第二層隧道協議,是一種工業標準的Internet隧道協議,功能大致和PPTP協議類似。此協議基於微軟的點對點隧道協議(PPTP)和思科2層轉發協議(L2F)之上。
Open×××:以路由器或橋接配置和遠程訪問設備方式實現虛擬專用網絡(×××)創建安全的點對點或站對站連接的解決方案。它使用SSL/TLS安全加密,具有穿越網絡地址轉換(NATs)和防火牆的功能。
詳情請參考:http://www.cnblogs.com/hfww/archive/2011/09/30/2223343.html
本文介紹最簡單易用的PPTP,客戶端不需要特殊軟件即可連接到×××服務器。
3步驟
3.1準備工作
1)查看VPS是否支持,即檢查TUN/TAP/PPP功能
1 | cat /dev/ppp |
返回:Nosuchdeviceoraddresss(中文版:沒有那個設備或地址)
1 | cat /dev/net/tun |
返回:Filedescriptorinbadstate(中文版:文件描述符出於錯誤狀態)
上述兩條必須都滿足才行,如果沒有啓用,可以給VPS提供商提交開通請求,一般VPS默認開啓此功能
2)查看系統是否已經編譯MPPE
MPPE協議是微軟點對點加密術協議,其規定了如何在數據鏈路層對通信機密性保護的機制,通過對PPP鏈接中PPP分組的加密及PPP封裝處理,實現數據鏈路層的機密性保護。
pptp需要MPPE的支持,不安裝的話,就不能使用加密連接。如果已經具備了MPPE的支持,則可以跳過此步,否則,需要編譯內核或安裝dkms軟件包,該軟件能讓你在不編譯內核的基礎上,外掛一些內核的模塊。
CentOS早期版本4.x或5.x,網上的教程均使用一個命令來測試是否已經支持MPPE
1 | modprobeppp-compress-18&& echo ok |
返回"ok"表明系統已經支持MPPE,但是,linode下VPS的CentOS6.4Final的系統中,該命令總是返回"Moduleppp_mppenotfound"。而在本地VMwarevSphere下虛擬機CentOS6.4Final的系統中,該命令返回"OK"。
而網上查找到另一條檢測命令對我linode下的CentOS6.4是有效的,卻對VMwarevSphere下的CentOS6.4無效
1 | zgrepMPPE /proc/config .gz |
返回"CONFIG_PPP_MPPE=y",則可以安裝PPTP了。
注:目前不確定是不是因爲VPS架構的問題(linode下是XEN,本地的是vSphere),導致了分別只支持上述其中一條檢測命令。我們可以武斷地認爲,判斷系統支持MPPE,只要符合其中一條即可。
如果不符合,則需要安裝dkms和kernel_ppp_mppe,這兩個軟件包並沒有被包含在CentOS的默認數據源中。
1 2 3 | yum install dkms wgethttps: //acelnmp .googlecode.com /files/kernel_ppp_mppe-1 .0.2-3dkms.noarch.rpm rpm-ivhkernel_ppp_mppe-1.0.2-3dkms.noarch.rpm |
上述是軟件包的下載和安裝命令,實際過程中,系統會提示安裝wget,gcc,make,kernel-devel等支撐包,這些軟件包用戶使用yum進行安裝即可。安裝完成後,重啓下你的系統。
注:請將文件下載到/home下的某個目錄,否則最終在進行×××連接時,可能出現問題,詳情參考第5章
3)查看系統的版本
1 | uame-a |
查看系統是32位還是64位,方便後續選擇軟件包
1 | cat /etc/centos-release |
查看CentOS的系統版本
3.2安裝軟件包
1)安裝ppp,pptp和iptables
pptp需要iptables的支持,需要iptables對其ip數據包進行轉發。
1 | yum install -yppppptpiptables |
2)安裝pptpd
1 2 | wgethttp: //li .nux.ro /download/nux/misc/el6/i386/pptpd-1 .3.4-1.el6.nux.i686.rpm rpm-ivhpptpd-1.3.4-1.el6.nux.i686.rpm |
上述命令執行過程中,可能會提示安裝perl,使用yum命令進行安裝即可。
3.3配置
1)配置/etc/pptpd.conf
1 | vi /etc/pptpd .conf |
在該文件的最後幾行中,將
1 2 | #localip192.168.0.1 #remoteip192.168.0.234-238,192.168.0.245 |
中的"#"註釋符去除,修改爲
1 2 | localip192.168.0.1 remoteip192.168.0.234-238,192.168.0.245 |
注意:此處的remoteip指定的IP範圍是用來給遠程連接使用的。如果您遠程訪問×××,×××就會在remoteip範圍內分配一個ip地址給你。localip的值直接影響到後面要說的iptables轉發規則的編寫,所以建議不要隨意改動。
2)編輯/etc/ppp/options.pptpd
1 | vi /etc/ppp/options .pptpd |
找到被註釋掉的DNS配置
1 2 | #ms-dns10.0.0.1 #ms-dns10.0.0.2 |
去掉註釋符"#",修改DNS
1 2 | ms-dns8.8.8.8 ms-dns8.8.4.4 |
注意:此處的DNS修改成了Google的DNS,用戶也可以將其修改爲VPS服務提供商提供的DNS
3)設置pptp的用戶名和密碼
1 | vi /etc/ppp/chap-secrets |
會顯示如下的內容
1 2 | #SecretsforauthenticationusingCHAP #clientserversecretIPaddresses |
添加一條記錄,該記錄表示允許擁有secret的client在server上使用ipaddress,修改後如下:
1 2 3 | #SecretsforauthenticationusingCHAP #clientserversecretIPaddresses
test pptpd test * |
其中,client和secret爲用戶連接×××服務器時使用的"用戶名"和"密碼"。
4)修改內核設置,使其支持轉發
1 | vi /etc/sysctl .conf |
找到如下高亮顯示的兩行代碼
1 2 3 4 | ... net.ipv4.ip_forward=0 ... net.ipv4.tcp_syncookies=1 |
將其中一行的值進行修改,另一行進行註釋
1 2 3 4 | ... net.ipv4.ip_forward=1 ... #net.ipv4.tcp_syncookies=1 |
修改完內核設置後,需要執行以下命令使修改後的內核生效
1 | sysctl-p |
5)添加iptables轉發規則
1 | iptables-tnat-APOSTROUTING-s192.168.0.0 /24 -oeth0-jMASQUERADE |
注:該命令適用於XEN架構的VPS,而Linode採用的是XEN架構,故此適用。而如果VPS是採用OpenVZ架構,那麼可能需要使用如下的命令
1 | iptables-tnat-APOSTROUTING-s192.168.0.0 /24 -jSNAT--to- source 12.34.56.78 |
其中"12.34.56.78"是該VPS的公網的IP。
3.4重啓
1)設置pptp和iptables隨系統啓動
1 2 | chkconfigpptpdon chkconfigiptableson |
2)保存並重啓iptables服務
1 2 | /etc/init .d /iptables save /etc/init .d /iptables restart |
注:執行第二條語句時,系統可能會出現如下錯誤提示,詳情見第5章。
3)重啓pptp服務
1 | /etc/init .d /pptpd restart |
注:執行該語句,系統可能會出現錯誤提示,詳情見第5章。
4客戶端設置(WindowsXP)
右擊"網絡鄰居",選擇"屬性"
點擊"創建一個新的連接",並選擇"下一步"
選擇"連接到我的工作場所的網絡",點擊"下一步"
選擇"虛擬專用網絡連接",點擊"下一步"
"公司名"中任選一個名字輸入,點擊"下一步",該名字只是用來標識連接,最後桌面上出現的圖標以該名字命名
"主機名"中輸入×××服務器的IP地址或域名,點擊"下一步"
勾選"在我的桌面上…..",點擊"完成"
桌面上,雙擊新出現的圖標,輸入×××連接的用戶名和密碼(如上例中的"test"和"test")進行×××連接
注:連接中可能會出現錯誤,詳情見第五章
5出現的問題
5.1重啓pptp服務時,錯誤
1 | Shuttingdownpptp[FAILED] |
可以忽略該問題,由於之前pptp並沒有啓動,故使用restart進行重啓時,會出現關閉錯誤的提示,如果直接使用start就不會有錯誤提示。
5.2重啓iptables時,錯誤
1 | Iptableserror–SettingchainstopolicyACCEPT:securityrawnatmanglefilter[FAILED] |
需要通過編輯iptables的文件進行處理
1 | vi /etc/init .d /iptables |
找到並修改如下代碼
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | echo-n$”${IPTABLES}:Settingchainstopolicy$policy:“ ret=0 foriin$tables;do echo-n“$i“ case“$i”in +security) +$IPTABLES-tfilter-PINPUT$policy\ +&&$IPTABLES-tfilter-POUTPUT$policy\ +&&$IPTABLES-tfilter-PFORWARD$policy\ +||letret+=1 +;; raw) $IPTABLES-traw-PPREROUTING$policy\ &&$IPTABLES-traw-POUTPUT$policy\ ||letret+=1 ;; |
注意,帶+號的行是後添加的。
修改後重新啓動ipstables服務即可。
5.3客戶端連接×××時,提示800錯誤
800錯誤:不能建立×××連接,×××服務器可能不能到達,或者此連接的安全參數沒有正確配置。
可能有兩個原因:1)×××服務器防火牆未設置準確,2)安裝rpm安裝程序時,安裝目錄沒有權限。那麼分別對這兩種原因進行排除和分析
1)防火牆的問題,可以通過關閉×××服務器的防火牆進行驗證
1 | serviceiptablesstop |
防火牆關閉後,如果錯誤800不再出現,那麼可以認爲是防火牆的問題。防火牆的問題,可能是由於端口IP協議47(GRE)引起的,爲徹底解決該問題,可以將如下腳本保存在臨時文件iptables.sh中
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | echo 1> /proc/sys/net/ipv4/ip_forward /etc/init .d /iptables stop /sbin/iptables -AINPUT-picmp-jDROP /sbin/iptables -tnat-APOSTROUTING-s192.168.0.0 /24 -jMASQUERADE /sbin/iptables -FFORWARD /sbin/iptables -PFORWARDACCEPT /sbin/iptables -tnat-APOSTROUTING-jMASQUERADE /sbin/iptables -FFORWARD /sbin/iptables -AFORWARD-pudp-s192.168.0.0 /24 --dport47-jACCEPT /sbin/iptables -AFORWARD-ptcp-s192.168.0.0 /24 --dport1723-jACCEPT /sbin/iptables -AFORWARD-pgre-s192.168.0.0 /24 -jACCEPT /sbin/iptables -AFORWARD-mstate--stateESTABLISHED,RELATED-jACCEPT /etc/init .d /iptables save /etc/init .d /iptables start /etc/init .d /pptpd restart |
然後,修改iptables.sh的可執行權限,並運行它
1 2 3 | chmod 777iptables.sh ./iptables.sh rm-fiptables.sh |
注意:上述的"192.168.0.0"均是根據"/etc/pptpd.conf"中的localip設定的。
2)對於第二種問題,我們可以通過查看pptp的日誌(pptp的日誌隨系統日誌一起,在/var/log/messages)
1 | vi /var/log/messages |
從文本最後往前翻,發現如下語句
1 | Warning:can't open options file /root/ .ppprc:Permissiondenied |
經過驗證,發現我們按照下載pptpd時,是直接下載在/root目錄並安裝的。假設如果是在/home目錄下安裝
1 2 3 4 5 6 | mkdir /home/software cp /root/pptp-release-current .noarch.rpm /home/software/pptp-release-current .noarch.rpm cd /home/software rpm-ivhpptp-release-current.noarch.rpm--replacepkg yumreinstallpptp-release-current.noarch.rpm servicepptpdrestart |
重新連接,看是否解決。
5.4客戶端連接×××時,提示619錯誤
網上多方查找,給出的解決方案爲
1 2 | rm /dev/ppp mknod /dev/ppp c1080 |
嘗試後,仍不能解決。後通過查看日誌
1 | vi /var/log/messages |
從文本最後往前翻,發現如下語句
1 2 | Plugin/usr/lib/pptpd/pptpd-logwtmp.soisforpppdversion2.4.3,thisis2.4.5 GRE:read(fd=6,buffer=8059660,len=8196)fromPTYfailed:status=-1error=Input/outputerror,usuallycausedbyunexpectedterminationofpppd,checkoptionsyntaxandpppdlogs |
從日誌可以看出,我們按照的ppp的版本高於pptp的版本太多了,使得pptp中的組件無法支持ppp,故解決方案有兩個:1)升級pptp,2)按照2.4.3版本的ppp。降低ppp的版本不太可取,在後續的系統升級過程中,必然會帶來問題。最後從網上找到如下的pptp的軟件包
1 2 3 | wgethttp: //poptop .sourceforge.net /yum/stable/pptp-release-current .noarch.rpm rpm-ivhpptp-release-current.noarch.rpm yumupdate |
安裝該軟件包後,重啓pptp服務,客戶端連接×××服務器正常了。
6總結
在linux下進行軟件的配置,對於高手而言,可能極爲輕鬆。但對菜鳥而言,則痛苦不堪,期間會遇到各種各樣的問題。本文在三個環境中進行配置,每次均遇到了不同的問題,雖然在我們不懈地Google和Baidu之後,還是可以找到解決方案的,但其過程,不堪回首。當前網上衆多的pptp×××的配置,大多是基於CentOS4.x和5.x,其遇到的問題往往和我們不同,此篇就是爲CentOS6.4的用戶準備的,望對大家有所幫助。