kevin
|
570dc82125
|
fix: install_linux.sh 强制覆盖本地修改,解决 pull 冲突
git pull 改为 git fetch + git reset --hard origin/main,
避免 npm install 修改 package-lock.json 后部署拉取失败
|
2026-07-07 15:11:06 +08:00 |
|
kevin
|
25c3ad685a
|
feat: 前端多语言支持(中/英)与品牌 Logo 接入
多语言:
- 新增 vue-i18n,创建 src/locales/zh.ts、en.ts 语言包,按功能模块组织 key
- 新增 src/i18n.ts,语言检测优先级:localStorage > navigator.language(zh→中文,其他→英文)> 兜底英文
- 导航栏新增语言切换按钮(中/EN 一键切换),选择持久化到 localStorage
- 全部 View/Component 硬编码中文替换为 t() 调用,stores/auth.ts 错误消息同样国际化
- index.html lang 属性运行时动态更新
Logo:
- 替换 Vue 默认 logo 为 LmVPN 品牌 Logo(盾牌+网络节点)
- Header 导航栏:Logo 图标 + "LmVPN" 文字
- 首页标题区:大尺寸 Logo 展示
- Favicon 替换为 SVG 格式
|
2026-07-07 15:05:53 +08:00 |
|
kevin
|
5bce78cdb4
|
自动配置ipv6
|
2026-07-07 12:23:37 +08:00 |
|
kevin
|
a770862c7c
|
feat: 支持 IPv6 双栈地址派发
- model: VpnSetting 新增 Subnet6 字段,VpnReservation 新增 IPAddress6
- alloc: 处理 /64 等大子网 cidr.AddressCount 溢出,回退 65536 扫描上限
- protocol: initMessage 新增 ip6/prefix6/server_ip6(omitempty 向后兼容)
- service: 双分配器 alloc4+alloc6,ApplySettings 配置双 IP 与双路由,
Allocate 返回 v4+v6 一对地址
- switch: SwitchConn 新增 AssignedIP6(),Register/Unregister 注册双 key,
反欺骗按 IP 版本分别校验 v4/v6 源地址
- tunnel: tunnelConn 新增 assignedIP6,init 消息填充 v6 字段
- handler: 新增 validateSubnet6(/64~/126),settings/预留 API 全面支持 v6
- diag: 新增 IPv6 forwarding 与 NAT66 masquerade 检测
- install_linux.sh: 新增 VPN_SUBNET6、ipv6 forwarding、nft/ip6tables NAT66
- 前端: v6 子网输入框、v6 预留、v6 诊断卡片、客户端列表 v6 列
- 文档: init 消息、IP 分配、子网约束、TUN 配置、NAT、反欺骗全部更新
|
2026-07-07 11:38:21 +08:00 |
|
kevin
|
808b991483
|
fix: TUN 子网路由缺失导致客户端无下载流量
- service.go: 移除无意义的 peerIP = serverIP(对端指向自己),改为 nil
- service.go: Configure 之后新增 AddSubnetRoute 调用,确保内核有到 VPN 子网的路由
- tun_linux.go: Configure 增加 peerIP != nil 守卫,nil 时直接走无 peer 分支
- tun_darwin.go: 同上 peerIP != nil 守卫
|
2026-07-06 18:54:22 +08:00 |
|
kevin
|
f2bb73a381
|
updoc
|
2026-07-06 15:13:40 +08:00 |
|
kevin
|
05e0a6de62
|
fix: NAT 检测与安装脚本优先使用 nft,解决 iptables-nft 不兼容问题
- diag_linux: checkMasquerade 改为优先 nft list ruleset,iptables 执行失败时 fall through 到 nft 而非直接返回
- diag_linux: 区分"iptables-nft 与原生 nft 表不兼容"与"权限不足"两种失败场景
- install_linux.sh: NAT 工具优先级反转为 nft 优先,iptables 回退,解决 Debian 12+ 上 iptables-nft 包装器操作原生 nft nat 表报 incompatible 的问题
- install_linux.sh: nft 分支增加 /etc/nftables.conf include 配置与 systemctl enable nftables,确保重启后规则自动加载
|
2026-07-06 14:59:40 +08:00 |
|
kevin
|
691ae99451
|
fix: NAT 检测与安装脚本适配无 iptables 的系统
- diag_linux: 用 findExecutable 在 /usr/sbin /sbin 等常见路径查找 iptables/nft,弥补 systemd 服务 PATH 不含这些目录
- diag_linux: iptables 不存在时回退 nft list ruleset 检测 masquerade,两者均无时返回明确安装提示
- diag_linux: 区分"未安装"与"权限不足",MASQUERADE 检测说明更精确
- install_linux.sh: NAT 段加 NAT_TOOL 选择,优先 iptables 回退 nft,无则提示安装而非 set -e 退出
- install_linux.sh: 新增 nftables 配置分支(lmvpn_nat 表,postrouting masquerade + forward accept),持久化到 /etc/nftables.d/lmvpn.nft
|
2026-07-06 14:53:30 +08:00 |
|
kevin
|
6ccfb57c80
|
feat: 默认子网改为 192.168.77.0/24,安装脚本授权 CAP_NET_ADMIN 与 iptables 配置
- 默认 VPN 子网由 192.168.3.0/24 改为 192.168.77.0/24(db seed、前端表单默认值与 placeholder 同步)
- install_linux.sh 顶部增加 VPN_SUBNET 可配置变量
- systemd unit 增加 AmbientCapabilities/CapabilityBoundingSet=CAP_NET_ADMIN CAP_NET_RAW,服务以 lmvpn 用户运行即可创建 TUN,无需 root
- 脚本自动开启 net.ipv4.ip_forward 并持久化到 /etc/sysctl.d/99-lmvpn.conf
- 脚本自动检测出口网卡,幂等配置 iptables NAT MASQUERADE 与 FORWARD 放行规则
- 优先 netfilter-persistent 持久化,回退 iptables-save 写 /etc/iptables/rules.v4
|
2026-07-06 14:42:58 +08:00 |
|
kevin
|
c8b170d532
|
feat: VPN 管理后台新增系统环境检测面板
- 新增 /api/admin/vpn/diag 端点,检测 TUN 创建能力、root、CAP_NET_ADMIN、ip_forward、MASQUERADE
- Linux 下解析 /proc/self/status CapEff 位判断 CAP_NET_ADMIN,读 /proc/sys/net/ipv4/ip_forward,执行 iptables 检查 MASQUERADE
- 非 Linux 平台显示"仅 Linux 适用"
- 前端 VpnView 新增系统环境检测卡片,每项以勾叉标识并附修复提示
|
2026-07-06 14:27:42 +08:00 |
|
kevin
|
44b51b3b04
|
feat: 实现第三层 TUN VPN 服务,支持后台 IP 分配
- 新增 TUN 设备层(water 库),分 linux/darwin 平台配置 IP/路由/MTU
- 实现 IP 分配管理:动态池自动分配 + 按用户静态预留,支持热更新
- 实现 PacketSwitch 共享 TUN 包转发:源 IP 防伪、按目的 IP 查表转发、allow-c2c
- 重写隧道:自研简化 WS 协议(文本帧 JSON 控制 init/ready,二进制帧=原始 IP 包)
- VpnService 单例管理 TUN 生命周期,子网变更踢线重建,预留增删热更新
- 新增 vpn_settings/vpn_reservations 表,AutoMigrate + 默认设置 seed
- 新增 Admin API:settings 读写、status、clients、reservations CRUD
- 前端新增 VpnView(/admin/vpn):状态面板/设置表单/在线客户端/静态预留
- main.go 启动时按 DB 设置初始化 VPN 服务
|
2026-07-03 14:49:56 +08:00 |
|
kevin
|
61189a53ec
|
fix: 修复权限边界与安全问题
- JWT 密钥改为环境变量/配置文件/随机生成注入,移除硬编码
- AuthMiddleware 用数据库 role 覆盖 claims,降级/禁用即时生效
- 改 role/status 时主动失效目标用户会话
- /ws 支持 JWT 认证(?token=),兼容密码认证,CheckOrigin 改同源校验
- 默认管理员改用随机密码,stdout 与文件双交付
- 登录与 WS 密码认证加限流(5次/分钟)
- role 字段白名单校验(仅 admin/user)
- socket/目录权限可配置(sock_mode/sock_group/sock_dir_mode),默认兼容现状
- 配置文件权限收紧 0644→0600,目录 0755→0700
- 静态文件改用 http.Dir.Open + NoRoute,移除手动路径拼接
- 隧道加 SetReadLimit(1MB) 与单用户连接数上限(3)
- README 补充安全配置与生产部署说明
|
2026-07-03 14:12:03 +08:00 |
|
kevin
|
c1d560fd4a
|
feat: 会话管理 - 支持按设备粒度踢下线
- 新增 sessions 表,每次登录创建会话记录(记录 IP/UA)
- AuthMiddleware 改为基于 session 校验,可精确踢掉单个设备
- 自己改密码后踢掉其他设备,管理员改密码后踢掉该用户全部设备
- 新增 GET /api/me/sessions 查看活跃会话列表
- 新增 DELETE /api/me/sessions/:sessionId 踢掉指定会话
- 新增 DELETE /api/admin/users/:id/sessions 管理员强制下线某用户
- 兼容无 session_id 的旧 token,回退到 TokenInvalidBefore 校验
|
2026-07-03 10:52:39 +08:00 |
|
kevin
|
f830406be7
|
up
|
2026-07-03 10:38:22 +08:00 |
|
kevin
|
03470475aa
|
up install
|
2026-07-03 10:30:02 +08:00 |
|
kevin
|
fe91a8ffb2
|
管理后台新增用户总数卡片,点击进入用户管理,移除header用户管理按钮
|
2026-07-03 10:24:52 +08:00 |
|
kevin
|
e65b31abb0
|
新增用户管理和个人信息功能,支持CRUD操作和密码修改
|
2026-07-03 10:18:08 +08:00 |
|
kevin
|
ca9b1e751c
|
写了个安装脚本
|
2026-07-02 22:51:26 +08:00 |
|
kevin
|
9bb35740fc
|
修改sock权限
|
2026-07-02 22:36:04 +08:00 |
|
kevin
|
6ca1c07cfa
|
封装路由
|
2026-07-02 22:34:15 +08:00 |
|
kevin
|
621625ad1e
|
重写前端
|
2026-07-02 21:03:51 +08:00 |
|
kevin
|
0634cadced
|
更新管理登录功能
|
2026-07-02 20:45:53 +08:00 |
|
kevin
|
91c9e12c3c
|
添加 WebSocket VPN 接口及用户认证
- 移动 config 包到 internal/config,新增 DatabaseConfig
- 使用 GORM + SQLite 管理用户数据,预留 MySQL 支持
- 新增 internal/model/user.go GORM 用户模型
- 新增 internal/db/db.go 数据库初始化及默认管理员
- 新增 internal/vpn/ WebSocket 鉴权与隧道骨架
- /ws 路径支持用户名+密码鉴权 (bcrypt)
- 心跳保活 + echo 隧道模式
|
2026-07-02 20:30:11 +08:00 |
|
kevin
|
5dddc93233
|
增加配置功能
|
2026-07-02 20:13:12 +08:00 |
|
kevin
|
083b6e5dbe
|
init
|
2026-07-02 19:56:13 +08:00 |
|