1 环境
系统:centos 7.2 1511
2 详细步骤
2.1 验证内核是否加载了MPPE模块:
内核的MPPE
模块用于支持Microsoft Point-to-Point Encryption
。Windows自带的VPN客户端就是使用这种加密方式,主流的Linux Desktop
也都有MPPE
支持。其实到了我们这个内核版本,默认就已经加载了MPPE
,只需要使用下面命令验证一下,显示MPPE ok
即可:
1 | modprobe ppp-compress-18 && echo MPPE is ok |
2.2 安装所需的软件包:
1 | yum install –y ppp pptpd iptables |
2.3 修改ppp配置文件
配置ppp
需要编辑它的两个配置文件,一个是option
(选项)文件,一个是用户账户
文件。首先编辑option文件:
1 | vi /etc/ppp/options.pptpd |
1 | vi /etc/ppp/chap-secrets |
这个文件非常简单,其中用明文存储VPN客户的用户名、服务名称(option.pptpd
文件name pptpd
vpn的服务器名字)、密码和IP地址范围,每行一个账户:
1 | username1 pptpd passwd1 * |
其中第一第三列分别是用户名和密码;第二列应该和上面的文件/etc/ppp/options.pptpd
中name
后指定的服务名称一致;最后一列限制客户端IP地址,星号表示没有限制。
2.4 修改pptpd配置文件
1 | vi /etc/pptpd.conf |
其中option
选项指定使用/etc/ppp/options.pptpd
中的配置;logwtmp
表示使用WTMP日志
。
后面两行是比较重要的两行。VPN可以这样理解,Linux客户端使用一个虚拟网络设备ppp0
(Windows客户端也可以理解成VPN虚拟网卡),连接到服务器的虚拟网络设备ppp0
上,这样客户端就加入了服务器端ppp0
所在的网络。localip
就是可以分配给服务器端ppp0
的IP地址,remoteip
则是将要分配给客户端ppp0
(或者虚拟网卡)的。
这两项都可以是多个IP,一般localip
设置一个IP
就行了,remoteip
则视客户端数目,分配一段IP。其中remoteip
的IP段
需要和localip
的IP段
一致。
localip
和remoteip
所处的IP段
可以随意些指定,但其范围内不要包含实际网卡eth0
的IP地址。一般情况下,使用上面配置文件中的配置就好使了,你需要做的只是把192.168.0.207-217
这个IP区间修改成你喜欢的192.168.0.a-b
,其中1<a<b<255
。
2.5 打开内核的IP转发功能:
1 | vi /etc/sysctl.conf |
修改为:
1 | net.ipv4.ip_forward = 1 |
然后执行下面命令使上述修改生效:
1 | sysctl –p |
2.6 配置iptables防火墙放行和转发规则:
最后,还需要配置防火墙。这里配置防火墙有三个目的:一是设置默认丢弃规则,保护服务器的安全;二是放行我们允许的数据包,提供服务;三是通过配置nat表的POSTROUTING链,增加NAT使得VPN客户端可以通过服务器访问互联网。总之我们的原则就是,只放行我们需要的服务,其他统统拒绝。
首先介绍跟PPTP VPN相关的几项:
允许GRE(Generic Route Encapsulation)协议,PPTP使用GRE协议封装PPP数据包,然后封装成IP报文
放行1723端口的PPTP服务
放行状态为RELATED,ESTABLISHED的入站数据包(正常提供服务的机器上防火墙应该都已经配置了这一项)
放行VPN虚拟网络设备所在的192.168.0.0/24网段与服务器网卡eth0之间的数据包转发
为从VPN网段192.168.0.0/24转往网卡eth0的出站数据包做NAT
如果你其他的防火墙规则已经配置好无需改动,只需要增加上述相关VPN相关的规则,那么执行下面几条命令即可(第三条一般不用执行,除非你原来的防火墙连这个规则都没允许,但是多执行一遍也无妨):
1 | iptables -A INPUT -p gre -j ACCEPT |
3 问题总结
使用centos 6.5部署vpn pptp
遇到连接错误,总是连接不上
3.1 日志错误1:
1 | [root@localhost log]#vi /var/log/messages |
相关配置文件
1 | [root@localhost ~]# more /etc/pptpd.conf |grep -v ^# |
我使用的centos 6.5 64bit ,相关安装包如下:
1 | [root@localhost ~]# rpm -qa |grep "ppp*" |
现在不知道问题出在什么地方,麻烦各位帮忙看看,谢谢!!!
已经解决,修改配置
1 | options.pptpd把 |
这两行注释掉即可。如下图:
这里是关闭加密,跳过加密。此方法修改过没有用处。
3.2 错误2:
1 | [root@webserver ~]# sysctl -p |
版本没错但是发现转发有错
加载模块然后重启解决
1 | [root@webserver ~]# modprobe bridge |
此处是重新加载bridge
模块,重新加载了,没有作用,后来实验,发现是否重新加载,都不影响vpn使用,最终就没管他,不知道是否有影响。
最终如何解决的,其实也没有做什么修改,就是重新yum remove –y ppp* pptp*
后,重新yum install –y ppp* pptp* iptables*
后,多次重启,和重设置vpn帐号,又可以用了,I don’t know why.
最终解决方案:
后来发现一个问题,当客户端开启防火墙的时候就能连接,当关闭防火墙的时候就无法连接报错。I don’t know why.