最近前游戏同事搞了台的VPS,贡献出来做VPN使用。目前流行的服务器VPN软件主要有PPTP VPN和Openvpn。Openvpn虽然功能较为强大,且安全性高,支持nat穿越等等,但服务器端和客户端配置都比PPTP VPN麻烦许多,所以这次我们采用PPTP VPN实现我们的需求,主要需求功能点如下:

1、win7、win10客户端可以使用服务器进行拨号成功。(这是最基本的需求)

2、用户账号使用mysql数据库进行统一管理。(这个也很常见的需求)

3、对用户账号的使用流量按月进行限制。(毕竟不是财主,还是要限制一下的。)

4、不允许一个账号多台电脑同时登陆。(非常现实的需求)

下面我们就在centos linux 6.8 64位系统上一一实现这些功能,本文主要实现第一个需求功能点:

win7、win10客户端可以使用服务器进行拨号,并成功FQ。

一、安装ppp和pptp软件包,这里采用rpm方式实现

1
2
3
# yum install  -y perl ppp 
# rpm -ivh pptpd-1.3.4-2.el6.x86_64.rpm 
下载地址:https://zhidao.baidu.com/share/8c07231b0a82281d4085fd2a779cd8f0.html

二、配置文件修改

1、options.pptpd文件为PPTP VPN配置文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# cd /etc/ppp
# cp options.pptpd options.pptpd.bak
# cat options.pptpd
name pptpd
refuse-pap
refuse-chap
refuse-mschap
require-mschap-v2
require-mppe-128
proxyarp
lock
nobsdcomp
novj
novjccomp
nologfd
idle 2592000
ms-dns 8.8.8.8
ms-dns 8.8.4.4

2、chap-secrets为PPTP VPN默认的用户名和密码文件

1
2
3
4
5
6
7
# cp chap-secrets chap-secrets.bak
# cat chap-secrets
# Secrets for authentication using CHAP
# client        server    secret                        IP addresses
ptest1           pptpd     ptest1                           *     
ptest2           pptpd     ptest2                           *     
ptest3           pptpd     ptest3                           *

3、pptpd.conf文件为PPTP VPN主配置文件

1
2
3
4
5
# grep -v '^#' /etc/pptpd.conf  |grep -v '^$'
option /etc/ppp/options.pptpd
logwtmp
localip 192.168.222.1
remoteip 192.168.222.10-254

三、启动VPN服务,配置防火墙nat规则,并开启主机路由功能

1
2
3
4
# service pptpd restart
# iptables -t nat -A POSTROUTING -s 192.168.222.0/24  -j MASQUERADE
# sysctl net.ipv4.ip_forward 
net.ipv4.ip_forward = 1

四、拨号测试

1、win10客户端

2、iphone6s客户端测试

五、错误处理

拨号成功之后,/var/log/message日志文件记录如下日志信息:

kernel: ppp: compressor dropped pkt

排查了一下,主要是mtu(最大传输单元)的问题,客户端为1394,服务器端为1400,通过查看/etc/ppp/if-up配置文件发现系统中只要存在/etc/ppp/ip-up.local脚本且可执行,则客户端拨号成功后这个脚本会自动被执行。

1
2
3
4
5
6
7
8
9
# cat /etc/ppp/ip-up.local
#!/bin/sh
CURRENT_MTU="$(ifconfig $1 | grep -Po '(?<=MTU:)([0-9]+)' | tail -1)"
FIXED_MTU="$(expr $CURRENT_MTU + 4)"
for network in $(ifconfig | grep -E "ppp" |awk '{print $1}')
do
  ifconfig $network mtu $FIXED_MTU
done
# chmod +x /etc/ppp/ip-up.local

至此,传统的通过文件名认证的pptp vpn已经部署完成。后续的几个功能点将在下文中实现,尽情期待!

