PPTP协议,是点对点协议(PPP)为基于点对点连接的多协议自寻址数据包的传输提供了一个标准方法。 PPP 最初设计是为两个对等结构之间的 IP 流量的传输提供一种封装协议。在 TCP-IP 协议集中它是一种关于同步调制连接的数据链路层协议(OSI 模式中的第二层),替代了原非标准第二层协议,即 SLIP。除了 IP 以外 PPP 还可以传送其它协议,包括 DECnet 和 Novell 的 Internet 网包交换(IPX)。 PPP 主要由以下几部分组成: 封装:一种封装多协议数据报的方法。PPP 封装提供了不同网络层协议同时通过统一链路的多路技术。(人们)精心的设计 PPP 封装,使其保有对常用支持硬件的兼容性。 链路控制协议:为了在一个很宽广的环境内能足够方便的使用,PPP 提供了 LCP。LCP 用于就封装格式选项自动的达成一致,处理数据包大小的变化,探测 looped-back 链路和其他普通的配置错误,以及终止链路。提供的其他可选设备有:对链路中对等单元标识的认证,和链路功能正常或链路失败情况下的决定。 网络控制协议:一种扩展链路控制协议,用于建立、配置、测试和管理数据链路连接。 配置:通过链路控制协议使 PPP 链路很容易配置。该机制也应用于其它控制协议如网络控制协议(NCPs) 为了建立点对点链路通信,PPP 链路的每一端,必须首先发送 LCP 包以便设定和测试数据链路。在链路建立之后,LCP 可选设备才可以被认证。然后,PPP 必须发送 NCP 包以便选择和设定一个或更多的网络层协议。一旦每个被选择的网络层协议都被设定好了,来自每个网络层协议的数据报就能在连路上发送了。 链路将保持通信设定不变,直到外在的 LCP 和 NCP 关闭链路,或者是发生一些外部事件的时候(如,休止状态的定时器期满或者网络管理员干涉)。
实例选用腾讯云北京3区Ubuntu18服务器 1、验证内核是否加载了MPPE模块 内核的MPPE模块用于支持Microsoft Point-to-Point Encryption。Windows自带的***客户端就是使用这种加密方式,linux内核版本 等于或高于 2.6.15 时,默认都集成了该功能。可以通过如下命令进行下测试,如果回显OK,则证明已经成功:需要root
modprobe ppp-compress-18 && echo MPPE is ok
2、安装软件包
apt-get -y install ppp pptpd
安装ppp包是增加对ppp协议的支持,提供服务的包是pptpd。另外主机还需要iptable支持,如果主机上没有,还需要安装下iptables。
pptpd涉及的配置文件较少,一般我们只修改三个文件pptpd.conf、options.pptpd、chap-secrets 1、pptpd.conf
# vim /etc/pptpd.conf
修改如下内容
option /etc/ppp/options.pptpd
logwtmp
localip 192.168.0.1(自己服务器的公网IP)
remoteip 192.168.0.234-238,192.168.0.245(分配给连接入***的IP段,注意不要包含服务器的公网IP)
其中option和logwtmp项默认是开启的,只需增加localip和remoteip即可。可以这样理解,Linux客户端使用一个虚拟网络设备ppp0(Windows客户端也可以理解成虚拟网卡),连接到服务器的虚拟网络设备ppp0上,这样客户端就加入了服务器端ppp0所在的网络。localip就是可以分配给服务器端ppp0的IP地址,remoteip则是将要分配给客户端ppp0(或者虚拟网卡)的。
这两项都可以是多个IP,一般localip设置一个IP就行了,remoteip则视客户端数目,分配一段IP。其中remoteip的IP段需要和localip的IP段一致。localip和remoteip所处的IP段可以随意些指定,但其范围内不要包含实际网卡的IP地址。
上面的配置示例中,我配置了一个段,外加一个IP。
2、options.pptpd
vim /etc/ppp/options.pptpd
name pptpd
refuse-pap
refuse-chap
refuse-mschap
require-mschap-v2
require-mppe-128
ms-dns 8.8.8.8
ms-dns 8.8.4.4
proxyarp
lock
nobsdcomp
novj
novjccomp
nologfd
name后面的pptpd是服务名称,可以任意修改成你喜欢的名字,在后面的帐户配置中将对应的pptpd替换为你在这里修改的名字即可。
refuse或者require开头的指令,是配置拒绝和接受的加密方式,这里接受的mschap-v2和mppe-128都是较新的比较安全的加密方式,其中mppe-128需要第一步中验证的内核模块支持。
另外两个比较重要的行就是ms-dns了,它们指定***使用的DNS服务器。毕竟VPS位于国外,所以推荐使用上面通用的Google Public DNS,当然也可以修改为你的VPS所在ISP提供的DNS。
3、chap-secrets
vim /etc/ppp/chap-secrets
这里需要注意下,server名要和options里配置的name值一样,ip地址如果是即查用户***拨号过来以后可以使用任一地址。如果指定地址的话,***拨号过来只能是该地址。
1、开启IP转发 可以通过下面的方法开启内核的IP转发功能
vim /etc/sysctl.conf
net.ipv4.ip_forward = 1 -->默认该行为0,修改为1
sysctl -p
上面的方法是重启后依然生效,想要临时生效,重启后还原之前的配置可以通过下面的方法配置:
echo '1' > /proc/sys/net/ipv4/ip_forward
2、iptables配置防火墙
iptables -A INPUT -p gre -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 1723 -j ACCEPT
iptables -A FORWARD -s 192.168.0.0/24 -o eth1 -j ACCEPT
iptables -A FORWARD -d 192.168.0.0/24 -i eth1 -j ACCEPT
iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o eth1 -j MASQUERADE
或
iptables -t nat -A POSTROUTING -o eth1 -s 192.168.0.0/24 -j SNAT --to-source xxx.xxx.xxx.xxx
上面的IP都换成自己服务器的公网IP网段,eg:xx.xx.xx.0/24,eth1网卡是自己公网网卡名。 PPTP使用GRE协议封装PPP数据包,然后封装成IP报文,所以需要允许该协议;1723为pptp服务的端口;使用MASQUERADE这种是IP伪装,使用to-source是nat地址转换,两种任选其一即可。
配置完成后,通过/etc/init.d/iptables save保存当前配置(也可以使用iptables-save > 文件名 保存配置)。
除了上面的配置外,还需特别注意将MTU的值配置为1356,如果不配置会出现***可以拨上,而且可以 ping 通外网,但上网速度会很慢,很多页面打不开的情况,遇到这种情况,可以在iptables里增加如下规则:
iptables -I FORWARD -p tcp --syn -i ppp0 -j TCPMSS --set-mss 1356
或
iptables -A FORWARD -p tcp --syn -s 192.168.0.0/24 -j TCPMSS --set-mss 1356
3、配置服务开机自启动
/etc/init.d/pptpd start
chkconfig --level 35 pptpd on
/etc/init.d/iptables start
chkconfig --level 35 iptables on
1、设置
2、网络和Internet---->添加***
3、进行配置设置 ***提供设置:Windows(内置) 连接名称:test1(自己填写任意内容) 服务器名称或地址:服务器的公网IPxx.xx.xx.xx 类型:点对点隧道协议(pptp) 用户名:admin(上述在/etc/ppp/chap-secrets的设置) 密码:admin123(上述在/etc/ppp/chap-secrets的设置)
4、如果发现连接后无法上网的情况
注意这里不要勾选"在远程网络上使用默认网关"
点击AM后面的小方块
configure ***
点击+号,下滑,找到***中有PPTP
Geteway中填写vps的公网IP 然后填写username,密码是我们连接时填写的
然后点击advance,MPPE那里打钩,然后ok,会自动返回上级页面,我们点击save
然后还在在屏幕右上角点击连接,会弹出输入密码的框,输入密码后我们会看到下图:
以上就是本文的全部内容。