如何在Unbuntu上快速部署PPTP服务

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在Unbuntu上快速部署PPTP服务相关的知识,希望对你有一定的参考价值。

参考技术A 一、PPTP简介
协议:TCP,端口1723
协议:GRE,协议号47
依赖服务:pppd
二、快速部署
搭建环境
Ubuntu Server 10.04~11.04
pptpd v1.3.4
pppd version 2.4.5
1.安装软件包
在Ubuntu Server上默认是已经安装pppd服务的,如果你没有,请一并安装。
apt-get install pptpd ppp

2./etc/pptpd.conf
option /etc/ppp/pptpd-options
logwtmp
localip 10.10.10.1
remoteip 10.10.10.100-245

option指令告诉pptpd应该让pppd读取哪个配置文件
logwtmp插件会将每次用户登录情况记账到/var/log/wtmp文件
这不是文本文件,需要使用last命令读取:

last -f /var/log/wtmp

localip和remoteip所在网段不得和服务器、用户所在网段冲突。
3.重启PPTP服务
对pptpd.conf配置文件所做的修改需要重启pptpd服务
/etc/init.d/pptpd restart

4./etc/ppp/pptpd-options
对ppp配置文件所做的修改,无需重启pppd服务,因为pppd由pptpd启动,那时所做的更新会自动应用上去。
name pptpd
refuse-pap
refuse-chap
refuse-mschap
require-mschap-v2
require-mppe-128
ms-dns 8.8.8.8
ms-dns 8.8.4.4
proxyarp
nodefaultroute
lock
nobsdcomp
persist
mtu 1404
mru 1404

5.启用转发
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

对于OpenVZ的主机,可能不支持MASQUERADE,此时需要使用SNAT:
iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to-source $IP

其中$IP就是你主机的外网IP地址
三、测试
1.启用测试用户
编辑/etc/ppp/chap-secrets文件,加入如下行:
# Secrets for authentication using CHAP
# client server secret IP addresses
guest pptpd password *

该行创建一个用户,用户名为guest,密码为password(明文)
server字段与pptpd-options配置文件中的name属性对应。还可以星号(*)代替,表示不限调用服务。
IP address表示来源IP,这里星号(*)表示接受所有连接。
对来源IP的过滤应该由iptables防火墙来完成。读者可以查阅本博客关于iptables的相关文章进行设置。
2.拨号
可以在Windows系统、iOS上与PPTP服务器连接。
连接方法请参看这篇文章。(更新中)
3.调试
PPTP服务会调用ppp进行验证,日志记录在/var/log/syslog中
如果在pptpd-options配置文件中启用debug开关,则还会出现在/var/log/debug文件中
我们经常会遇到如下错误消息:
GRE: Bad checksum from pppd.

这可能是由于你的主机在NAT后面,也可能是当地网络对GRE协议支持不佳。
如果出现
LCP: timeout sending Config-Requests

这很有可能是你的ISP导致的。出于这种不稳定、不和谐因素,我们有必要使用更稳定、更安全的L2TP。

如何以编程方式在 macOS Sierra/High Sierra 上创建 PPTP *** 连接?

【中文标题】如何以编程方式在 macOS Sierra/High Sierra 上创建 PPTP *** 连接?【英文标题】:How to programmatically create a PPTP *** connection on macOS Sierra/High Sierra? 【发布时间】:2018-11-03 00:32:11 【问题描述】:

Apple 从其网络配置系统中删除了 macOS Sierra 中的高级 PPTP 支持。但是,PPP 内部仍然存在,包括/usr/sbin/pppd/etc/ppp/

如何以编程方式在 macOS Sierra / High Sierra 上使用剩余的内容启动 PPTP *** 连接?

【问题讨论】:

【参考方案1】:

答案:

此方法创建一个 发送所有流量并且 覆盖其他 DNS 提供商的 PPTP 连接,这意味着它适用于多个同时具有不同的 *** 连接DNS搜索域,并按顺序关闭它。

不发送所有流量需要您事先知道 *** 子网。如果不这样做,则必须发送所有流量(见下文),因为普通 PPP/LCP 无法告诉客户端其子网(尽管理论上 ip-upip-down 脚本可以从收到的 IP 地址中猜出它)。

将此 perl 保存为 /usr/local/bin/pptp:

