最近做各种vpn,记录一下pptp的流程

1.准备
#yum install -y perl ppp iptables //centos默认安装了iptables和ppp
 
2.安装pptpd
#yum install pptpd

3. 修改配置文件

3.1 配置文件/etc/ppp/options.pptpd

#cp /etc/ppp/options.pptpd /etc/ppp/options.pptpd.bak
#vi /etc/ppp/options.pptpd

将如下内容添加到到options.pptpd中(如果需要使用代码来启动进程方式,需要修改name,这个name和chap-secets文件中的第二项对应):

ms-dns 8.8.8.8
ms-dns 8.8.4.4

然后保存这个文件。

解析:ms-dns 8.8.8.8, ms-dns 8.8.4.4是使用google的dns服务器

3.2 配置文件/etc/ppp/chap-secrets

#cp /etc/ppp/chap-secrets   /etc/ppp/chap-secrets.bak
#vi /etc/ppp/chap-secrets

chap-secrets内容如下:

# Secrets for authentication using CHAP
# client server secret IP addresses
myusername pptpd mypassword *

PS:

//myusername是你的vpn帐号

pptpd和options.pptpd中的name对应

mypassword是你的vpn的密码

*表示允许任何ip连接该pptp vpn

我这里根据这个格式,假设我的vpn的帐号是ksharpdabu,密码是 sky。那么,应该如下:

ksharpdabu pptpd sky *

3.3 配置文件/etc/pptpd.conf

#cp /etc/pptpd.conf     /etc/pptpd.conf.bak
#vi /etc/pptpd.conf

修改下面

connection 100 #最大连接数
localip 192.168.9.1 #vpn服务占用的ip
remoteip 192.168.9.11-30 //表示vpn客户端获得ip的范围

3.4 配置文件/etc/sysctl.conf

#vi /etc/sysctl.conf //修改内核设置,使其支持转发

将net.ipv4.ip_forward = 0 改成 net.ipv4.ip_forward = 1

保存修改后的文件

#/sbin/sysctl -p

4. 启动pptp vpn服务和iptables

#service pptpd start

经过前面步骤,我们的VPN已经可以拨号登录了,但是还不能访问任何网页。

最后一步就是添加iptables转发规则了,输入下面的指令:

启动iptables和nat转发功能,很关键的呀:

#/sbin/service iptables start //启动iptables

#iptables -t nat -A POSTROUTING -p tcp --syn -s 192.168.9.0/24 -j TCPMSS --set-mss 1356 #这里主要是解决pptp无法访问https站点的问题,还有一种方法是连接后修改ppp0的mtu值,但是每次都需要手动修改太麻烦了

#iptables -t nat -A POSTROUTING -s 192.168.9.0/24 -j SNAT --to-source 207.210.83.140 #添加转发规则

//注意:

        需要注意的是,“192.168.9.0/24”是根据之前的配置文件中的“localip”网段来改变的(这个网段是用户自定义的 ),比如你设置的 “10.0.0.1”网段,则应该改为“10.0.0.0/24”

    to-source 的值写外网网卡的ip地址即可

#/etc/init.d/iptables save //保存iptables的转发规则

#/sbin/service iptables restart //重新启动iptables

5. 重启pptp vpn

#service pptpd restart

客户端如何拨号登陆vpn,我就不写了,大家可以自行google

6. 设置pptp vpn 开机启动

#chkconfig pptpd on //开机启动pptp vpn服务

#chkconfig iptables on //开机启动iptables

7. 过程中遇到的问题 

之前pptp测试都是好的,可是在其他环境部署的时候出现了问题

LCP: timeout sending Config-Requests
Jun 3 14:52:05 localhost pppd[29491]: Connection terminated.
Jun 3 14:52:05 localhost pppd[29491]: Modem hangup
Jun 3 14:52:05 localhost pppd[29491]: Exit.
Jun 3 14:52:05 localhost pptpd[29490]: GRE: read(fd=6,buffer=7fc6156eb480,len=8196) from PTY failed: status = -1 error = Input/output error, usually caused by unexpected termination of pppd, check option syntax and pppd logs
Jun 3 14:52:05 localhost pptpd[29490]: CTRL: PTY read or GRE write failed (pty,gre)=(6,7)
Jun 3 14:52:05 localhost pptpd[29490]: CTRL: Client 192.168.1.112 control connection finished

往上各种说法,可能情况不同

基本上是:

1. 注释pptpd.conf中的logwtmp(版本不匹配的原因)

2. 注释options.pptpd中的require-mschap-v2和require-mppe-128

尝试后都没有成功,最终找到了解决方案:

是两个内核模块没有在机器启动的时候加载进来:nf_conntrack_pptp和nf_conntrack_proto_gre

原因是这样的:

在内核版本为3.18或者更高时,模式在开机时已经加载了nf_conntrack_pptp模块

如果低版本内核,开机没有加载该模块,需要手动加载modprobe nf_conntrack_pptp

iptables支持pptp gre模块的规则过滤需要有上述模块的支持,在没有加载的该模块的时候iptables都会将pptp和gre的数据包识别为invalid类型,drop掉

