在当今的网络环境中,虚拟专用网络(VPN)技术扮演着至关重要的角色,它能够为用户提供安全、私密的远程访问通道,PPTP(Point-to-Point Tunneling Protocol)作为一种经典的 VPN 协议,因其配置简单、兼容性好,仍在许多特定场景下被使用,当我们在一台 CentOS 服务器上部署 PPTP 服务,并希望利用多个公网 IP 地址时,不仅可以实现负载均衡,还能为不同用户或业务分配独立的出口 IP,提升网络的灵活性和管理效率,本文将详细介绍如何在 CentOS 系统上配置一个支持多 IP 的 PPTP VPN 服务。

准备工作
在开始安装和配置之前,请确保您的环境满足以下基本条件:
- CentOS 服务器:一台已安装 CentOS 7 或 CentOS 8 的服务器。
- Root 权限:需要拥有 root 权限或 sudo 权限来执行系统级命令。
- 多个公网 IP:确保您已经拥有多个公网 IP 地址,并且它们已经正确地绑定到了服务器的网络接口上,您可以通过
ip addr命令来验证 IP 是否已生效。 - TUN/TAP 模块:PPTP VPN 依赖于内核的 TUN 模块,请确保该模块已加载,可以使用以下命令检查:
lsmod | grep tun
如果没有任何输出,说明模块未加载,VPS 默认都已加载,若未加载,请联系服务商开启。
安装 PPTP 服务
CentOS 的官方软件源(Extras)中包含了 PPTP 所需的软件包,安装过程非常直接。
打开终端,执行以下命令来安装 pptpd(PPTP 守护进程)和 ppp(点对点协议软件包):
yum install -y pptpd ppp
安装完成后,我们就可以进入核心的配置环节。
配置 PPTP 服务
PPTP 的主要配置涉及三个关键文件:/etc/pptpd.conf、/etc/ppp/options.pptpd 和 /etc/ppp/chap-secrets。
配置主文件 /etc/pptpd.conf
此文件用于设置 VPN 服务器的本地 IP 和分配给客户端的 IP 地址池。
使用 vi 或 nano 编辑器打开文件:
vi /etc/pptpd.conf
找到并修改或添加以下行:
# 设置 VPN 服务器的本地 IP,可以指定多个,用逗号隔开 # 这些 IP 将作为客户端连接后的网关 localip 192.168.0.1,192.168.0.2 # 设置分配给 VPN 客户端的 IP 地址池 remoteip 192.168.0.100-200
这里的 localip 是实现多 IP 关键的一步,我们指定了两个内网 IP(168.0.1 和 168.0.2),PPTP 服务会在这两个地址上监听。remoteip 则定义了一个可供客户端使用的 IP 地址范围。
配置 PPP 选项 /etc/ppp/options.pptpd
此文件定义了 VPN 连接的详细参数,如 DNS 服务器、加密方式等。
编辑文件:

vi /etc/ppp/options.pptpd
建议修改或确认以下配置项:
# 指定 VPN 服务器的主机名 name pptpd # 拒绝 PAP 认证,更安全的 CHAP/MSCHAP 会被使用 refuse-pap # 拒绝 CHAP 认证 refuse-chap # 拒绝 MS-CHAP 认证 refuse-mschap # 要求使用 MS-CHAP-v2 认证 require-mschap-v2 # 要求 MPPE 128 位加密 require-mppe-128 # 设置客户端的 DNS 服务器,可以使用公共 DNS ms-dns 8.8.8.8 ms-dns 1.1.1.1 # 设置 MTU 和 MRU,优化网络性能 mtu 1470 mru 1470 # 启用调试日志(可选,用于排错) # debug # dump
配置用户账户 /etc/ppp/chap-secrets
这是存储 VPN 用户名和密码的文件,格式为:用户名 服务 密码 IP地址。
编辑文件:
vi /etc/ppp/chap-secrets
按照以下格式添加用户。 代表允许该用户从任何 IP 连接。
# Secrets for authentication using CHAP
# client server secret IP addresses
user1 pptpd password123 *
user2 pptpd mysecurepass *
请确保文件权限安全,仅允许 root 用户读写:
chmod 600 /etc/ppp/chap-secrets
配置系统转发与防火墙
为了让 VPN 客户端能够通过服务器访问互联网,我们需要开启 IP 转发并配置防火墙规则。
开启 IP 转发
编辑 /etc/sysctl.conf 文件:
vi /etc/sysctl.conf
添加或修改以下行:
net.ipv4.ip_forward = 1
保存后,执行以下命令使配置立即生效:
sysctl -p
配置防火墙
这里以 CentOS 7/8 默认的 firewalld 为例。
# 添加 PPTP 服务到防火墙规则 firewall-cmd --permanent --add-service=pptp # 允许 GRE 协议(PPTP 必需) firewall-cmd --permanent --direct --add-rule ipv4 filter INPUT 0 -p gre -j ACCEPT firewall-cmd --permanent --direct --add-rule ipv4 filter OUTPUT 0 -p gre -j ACCEPT # 开启网络地址转换(NAT),让 VPN 流量可以出去 # 假设你的主网卡是 eth0,请根据实际情况修改 firewall-cmd --permanent --direct --add-rule ipv4 nat POSTROUTING 0 -o eth0 -j MASQUERADE # 重载防火墙配置 firewall-cmd --reload
启动服务与客户端连接
所有配置完成后,启动 PPTP 服务并设置开机自启:
systemctl start pptpd systemctl enable pptpd
您可以在 Windows、macOS 或移动设备上创建一个新的 PPTP VPN 连接,使用服务器的任意一个公网 IP、您在 chap-secrets 中配置的用户名和密码进行连接。

