⚠️ 重要提示:安全警告
强烈建议您优先考虑使用更安全的 VPN 协议,WireGuard、OpenConnect (AnyConnect) 或 OpenVPN。

- PPTP 协议非常古老,存在已知的安全漏洞,很容易被破解。
- 它不适合处理敏感数据(如网上银行、工作文件等)。
- 它在现代网络环境中可能被防火墙或 ISP 限制。
仅在以下情况下考虑使用 PPTP:
- 你需要连接到一些老旧的设备或客户端(如一些智能电视、游戏机、旧版手机App),这些设备只支持 PPTP。
- 你对安全性要求不高,只是用于临时的、非敏感的网络访问,例如访问国内被限制的网站或服务。
- 你了解并愿意承担相关风险。
第一步:准备工作
- 一台已刷入 OpenWrt 的路由器,并且可以正常上网。
- 通过 SSH 或 Telnet 登录到 OpenWrt 的命令行界面。
- 确保你的路由器已经连接到互联网,并且可以正常访问。
第二步:安装必要的软件包
OpenWrt 默认通常不包含 PPTP 服务器软件,我们需要手动安装。
在 OpenWrt 的命令行中执行以下命令:
opkg update opkg install ppp-mod-pptp pptpd
opkg update: 更新软件包列表。ppp-mod-pptp: PPTP 协议的核心 PPP 模块。pptpd: PPTP 守护进程,即服务器程序。
安装完成后,你可以使用以下命令检查服务是否已安装:

ls /usr/sbin/pptpd
如果路径存在,说明安装成功。
第三步:配置 PPTP 服务器
我们需要编辑两个主要配置文件:/etc/pptpd.conf 和 /etc/ppp/pptpd-options。
编辑主配置文件 /etc/pptpd.conf
使用 vi 或 nano 编辑器打开文件:
vi /etc/pptpd.conf
找到并修改以下两行,取消注释(去掉前面的 )并设置你想要的 VPN 服务器 IP 地址段和 DNS 服务器。
# 设置 VPN 客户端连接后分配的 IP 地址池 # localip 是服务器的虚拟 IP # remoteip 是分配给客户端的 IP 地址范围 localip 192.168.100.1 remoteip 192.168.100.100-150 # 设置 DNS 服务器,你可以使用公共 DNS 或你的路由器网关 # 推荐使用 8.8.8.8 和 1.1.1.1 ms-dns 8.8.8.8 ms-dns 1.1.1.1
说明:
localip 192.168.100.1: PPTP 服务器在虚拟网络中的地址。remoteip 192.168.100.100-150: 最多可以同时连接 51 个 VPN 客户端,IP 地址从.100到.150。ms-dns: 客户端将通过 VPN 使用这些 DNS 服务器。
保存并退出 (在 vi 中按 Esc,然后输入 wq 并回车)。
编辑 PPP 选项文件 /etc/ppp/pptpd-options
同样使用编辑器打开:
vi /etc/ppp/pptpd-options
确保文件中包含以下关键配置,大部分是默认值,但需要检查:
# PPTP 使用的网络协议 name pptpd # 不使用 chap-md5 认证,使用更通用的 mschap-v2 refuse-pap refuse-chap refuse-mschap require-mppe-128 # 加密方式 require-mppe # 不使用压缩 nobsdcomp # 不使用 VJ 头部压缩 novj novjccomp # 不使用 TCP 头部压缩 noproxyarp # 认证超时时间 lock # 路由设置,让客户端能访问整个 VPN 服务器所在的局域网 # + 代表允许,- 代表禁止 # + 代表允许访问服务器所在的局域网网络 # 如果你的 OpenWrt LAN 是 192.168.1.0/24,就写 +192.168.1.0/24 # 如果不需要访问局域网,可以注释掉或写 defaultroute # defaultroute # 让 VPN 客户端默认路由走 VPN (可选) # nodefaultroute # 不让 VPN 客户端默认路由走 VPN (可选) # proxyarp # 让 VPN 客户端像局域网设备一样存在 (可选) # ms-dns 8.8.8.8 # 这里也可以设置 DNS,但建议在 pptpd.conf 中统一设置
注意: require-mppe-128 和 require-mppe 确保了连接使用强制加密。refuse-mschap 是一个笔误,应该是 refuse-mschap-v1,但通常不影响,现代系统都使用 MSCHAPv2。
第四步:创建 VPN 用户账号
VPN 用户名和密码存储在 /etc/ppp/chap-secrets 文件中,这个文件的格式是:
客户端名 服务类型 密码 允许的IP地址(*代表任意)
使用编辑器打开文件:
vi /etc/ppp/chap-secrets
添加你的用户信息,每行一个用户,添加一个用户名为 myuser,密码为 mypassword 的账号:
# Secrets for authentication using CHAP # client server secret IP addresses myuser * mypassword *
说明:
myuser: 你的 VPN 登录用户名。- 服务类型,代表 PPTPD 服务器。
mypassword: 你的 VPN 登录密码。- 允许该用户从任何 IP 地址连接,如果你想限制用户只能从特定 IP 连接,可以填写那个 IP 地址。
保存并退出。
第五步:配置防火墙和端口转发
这是最关键的一步,否则 VPN 客户端无法连接。
允许 PPTP 流量通过防火墙
OpenWrt 使用 firewall 包,我们需要在 /etc/config/firewall 中添加规则。
vi /etc/config/firewall
在 config zone 部分找到你的 lan 区域(通常是第一个 zone),然后在 network 列表中添加 pptp。
config zone
option name 'lan'
option input 'ACCEPT'
option output 'ACCEPT'
option forward 'ACCEPT'
# 在这里添加 'pptp'
list network 'lan'
list network 'pptp'
在文件的末尾添加一个新的 zone 定义和 forwarding 规则:
# 在文件末尾添加以下内容
# 创建一个新的 zone 给 PPTP 客户端使用
config zone
option name 'vpn'
option input 'ACCEPT'
option output 'ACCEPT'
option forward 'REJECT'
option masq '1'
option mtu_fix '1'
list network 'pptp'
# 允许 lan 区域转发到 vpn 区域
config forwarding
option src 'lan'
option dest 'vpn'
添加端口转发规则(NAT Masquerade)
上面的 option masq '1' 已经为 vpn 区域做了 NAT,这通常就足够了,但为了确保 PPTP 数据包正确处理,我们还需要允许 GRE 协议(PPTP 使用的协议)。
在 /etc/config/firewall 中添加一个自定义规则来允许 GRE 协议:
# 在文件的 rule 部分添加
config rule
option name 'Allow-PPTP-GRE'
option src 'wan'
option dest 'lan'
option proto 'gre'
option target 'ACCEPT'
开放 WAN 口的 PPTP 端口
PPTP 使用 TCP 端口 1723 和 GRE 协议(IP 协议号 47),我们需要在防火墙上开放这些。
在 /etc/config/firewall 的 config rule 部分添加:
# 在文件末尾添加
config rule
option name 'Allow-PPTP'
option src 'wan'
option dest 'lan'
option proto 'tcp'
option target 'ACCEPT'
option dest_port '1723'
注意: GRE 是一种 IP 协议,不是端口,所以不能用 port 规则。Allow-PPTP-GRE 规则和 Allow-PPTP 规则一起使用能解决问题,如果仍有问题
