PPTP(点到点隧道协议)是一种用于让远程用户拨号连接到本地的ISP,通过因特网安全远程访问公司资源的新型技术。它能将PPP(点到点协议)帧封装成IP数据包,以便能够在基于IP的互联网上进行传输。PPTP使用TCP(传输控制协议)连接的创建,维护,与终止隧道,并使用GRE(通用路由封装)将PPP帧封装成隧道数据。被封装后的PPP帧的有效载荷可以被加密或者压缩或者同时被加密与压缩。我们常见的PPTP都是在路由器上配置的,不过linux下也可以实现PPTP服务器的功能,下面就来看下linux下的PPTP ×××配置过程吧。
在配置PPTP之前,首先安装以下软件包,PPTP默认不是自带的(软件包见附件)。
ppp-2.4.4-2.e15.rpm
pptpd-1.3.4-1.rhel5.1.i386.rpm
安装之前检查系统兼容性,因为RHEL 5.7的内核已经集成了MPPE和高版本的PPP,因此可以跳过安装配置MPPE和PPP的过程直接安装PPTP。
1)检查内核MPPE补丁
用以下命令检查内核是否支持MPPE补丁:
# modprobe ppp-compress-18 && echo ‘ok!!!’
若结果显示“ok!!!”则表示支持。
2)检查PPP是否支持MPPE
# strings '/usr/sbin/pppd'|grep -i mppe|wc -l
若结果显示0则表示不支持,而30或更大的数字就表示支持。
3)安装pptpd和ppp
# rpm –ivh ppp-2.4.4-2.e15.rpm
# rpm -ivh pptpd-1.3.4-1.rhel5.1.i386.rpm
配置PPTP ××× Server,拓扑如下图所示

编辑 /etc/pptpd.conf文件,配置以下常用选项:
option /etc/ppp/options.pptpd    ----pptp加密选项文件路径
stimeout 120 ----开始PPTP控制连接的超时时间,以秒计;
debug ----把所有debug信息记入系统日志/var/log/messages;
localip ----服务器×××虚拟接口将分配的IP地址,可设置为与×××服务器内网地址相同网段的IP,也可以设置为另一网段的IP;
remoteip ----客户端×××连接成功后将分配的IP地址段,同样可设置为与×××服务器内网地址相同网段的IP地址段,也可以设置为另一网段的IP地址段;
注意关闭logwmpt功能,否则会与ppp协议冲突引起×××拨号失败!在RHEL4中没有问题,而在RHEL5中必须关闭!

设置地址池为192.168.100.10——192.168.100.20,localip为本机IP,remoteip为地址池,不建议设为同一网段

设置完成后保存,进入/etc/ppp/options.pptpd,查看加密和认证类型

默认拒绝使用pap、chap和mschap认证,而采用mschap-v2进行认证,加密采用128位的mppe方式加密。
最后来查看pptpd口令文件,所谓口令就是×××账号,它存储于/etc/ppp/chap-secrets文件中

hujw //用户账号,需要用双引号包含
* //代表自动识别当前服务器主机名,也可以手动配置
123456 //用户密码,需要用双引号包含
* //代表自动分配可用的IP地址,可根据需要指定IP地址
除了上面直接编辑配置文件的方式,还可以使用***user命令来进行配置:
# ***user add hujw 123456 //添加一个hujw用户
# ***user del hujw //删除hujw用户。

****************************************************
对于开启了iptables过滤的主机,需要开放×××服务的端口
# iptables -A RH-Firewall-1-INPUT -p gre -j ACCEPT
# iptables -A RH-Firewall-1-INPUT -p tcp -m state --state NEW -m tcp --dport 47 -j ACCEPT
# iptables -A RH-Firewall-1-INPUT –p tcp –m state –state NEW –m tcp –dport 1723 –j ACCEPT

****************************************************
pptpd配置完成,现在开启pptpd服务
service pptpd start
开启路由功能
echo 1 > /proc/sys/net/ipv4/ip_forward
配置一条通往外网的默认路由
router add –net 0.0.0.0 netmask 0.0.0.0 gw 198.2.3.1
现在来到windows主机上测试,首先保证网络是通的,能够ping通GW的外网接口。


创建×××拨号连接

   
输入GW外网IP地址

输入刚才创建的用户名和密码
×××拨号成功后,可以看到采用的是PPTP协议,身份验证方式为MSCHAP-V2,加密方式为MPPE 128。并且分配了地址池第一个IP给主机192.168.100.10 。

这时再来查看linux网关,发现多了一个ppp0的接口,即×××虚拟接口

查看网关路由表,可以发现从×××地址池里获取的地址自动加了一条默认路由,这样×××用户就可以自由访问内网的IP了。

测试与内网服务器连通情况,发现是没有问题的。

在×××客户端成功拨号以后,本地网络的默认网关会变为×××服务器的×××内网地址,这样会导致客户端只能够连接×××服务器及其所在的内网,而不能访问互联网;要解决这个问题需要配置共享上网策略,使×××客户端在成功拨号以后,既能够访问对端内网地址,又能够访问互联网。
iptables -t nat -A POSTROUTING -s 192.168.100.0/24 -o eth1 -j SNAT --to-source 198.2.3.2

至此Linux下PPTP ×××服务器配置就完成了!