多IP出口策略的实现
前面的配置让 PPTP 服务监听在多个内网 IP 上,但所有客户端的出口流量默认仍通过服务器的默认公网 IP,要实现不同用户走不同出口 IP,需要结合 iptables 的策略路由。
我们希望 user1 的流量通过公网 IP 0.113.10 出去,而 user2 通过 0.113.11。
为不同的用户分配固定的内网 IP,修改 /etc/ppp/chap-secrets:
user1 pptpd password123 192.168.0.101
user2 pptpd mysecurepass 192.168.0.102
使用 iptables 为不同的源 IP 打上标记,并基于标记进行 NAT:
# 为 user1 的流量(源IP 192.168.0.101)打标记 1 iptables -t mangle -A PREROUTING -s 192.168.0.101 -j MARK --set-mark 1 # 为标记 1 的流量做 SNAT,指定出口 IP 为 203.0.113.10 iptables -t nat -A POSTROUTING -m mark --mark 1 -j SNAT --to-source 203.0.113.10 # 为 user2 的流量(源IP 192.168.0.102)打标记 2 iptables -t mangle -A PREROUTING -s 192.168.0.102 -j MARK --set-mark 2 # 为标记 2 的流量做 SNAT,指定出口 IP 为 203.0.113.11 iptables -t nat -A POSTROUTING -m mark --mark 2 -j SNAT --to-source 203.0.113.11
保存 iptables 规则,即可实现精细化的多 IP 出口控制。
相关问答 (FAQs)
我已经按照教程配置完毕,客户端也能成功连接,但无法访问任何网站,这是什么原因?
解答: 这是一个非常常见的问题,通常由以下三个原因导致:
- IP 转发未开启:请再次确认
/etc/sysctl.conf中的net.ipv4.ip_forward值是否为1,并已执行sysctl -p。 - 防火墙或 NAT 规则错误:这是最可能的原因,请检查
firewalld或iptables的规则是否正确配置,特别是 GRE 协议是否被放行,以及 MASQUERADE 或 SNAT 规则是否正确指向了你的公网网卡,可以使用iptables -t nat -nvL POSTROUTING查看 NAT 规则是否有流量计数。 - DNS 设置问题:客户端连接后可能无法正确解析域名,可以尝试在
/etc/ppp/options.pptpd中更换为其他公共 DNS,如114.114.114,或者在客户端手动设置 DNS。
PPTP 协议安全吗?在生产环境中我应该使用它吗?
解答: PPTP 协议本身存在一些已知的安全漏洞,特别是其使用的 MS-CHAPv2 认证协议已经被证明是不够安全的,容易受到攻击,对于处理敏感数据或对安全性要求极高的生产环境,不推荐使用 PPTP,更安全的替代方案包括:
- OpenVPN:开源、灵活、安全性高,是目前的主流选择之一。
- WireGuard:新一代 VPN 协议,代码简洁、性能极高、安全性强。
- L2TP/IPsec:将 L2TP 和 IPsec 结合,提供了更强的加密和认证。
如果只是用于一些临时的、对安全要求不高的场景,或者为了兼容旧设备,PPTP 仍然是一个快速部署的选项,但在任何情况下,都应意识到其局限性,并优先考虑更现代、更安全的 VPN 技术。