Skip to content

404700/idm

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

IDM - IP & DNS Manager

Go Version React Version License Docker

一个现代化的动态 DNS 管理系统,用于监控公网 IP 变化并自动更新 Cloudflare DNS 记录。专为家庭服务器、NAS 和动态 IP 环境设计。


✨ 功能特性

IP 监控

  • STUN 协议 - 通过 STUN 服务器获取公网 IP,无需依赖第三方 API
  • SSH 路由器 - 通过 SSH 连接路由器执行命令获取 IP
  • 多提供者支持 - 可同时启用多个 IP 获取源,自动故障转移
  • 灵活间隔 - 支持 1 秒至数小时的检查间隔

DNS 管理

  • Cloudflare 集成 - 自动更新 Cloudflare DNS 记录
  • 多账户支持 - 管理多个 Cloudflare 账户
  • 批量更新 - 支持多域名、多记录批量更新
  • 自动重试 - 失败自动重试,最多 3 次
  • 实时同步 - 配置变更后自动触发 DNS 同步

用户界面

  • 现代 UI - 基于 React 19 的现代化界面
  • 深色模式 - 支持 Light / Dark / System 三种主题
  • 国际化 - 支持中文和英文
  • 实时推送 - WebSocket 实时推送 IP 变化,无需刷新
  • 数据可视化 - IP 历史图表、DNS 更新统计
  • 全屏模式 - 沉浸式数据查看

安全特性

  • Session 认证 - 基于 Cookie 的 Session 认证,支持 HttpOnly 和 SameSite
  • CSRF 保护 - Synchronizer Token 模式防护
  • API Key 哈希 - SHA-256 + Salt 存储,不明文保存
  • 密码加密 - bcrypt (cost=12) 加密存储
  • 速率限制 - 可配置的滑动窗口限流
  • 安全头 - X-Frame-Options, CSP, X-Content-Type-Options 等
  • 可信子网 - 内网 IP 白名单免认证

数据存储

  • SQLite - 默认使用 SQLite,零配置启动
  • PostgreSQL - 支持生产级 PostgreSQL 部署
  • 历史记录 - IP 变化历史、DNS 更新日志
  • 自动清理 - 可配置的历史数据保留时间

🚀 快速开始

方式一:Docker Compose(推荐)

# 1. 创建数据目录
mkdir data

# 2. 初始化配置(生成 API Key 和 docker-compose.yml)
docker run --rm -u $(id -u):$(id -g) -v $(pwd)/data:/data:rw ghcr.io/404700/idm:latest --init

# 3. 移动 docker-compose.yml 并启动
mv data/docker-compose.yml ./
docker compose up -d

# 4. 访问 Web 界面
# 打开浏览器访问 http://localhost:8080

方式二:Docker Run

# 创建数据目录
mkdir data

# 运行容器
docker run -d \
  --name idm \
  -p 8080:8080 \
  -v $(pwd)/data:/data \
  -e TZ=Asia/Shanghai \
  ghcr.io/404700/idm:latest

# 首次启动会自动生成 API Key,查看日志获取
docker logs idm

方式三:二进制运行

# 从 Releases 下载对应平台的二进制文件
chmod +x idm

# 创建数据目录
mkdir data

# 运行(首次会生成默认配置)
./idm

📖 使用指南

首次登录

  1. 访问 http://localhost:8080
  2. 首次启动会显示初始化向导,设置管理员密码
  3. 登录后进入 Dashboard

配置 IP 提供者

设置 → IP 提供者 页面:

STUN 模式(推荐)

  • 无需额外配置,使用公共 STUN 服务器
  • 最小检查间隔:30 秒