#!/usr/bin/env perl
if (@ARGV) 
    my $name = $ARGV[0];
    if (length $name && -e "/etc/ppp/peers/$name") 
        my $pid;
        $SIG"INT" = "IGNORE";
        die "fork: $!" unless defined ($pid = fork);
        if ($pid)  # parent
            $SIG"INT" = sub 
                kill HUP => $pid;
            ;
            wait;
            exit;
         else  #child
            $SIG"INT" = "DEFAULT";
            exec "pppd", "call", $name;
            exit;
        
     else 
        print "Error: PPTP name: $name\n";
    
 else 
    opendir my $d, "/etc/ppp/peers" or die "Cannot read /etc/ppp/peers";
    while (readdir $d) 
        print "$_\n" if !($_ eq "." || $_ eq "..");
    
    closedir $d;

sudo pptp AcmeOffice 运行它,其中AcmeOffice 是PPP 连接名称,然后使用单个Control-C/SIGINT 将其关闭。

/etc/ppp/peers中,创建PPP连接文件,本例为/etc/ppp/peers/AcmeOffice

plugin /System/Library/SystemConfiguration/PPPController.bundle/Contents/PlugIns/PPPDialogs.ppp
plugin PPTP.ppp
noauth
# debug 
redialcount 1
redialtimer 5
idle 1800
#mru 1320
mtu 1320
receive-all
novj 0:0
ipcp-accept-local
ipcp-accept-remote
refuse-pap
refuse-chap
#refuse-chap-md5
refuse-eap
hide-password
#noaskpassword
#mppe-stateless 
mppe-128 
mppe-stateful 
require-mppe 
passive 
looplocal 
nodetach
# defaultroute
#replacedefaultroute
# ms-dns 8.8.8.8
# usepeerdns
noipdefault
# logfile /tmp/ppp.AcmeOffice.log 
ipparam AcmeOffice
remoteaddress office.acme.com
user misteracme
password acme1234

最后 4 个选项是特定于连接的。请注意,密码以明文形式存储。推荐使用chown root:wheelchmod 600nodetachipcp-accept-localipcp-accept-remotenoipdefault 很关键。

由于我们不会成为/替换默认路由,因此您必须手动更改路由表。在/etc/ppp/ip-up 脚本中添加AcmeOffice 条目:

#!/bin/sh
#params: interface-name tty-device speed local-IP-address remote-IP-address ipparam

PATH=$PATH:/sbin:/usr/sbin

case "$6" in
    AcmeOffice)
        route -n add -net 192.168.1.0/24 -interface "$1"
        ;;
    AcmeLab)
        route -n add -net 192.168.2.0/24 -interface "$1"
        ;;
    AcmeOffshore)
        route -n add -net 192.168.3.0/24 -interface "$1"
        ;;
    ***Book)
        ;;
    *)
        ;;
esac

还有你的/etc/ppp/ip-down 脚本:

#!/bin/sh
#params: interface-name tty-device speed local-IP-address remote-IP-address ipparam

PATH=$PATH:/sbin:/usr/sbin

case "$6" in
    AcmeOffice)
        route -n delete -net 192.168.1.0/24 -interface "$1"
        ;;
    AcmeLab)
        route -n delete -net 192.168.2.0/24 -interface "$1"
        ;;
    AcmeOffshore)
        route -n delete -net 192.168.3.0/24 -interface "$1"
        ;;
    ***Book)
        ;;
    *)
        ;;
esac

如果 *** 有 DNS 搜索域(即somehost.office.acme.com),则在/etc/resolver/ 中创建一个以 DNS 后缀命名的文件,例如 /etc/resolver/office.acme.com,内容如下:

nameserver 192.168.1.1
domain office.acme.com

请注意,这需要事先知道目标域和名称服务器。理论上ip-up & ip-down 可以按需创建和删除这个文件。

要发送所有流量(如果您不知道目标子网),请取消注释 PPP 连接文件中的 #defaultroute 并将 ip-upip-down 条目留空(例如 ***Book 示例)。要使用 *** 覆盖您的 DNS,请取消注释 usepeerdns

【讨论】:

以上是关于如何在Unbuntu上快速部署PPTP服务的主要内容,如果未能解决你的问题,请参考以下文章

如何快速部署OpenStack环境

如何利用Azure DevOps快速实现自动化构建测试打包及部署

打包NodeJs-Docker并快速部署

Python Flask 快速部署网页demo

如何快速使用 Heroku 来部署你的 Laravel 应用

如何利用 docker 快速部署 Mysql 服务