Ubuntu 14.04 LTS下配置PPTP VPN服务器

2016-03-21 22:25:44 UbuntuVPN

这是一个老生常谈的话题。其实配置起来也不麻烦,但是我在配置过程中遇到了一些坑,查阅了很多资料,发现很少有完整记录这些坑的。索性记录下来供大家参考。

为何要选择PPTP

在不是非常需要安全性的情况下,最简单的,最快的,最易用的就是最好的。

安装PPTP

sudo apt-get install pptpd

配置PPTP

pptpd.conf

编辑/etc/pptpd.conf。在最后可以找到localip和remoteip的示例配置。我参考了其他人的配置,没有选择192.168.0.*段,而是从A类内网IP10.*.*.*中选了一个不常见的IP段。

在文件最后添加

localip 10.100.55.1
remoteip 10.100.55.100-200

即可。表示用户连接VPN时获取到的IP在10.100.55.100-200中,且主机的IP是10.100.55.1

我们在这里给了100个IP(其实是101个),与PPTP默认的100个连接数一样。

chap-secrets

编辑/etc/ppp/chap-secrets。以username pptpd password *的格式设置VPN用户名密码。例如

fz pptpd mypassword *

pptpd-options

编辑/etc/ppp/pptpd-options。这是为了在Windows系统中使用而必须要设置的(当然在VPN连接中手动设置DNS也可以)。

在文件中以如下方式添加DNS即可。

ms-dns 114.114.114.114
ms-dns 114.114.115.115

这是114的DNS,可以根据情况相应改成其他的DNS。

在设置完前三项之后,必须重启PPTP才能生效,运行service pptpd restart即可。

sysctl.conf

编辑/etc/sysctl.conf。取消注释net.ipv4.ip_forward = 1,从而允许IP地址转发。

之后执行sysctl -p使之生效。

至此,就已经可以连接VPN了,但是只能访问VPN所在的服务器,于是我们需要修改iptables防火墙。

配置iptables

执行

iptables -t nat -A POSTROUTING -o eth0 -s 10.100.55.0/24 -j SNAT --to-source 000.000.000.000

注意要把000.000.000.000改成服务器的IP地址,10.100.55.0也要改成你之前设置的IP段,比如IP在10.100.55.*段内,就要使用10.100.55.0表示整个IP段。

另外,eth0是你的网卡,可以通过ifconfig查询,如果不是eth0则需相应修改一下。

我还看到了其他的一些写法,可以不用指定网卡和本机IP地址的。由于不是很懂iptables的写法,暂且放到这里。

iptables -t nat -A POSTROUTING -s 10.100.55.0/24 -j MASQUERADE

遇到的坑

到现在其实就已经可以完全使用VPN了。但是我遇到了几个问题。

VPN很慢

查阅相关资料后发现是TCP的MSS大小设置的问题。具体可以参考文末给出的链接。执行

iptables -I FORWARD -p tcp --syn -i ppp+ -j TCPMSS --set-mss 1356

即可。

PPTP存在BUG

在Ubuntu 14.04中使用apt-get方式安装的PPTP存在一个小BUG,即运行service pptpd status总是提示* pptpd is not running

我们可以通过以下方法修复:

打开文件/etc/init.d/pptpd,找到status_of_proc "$PIDFILE" "$DAEMON" "$NAME" && exit 0 || exit $?一行。

status_of_proc之后添加-p参数,即修改成status_of_proc -p "$PIDFILE" "$DAEMON" "$NAME" && exit 0 || exit $?

保存并自动设置iptables

我们在前面设置的iptables在重启电脑后就会恢复默认设置,因此我们需要将前面做的两个iptables设置保存下来并开机运行。

在执行过前面两个iptables指令的情况下,执行iptables-save > /etc/iptables-rules,这样就可以把当前iptables设置导出到/etc/下一个名为iptables-rules的文件中(名称和路径是任意的)。

/etc/rc.local中添加iptables-restore < /etc/iptables-rules(当然,要放在exit 0语句之前啦),这样系统在开机时就会执行这条载入iptables设置的指令了。

注意:iptables-save操作要使用root权限来完成(使用root账号或者使用sudo执行),否则将不会输出任何内容!

监控

当我们架设好PPTP服务端时,如果我们想知道连接者的信息怎么办呢?很简单,结合以下命令即可:

首先,执行last | grep still | grep ppp可以查到使用者的IP地址。last命令用于查询连接到该服务器的计算机的信息,包括历史信息。grep still表示筛选仍在连接的信息,grep ppp表示筛选有关PPTP连接的信息。被我涂红的地方就是IP地址,最左边的一列表示连接者登录PPTP时使用的用户名,第二列是连接号。

其次,执行ifconfig可以查到某一连接号使用的总流量以及PPTP分配的内网IP等信息。

最后,安装iptraf并执行(必须以root权限执行),选择General interface statistics,可以查到当前每个连接号占用的网速。其中,eth0是网卡,速度约为所有ppp连接总和的两倍,因为PPTP要转发数据包,得接收和发送各一次。

感谢

https://www.vmvps.com/how-to-install-and-setup-a-pptp-on-debian-vps-a-tutorial-from-vmvpscom.html

http://www.cnblogs.com/wengzhiwen/archive/2011/01/14/pptpd_nat.html

http://www.92csz.com/52/1244.html

http://blog.sina.com.cn/s/blog_496be0db0102w1r4.html

如果长时间无法加载评论,请对 *.disqus.com 启用代理!