基于centos的PPTP的搭建以及问题解决
硬件环境
服务端:CentOS Linux release 7.3.1611 (Core)
客户端Vmware虚拟机:windows server2008
网络环境
服务端:(公) 123.56.11.30 (内) 172.25.30.66
客户端:192.168.152.129
服务端搭建步骤:
1 安装rpm包pptpd: yum -y install pptpd
2 设置登录账号:vim /etc/ppp/chap-secrets
3 配置pptp转换地址池。Localip表示服务器当前IP地址,remoteIP表示远程连接服务器的客户端预分配IP地址:vim /etc/pptpd.conf
4 配置远程客户端域名解析服务器地址:vim /etc/ppp/options.pptpd
5 开启linux系统的路由转发功能,并刷新缓存:vim /etc/sysctl.conf,sysctl –p
6 配置地址池转发规则:iptables -t nat -A POSTROUTING -s 172.16.0.0/24 -o eth0 -j MASQUERADE
注意:如果这时候启动pptpd服务,毫无疑问数据连接没有问题,但会出现一个神奇的问题,这个问题其实困惑我好久了,自从我第一次搭建pptpd服务到现在,在这过程中其实我研究过好多次,今天终于解决了。
7 更改HTTP报文的包头字段长度,改为1356:vim /ec/ppp/ip-up 、ifconfig $1 mtu 1492
更多更改方式详见:https://blog.51cto.com/include/2171484
8 CS完成连接并网络沟通
问题解答
1 PPTPserver端数据转发原理:
Server 端和client端均使用nat技术达到内网可以连接到互联网的目的,然后server端开启内核模式进行数据包的转发,将公网IP收到的数据转发给私网地址,其实这里显而易见的就是我们的linux服务端使用内核的虚拟化功能虚拟出一个新的网卡也就是ppp0,从而实现数据的转发。
2 MTU值问题导致网页不能访问
最大传输单元(Maximum Transmission Unit,MTU)用来通知对方所能接受数据服务单元的最大尺寸,说明发送方能够接受的有效载荷大小。当同一个网络上的两台主机互相进行通信时,该网络的MTU是非常重要。但是如果两台主机之间的通信要通过多个网络,每个网络的链路层可能有不同的MTU,那么这时重要的不是两台主机所在网络的MTU的值,而是两台主机通信路径中的最小MTU,称为路径MTU( Path mtu,PMTU)。PPTP属于数据链路层通信协议,所以就收到了mtu值得影响,导致HTTP报文重组问题的产生,如果是ipsec,则不会出现这个问题,第三层协议中的IP数据包的分片处理可以很好的解决这个问题的产生。
使用tcpdump进行抓包分析:tcpdump -i ppp0 -w /home/admin/pptp.cap
补充知识:
MTU
MTU(Maximum Transmission Unit)最大传输单元,在TCP/IP协议族中,指的是IP数据报能经过一个物理网络的最大报文长度,其中包括了IP首部(从20个字节到60个字节不等),一般以太网的MTU设为1500字节,加上以太帧首部的长度14字节,也就是一个以太帧不会超过1500+14 = 1514字节。
在以太网中,如果上层协议交给IP协议的内容实在是太多,使得一个以太帧超过了1514字节,那么IP报文就必须要分片传输,到达目的主机或目的路由器之后由其重组分片。
MSS
MSS(Maximum Segment Size,最大报文段大小,指的是TCP报文(一种IP协议的上层协议)的最大数据报长度,其中不包括TCP首部长度。MSS由TCP链接的过程中由双方协商得出,其中SYN字段中的选项部分包括了这个信息。如果MSS+TCP首部+IP首部大于MTU,那么IP报文就会存在分片,如果小于,那么就可以不需要分片正常发送。
一般来说,MSS = MTU - IP首部大小 - TCP首部大小
Different
MSS(Maximum Segment Size) - 传输控制协议的一个参数,以字节数定义一个计算机或通信设备所能接受的分段的最大数据量。注意这是不包含 IP 头及 TCP 或 UDP 头的,例如,对于
TCP,MSS = 1500 - 20(IP 头)- 20(TCP 头)
TCP 通过 MSS 提前进行分段,从而保证数据不会超过 MTU,来保证 IP 不需要再进行分片。
MTU值检测
可以通过 ping 的不分片发送进行检测。1500 是去除了以太网头以后的包大小!对于 ping,传递的是 ICMP 包,由以太网头 + IP 头+ ICMP 头 + 数据组成,只要 IP 头 + ICMP 头 + 数据不超过 1500 即可。也就是说,MTU = 1500 - 20(IP 头)- 8(ICMP 头)= 1472。
以太网帧结构以及CRC校验
Windows:ping -f -l 1472 http://baidu.com
Linux:ping -M do -c 2 -s 1472 http://baidu.com