欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  科技

Linux系统上PPTP协议VPN服务器架设方法

程序员文章站 2022-09-07 15:46:13
这篇文章主要介绍了Linux系统上PPTP协议VPN服务器架设方法,一般来说PPTP点对点隧道协议的VPN比较常用,尤其在中国(嗯...),需要的朋友可以参考下... 15-11-20...

vpn服务常用的协议一般有两种:
pptp——pptp(点对点隧道协议)是一个很好的,轻量级的vpn协议,高速提供基本的在线安全。 pptp是内建于各种桌面和移动设备,并有128位加密功能。相比l2tp速度更快。

l2tp——附带ipsec(ip安全)的l2tp(第2层隧道协议)是非常安全的协议,其内置于多种桌面和移动设备。l2tp/ipsec采用256位加密, 但额外的安全开销比pptp需要更多的cpu使用率。

我们在这篇文章中要讲的便是pptp的vpn架设,点对点隧道协议 (pptp) 是由包括微软和3com等公司组成的pptp论坛开发的一种点对点隧道协,基于拨号使用的ppp协议使用pap或chap之类的加密算法,或者使用 microsoft的点对点加密算法mppe。其通过跨越基于 tcp/ip 的数据网络创建 vpn 实现了从远程客户端到专用企业服务器之间数据的安全传输。pptp 支持通过公共网络(例如 internet)建立按需的、多协议的、虚拟专用网络。pptp 允许加密 ip 通讯,然后在要跨越公司 ip 网络或公共 ip 网络(如 internet)发送的 ip 头中对其进行封装。

pptp是一个比较简单的vpn构建方式,但是很难找到比较全的说明文档。因此,记录一篇说明文档,详细记录架设vpn服务器以及总结一些其他比较容易遇到的问题。

安装pptp
基本上安装pptp是比较简单的了,比如在我的centos6.4 x64上,只需要两个命令:

复制代码
代码如下:

rpm -i http://poptop.sourceforge.net/yum/stable/rhel6/pptp-release-current.noarch.rpm
yum -y install pptpd

如果是ubuntu的话,更加简单了:

复制代码
代码如下:

apt-get install pptpd


配置ip地址
基本上程序的安装是全自动完成的了,下面需要进行一些简单的配置,编辑/etc/pptpd.conf ,在最后加入ip地址配置:

复制代码
代码如下:

localip 10.0.0.1
remoteip 10.0.0.100-200

上面的ip地址是可以随便填的,abc三类的内网地址都可以,主要兼顾其他地方的ip配置,不要出现ip冲突就可以了,后面的remoteip,默认从第一个10.0.0.100开始分配给客户,localip表示分配给服务器的内部网关地址。

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

Linux系统上PPTP协议VPN服务器架设方法

在配置文件中加上:

复制代码
代码如下:

ms-dns 202.96.128.86
ms-dns 202.96.128.166

这里配置成客户端所在地的dns就好了。

配置vpn账号
然后是创建vpn的账号,账号保存在/etc/ppp/chap-secrets,我们打开编辑这个文件,按下面的格式加入自己的账号以及密码,依次为:账号,协议,密码,ip地址。

Linux系统上PPTP协议VPN服务器架设方法

这里的ip地址如果明文表示静态分配,如果填*就表示动态分配。

启动服务
配置完毕,可以启动服务并且加入启动项了

复制代码
代码如下:

service pptpd restart
chkconfig pptpd on

查看一下服务器是否在1723上面监听了
Linux系统上PPTP协议VPN服务器架设方法

 配置系统转发
现在的vpn服务可以连上,但是不能通过vpn服务器进行转发,也就是不能够上网或者访问其他服务器等,需要开启系统转发和nat。编辑系统配置文件/etc/sysctl.conf,设置如下值为1

复制代码
代码如下:

net.ipv4.ip_forward = 1

如果未来ipv6普及了,估计应该就是改ipv6了,修改完毕之后要马上生效,使用命令

复制代码
代码如下:

sysctl -p

配置防火墙转发

复制代码
代码如下:

iptables -t nat -a postrouting -o eth0 -j masquerade



复制代码
代码如下:

iptables -t nat -a postrouting -s 10.0.0.0/24 -o eth0 -j snat --to 115.115.115.115

其中第一种比较简单,自动伪装ip,第二种的10.0.0.0/24指的是vpn虚拟内网,而115.115.115.115代表外网地址,进行nat。如果vpn服务器是用来代理上网的,仅有上面的配置会出现访问网站缓慢的情况,需要手动修改一下转发包的mss

复制代码
代码如下:

iptables -a forward -p tcp --syn -s 10.0.0.0/24 -j tcpmss --set-mss 1356

这样就不会出现打不开网页的问题了,最后可以保存一下防火墙。

复制代码
代码如下:

iptables-save


常见的问题
619错误
很多人在拨vpn的时候卡在验证用户名和密码,然后会出现619的错误,这种错误90%以上是由于客户端到服务器的网络中有设备不支持gre协议或nat-t造成的,最常见的是由于客户端的路由器等不支持造成的,在更换以后立马能拨上vpn。而这种错误在服务端的日志也有体现。例如

复制代码
代码如下:

lcp: timeout sending config-requests

下面是双方加解密不一致的:

复制代码
代码如下:

lcp terminated by peer (^o^xh-^@<m-mt^@^@^@^@)

pptp需要用到的端口
pptp使用到的端口只有一个,那就是1723,网上有很多误人子弟的文章还说要开47端口,真是坑爹,因为gre协议号是47,并不代表需要开47端口,因此如果是要映射端口的话,1723就完全够了,不要信网上的某些教程,如果使用了iptable来作为防火墙,需要加入规则

复制代码
代码如下:

iptables -a input -p tcp --dport 1723 -j accept
iptables -a input -p 47 -j accept

如果是在内网中,需要网关转发,那么网关需要如下配置:

复制代码
代码如下:

iptables -t nat -a prerouting -i eth0 -p tcp --dport 1723 -j dnat --to server_ip
iptables -t nat -a prerouting -i eth0 -p 47 -j dnat --to server_ip