一键安装拨号vpn pptp脚本
一些特殊注意事项

(1) ppp-2.4.4-14.1.rhel5.x86_64.rpm
PPTP需要PPP的支持,一般情况下linux系统都已安装有PPP软件包,最好安装较新的ppp软件包,用Uvh这个参数来更新系统的PPP组件。也可以用yum –y instll ppp命令安装。

(2) pptpd-1.3.4-2.rhel5.x86_64.rpm (pptpd服务软件)

(3) dkms-2.0.17.5-1.noarch.rpm CentOS5x/RHEL5x(内核支持mppe)不用安装
DKMS全称是 Dynamic Kernel Module Support,它可以帮我们维护内核外的这些驱动程序,在内核版本变动之后可以自动重新生成新的模块。

(4) kernel_ppp_mppe-1.0.2-3dkms.noarch(MPPE的内核补丁),CentOS5x/RHEL5x(内核支持mppe)不用安装

(5) 在ADSL拨号环境中由于PPP包头占用8字节,MTU为1492字节,MSS为1452字节,如不能正确设置会导致网络不正常,可以通过TCPMSS模块调整MSS大小
关于iptables的:MASQUERADE
假如当前系统用的是ADSL动态拨号方式,那么每次拨号,出口ip192.168.5.3都会改变
而且改变的幅度很大,不一定是192.168.5.3到192.168.5.5范围内的地址
这个时候如果按照现在的方式来配置iptables就会出现问题了
因为每次拨号后,服务器地址都会变化,而iptables规则内的ip是不会随着自动变化的
每次地址变化后都必须手工修改一次iptables,把规则里边的固定ip改成新的ip
这样是非常不好用的
MASQUERADE就是针对这种场景而设计的,他的作用是,从服务器的网卡上,自动获取当前ip地址来做NAT
比如下边的命令:
iptables -t nat -A POSTROUTING -s 10.8.0.0/255.255.255.0 -o eth0 -j MASQUERADE
如此配置的话,不用指定SNAT的目标ip了
不管现在eth0的出口获得了怎样的动态ip,MASQUERADE会自动读取eth0现在的ip地址然后做SNAT出去
这样就实现了很好的动态SNAT地址转换

注:
对于MASQUERADE,只是计算机的负荷稍微多一点。因为对每个匹配的包,MASQUERADE都要查找可用的IP地址,而不象SNAT用的IP地址 是配置好的。当然,这也有好处,就是我们可以使用通过PPP、 PPPOE、SLIP等拨号得到的地址,这些地址可是由ISP的DHCP随机分配的。

#!/bin/bash
 
wget https://fastlnmp.googlecode.com/files/dkms-2.0.17.5-1.noarch.rpm -p /usr/local/src/
wget https://fastlnmp.googlecode.com/files/ppp-2.4.4-9.0.rhel5.i386.rpm -p /usr/local/src/
wget https://acelnmp.googlecode.com/files/pptpd-1.3.4-2.rhel5.x86_64.rpm -p /usr/local/src/
 
yum -y install make libpcap iptables gcc-c++ logrotate tar cpio perl pam tcp_wrappers
rpm -ivh dkms-2.0.17.5-1.noarch.rpm
rpm -Uvh ppp-2.4.4-9.0.rhel5.i386.rpm
rpm -ivh pptpd-1.3.4-2.rhel5.x86_64.rpm
 
#mknod /dev/ppp c 108 0
echo 1 > /proc/sys/net/ipv4/ip_forward
#echo "mknod /dev/ppp c 108 0" >> /etc/rc.local
echo "echo 1 > /proc/sys/net/ipv4/ip_forward" >> /etc/rc.local
echo "localip 192.168.88.1" >> /etc/pptpd.conf
echo "remoteip 192.168.88.50-254" >> /etc/pptpd.conf
echo "ms-dns 8.8.8.8" >> /etc/ppp/options.pptpd
echo "ms-dns 8.8.4.4" >> /etc/ppp/options.pptpd
 
pass=`openssl rand 6 -base64`
if [ "$1" != "" ]
then pass=$1
fi
 
echo "vpn pptpd ${pass} *" >> /etc/ppp/chap-secrets
 
iptables -t nat -A POSTROUTING -s 192.168.88.0/255.255.255.0 -o eth0 -j MASQUERADE
iptables -A FORWARD -p tcp --syn -s 192.168.88.0/24 -j TCPMSS --set-mss 1356
service iptables save
chkconfig iptables on
chkconfig pptpd on
 
service iptables start
service pptpd start
 
echo "××× service is installed, your ××× username is vpn, ××× password is ${pass}"