Ubuntu 14.04 LTS下配置PPTP VPN服务器
这是一个老生常谈的话题。其实配置起来也不麻烦,但是我在配置过程中遇到了一些坑,查阅了很多资料,发现很少有完整记录这些坑的。索性记录下来供大家参考。
为何要选择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