PPTP-VPN第一章——部署与简单使用的更多相关文章

  1. jQuery系列 第一章 jQuery框架简单介绍

    第一章 jQuery框架简单介绍 1.1 jQuery简介 jQuery是一款优秀的javaScript库(框架),该框架凭借简洁的语法和跨平台的兼容性,极大的简化了开发人员对HTML文档,DOM,事 ...

  2. 2017.12.12 架构探险-第一章-从一个简单的web应用开始

    参考来自:<架构探险>黄勇 著 1 使用IDEA搭建MAVEN项目 1.1 搭建java项目 (1)创建java项目 为了整个书籍的项目,我创建了一个工程,在这个工程里创建了每个章节的mo ...

  3. 学习笔记-[Maven实战]-第一章:Maven简介

    Maven简介: Maven 可翻译为:知识的积累,也可以翻译为"专家"或"内行". Maven 是一个跨平台的项目管理工具,是Apache组织中一个很成功的开 ...

  4. 第一章 什么是SQL Server Integration Services (ssis) 系统。

    note:我也是刚入门的菜鸟,让我们大家一块学习SSIS系统,工作中需要用到SSIS.您的浏览是我更新的最大动力,谢谢!  SSIS是Microsoft SQL Server Integration ...

  5. 第一章 初识shiro

    shiro学习教程来自开涛大神的博客:http://jinnianshilongnian.iteye.com/blog/2018936 第一章 初识shiro 简单了解shiro主要记住三张图即可. ...

  6. 《深入理解计算机系统》(CSAPP)读书笔记 —— 第一章 计算机系统漫游

    本章通过跟踪hello程序的生命周期来开始对计算机系统进行学习.一个源程序从它被程序员创建开始,到在系统上运行,输出简单的消息,然后终止.我们将沿着这个程序的生命周期,简要地介绍一些逐步出现的关键概念 ...

  7. 区块链开发学习第三章:私有链上部署helloBlockchain简单合约

    前面讲了部署私有链以及新增账户,现在进行到了部署合约了,此操作真是踩了无数无数无数的坑,到写文章为止确实是已经部署好了,但是还有些坑是还没有解决的! 一.Solidity编译器 开始的时候用的http ...

  8. Centos 6.x 部署pptp VPN

    安装 系统检测不到PPTP的时候  使用一下方法安装PPTP 下载地址:http://poptop.sourceforge.net/yum/stable/packages rpm -ivh http: ...

  9. MongoDB的Spring-data-mongodb集成(Win10 x64) 第一章 - MongoDB安装与简单命令

    这是MongoDB系列的第一章,作者将持续更新. 1.下载 https://www.mongodb.com/download-center#community 2.安装与配置 有关安装的任何困难请点击 ...

随机推荐

  1. Esfog_UnityShader教程_溶解效果Dissolve

    溶解效果在游戏中是很常见的,比如在一些神话或者魔法世界中,一些NPC角色在剧情需要时候会身体会渐渐的消失掉.甚至有一些更炫的,比如用火焰喷射器把目标燃尽.这些都可以用到溶解效果.这篇文章主要是讲解一下 ...

  2. json工具包比较 fastjson jackson gson

    对json进行json-object进行相互转化时,笔者接触到三种工具jar,现对其进行比较. fastjson:速度最快,阿里巴巴开源. jackson:springMvc 默认使用. gson:谷 ...

  3. openlayers中实现自定冒泡的效果

    自定义的Openlayers.Popup.FreshCloud继承自Openlayers.Popup.Framed,实现了比较简洁的冒泡效果,详细代码如下 /** * Class: OpenLayer ...

  4. 为tomcat动态添加jndi数据源信息

    我们在开发项目的时候,总要和数据库打交道,如何获取数据源,以什么样的方式来获取,成为了我们即简单又熟悉而且不得不注意的一个问题. 那么在这里我说三种获取数据源的常用方式: 一.通过配置文件来获取 首先 ...

  5. Linux 权限设置

    一.文件和目录权限 在Linux系统中,用户可以对每一个文件或目录都具有访问权限,这些访问权限决定了谁能访问,以及如何访问这些文件和目录. 1.文件权限简介 在Linux系统中,每一位用户都有对文件或 ...

  6. tracert-命令小结

          前言:今天在阅读“Web性能权威指南”这本书的时候,发现 tracert 这个命令挺有意思的,在分析网络性能瓶颈的时候也能使用的到,在此就小记一笔以备后用. 1:作用 tracert 是一 ...

  7. java httpclient cookie

    BasicCookieStore cookieStore = new BasicCookieStore();BasicClientCookie cookie = new BasicClientCook ...

  8. ios https适配(单向验证)

    版权声明:本文为博主原创文章,未经博主允许不得转载. https是http+tls.是在http和tcp之间添加了一层ssl加密验证,ssl将http发送的信息在将要发到传输层时进行了加密,同样数据从 ...

  9. php获取当月天数及当月第一天及最后一天、上月第一天及最后一天实现方法

    1.获取上个月第一天及最后一天.    echo date('Y-m-01', strtotime('-1 month'));    echo "<br/>";     ...

  10. oracle重装系统后恢复

    前提:各种文件都存在 1.将原oracle文件夹app更名为app_old 2.重新安装oracle(路径,实例等最好都一样),配置监听,服务能正常启动,连接进入数据库 3.关掉oracle服务,将新 ...