SSH 路由器模式

  • 配置路由器 SSH 连接信息
  • 执行命令获取公网 IP(如 curl -s ifconfig.me
  • 最小检查间隔:1 秒

配置 Cloudflare

  1. 在 Cloudflare 创建 API Token,权限:Zone.DNS 编辑
  2. 设置 → Cloudflare 账户 添加账户
  3. 输入 API Token 和需要更新的域名/记录
  4. 保存后自动触发 DNS 同步

可信子网(内网免认证)

设置 → 服务器 配置可信子网:

trusted_subnets:
  - "127.0.0.1/32"
  - "192.168.1.0/24"
  - "10.0.0.0/8"

来自这些 IP 的请求无需认证即可访问 API。


⚙️ 配置说明

环境变量

变量 描述 默认值
PORT 服务端口 8080
TZ 时区 Asia/Shanghai
DB_TYPE 数据库类型 sqlite
DB_PATH SQLite 数据库路径 /data/idm.db
DB_HOST PostgreSQL 主机 localhost
DB_PORT PostgreSQL 端口 5432
DB_USER PostgreSQL 用户名 idm
DB_PASSWORD PostgreSQL 密码 -
DB_NAME PostgreSQL 数据库名 idm
DB_SSLMODE PostgreSQL SSL 模式 disable

配置文件示例

server:
  port: 8080
  trusted_subnets:
    - "127.0.0.1/32"
    - "192.168.1.0/24"
  websocket_allowed_origins: []

database:
  type: "sqlite"
  path: "/data/idm.db"

ip_providers:
  - type: stun
    enabled: true
    properties:
      servers: ""  # 留空使用默认列表
  - type: router_ssh
    enabled: false
    properties:
      host: "192.168.1.1"
      port: "22"
      user: "root"
      password: ""
      command: "curl -s ifconfig.me"

cloudflare_accounts:
  - name: "我的账户"
    api_token: "your_cloudflare_api_token"
    zones:
      - zone_name: "example.com"
        records: ["@", "www", "api"]

intervals:
  ip_check: "5m"           # IP 检查间隔
  dns_update: "1m"         # DNS 更新间隔
  history_retention: "30d" # 历史保留时间
  history_cleanup: "1d"    # 清理间隔

security:
  rate_limit_enabled: true
  rate_limit_requests: 100
  rate_limit_window: "1m"

🔌 API 文档

公开端点(无需认证)

端点 方法 描述
/ GET 主页(浏览器返回 SPA,curl 返回当前 IP)
/ip GET 获取当前公网 IP(纯文本)
/health GET 健康检查
/ws GET WebSocket 连接

认证端点

端点 方法 描述
/api/auth/csrf-token GET 获取 CSRF Token
/api/auth/login POST 用户登录
/api/auth/logout POST 用户登出
/api/auth/status GET 获取认证状态

API 端点(需要认证)

端点 方法 描述
/api/ip GET JSON 格式 IP 信息
/api/status GET 系统综合状态
/api/stats/history GET 历史统计数据
/api/config GET/POST 配置管理
/api/config/export GET 导出 YAML 配置
/api/config/import POST 导入 YAML 配置
/api/dns/update POST 手动触发 DNS 更新

管理员端点

端点 方法 描述
/api/admin/users GET/POST 用户管理
/api/admin/users/:id DELETE 删除用户
/api/admin/sessions GET Session 列表
/api/admin/sessions/:id DELETE 删除 Session

认证方式

方式一:Session Cookie(推荐) 登录后自动设置 HttpOnly Cookie。

方式二:API Key

curl -H "X-API-Key: your_api_key" http://localhost:8080/api/config

方式三:URL 参数

curl "http://localhost:8080/api/config?key=your_api_key"

🛠️ 本地开发

前置要求

  • Go 1.26+
  • Node.js 18+
  • SQLite3 或 PostgreSQL

后端开发

cd idm

# 安装依赖
go mod download

# 运行开发服务器
go run ./cmd/idm

# 构建
go build -o idm ./cmd/idm

前端开发

cd idm/web

# 安装依赖
npm install

# 开发模式(自动代理到后端 :8080)
npm run dev

# 构建
npm run build

# 预览构建结果
npm run preview

项目结构

idm/
├── cmd/idm/main.go          # 应用入口
├── config/                   # 配置管理
│   ├── config.go            # 配置结构与持久化
│   └── validation.go        # 配置验证
├── db/                       # 数据库层
│   ├── db.go                # 连接与表初始化
│   └── config_store.go      # 配置存储
├── dns/                      # DNS 更新
│   └── cloudflare.go        # Cloudflare API
├── ip/                       # IP 获取
│   ├── provider.go          # Provider 接口
│   ├── stun.go              # STUN 协议
│   └── router.go            # SSH 路由器
├── server/                   # Web 服务
│   ├── server.go            # HTTP 路由
│   ├── auth.go              # 认证逻辑
│   ├── middleware.go        # 中间件
│   └── websocket.go         # WebSocket
├── web/                      # 前端源码
│   ├── App.tsx              # 主组件
│   ├── pages/               # 页面组件
│   └── services/            # API 封装
├── Dockerfile               # 多阶段构建
└── docker-compose.yml       # 部署配置

🔒 安全最佳实践

  1. 修改默认端口 - 不要使用默认的 8080 端口
  2. 配置可信子网 - 限制内网 IP 免认证范围
  3. 使用 HTTPS - 在反向代理(如 Nginx)启用 SSL
  4. 定期更换 API Key - 在设置中重新生成
  5. 启用速率限制 - 防止暴力破解
  6. 使用 PostgreSQL - 生产环境推荐使用 PostgreSQL

📊 数据库表结构

表名 描述
users 用户账户
sessions 登录会话
ip_history IP 变化历史
dns_updates DNS 更新记录
error_logs 错误日志
check_logs 检查日志统计
settings 配置键值对
ip_providers IP 提供者配置
cloudflare_accounts Cloudflare 账户

🤝 贡献

欢迎提交 Issue 和 Pull Request!


📜 许可证

本项目采用 非商业使用许可证。详见 LICENSE

个人使用、教育用途、开源项目免费。 商业使用请联系作者获取授权。


🙏 致谢

About

IP & DNS Man

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors