花好一段时间在CentOS上搭建pptp的VPN,总算搞定了,期间得到@neolee的不少帮忙,@YangBalu童鞋也帮忙做了一些测试,这里把我搭建的脚本做一个小结。
说明一下,我这个VPS是使用openvz搭建的,使用其它方式搭建的请自行查找解决办法。
[bash]
#!/bin/bash
yum install -y ppp
wget http://acelnmp.googlecode.com/files/pptpd-1.3.4-1.rhel5.1.i386.rpm
rpm -ivh pptpd-1.3.4-1.rhel5.1.i386.rpm
mknod /dev/ppp c 108 0
echo “mknod /dev/ppp c 108 0” >> /etc/rc.local
echo “localip 192.168.88.1” >> /etc/pptpd.conf
echo “remoteip 192.168.88.100-150” >> /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
sed -i ‘s/net.ipv4.ip_forward = 0/net.ipv4.ip_forward = 1/g’ /etc/sysctl.conf
sed -i ‘s/require-mppe-128/#require-mppe-128/g’ /etc/ppp/options.pptpd
pass=`openssl rand 6 -base64`
if [ “$1” != “” ]
then pass=$1
fi
echo “vpn pptpd ${pass} *” >> /etc/ppp/chap-secrets
sysctl -p
chkconfig pptpd on
service pptpd start
echo “VPN service is installed, your VPN username is vpn, VPN password is ${pass}”
[/bash]
用到的iptables脚本:
[bash]
#!/bin/bash
# 清除iptables内一切现存的规则
iptables -F
#允许ssh连接到tcp端口22
iptables -A INPUT -p tcp –dport 22 -j ACCEPT
#设置INPUT、FORWARD及OUTPUT的缺省策略
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT
#设置localhost的访问权
iptables -A INPUT -i lo -j ACCEPT
#接受现存的连接
iptables -A INPUT -m state –state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -m state –state ESTABLISHED,RELATED -j ACCEPT
#开通pptp,IP要在/etc/pptpd.conf里对应设置
iptables -A INPUT -p tcp –dport 1723 -j ACCEPT
iptables -t nat -A POSTROUTING -s 192.168.88.0/24 -j SNAT –to-source 11.22.33.44
iptables -A FORWARD -s 192.168.88.0/24 -j ACCEPT
#存储设置
/sbin/service iptables save
#列出规则
iptables -L -v
chkconfig iptables on
#启用
/sbin/service iptables restart
[/bash]
iptables表里把11.22.33.44换成自己VPS的IP地址,192.168.88.x也可以任意修改,但两个脚本都要改成一样的,我这边没有把他们合在一样,主要是想把所有的iptables规则放在一起。
我在搭建过程中碰到不少问题:
1. 没有开通TUN/TAP,这是开通VPN的必备条件,现象是执行“cat /dev/net/tun”返正访问被拒绝,这种办法只能通过开Ticket让客服帮解决,正常的情况应该是:
[root@dsserver www]# cat /dev/net/tun
cat: /dev/net/tun: File descriptor in bad state
2. pppd无法执行,现象是执行“/usr/sbin/pppd”显示的是英文而不是乱码,如果有一堆英文可以把内容复制开个Ticket给客服,客服解决后再执行显示一堆乱码那就正常了。这个要多谢@neolee
3. XP客户端连接出现619错误,原因是没有执行“mknod /dev/ppp c 108 0”,上面的脚本已经加上。
4. XP客户端连接出现734错误,原因是我这个VPS不支持mppe加密,@neolee告诉我屏蔽掉/etc/ppp/options.pptpd的require-mppe-128即可,上面的脚本已经加上。同时要把“Require data encryption(disconnect if none)”前的钩去掉,见图:
5. 客户端连上了但上不了网,查看网络连接可以看到只有发送没有返回,分析下来是iptables默认禁用FORWARD后没有对应开启,主要使用以下两行:
[bash]
iptables -A FORWARD -m state –state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -s 192.168.88.0/24 -j ACCEPT
[/bash]
另外1723的tcp进入端口要记得打开,上面脚本有对应句子。
6. 可以正常打开网站,但打不开被墙网站,请@YangBalu测试了下,他那边是好的,分析下来发现是本地DNS的问题,原来在VPN时网站的DNS还是用的本地网卡的配置,把本地网卡DNS配成8.8.8.8/8.8.4.4就OK了。
7. iPod Touch上无法连接,改成不加密也连接失败,现在还没办法解决。
Tags: VPS