手动加载

# modprobe nf_conntrack_pptp

开机加载

sudo touch /etc/modules-load.d/nf_conntrack_pptp.conf
sudo echo "nf_conntrack_pptp" > /etc/modules-load.d/nf_conntrack_pptp.conf

希望可以帮到同样问题的人

CentOS7中PPTP的配置的更多相关文章

  1. centos7中安装、配置、验证、卸载redis

    本文介绍在centos7中安装.配置.验证.卸载redis等操作,以及在使用redis中的一些注意事项. 一 安装redis 1 创建redis的安装目录 利用以下命令,切换到/usr/local路径 ...

  2. CentOs7中的网卡配置工具

    CentOs7中的网卡配置工具 摘自:https://blog.51cto.com/13572810/2087991 misslaziness1人评论2715人阅读2018-03-17 22:09:1 ...

  3. CentOS7中OpenVPN的配置

    最近需要在openstack中集成openvpn功能,故熟悉了一下openvpn的搭建流程,记录下来,供参考 版本:openvpn-2.3.4.tar.gz 下载地址:http://pan.baidu ...

  4. centos7中安装、配置jdk(转载)

    参考命令:http://www.jb51.net/os/RedHat/73016.html来进行安装 安装说明 系统环境:centos7安装方式:rpm安装软件:jdk-8u25-linux-x64. ...

  5. centos7中redis安装配置

    1.官网下载对应版本,本例以5.0.5为例 2.tar -zxvf xxxxx 并mv到安装目录 3.进入redis-5.0.5目录下,执行编译命令 make 4.编译完成后,经redis安装到指定目 ...

  6. Centos7 中lvs DR配置

    服务器主机: 10.200.3.100       DirectServer 10.200.3.99         RealServer1 10.200.3.101 RealServer2 10.2 ...

  7. CentOS7中GreVPN的配置

    目前只实现了三层的GRE隧道,但其实二层也可以实现的,但是没有找到很好的方法,待研究 环境如下: host A :  121.207.22.123 host B: 111.2.33.28 1. 在ho ...

  8. docker 在centos7中设置 DOCKER_OPTS

    不同于Ubuntu目录 /etc/default/docker. 在 CentOS7中Docker默认配置的路径在 /usr/lib/systemd/system/docker.service [例如 ...

  9. CentOS-7.0.中安装与配置Tomcat-7的方法

    安装说明 安装环境:CentOS-7.0.1406安装方式:源码安装 软件:apache-tomcat-7.0.29.tar.gz 下载地址:http://tomcat.apache.org/down ...

随机推荐

  1. webpack的devServer配置错误

    首先声明,之前vue项目没有报错,做react项目这样配置就报错了. 一.问题描述 [HMR] Hot Module Replacement is disabled. 二.问题分析 不太理解控制台为什 ...

  2. C# ENUM 字符串输出功能

    public enum MeasurementType { Each, [DisplayText("Lineal Metres")] LinealMetre, [DisplayTe ...

  3. Django与ajax、分页器

    ajax简单数据响应 ajax请求,后台只需要返回信息,所以不会出现render.redirect 模板层: $('.btn').click(function() { $.ajax({ url: '/ ...

  4. 我的 FPGA 学习历程(04)—— 练习 verilog 硬件描述语言

    这篇讲的是使用 verilog 硬件描述语言编写一个 3 - 8 译码器. 3 - 8 译码器是一个简单的组合逻辑,用于实现并转串,其输入输出关系如下: | 输入  |  输出  | -------- ...

  5. Java反射通过getter和setter方法实现类的拷贝

    private User copyFieldValues(User userData, User user) { Field[] fields = user.getClass().getDeclare ...

  6. Hash算法的讲解

    散列表,又叫哈希表,它是基于快速存取的角度设计的,也是一种典型的“空间换时间”的做法.顾名思义,该数据结构可以理解为一个线性表,但是其中的元素不是紧密排列的,而是可能存在空隙. 散列表(Hash ta ...

  7. 04_ switch 练习 _ 你及格了吗

    <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title&g ...

  8. postgresql----JOIN之多表查询

    JOIN用于多张表的关联查询,如SELECT子句(SELECT A.a,A.b,B.a,B.d)中既有表A的字段,同时还有B表的字段,此时使用单独使用FROM A或FROM B已经解决不了问题了,使用 ...

  9. 剑指offer——python【第23题】二叉搜索树的后序遍历序列

    题目描述 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果.如果是则输出Yes,否则输出No.假设输入的数组的任意两个数字都互不相同. 解题思路 首先要清楚,这道题不是让你去判断一个给定 ...

  10. HTTP 错误 405.0 - Method Not Allowed 无法显示您正在查找的页面,因为使用了无效方法(HTTP 谓词)。

    x 前言:报错信息 HTTP 错误 405.0 - Method Not Allowed 无法显示您正在查找的页面,因为使用了无效方法(HTTP 谓词). 发送至 Web 服务器的请求使用了为处理该请 ...