Linux 下PPTP ××× 服务器搭建,系统为RHEL 5.3,内核2.6.18,已支持mppe,mppc(低版本内核可能要重新编译加入支持),并且系统已安装好ppp软包

# rpm -qa | grep ppp 
ppp-2.4.4-2.el5 
rp-pppoe-3.5-32.1

 

下载最新的pptpd源码包 http://www.poptop.org/ 这里下的版本是1.3.4,解压安装

# tar -zxf pptpd-1.3.4.tar.gz 
# cd pptpd-1.3.4 
# ./configure –prefix=/usr/local/pptpd 
# make && make install

将源码包中samples目录下的几个示例配置文件放到/usr/local/pptpd/etc下

 

# mkdir /usr/local/pptpd/etc && cp samples/* /usr/local/pptpd/etc

可以看下有哪些配置文件

# ls -1 /usr/local/pptpd/etc/ 
chap-secrets    –>安全选项,这个其实用不到,只是告诉你在ppp中的用户\密码格式 
options.pptpd    –>配置选项,如***客户端的dns等 
pptpd.conf        –>这个是pptpd的主要配置文件

基本的pptp-***,要改动的配置并不多,并且一部分选项可以在pptpd程序运行时指定,pptpd默认的配置文件是/etc/pptpd.conf,实际运用中,应尽量避免程序运行时指定参数,可做个软链接

# ln -s /usr/local/pptpd/etc/pptpd.conf /etc/pptpd.conf

将pptpd.conf中options 值改成/usr/local/pptpd/etc/options.pptpd,sed去掉空行和注释,配置文件如下:

# sed -e ‘/^#/d;/^$/d’ /usr/local/pptpd/etc/pptpd.conf 
option /usr/local/pptpd/etc/options.pptpd      –>选项配置文件 
debug     –>debug,运行与错误信息写入系统日志 
logwtmp  –>将*** client登陆写入wtmp信息 
localip 192.168.66.1   –>本机×××服务IP,可任意指定 
remoteip 192.168.66.2-3   –>可分配给*** client的IP 

强烈建议打开debug选项,对排错很有帮助,另外为避免冲突,localip、remoteip最好不要与服务器当前内网或经常拨入的客户端内网地址在同一网段

在options.pptpd中加入ms-dns就可以了,

# sed -e ‘/^#/d;/^$/d’ /usr/local/pptpd/etc/options.pptpd 
name pptpd    –> 服务名,可指定,但要与/etc/ppp/chap-secrets文件中的server列一致 
refuse-pap 
refuse-chap 
refuse-mschap 
require-mschap-v2 
require-mppe-128 
proxyarp 
debug 
lock 
nobsdcomp 
novj 
novjccomp 
nologfd 
ms-dns 192.168.61.2   –> 首选DNS 
ms-dns 61.139.2.69     –> 辅DNS

配置已经完成,最后添加***用户,vi /etc/ppp/chap-secrets 添加一行,第一个字段是用户名,第二个是服务名,与options.pptpd中的name项一致,第三个是密码,第四个是分配给该拨入用户的IP,"*"或者空间表示任意从remoteip列表中按顺序选取一个

***user01         pptpd             123456         *

启动pptpd,/usr/local/pptpd/sbin/pptpd

检查有无相关进程,ps aux | grep pptpd,检查1723端口是否在监听 netstat -antl | grep 1723

这里有点问题,日志文件显示找不到一个库文件/usr/lib/pptpd/pptpd-logwtmp.so,

Dec 14 07:19:27 localhost pppd[20519]: /usr/lib/pptpd/pptpd-logwtmp.so: cannot open shared object file: No such file or directory 
Dec 14 07:19:27 localhost pppd[20519]: Couldn’t load plugin /usr/lib/pptpd/pptpd-logwtmp.so 
Dec 14 07:19:27 localhost pptpd[20518]: GRE: read(fd=6,buffer=8058f40,len=8196) from PTY failed: status = -1 error = Input/output error, usually caused by u 
nexpected termination of pppd, check option syntax and pppd logs

编译时应该已经生成了这个文件,在/usr/local/pptpd/lib/下面,做个软链接到/usr/lib/pptpd/pptpd-logwtmp.so

ln -s /usr/local/pptpd/lib/pptpd-logwtmp.so /usr/lib/pptpd/pptpd-logwtmp.so

再运行,还是不行,日志显示版本不对

Dec 14 07:21:17 localhost pppd[20537]: Plugin /usr/lib/pptpd/pptpd-logwtmp.so is for pppd version 2.4.3, this is 2.4.4 
Dec 14 07:21:17 localhost pptpd[20536]: GRE: read(fd=6,buffer=8058f40,len=8196) from PTY failed: status = -1 error = Input/output error, usually caused by u 
nexpected termination of pppd, check option syntax and pppd logs 
Dec 14 07:21:17 localhost pptpd[20536]: CTRL: PTY read or GRE write failed (pty,gre)=(6,7)

修改下源文件版本信息,重新编译生成pptpd-logwtmp.so并替换现有的,切换到源码包目录,pptpd-logwtmp.so源文件在源码包的plugins目录下,将patchlevel.h中的#define VERSION         "2.4.3"  改成 #define VERSION         "2.4.4"

# cd plugins 
# sed -e ’s/2\.4\.3/2\.4\.4/’ patchlevel.h 
# make

make后,目录下会生成pptpd-logwtmp.so,用这个文件替换/usr/local/pptpd/lib/pptpd-logwtmp.so

再运行/usr/local/pptpd/sbin/pptpd,成功

开启内核包转发功能及配置iptables,以支持***客户端通过服务器上网、访问服务器内网等

echo 1 > /proc/sys/net/ipv4/ip_forward

iptables -t filter -P FORWARD -j DROP 
iptables -t filter -A -s 192.168.66.0/24 -j ACCEPT 
iptables -t nat -A POSTROUTING -o eth0 -s 192.168.66.0/24 -j MASQUERADE 
iptables -t nat -A POSTROUTING -o eth1 -s 192.168.66.0/24 -j MASQUERADE

当然,结合iptables还可以让*** 客户端提供web、ftp服务,看你的考虑了.附上一段***客户端提供ftp服务的iptables配置,当然还要载入iptables用于ftp连接跟踪、nat后的ftp服务的模块,ip_conntrack_ftp、ip_nat_ftp, 不然自己配置很是麻烦,client_ip 为提供服务的***客户端ip

iptables -t nat -A PREROUTING -p tcp -m state –state NEW –dport 21 -j DNAT –to client_ip 
iptables -t filter -A FORWARD -p tcp -m state –state NEW -d client_ip –dport 21 -j ACCEPT 
iptables -t filter -A FORWARD -m state –state ESTABLISHED,RELATED -j ACCEPT

-----------------iptables ------------

iptables -A POSTROUTING -t nat -s 192.168.1.0/24 -j SNAT --to 119.128.75.195