在访问国外网站的时候,速度不是那么理想,可以在自己的vps上建立vpn服务器,方便自己使用,下面是配置pptpd一点经验
vps 需要是xen的,需要内核支持mppe。本次安装环境是 centos5.5 32bit vps
0.PPTP协议介绍
PPTP(Point to Point Tunneling Protocol),即点对点隧道协议。该协议是在PPP协议的基础上开发的一种新的增强型安全协议,支持多协议虚拟专用网(VPN),可以通过密码验证协议(PAP)、可扩展认证协议(EAP)等方法增强安全性。可以使远程用户通过拨入ISP、通过直接连接Internet或其他网络安全地访问企业网。
默认端口号:1723
点对点隧道协议(PPTP)是一种支持多协议虚拟专用网络的网络技术,它工作在第二层。通过该协议,远程用户能够通过 Microsoft Windows NT工作站、Windows xp 、 Windows 2000 和windows2003、windows7操作系统以及其它装有点对点协议的系统安全访问公司网络,并能拨号连入本地ISP,通过 Internet 安全链接到公司网络。
PPTP协议假定在PPTP客户机和PPTP服务器之间有连通并且可用的IP网络。因此如果PPTP客户机本
身已经是IP网络的组成部分,那么即可通过该IP网络与PPTP服务器取得连接;而如果PPTP客户机尚未连入网络,譬如在Internet拨号用户的情形下,PPTP客户机必须首先拨打NAS以建立IP连接。这里所说的PPTP客户机也就是使用PPTP协议的VPN客户机,而PPTP服务器亦即使用PPTP协议的VPN服务器。
PPTP 只能通过 PAC 和 PNS 来实施,其它系统没有必要知道 PPTP。拨号网络可与 PAC 相连接而无需知道 PPTP。标准的 PPP 客户机软件可继续在隧道 PPP 链接上操作。
PPTP 使用 GRE 的扩展版本来传输用户 PPP 包。这些增强允许为在 PAC 和 PNS 之间传输用户数据的隧道提供低层拥塞控制和流控制。这种机制允许高效使用隧道可用带宽并且避免了不必要的重发和缓冲区溢出。PPTP 没有规定特定的算法用于底层控制,但它确实定义了一些通信参数来支持这样的算法工作。
PPTP控制连接数据包包括一个IP报头,一个TCP报头和PPTP控制信息。
在使用VPN的时候可以使用PPTP协议,也可以使用L2TP协议,具体设置方法如下:比如在Windows XP中,首先,在“网络连接”窗口中右键单击某个VPN连接,选择“属性”。接着,在打开的属性窗口中选择“网络”选项卡。然后在“VPN类型”中选择“PPTPVPN”,单击“确定”按钮即可。
1. 部署pptp vpn服务器端
1.1. 检查内核是否支持mppe
在shell中,执行如下命令:
[root@local]# cd /boot
[root@local]# grep mppe -i config-`uname -r`
CONFIG_PPP_MPPE=m
[root@local]# modprobe ppp-compress-18 && echo ok
ok
通过上面命令可以看出,内核已经支持mppe
1.2. 安装必要软件
使用yum安装pptpd 软件:
[root@local]# cd /tmp
[root@local]# wget http://acelnmp.googlecode.com/files/pptpd-1.3.4-1.rhel5.1.i386.rpm
[root@local]# yum localinstall pptpd-1.3.4-1.rhel5.1.i386.rpm --nogpg -y
1.3. 设置 pptpd 软件
编辑/etc/pptpd.conf配置文件,内容如下:
[root@local]# cat /etc/pptpd.conf
option /etc/ppp/options.pptpd
logwtmp
localip 192.168.8.1
remoteip 192.168.8.2-40
编辑/etc/ppp/options.pptpd配置文件,内容如下:
[root@local]# cat /etc/ppp/options.pptpd
name pptpd
refuse-pap
refuse-chap
refuse-mschap
require-mschap-v2
require-mppe-128
proxyarp
lock
nobsdcomp
novj
novjccomp
nologfd
ms-dns 8.8.8.8
ms-dns 8.8.4.4
最后2行设置DNS为Google的DNS.
添加VPN用户和密码(/etc/ppp/chap-secrets),按照下面格式.密码后的*号保留,内容如下:
[root@local]# cat /etc/ppp/chap-secrets
test1 pptpd test1 *
test2 pptpd test2 *
test3 pptpd test3 *
设置ip转发
编辑/etc/sysctl.conf文件,找到net.ipv4.ip_forward = 0这一行,修改为 net.ipv4.ip_forward = 1
运行下命令让配置生效
sysctl -p
1.4. 启动pptpd服务和打开nat
启动pptpd服务
/etc/init.d/pptpd restart
最后开启iptables地址转换
iptables -t nat -A POSTROUTING -j MASQUERADE
设置iptables和pptpd开机自动启动
chkconfig pptpd on
chkconfig iptables on
注意:如果有防火墙的话要开放入下端口
iptables -A INPUT -p tcp --dport 1723 -j ACCEPT
iptables -A INPUT -p gre -j ACCEPT
至此服务端已经设置完成! 下面看看客户端如何配置了
2. pptpd 服务器端诊断
如果遇到问题,可以通过tcpdump来确认问题所在
tcpdump -i eth0 port 1723 or proto 47 -n
特殊情况注意:开启pptp vpn转发,vpn服务器和内网路由器
modprobe ip_conntrack_pptp
modprobe ip_nat_pptp
Gre 协议traceroute
hping3 -0 vpn_server_ip -H 47 -d 10 --traceroute
3. 可能碰到的错误说明
在拨号时候,出现hostname不能反解析问题
Dec 16 02:31:32 my_kvm_test pppd[1722]: rc_get_ipaddr: couldn't resolve hostname: my_kvm_test
Dec 16 02:31:32 my_kvm_test pppd[1722]: rc_own_ipaddress: couldn't get own IP address
Dec 16 02:31:32 my_kvm_test pppd[1722]: Peer user failed CHAP authentication
Dec 16 02:31:32 my_kvm_test pppd[1722]: Connection terminated.
Dec 16 02:31:32 my_kvm_test pppd[1722]: Exit.
只需要在dns中或者 /etc/hosts中 加入主机名和主机ip的映射关系,直接在 /etc/hosts中加入一行
127.0.0.1 my_kvm_test
在验证测试的时候,虽然结果返回是正确的,但是会出现 radclient: received response to request we did not send 错误,例子如下:
#/usr/bin/radtest test testing localhost 0 testing123
Sending Access-Request of id 37 to 127.0.0.1 port 1812
User-Name = "test"
User-Password = "testing"
NAS-IP-Address = 255.255.255.255
NAS-Port = 0
rad_recv: Access-Accept packet from host 192.168.0.10:1812, id=37, length=20
radclient: received response to request we did not send.
出现此问题的原因是发送请求的ip 和 回应请求的ip 不一样,本例中是 请求ip:127.0.0.1 回应ip:192.168.0.10:1812