一个常驻后台的小服务:把指定的 PPPoE 宽带连接自动拨通,并一直保持在线。
装好之后你基本不用再管它 —— 开机自动运行,网线没插就不拨号,掉线自动重连, 拔了网线插回来也会自己恢复。
支持 Windows 10 / 11 / Server 2016 及以上(64 位)。
| 能力 | 说明 |
|---|---|
| 开机自动拨号 | 随 Windows 启动,不需要登录桌面 |
| 网线检测 | 拨号前先看网卡的物理链路,网线没插就不拨号,插上后自动继续 |
| 不重复拨号 | 连接已经在线时直接跳过,不会产生第二个连接 |
| 断线自动重连 | 掉线后自动重拨;连续失败会让重试间隔逐步变长,不会疯狂重试 |
| 免手工建连接 | 默认按 PPPoE 模板自动创建电话簿条目,不需要先在「网络和共享中心」里建「宽带连接」 |
| 停止不断网 | 停止服务不会断开宽带连接,连接会继续在线 |
| 账号密码不外泄 | 账号与密码永远不会出现在日志文件或 Windows 事件日志里 |
| 省资源 | 空闲时约 1 MB 内存、CPU 占用 0%,不产生周期性网络查询 |
从本项目的 Releases 页面下载 pppoe-<版本>-x86_64-pc-windows-msvc.zip,
解压到任意固定目录,例如 D:\pppoe:
D:\pppoe\
├── pppoe.exe
├── pppoe.toml
├── install.ps1
├── uninstall.ps1
└── README.md
pppoe.toml 就是配置文件本身(内含逐行注释),解压后直接编辑它即可;
pppoe.exe 与 pppoe.toml 必须放在同一个目录里。两个 .ps1 脚本会自动申请管理员权限。
下载页同时提供
SHA256SUMS.txt,可用它校验文件是否完整:Get-FileHash .\pppoe-0.1.0-x86_64-pc-windows-msvc.zip -Algorithm SHA256结果与
SHA256SUMS.txt中的一行一致即可。
notepad D:\pppoe\pppoe.toml最少只需要改三个值:
[dial]
entry_name = "Dr.COM" # 连接的名称,随便起个认得出来的即可
username = "12345678" # ← 换成你的宽带账号
password = "12345678" # ← 换成你的宽带密码配置文件包含明文密码,建议按第 3 步限制它的访问权限。 详细字段(重连间隔、日志级别、指定网卡等)在
pppoe.toml里都有逐行注释。
icacls D:\pppoe\pppoe.toml /inheritance:r /grant:r "BUILTIN\Administrators:F" "NT AUTHORITY\SYSTEM:F"只保留管理员与系统账户可读写。
在装服务之前先确认配置正确。这条命令会拨一次号,然后立刻挂断,不会干扰现有网络:
D:\pppoe\pppoe.exe dial-once看到 dial succeeded 就说明账号、连接名都没问题;失败请对照文末的「排障速查」。
想让它拨完保留连接用于观察,加 --keep。
推荐用脚本(普通 PowerShell 窗口即可,脚本会自己弹出 UAC 申请管理员权限):
cd D:\pppoe
.\install.ps1脚本依次做四件事:申请管理员权限 → 检查 pppoe.exe 与 pppoe.toml 是否齐全 →
检查账号和密码是否已填写(缺失时会指出该改哪两行并拒绝安装;模板里的示例值 12345678 不算缺失)→ 注册服务并启动。
想先看它要做什么、又不改动系统:.\install.ps1 -DryRun。
或者手动执行(需要管理员 PowerShell):
D:\pppoe\pppoe.exe install # 注册为开机自启动的服务
sc.exe start PppoeDialer
sc.exe query PppoeDialer # 状态应为 RUNNING安装完成后可以在 services.msc 里看到名为 PPPoE Auto Dialer 的服务。
服务被意外终止时,Windows 会在 5 秒后自动把它拉起来。
D:\pppoe\pppoe.exe dial-once # 试拨一次(拨完挂断)
D:\pppoe\pppoe.exe dial-once --keep # 试拨一次并保留连接
D:\pppoe\pppoe.exe list-connections # 看当前有哪些拨号连接、是否在线
D:\pppoe\pppoe.exe list-adapters # 看所有网卡及链路状态(排查网线检测问题)
D:\pppoe\pppoe.exe console # 前台运行、日志直接打在屏幕上,Ctrl+C 退出
D:\pppoe\pppoe.exe help # 全部命令
sc.exe start PppoeDialer # 启动服务
sc.exe stop PppoeDialer # 停止服务(不会断网)
D:\pppoe\pppoe.exe uninstall # 停止并卸载服务install / uninstall 需要管理员权限;stop 同样需要。
完整注释见 pppoe.toml。最常用的几项:
| 配置项 | 默认值 | 说明 |
|---|---|---|
dial.entry_name |
必填 | 连接名称,例如 Dr.COM |
dial.username |
必填 | 宽带账号 |
dial.password |
必填 | 宽带密码 |
dial.create_entry_if_missing |
true |
条目不存在时自动创建,一般不用改 |
dial.pbk_path |
空 | 电话簿文件路径,留空表示用服务自己账户的电话簿 |
dial.dial_timeout_secs |
90 |
单次拨号的最长等待,同时也决定了 sc stop 的最坏耗时 |
link_check.enabled |
true |
拨号前检测网线 |
link_check.adapter_name |
空 | 指定由哪块网卡决定「网线插没插」,多网卡时建议填 |
monitor.reconnect_delay_secs |
5 |
失败后首次重试的等待秒数 |
monitor.max_backoff_secs |
300 |
重试间隔的上限 |
log.dir |
logs |
日志目录,相对路径基于 pppoe.exe 所在目录 |
log.level |
info |
error / warn / info / debug;排障时用 debug |
log.max_files |
14 |
保留最近多少个日志文件 |
修改配置后需要重启服务才生效:
sc.exe stop PppoeDialer ; sc.exe start PppoeDialer服务是以系统账户运行的,它使用的电话簿和你桌面登录账户的不是同一个文件。 所以你在「网络和共享中心」里建的连接,服务默认是看不见的。
默认配置已经帮你处理了:create_entry_if_missing = true 会让程序在启动时
按 Windows「宽带 (PPPoE)」向导的规格,自动在服务自己的电话簿里把这条连接建出来 ——
所以正常情况下你只要在 pppoe.toml 里填对连接名、账号、密码就够了。
如果你想复用自己的那条连接(比如里面配过特殊参数),把 create_entry_if_missing 设为 false,
并让它复用共享电话簿:
-
打开「网络连接」,右键你的宽带连接 → 属性 → 选项 → 勾选 「允许其他用户使用此连接」;
-
配置:
[dial] pbk_path = 'C:\ProgramData\Microsoft\Network\Connections\Pbk\rasphone.pbk' create_entry_if_missing = false
单引号字符串里的反斜杠不需要转义;用双引号则要写成
\\。
一台普通电脑上往往有几十个「虚拟网卡」(WFP、Npcap、QoS Packet Scheduler、 Hyper-V、VMware 等),它们也会报告「已连接」,拿它们判断「网线插没插」是错的。
程序会先排除这些虚拟过滤层,再优先使用真实物理网卡。如果机器上有多块真实网卡 (比如同时有板载网卡和 USB 网卡),请明确指定用哪一块:
D:\pppoe\pppoe.exe list-adapters输出里 hw 列为 true 且 media 为 Connected 的就是真实网卡,把它的名字填进配置:
[link_check]
adapter_name = "Realtek PCIe GbE"不想做网线检测(例如认为它误判),可以直接关掉:
[link_check]
enabled = false这是刻意设计的:连接由 Windows 的拨号管理器持有,服务退出后连接会继续保持在线, 下次启动服务会识别为「已在线」并跳过拨号,不会产生重复连接。
副作用是:停止服务时不会打断正在进行的拨号(强行打断可能误杀刚建立的连接),
所以 sc stop 最坏要等 dial.dial_timeout_secs(默认 90 秒)才返回。
把该值调小可以缩短这个时间。
如果你确实想停下来就断网:
rasdial "Dr.COM" /disconnect日志默认写在 pppoe.exe 同目录的 logs\ 文件夹,按天分文件、自动清理旧文件。
# 实时查看(-Encoding UTF8 是必须的,否则中文网卡名会显示成乱码)
Get-Content D:\pppoe\logs\pppoe.log.2026-09-15 -Encoding UTF8 -Tail 100 -Wait
# 事件查看器:Windows 日志 → 应用程序,来源 = PppoeDialer
Get-EventLog -LogName Application -Source PppoeDialer -Newest 20一条正常的启动日志长这样:
2026-09-15 15:53:54.777 INFO pppoe: pppoe 0.1.0 console mode - press Ctrl+C to stop
2026-09-15 15:53:54.777 INFO pppoe: effective configuration: ... user:"***", password:"***" ...
2026-09-15 15:53:54.792 INFO pppoe::worker: connection "Dr.COM" is already online - no dial needed, waiting for events
日志中的级别与事件日志 ID 对应关系:1000 = 错误、1001 = 警告、1002 = 信息、1003 = 调试。
| 现象 | 处理方向 |
|---|---|
| 服务启动后马上停止 | 多半是配置有误。日志(或事件查看器)里会指出字段名,例如 dial.username must not be empty |
反复出现 cable not connected |
用 list-adapters 确认网卡的 media 是否为 Connected;多网卡时设置 link_check.adapter_name |
反复出现 code=623 / 624 / 621 |
电话簿问题,见上文「坑 1」 |
反复出现 code=691 |
账号或密码不对(出于安全,日志不会回显它们) |
反复出现 code=678 / 651 |
对端无应答或网卡/驱动异常,检查网线、光猫与网卡驱动 |
反复出现 code=756,或界面提示「指定的端口已经打开」 |
上一次拨号失败后 PPPoE 端口没被释放。0.1.2 起服务会自动清理残留拨号;若日志出现 stuck inside the RAS manager 告警,说明端口卡在 RAS 管理器内部,执行 net stop RasMan 后再拨号(或禁用/启用 WAN Miniport (PPPOE) 设备、重启机器) |
一整天只有 safety re-check 之类的记录 |
本机网卡驱动不上报链路变化,把 monitor.safety_recheck_secs 设为 300 作为兜底 |
install 报 OpenSCManagerW failed |
没有用管理员权限运行 |
日志里看到 created the phone book entry "..." |
正常,表示服务首次为你在系统电话簿里建好了连接 |
Select-String -Path D:\pppoe\logs\*.log.* -Pattern "你的账号","你的密码"结果应为空。
升级:停止服务 → 用新版本的 pppoe.exe 覆盖旧的 → 启动服务。
pppoe.toml 不用动,新增的配置项会自动使用默认值。
sc.exe stop PppoeDialer
Copy-Item <新版>\pppoe.exe D:\pppoe\pppoe.exe -Force
sc.exe start PppoeDialer
⚠️ 新版的压缩包里带的是示例配置pppoe.toml(账号密码是示例值12345678)。 解压时不要直接覆盖D:\pppoe\pppoe.toml,否则会把已有配置冲掉 —— 只取pppoe.exe(以及脚本)即可,或者先把配置文件备份出来。
卸载(推荐用脚本,同样自动申请管理员权限):
cd D:\pppoe
.\uninstall.ps1它会先检查服务是否已安装、请求停止、再删除注册。也可以手动执行:
D:\pppoe\pppoe.exe uninstall # 先停止再删除服务,不会断网
Remove-Item -Recurse D:\pppoe # 确认不再使用后,删掉目录(含配置与日志)卸载不会断开宽带连接(连接由 Windows 拨号管理器持有,不归服务管), 脚本会提示如何立即断开:
rasdial "Dr.COM" /disconnect。
- 宽带账号与密码只用于拨号,不会被写入日志文件,也不会写入 Windows 事件日志;
配置摘要里它们一律显示为
***。 - 程序不联网回传任何数据、不做遥测;它只调用 Windows 自带的拨号(RAS)接口。
- 配置文件中保存的是明文密码,请按「安装」第 3 步限制文件权限。
本项目以 GNU General Public License v3.0 或更新版本(GPL-3.0-or-later) 发布,
完整条文见代码仓库中的 LICENSE。
发布压缩包里只含
pppoe.exe、pppoe.toml和README.md,不含许可证文件; 许可证全文请从代码仓库或发布页获取。
你可以自由地使用、修改和再分发本程序;但再分发时必须以同样的许可证开放源代码, 并且本程序不提供任何担保。
源代码可从本项目的代码仓库获取 —— 每个发布版本都有对应的 tag,
pppoe.exe 的版本号(pppoe.exe version)与 tag 一致。