PPTP配置VPN服务器

2016.12.8 初次发布博客

2016.12.9 增加了关于TCP数据包MSS参数值的解释和参考内容


一. 安装PPTP

pptp是(Point to Point Tunneling Protocol),即点对点隧道协议。该协议是在ppp协议的基础上开发的一种新的增强型安全协议,支持多协议虚拟专用网(VPN),可以通过密码验证协议(PAP)、可扩展认证协议(EAP)等方法增强安全性。pptpd是指运行在服务器上提供上述协议服务的软件。

首先我们需要安装pptpd,centos服务器用以下命令:

# yum install pptpd

Ubuntu服务器使用以下命令:

# sudo apt-get install pptpd

本文档使用ubuntu服务器,pptp协议和pptpd版本如下:

二. 配置pptpd

2.1 配置IP地址

编辑/etc/pptpd.conf,首先我们配置IP地址,找到以下内容并将注释符#去掉,这里采用默认设置:

localip 192.168.0.1
remoteip 192.168.0.234-238,192.168.0.245

localip为pptp虚拟的局域网中服务器的本机IP,remoteip为客户机连上后分配的IP地址范围,这里我们设置了6个可分配的IP地址。

上面的IP地址是可以随便填的,ABC三类的内网地址都可以,主要兼顾其他地方的IP配置,不要出现IP冲突就可以了。

2.2 配置客户端DNS

要配置客户端的dns,首先要确定配置文件,查看/etc/pptpd.conf中指定的option文件,如果没有指定,那就默认是/etc/ppp/pptpd-options。

这里指定好了配置文件尾pptpd-options,因此修改/etc/ppp/pptpd-options,找到ms-dns并修改为自己需要配置的DNS服务器地址:

2.3 配置VPN账号

接下来创建VPN账号,账号保存在/etc/ppp/chap-secrets,我们打开编辑这个文件,按下面的格式加入自己的账号以及密码,依次为:账号,协议,密码,IP地址:

这里IP填*表示动态分配,任何使用对应账号的IP都可以连上;如果填上IP则表示指定IP才能使用该账号登录,IP之间用逗号或空格隔开。

2.4 配置系统转发

完成上述配置后VPN服务可以连上,但是不能通过VPN实现转发,也就是不能上网或者访问其他服务器,只能局限在局域网内,需要开启系统转发和NAT。首先开启系统转发,编辑配置文件/etc/sysctl.conf,设置如下:

下面的设置是IPV6,如果有需要也可以开启。重新加载sysctl.conf:

2.5 配置防火墙转发

# sudo iptables –t nat –A POSTROUTING –s 192.168.0.0/24 –o eth0 –j SNAT –to 192.168.1.206

这里是进行了SNAT转发配置,将内网IP的数据包通过eth0转发出去。其中,192.168.0.0/24位VPN虚拟内网,也就是之前配置的remoteip,而192.168.1.206代表外网地址,可以通过ifconfig命令查询。

如果VNP服务器是用来代理上网的,仅有上面的配置会出现访问网站缓慢的情况,需要手动修改一下转发包的mss:

# sudo iptables –A FORWARD –p tcp –syn –s 192.168.0.0/24 –j TCPMSS –set-mss 1356

最后可以保存一下防火墙:

# sudo iptables-save

三. 启动pptpd服务

# sudo service pptpd restart
# sudo service pppd-dns restart

可以通过tail /var/log/syslog命令来查看启动日志看是否有错误:

正常的启动应该和上述截图差不多。

四. 测试pptp服务

4.1 单个客户机测试

这里用的win10做测试,其他系统请自行寻找对应方法。首先打开网络设置,选择VPN,添加新的VPN连接:

连接名称任填,VPN类型必须选择PPTP,服务器地址为架设PPTP服务的服务器IP地址,而不是上述设置的localip,登录账户和密码同之前的设置。保存后登录信息后连接VPN,是否成功可以在服务器端输入ifconfig查看:

可以看到出现了一张ppp0的虚拟网卡,连接方式为点对点协议,说明PPTP成功连接。然后打开cmd输入ipconfig /all查看:

然后再看能不能正常上网,一般来说是没有什么问题的,如果存在不能正常上网的问题,可以ping一下各个ip看是哪里不通或者trace一下地址看看数据是从哪条路由出去的。

4.2 多个客户机测试

我们选择了另外一台电脑通过PPTP创建VPN连接到服务器,连接方法同上。服务器端用ifconfig查看:

我们在客户机2上查看ipconfig /all:

我们让两台电脑互ping,看看是否能够连通:

正常来说客户机2也是可以上网的。

四. 关于TCP数据包的MSS值

关于为什么要修改MSS参数值,首先我们需要明确两个概念:

  • MTU: Maxitum Transmission Unit 最大传输单元

  • MSS: Maxitum Segment Size 最大分段大小

MSS是TCP数据包每次能够传输的最大数据分段。为了达到 最佳的传输效能TCP协议在建立连接的时候需要协商双方的MSS值,这个值TCP协议在实现的时候往往用MTU代替。减去IP数据包包头大小和TCP数据段包头大小后的值就确定连接的最大MSS值。在PPTP连接配置了SNAT转发后,TCP连接时除了上述需要的包头外还需要加上由虚拟内网转发到网卡eth0这条路径的包头信息。在这种情况下,如果按照之前的MSS来传输数据,TCP数据包大小就会大于MTU值,这时候就会造成在传输过程中的数据丢失或者需要对TCP多次分段重组,算上在服务器端的时间和客户机端的时间,整体看上去网页打开就会显得比较慢,甚至还可能出现只能打开标题名无法显示网页内容的情况,但是有些网页的访问却是正常的,因为服务器有对MSS进行了限制。

这也就是为什么我们需要在这里修改从192.168.0.0/24网段出来的数据包的MSS值的原因。

五. 参考内容

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章