CentOS系统中配置PPTP VPN时出现错误代码691的排查与解决方案

在企业网络或远程办公环境中,使用CentOS搭建VPN服务(尤其是PPTP协议)是一种常见且经济高效的方案,当用户尝试通过Windows客户端连接到CentOS服务器上的PPTP服务时,常常会遇到“错误代码691”——该错误提示表示“用户名或密码无效”,虽然表面上看是认证失败,但实际原因可能涉及多个层面,包括服务配置、防火墙规则、用户权限和日志分析等。

我们要明确PPTP(Point-to-Point Tunneling Protocol)是一种基于TCP和GRE协议的隧道协议,其认证过程依赖于PAP/CHAP(质询握手认证协议),而CentOS通常通过pptpd服务来提供PPTP功能,当用户连接失败并显示错误691时,我们应从以下几个方面进行系统性排查:

第一步:确认pptpd服务是否正常运行
执行命令 systemctl status pptpd 检查服务状态,若服务未启动,请使用 systemctl enable pptpd && systemctl start pptpd 启动并设置开机自启,同时检查 /etc/pptpd.conf 配置文件,确保已正确配置本地IP地址(localip)、远端IP池(remoteip)以及DNS服务器等参数。

localip 192.168.1.1
remoteip 192.168.1.100-150

第二步:验证PPP认证配置
关键文件为 /etc/ppp/chap-secrets,该文件定义了允许连接的用户名、服务器名、密码及IP地址限制,格式如下:


注意:若未指定IP地址,所有客户端均可连接;若指定了IP,则仅限该IP访问,错误691常见于此文件格式错误、密码不匹配或缺少空格分隔符等问题,建议用 pppoe-serverpapd 工具测试认证是否成功。

第三步:检查iptables防火墙规则
PPTP使用TCP 1723端口用于控制通道,以及GRE协议(协议号47)传输数据,CentOS默认防火墙可能阻止这些流量,需添加如下规则:

iptables -A INPUT -p tcp --dport 1723 -j ACCEPT
iptables -A INPUT -p gre -j ACCEPT
iptables -A FORWARD -p gre -j ACCEPT

若使用firewalld,可执行:

firewall-cmd --add-port=1723/tcp --permanent
firewall-cmd --add protocol=gre --permanent
firewall-cmd --reload

第四步:查看系统日志定位问题
使用 journalctl -u pptpd.servicetail -f /var/log/messages 查看实时日志,寻找类似“Failed to authenticate user”的记录,这有助于判断是身份验证失败还是其他底层问题(如IP分配冲突、GRE封装异常)。

第五步:确认客户端配置无误
Windows客户端中,确保选择“Microsoft CHAP Version 2”或“Microsoft CHAP”作为认证方式,且输入的用户名和密码与chap-secrets中完全一致(区分大小写),某些版本的Windows对PPTP支持有限,建议使用较新的系统或更新补丁。

若以上步骤均无误但仍报691,可能是系统内核模块缺失导致GRE无法加载,执行 modprobe gre 并确认 lsmod | grep gre 返回非空结果,若无输出,说明模块未加载,需手动加载或重新编译内核支持。

CentOS下PPTP连接错误691虽常见,但通过逐层排查服务状态、认证配置、防火墙规则和日志信息,基本可以快速定位并解决问题,对于安全性要求较高的场景,建议逐步过渡到更安全的OpenVPN或WireGuard方案,以避免PPTP协议固有的加密漏洞。

client server secret IP addresses  第1张

VPN加速器|半仙VPN加速器-免费VPN梯子首选半仙VPN