在openvz上的ubuntu中配置pptp vpn教程

1. 确定你的vps支持ppp,切记第一步务必首先完成!!!
这里可以使用命令:cat /dev/ppp
如果显示 “cat: /dev/ppp: No such device or address” 表示ppp的模块已经加载,那么就可以进入下一步了。
如果显示类似于“permission denied”说明没ppp模块,请联系你的vps提供商让其帮忙开启。我使用的ramnode.com的vps可以登陆到control panel中开启。

2.第一步完成后就可以开始安装了
2.0 sudo -i 获取root权限

2.1 安装pptpd服务: apt-get install pptpd

2.2 修改配置文件:
vim /etc/ppp/pptpd-options
在其中找到ms-dns的位置,修改为你希望传递给client的DNS地址,这里我使用的google的DNS:

ms-dns 8.8.8.8
ms-dns 8.8.4.4

2.3 然后修改 vim /etc/pptpd.conf 找到文件最下端的

localip 
remoteip 10.0.0.100-199

这里的localip是只vps的外网ip,remoteip是指分配给客户端的内网IP,这里可以按照实际需要分配。

2.4 修改 vim /etc/ppp/chap-secrets
这个文件是用来存储用户名和密码的,顺序是 pptpd *
这里的pptpd是服务器名称,是在“/etc/ppp/pptpd-options”中定义的,默认是pptpd
* 代表允许此用户从任何ip连接,所以你也可以指定一个或一段ip地址

这样pptpd的配置就完成了,现在可以使用service pptpd restart 重启服务。现在客户端应该已经可以连接到vpn,但是还不能上网。

3. 设置转发和NAT

3.1 vim /etc/sysctl.conf
找到 net.ipv4.ip_forward=1,将其前面的“#”去掉,使代码生效。如果要使用ip v6也需要做相应的修改。
完成后:sysctl -p 重新加载设置。
在很多网络环境下,配置到这里vpn就已经可以正常运作了,不过我使用的vps还不行,需要继续进行下一步。

3.2 使用iptables设置NAT

iptables -P FORWARD ACCEPT
iptables --table nat -A POSTROUTING -o venet0 -j MASQUERADE

现在vpn就可以正常运作了,你可以连接一下试试;但是还没有完成,因为一旦重启iptables的设置就会丢失,所以让系统自动加载iptables的设置。

4 储存iptables rules. 由于我使用的ramnode.com的openvz vps会自动重置 “/etc/network/interface” 所以这里不能使用简单的“pre-up”的方法,需要使用比较复杂的方法,下面会详细介绍。

4.1 使用 “iptables-save > /etc/iptables.rules” 把现有的rules储存成文件

4.2 新建文件 vim /etc/network/if-pre-up.d/iptables
在其中加入一下脚本

#!/bin/sh
 iptables-restore < /etc/iptables.rules
 exit 0

这样自动加载的脚本就完成了
再添加执行权限: chmod +x /etc/network/if-post-down.d/iptables

4.3 新建文件 vim /etc/network/if-post-down.d/iptables
在其中加入自动保存的脚本

 #!/bin/sh
 iptables-save -c > /etc/iptables.rules
 if [ -f /etc/iptables.rules ]; then
 iptables-restore < /etc/iptables.rules
 fi
 exit 0

同样添加执行权限:chmod +x /etc/network/if-pre-up.d/iptables

到这里就全部完成了,重启一下试试效果吧!

最后如果设置了防火墙,还要开启两个端口:

# Port 1723 is used by pptp. For secure operations limit the
# source IP via -s x.x.x.x as well!
iptables -A INPUT -p tcp –dport 1723 -j ACCEPT
# PPTP used not tcp or udp, but gre (protocol number 47).
# Let it in as well.
iptables -A INPUT -p 47 -j ACCEPT