8b094bcb3618cfe42e4da34287465380ce107e82
背景:排查解析差异(污染、区域 DNS、预发布域名)时需要「临时换解析服务器」或 「把某域名指到指定 IP」再拨测,此前只能改节点全局配置或 hosts。 节点 src - webtest 新增 ReqResolve:dns / dns4 / dns6 + resolve / resolve4 / resolve6 九参数, ParseReqResolve 统一解析;Servers(stack) 按「栈内覆盖 → dns 回落」取服务器, Override(host, wantV6) 取强制解析目标(map 键经 canonicalHost 归一化) - 解析层补 ResolveXRecordWith(domain, servers) 与 ResolveByType,ctx 传参走 WithDNSServers / DNSServersFromContext - 拨号:initHTTPClients 的 DialContext 从 ctx 取参数——命中 Override 时改写 addr, IP 直连、域名当作新 host 再解析一跳;未命中则用请求级服务器解析 - tcping:ResolveHostWith 同样支持 Override 与自定义 DNS;字面 IP 也做私网拦截 - SSRF:解析器改为可注入(ssrf.SetResolveFunc + webtest.InstallSSRFResolver), 预检与实际拨号同源,新增 src/webtest/ssrfresolver.go - 缓存:ReqResolve.CacheKey() 把参数按固定字段顺序拼进键,替代「有参数即跳过共享 缓存」;零值返回空串,旧缓存键逐字节不变,升级不失效 - ws:wsProbe 接收 query,与 HTTP 侧同口径 middleware - middleware-go:query 透传从 tcping/speed 分支提升到所有分支(detail/ssl/dns/whois 也带 dns 系参数),WS 侧以 map 传给 RequestProbe - frontend-ssr 内置中间件路由([...slug].get.ts)同步透传 query frontend-ssr - 新增 AdvancedOptions 组件:dns 通用 + 按栈 dns4/dns6、resolve 三档;单栈页只渲染 本栈一列,dns/whois 页隐藏 resolve - 8 个工具页接线;utils/tools.ts 新增 withQuery(空对象原样返回,不填参数时 URL 不变) - dev 下注入本地调试节点并排在首位,中间件指向 127.0.0.1:8091 docs - node-api 补 resolve 参数表、IP / 域名两种目标的语义、缓存键片段与 TTL 修正 验证:本地链路(前端 3010 → 中间件 8091 → 节点 18081)tcping/ssl/detail 带 dns= / resolve= 实测生效;SSRF 开启时私网目标被拦、关闭时放行。
Lemon IPW
ipw.cn 替代品,提供 IP 查询、网站检测、SSL 检查、DNS 解析、TCPing 测速、Whois、DNSSEC、ASN 查询、网站截图等功能。
快速开始
curl -fsSL https://raw.githubusercontent.com/nomdn/ipw-cn/main/install.sh -o install.sh && sudo bash install.sh
完整部署(后端节点 / 独立中间件 / 前端)与配置说明见 文档:
- 功能总览(探测能力、IP 数据源、可靠性设计)
- 快速开始
- 后端节点部署
- 中间件部署
- 前端部署
- 配置文件
- 节点 API 与协议(业务接口、管理接口、WS 协议、上报协议)
- 公开 API(/api/v1)(收集中心程序化接口:鉴权、端点与响应示例、公开状态接口)
贡献节点
把一台闲置的 Linux 机器(VPS、软路由、小主机)贡献为公共拨测节点:
curl -fsSL https://raw.githubusercontent.com/nomdn/ipw-cn/main/contribute.sh -o contribute.sh && sudo bash contribute.sh
脚本静默完成全部步骤,中途无需任何交互:
- 自动挑选一个空闲高位端口(20000-65000),节点标识(节点 id / 注册 key / access-token)随机生成
- 默认以 WS 方式同时接入官方两个中间件(多活,节点主动出站连接,无需公网放行端口)
- 安装到
/opt/lemon-ipw,注册为 systemd 服务lemon-ipw并设置开机自启 - 结束时打印节点信息(同时备份在
/opt/lemon-ipw/node-info.txt)
把打印出来的信息发给管理员登记,节点即可上线(联系方式见文末)。
| 选项 | 说明 |
|---|---|
--ipdb |
启用 IP 数据库(首次启动后台下载约 450MB,默认关闭) |
--port <n> |
指定监听端口(默认随机空闲端口) |
--ws-url <url> |
改为接入自建中间件,逗号分隔可填多个(默认官方两个) |
--version <tag> |
指定版本(默认取 GitHub 最新 release) |
--gh-proxy <p> |
GitHub 下载加速前缀,如 https://ghfast.top/ |
--dry-run |
只检查环境并打印信息,不下载、不写 systemd |
日常运维:
systemctl status lemon-ipw # 查看状态
journalctl -u lemon-ipw -f # 跟踪日志
项目结构
ipw-cn/
├── src/ # Go 后端
├── middleware-go/ # 独立组件 转发中间件(Fiber v3,多节点候选)
├── serverless/ # 独立组件 边缘/Serverless(edgeone、edgeone-getip、lemon-getip)
├── frontend-ssr/ # Nuxt 4 SSR 前端
├── docs/ # 文档站
├── install.sh # 一键安装脚本(自建完整部署)
└── contribute.sh # 贡献节点脚本(一台闲置机器接为公共节点)
友情链接
来自社区的IPW版本
ZAKOFLARE/ipw-cn-php 一个基于PHP的IPW节点
ZAKOFLARE/ipw-cn-rust 一个生锈的IPW节点[开发成本过高,已存档]
KFCV50TK/ipw-cn 一个有许多扩展功能的IPW分支
技术栈
| 组件 | 技术 |
|---|---|
| 后端(自托管) | Go + Gin + Resty |
| 独立中间件 | Go + Fiber v3(WS 通道:coder/websocket) |
| 边缘后端(EdgeOne) | Go 边缘函数 |
| SSR 前端 | Nuxt 4 + Vue 3 + Element Plus |
| DNS 查询 | miekg/dns(DoH / UDP 双通道 + 主从 failover) |
| 部署 | Docker、Cloudflare Workers、EdgeOne Pages、systemd |
联系方式
- 邮箱:iduhih777@outlook.com
- GitHub:@nomdn
- 站点:nipw.cn | 拨测控制台:boce.wsmdn.top
许可证
Description
ipw.cn替代品,用于ipw.cn宕机等情况
https://nipw.cn
15 MiB
0 Stars
1 Watchers
0 Forks
Languages
Go
55.5%
Vue
26.1%
TypeScript
12%
Shell
4.1%
CSS
1.7%
Other
0.6%