服务端部署
环境检查
查看系统是否支持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地址,其中第二和第四字段可以是星号。
注意:
- 服务器名 ( pptpd ) 不要随意修改, 如果修改请确保与
/etc/pptpd.conf
中的name
保持一致。- 最末的
*
代表客户端的 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
输入执行
vi /etc/ppp/ip-up
命令,进入/etc/ppp/ip-up
文件中。在
/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 中进行状态确认
此后,就可以进行自定义路由配置
可能遇到的问题
- 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 与网页加载。
- 在 管理员cmd 下运行
- 服务端方式:
- 详见文中 “进阶配置” – “修改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