上一篇文章介绍了如何在Ubuntu服务器上搭建IPSEC L2TP VPN服务器。继续介绍如何在Ubuntu服务器上搭建PPTP VPN服务器。

首先安装以下所需包

#apt-get install pptpd ufw

打开所需端口

#ufw allow /tcp
#ufw allow
#ufw enable

配置防火墙转发规则

编辑 /etc/ufw/before.rules, 添加以下内容

-A ufw-before-input -p  -j ACCEPT
-A ufw-before-output -p  -j ACCEPT

然后重启ufw

#ufw disable && ufw enable

配置文件

配置DNS,用习惯的编辑器打开 /etc/ppp/pptpd-options 文件,添加以下两行

ms-dns 8.8.8.8
ms-dns 8.8.4.4

!注!一定要添加主机能够连接上的DNS服务器。上面只是个例子。

配置IP地址,编辑 /etc/pptpd.conf ,注释掉以下两行,并添加自己的内容

localip 192.168.11.10
remoteip 

localip 为本地主机的IP地址。如果使用的是VPS的话填写公网IP。其他情况直接填写本地IP地址即可。

remoteip 为分配给客户端用户的IP地址范围

配置用户名和密码,编辑 /etc/ppp/chap-secrets 按照以下格式添加

[Username] [Service] [Password] [Allowed IP Address]

例如

sampleuser pptpd samplepassword *

配置转发规则,编辑 /etc/sysctl.conf 文件,注释掉下列行

net.ipv4.ip_forward=

然后执行命令

#sysctl -p

配置防火墙

编辑 /etc/default/ufw 文件,将下列行的DROP改为ACCEPT

DEFAULT_FORWARD_POLICY="ACCEPT"

如果主机的内核版本高于3.18, 编辑 /etc/ufw/before.rules,在 *filter 那一行前添加以下内容(允许GRE协议,协议号47)

-A ufw-before-input -p  -j ACCEPT

编辑 /etc/rc.local,添加以下内容,允许防火墙默认转发

iptables -t nat -A POSTROUTING -s  -o enp3s0 -j MASQUERADE

192.168.111.0/24 为分配给连接过来的客户端的IP地址。enp3s0为网卡名称。根据自己的主机来进行设置。

完成

重启主机后,执行以下命令启动 pptpd 服务

#/etc/init.d/pptpd start

问题

以上步骤在Ubuntu 14.10版本以前可以正常使用。更新到Ubuntu 15.04以后出现客户端无法连接的问题。

查看日志发现以下问题

/usr/sbin/pppd: Plugin /usr/lib/pptpd/pptpd-logwtmp.so is , this is 

BUG内容详细

解决方法为(不推荐):编辑 /etc/pptpd.conf,注释掉下面一行后重启 pptpd 服务

#logwtmp

调试

在链接过程中可以通过查看以下日志文件来定位问题

$tail -f /var/log/syslog

ubuntu 搭建PPTP VPN服务器的更多相关文章

  1. CentOS 6.5搭建PPTP VPN服务器

    VPN是虚拟专用网络(Virtual Private Network)的缩写,VPN有多种分类方式,包括PPTP.L2TP.IPSec等,本文配置的VPN服务器是采用PPTP协议的,PPTP是在PPP ...

  2. Centos6一键搭建L2TP VPN服务器

    用VPS在墙上打洞还有一种叫L2TP,也是常见的一种方式.本脚本结合了L2TP(Layer Tunneling Protocol)和IPSec(Internet Protocol Security), ...

  3. 在 Vultr VPS 中 以 Debian 8 i386 (jessie) 为 操作系统 平台 手动 搭建 PPTP VPN 全过程

    更新服务器并安装 PPTP 服务  apt-get update apt-get upgrade apt-get install pptpd 编辑 /etc/pptpd.conf 找到 #locali ...

  4. 【已解决】新搭建的VPN服务器客户端无法正常连接

    昨天花了一天的时间,终于把VPN服务器搭建好了.但是客户端却一直提示无法拨号成功.查看VPN日志如下:[root@localhost log]# tail -f messages Jun 13 14: ...

  5. 搬瓦工VPS搭建PPTP VPN

    之前一直在用神器Lantern和Nydus(20元一个月),感觉还不错,但是各有各的不足! 于是开始自己动手折腾用VPS搭建VPN... 上网逛了一圈,最后选择了搬瓦工的VPS:512RAM,10G ...

  6. CentOS 6.3上搭建PPTP VPN

    系统版本:CentOS 6.3_x86_64 eth0:172.16.10.72(实验环境当公网IP使用) eth1:192.168.100.50 1.检测是否支持ppp模块 # cat /dev/p ...

  7. fedora 搭建pptp vpn server

    1 首先去sourceforge上下载pptpd的源码 http://sourceforge.net/projects/poptop/files/?source=navbar 2 对源码进行编译 ./ ...

  8. 在CentOS 5.8上搭建PPTP VPN服务

    在天朝上网,vpn已经是必备之物了,我也记录一下搭建vpn服务的方法. 1. 确认内核是否支持MPPE模块MPPE用来支持Microsoft Point to Point Encryption, 包括 ...

  9. Ubuntu搭建solr搜索服务器

    参考:http://blog.csdn.net/makang110/article/details/50971705 一:搭建solr服务器 1:安装jdk1.7,并配置环境变量 2:下载tomcat ...

随机推荐

  1. 支持Java Spring MVC

    Java Spring MVC能很方便在后台返回JSON数据,所以与MiniUI进行数据交互非常简单. 1)后台处理: 在MVC控制器中,可以通过方法参数接收数据,也可以通过Request接收更复杂的 ...

  2. Ibatis.net总是报:【ExecuteStoreCommand SqlParameterCollection 中已包含 SqlParameter】(转)

    今天很奇怪调用EF的ExecuteStoreCommand 出现了个这样的错误,怎么也调试不过,痛定思痛 原来 command被连着调用了而没有销毁掉   public static DataTabl ...

  3. 3、NAT

    <计算机网络(第5版)>P173    P182

  4. leetcode-【hard】273. Integer to English Words

    题目: 273. Integer to English Words Convert a non-negative integer to its english words representation ...

  5. SpringBoot的基础Pom

    原文连接 http://www.ibm.com/developerworks/cn/java/j-lo-spring-boot/ 名称 说明 spring-boot-starter 核心 POM,包含 ...

  6. .NET (五)委托第五讲:内置委托Predicate

    // 摘要: // 表示定义一组条件并确定指定对象是否符合这些条件的方法. // // 参数: // obj: // 要按照由此委托表示的方法中定义的条件进行比较的对象. // // 类型参数: // ...

  7. ASP.NET 表单验证实现浅析

    首先,自然是配置 Web.config,在 <system.web> 下设定: <authentication mode="Forms"> <form ...

  8. thinkphp 配合mongodb

    首先在config.php里面添加配合mongodb的数据库连接 'DB_TYPE'=>'mongo',// 数据库类型 'DB_HOST'=>'localhost',// 服务器地址 ' ...

  9. 用CMake设置Visual Studio工程中第三方库

    较大的工程文件中一般会调用动态库或者静态库,如果这些库文件是当前工程包含的项目,CMake会自动识别并添加Debug和Release编译时需要的库文件路径和文件名,可以使用命令: Target_Lin ...

  10. dynamic 的使用 待续

    Dynamic 使用场景之一 : 替代反射 class Me { public string Blog { get; set; } public string GetName() { return&q ...