在CentOS7搭建PPTP-VPN服务及客户端配置


服务端部署

环境检查

查看系统是否支持PPTP

modprobe ppp-compress-18 && echo success

应该输出:success

查看系统是否开启TUN/TAP

cat /dev/net/tun

应该输出:cat: /dev/net/tun: File descriptor in bad state

是否开启ppp

cat /dev/ppp

应该输出:cat: /dev/ppp: No such device or address

如果环境不满足上面3个条件,表示很可能不支持 pptp 。

例外:linode的 xen 、kvm 服务器,也是支持的 pptp 的。可能是 linode 内核是定制的,并不是外部 ko 模块,与原版 CentOS 表现有所不一致。

环境安装

安装必要包

首先安装 epel 源

yum install -y epel-release

安装 pptp 相关包

yum install pptpd net-tools iptables-services -y

修改相关配置文件

  • 以下修改涉及三个主要配置:
    • 主服务配置文件 /etc/pptpd.conf
    • DNS等选项配置文件 /etc/ppp/options.pptpd
    • 用户授权配置文件 /etc/ppp/chap-secrets
1. 主配置

/etc/pptpd.conf

结尾处增加如下两行,分别是 pptp 服务的虚拟网段网关,及分配给客户端的地址范围。

localip 192.168.9.1
remoteip 192.168.9.101-199
2. DNS配置

/etc/ppp/options.pptpd

结尾增加两行,给虚拟网段用的 dns 服务,可以使用主机商提供的 dns 服务器地址或公共 dns 。

ms-dns 223.5.5.5
ms-dns 119.29.29.29

如果是 linode 等海外服务器,可以使用谷歌的公共 dns 服务器地址

ms-dns 8.8.8.8
ms-dns 8.8.4.4
3. 用户授权配置

/etc/ppp/chap-secrets

每行代表一套帐号,该文件默认有简短说明。

示例如下,以空格或者tab分隔的4个字段:分别是用户名、服务器名称、密码、客户端IP地址,其中第二和第四字段可以是星号。

注意:

  1. 服务器名 ( pptpd ) 不要随意修改, 如果修改请确保与 /etc/pptpd.conf 中的 name 保持一致。
  2. 最末的 * 代表客户端的 ip 地址由 pptpd 自动分配。
# client  server  secret  IP addresses
vpntest pptpd 111222333 *

开启iP转发

编辑 /etc/sysctl.conf 文件

修改配置前可以先执行 sysctl -a | grep "net.ipv4.ip_forward" 进行确认。

#将“net.ipv4.ip_forward”改为1,开启ip转发。这个不是必须的
net.ipv4.ip_forward=1
#同时注释掉 “net.ipv4.tcp_syncookies = 1” (前面加#)
# net.ipv4.tcp_syncookies = 1
#保存退出`sysctl.conf`文件编辑后,运行下面的命令,能让设置立即生效 
sysctl -p

启动服务

# 启动服务
service pptpd start
service pptpd status

# 添加到开机自启
systemctl enabled pptpd

#启动服务后,可能通过系统日志查看运行情况
tailf /var/log/messages

至此,已完成服务端的基本部署工作。

进阶配置

以下配置为可选配置,可根据实际情况进行配置。

修改MTU

  1. 输入执行 vi /etc/ppp/ip-up 命令,进入 /etc/ppp/ip-up 文件中。

  2. /etc/ppp/ip-up 文件中添加 ifconfig ppp1 mtu 1320 命令。

    回显如下图所示,表示命令添加成功。

公网放行及传输优化

如果服务器处于公网,还要对 PPTP 服务端口进行放行。

#!/bin/sh
# 允许连接PPTP服务
iptables -I INPUT -p tcp --dport 1723 -j ACCEPT
# 允许建立VPN隧道以验证用户名密码
iptables -I INPUT -p gre -j ACCEPT
# 建立NAT转换规则
iptables -t nat -I POSTROUTING -s 192.168.9.0/24 -o eth0 -j MASQUERADE
# 允许pptpd转发
iptables -I FORWARD -i ppp+ -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT
# 优化网络数据传输速度
iptables -I FORWARD -p tcp --syn -i ppp+ -j TCPMSS --set-mss 1356
echo "完成"

客户端配置

Windows

Windows 10自带VPN客户端

右键右下角电脑图标 “打开’网络和 Internet 设置’”

先在左侧栏找到 VPN 然后进行 “添加 VPN 连接”

根据提示进行填写,最后保存即可

点击刚才添加的 VPN 进行连接

连接成功后即可正常使用。

Linux

配置CentOS PPTP客户端

执行如下命令,安装PPTP软件包。

yum install -y ppp pptp pptp-setup

回显如下图所示,表示PPTP安装成功。

执行如下命令, 连接VPN服务端。

pptpsetup --create test --server [$IP] --username [$User] --password [$Password] --encrypt --start

说明:

[$IP] 、[$User] 、[$Password] 为 VPN 服务端的 IP 地址、用户名和密码。

回显如下图所示,表示已成功连接VPN服务端。

当系统提示已经被分配了 192.168.0.234 的客户端地址时,执行如下命令,可以看到 ppp0 网卡。

ifconfig | grep -A 10 ppp

回显如下图所示,表示命令执行成功。

执行如下命令,增加默认路由。

ip route replace default dev ppp0

回显如下图所示,表示命令执行成功。

增加路由后,您就可以访问VPN服务器。

OSX

高版本下已经移除系统自带,需要另寻客户端。

MikroTik

主界面找到 PPP

选择 PPTP Client

在 General 下配置合适 MTU

在 Dial Out 种配置服务端iP地址/域名、用户名、密码

出现前缀状态 R 代表连接成功

可以在 Status 中进行状态确认

此后,就可以进行自定义路由配置


可能遇到的问题

  1. Windows客户端可以进行DNS解析、HTTP访问,但HTTPS页面加载卡住
  • 原因:

    Windows本机网卡与服务端 pppX 网卡的 mtu 值不匹配。

  • 排查方式:

    • 服务端 ip a 下确认 网卡对应 mtu 值
    • 客户端在 管理员cmd 下运行 netsh interface ipv4 show subinterfaces 查看 VPN 网卡的 mtu 值。
  • 解决方式:

    • 客户端方式:
      • 管理员cmd 下运行 netsh interface ipv4 set subinterface "192.168.7.95" mtu=1300 store=persistent 以此保证客户端 mtu 小于或等于服务端 mtu 即可。
      • 然后再次验证当前 mtu 与网页加载。
    • 服务端方式:
      • 详见文中 “进阶配置” – “修改MTU” 。

Reference

如何使用CentOS 7实例配置PPTP VPN服务端到客户端的连接

CentOS 7 使用 pptpd 搭建 VPN 的 iptables 配置

SSL does not work on Windows 10 against rutracker.org via PPTP, but works with L2TP

Windows10自带VPN客户端怎么连接PPTP VPN(Windows10 VPN客户端使用图文教程)


文章作者: NesteaLin
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 NesteaLin !
  目录