
- CentOS 6 已停止维护 (EOL):这意味着它不再接收安全更新,存在严重的安全风险。强烈建议您在生产环境中升级到 CentOS 7/8 或其他仍在维护的操作系统(如 Rocky Linux, AlmaLinux, Ubuntu LTS 等),本文档仅适用于学习、测试或无法升级的遗留环境。
- PPTP 协议不安全:PPTP (Point-to-Point Tunneling Protocol) 是一种较老的 VPN 协议,已被证明存在安全漏洞,它容易被破解,不适合处理敏感数据,如果可能,请优先考虑使用更安全的协议,如 L2TP/IPsec 或 OpenVPN,本教程将专注于 PPTP,因为它在 CentOS 6 上配置相对简单。
第一步:准备工作
-
一台 CentOS 6 服务器:确保你有服务器的 root 权限或具有
sudo权限的用户。 -
服务器公网 IP 地址:你的服务器必须有一个可公开访问的 IP 地址。
-
防火墙和 SELinux:这是在 CentOS 上最常遇到的问题,我们会详细处理。
-
更新系统:将系统更新到最新状态。
(图片来源网络,侵删)# 切换到 root 用户 sudo -i # 更新所有已安装的包 yum update -y
第二步:安装 PPTP 服务
CentOS 6 的官方软件源中包含了 pptpd 包,我们可以直接使用 yum 安装。
yum install -y pptpd
安装完成后,pptpd 服务会自动启动,但为了确保,我们可以手动启动它并设置为开机自启:
# 启动 PPTP 服务 service pptpd start # 设置开机自启 chkconfig pptpd on
第三步:配置 PPTP 服务器
PPTP 的主要配置文件是 /etc/pptpd.conf,我们需要编辑这个文件来定义 VPN 客户端可以获取的 IP 地址池。
# 使用 vi 或 nano 编辑器打开配置文件 vi /etc/pptpd.conf
找到并修改以下两行(如果被注释了,请取消注释):

# 将 localip 设置为服务器的内网 IP(如果服务器有)或保留为 0.0.0.0 localip 192.168.0.1 # 将 remoteip 设置为分配给 VPN 客户端的 IP 地址池 # 这个地址池不能与你服务器所在网络的网段冲突 remoteip 192.168.0.234-238
解释:
localip:PPTP 服务器在 VPN 隧道内使用的 IP 地址,通常使用一个内网 IP 即可。remoteip:VPN 客户端连接成功后,从这个地址池中动态获取一个 IP 地址。168.0.234-238表示可以分配 5 个 IP 地址给客户端。
保存并退出文件(在 vi 中是 wq)。
第四步:配置 DNS 和客户端 IP 地址
这个配置文件用于告诉客户端如何解析域名(DNS),以及是否让客户端使用服务器分配的 IP 地址。
编辑 /etc/ppp/options.pptpd 文件:
vi /etc/ppp/options.pptpd
找到以下两行,确保它们没有被注释,并修改为你需要的 DNS 服务器(推荐使用 Google DNS 或 Cloudflare DNS):
#ms-dns 10.0.0.1 # 这行可以注释掉或替换 ms-dns 8.8.8.8 ms-dns 8.8.4.4 # 或者使用 Cloudflare DNS # ms-dns 1.1.1.1 # ms-dns 1.0.0.1
保存并退出。
第五步:创建 VPN 用户
VPN 的用户名和密码存储在 /etc/ppp/chap-secrets 文件中,这个文件的格式是:
客户端名 服务名 密码 允许的IP地址(*表示任意)
编辑该文件:
vi /etc/ppp/chap-secrets
在文件末尾添加你的用户,例如添加一个名为 vpnuser,密码为 your_strong_password 的用户:
# Secrets for authentication using CHAP # client server secret IP addresses vpnuser pptpd "your_strong_password" *
注意: 密码最好用双引号括起来,特别是当密码中包含特殊字符时。
保存并退出。
第六步:开启 IP 转发
为了让 VPN 客户端能够通过你的服务器访问互联网,必须开启 Linux 内核的 IP 转发功能。
编辑 /etc/sysctl.conf 文件:
vi /etc/sysctl.conf
找到下面这行,确保它没有被注释掉(去掉行首的 ):
net.ipv4.ip_forward = 1
保存后,执行以下命令使修改立即生效:
sysctl -p
第七步:配置防火墙和 SELinux(最关键的一步)
这是导致连接失败最常见的原因,我们需要配置防火墙(iptables)和 SELinux 来允许 PPTP 流量。
配置防火墙 (iptables)
我们需要添加两条规则:
- 允许 GRE 协议(PPTP 使用 GRE 协议封装数据)。
- 允许 PPTP 端口(TCP 1723)。
# 允许 GRE 协议 iptables -A INPUT -p gre -j ACCEPT # 允许 PPTP 端口 1723 iptables -A INPUT -p tcp --dport 1723 -j ACCEPT # 允许 NAT 转换(让客户端能上网) iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o eth0 -j MASQUERADE # 注意:请将 192.168.0.0/24 替换为你自己设置的 remoteip 网段 # 将 eth0 替换为你服务器的外网网卡名称(通常可以用 `ip a` 查看) # 保存防火墙规则,使其重启后仍然有效 service iptables save
配置 SELinux
SELinux 默认会阻止 PPTP 的建立,我们需要安装一个策略包来允许它。
# 安装 PPTP SELinux 支持 yum install -y ppp-mplsgw
安装这个包后,SELinux 策略会自动调整,通常就足够了,如果仍有问题,可以尝试以下命令(但通常不需要):
# 这条命令会放宽 PPTP 相关的 SELinux 策略,有安全风险,慎用 # setsebool -P pptpd_anon_writable 1
重启防火墙以应用所有更改:
service iptables restart
第八步:重启 PPTP 服务并测试
所有配置都已完成,重启 pptpd 服务以确保所有配置都已加载。
service pptpd restart
如何测试?
-
在客户端连接:
- Windows: "网络和共享中心" -> "设置新的连接或网络" -> "连接到工作区" -> "使用我的 Internet 连接 (VPN)"。
- macOS: "系统偏好设置" -> "网络" -> 点击 号,选择 "VPN" -> "PPTP",然后填写服务器地址(你的公网 IP)、账户名和密码。
- iOS/Android: 在 Wi-Fi 设置中,找到 VPN 选项,添加 PPTP VPN,填写服务器地址、账户名和密码。
-
连接后测试:
- 连接成功后,你的客户端应该会从服务器获取一个 IP 地址(
168.0.234)。 - 打开浏览器,访问
http://ipinfo.io或https://www.whatismyip.com,查看你的公网 IP 地址是否已经变成了服务器的 IP 地址。 - IP 地址变了,并且可以正常上网,那么恭喜你,VPN 搭建成功了!
- 连接成功后,你的客户端应该会从服务器获取一个 IP 地址(
常见问题排查
如果连接失败,请按以下步骤排查:
-
检查服务状态:
service pptpd status
确保服务正在运行。
-
检查日志:
- PPTP 服务日志:
/var/log/messages - PPP 连接日志:
/var/log/secure使用tail -f命令可以实时查看日志,方便在
- PPTP 服务日志:
