对于没有玩过博客的人来说,搭建自己的博客对我有着致命的诱惑,于是乎:
申请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)和防火墙的功能。
详情请参考:
本文介绍最简单易用的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的用户准备的,望对大家有所帮助。